From c4ea8796517d1ec058c2a15a687d690a9568ca4b Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 13 May 2021 02:10:37 +0200 Subject: [PATCH] "precollect" visible Factorio tech tree as hints, so points are never spent on what was visible. --- Main.py | 18 +++++++++++++++--- MultiServer.py | 3 ++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Main.py b/Main.py index bf820a07..24a27907 100644 --- a/Main.py +++ b/Main.py @@ -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, diff --git a/MultiServer.py b/MultiServer.py index 00092d46..8a373b20 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -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)