"precollect" visible Factorio tech tree as hints, so points are never spent on what was visible.

This commit is contained in:
Fabian Dill 2021-05-13 02:10:37 +02:00
parent 8cdf9d2ddc
commit c4ea879651
2 changed files with 17 additions and 4 deletions

18
Main.py
View File

@ -487,14 +487,13 @@ def main(args, seed=None):
er_hint_data[player][location_id] = main_entrance.name
oldmancaves.append(((location_id, player), (item.code, player)))
precollected_items = {player: [] for player in range(1, world.players+1)}
for item in world.precollected_items:
precollected_items[item.player].append(item.code)
FillDisabledShopSlots(world)
def write_multidata(roms, mods):
import base64
import NetUtils
for future in roms:
rom_name = future.result()
rom_names.append(rom_name)
@ -507,6 +506,15 @@ def main(args, seed=None):
games[slot] = world.game[slot]
connect_names = {base64.b64encode(rom_name).decode(): (team, slot) for
slot, team, rom_name in rom_names}
precollected_items = {player: [] for player in range(1, world.players+1)}
for item in world.precollected_items:
precollected_items[item.player].append(item.code)
precollected_hints = {player: [] for player in range(1, world.players+1)}
# for now special case Factorio visibility
sending_visible_players = set()
for player in world.factorio_player_ids:
if world.visibility[player]:
sending_visible_players.add(player)
for i, team in enumerate(parsed_names):
for player, name in enumerate(team, 1):
@ -524,6 +532,9 @@ def main(args, seed=None):
for location in world.get_filled_locations():
if type(location.address) == int:
locations_data[location.player][location.address] = (location.item.code, location.item.player)
if location.player in sending_visible_players and location.item.player != location.player:
precollected_hints[location.player].append(NetUtils.Hint(location.item.player, location.player, location.address,
location.item.code, False))
multidata = zlib.compress(pickle.dumps({
"slot_data" : slot_data,
"games": games,
@ -536,6 +547,7 @@ def main(args, seed=None):
"server_options": get_options()["server_options"],
"er_hint_data": er_hint_data,
"precollected_items": precollected_items,
"precollected_hints": precollected_hints,
"version": tuple(_version_tuple),
"tags": ["AP"],
"minimum_versions": minimum_versions,

View File

@ -160,7 +160,8 @@ class Context(Node):
for slot, item_codes in decoded_obj["precollected_items"].items():
if slot in self.remote_items:
self.received_items[team, slot] = [NetworkItem(item_code, -2, 0) for item_code in item_codes]
for slot, hints in decoded_obj["precollected_hints"].items():
self.hints[team, slot] = hints
if use_embedded_server_options:
server_options = decoded_obj.get("server_options", {})
self._set_options(server_options)