From 8367351c627c83879de61f885ddf9657adf3bba3 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 23 Jun 2020 23:50:37 +0200 Subject: [PATCH] track precollected items after first location check and add some non-progressive item handling --- Main.py | 5 +++++ WebHost/tracker.py | 24 +++++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Main.py b/Main.py index 61b7e9b6..963efe88 100644 --- a/Main.py +++ b/Main.py @@ -253,6 +253,10 @@ def main(args, seed=None): if lookup_vanilla_location_to_entrance[location.address] != main_entrance.name: er_hint_data[region.player][location.address] = main_entrance.name + precollected_items = [[] for player in range(world.players)] + for item in world.precollected_items: + precollected_items[item.player - 1].append(item.code) + multidata = zlib.compress(json.dumps({"names": parsed_names, "roms": rom_names, "remote_items": [player for player in range(1, world.players + 1) if @@ -263,6 +267,7 @@ def main(args, seed=None): type(location.address) is int], "server_options": get_options()["server_options"], "er_hint_data": er_hint_data, + "precollected_items": precollected_items }).encode("utf-8"), 9) with open(output_path('%s.multidata' % outfilebase), 'wb') as f: diff --git a/WebHost/tracker.py b/WebHost/tracker.py index 8be3483c..d90323c9 100644 --- a/WebHost/tracker.py +++ b/WebHost/tracker.py @@ -3,6 +3,7 @@ import collections from flask import render_template from werkzeug.exceptions import abort import datetime +import logging import Items from WebHost import app, cache, Room @@ -87,8 +88,17 @@ links = {"Bow": "Progressive Bow", "Power Glove": "Progressive Glove", "Titans Mitts": "Progressive Glove" } + +levels = {"Fighter Sword": 1, + "Master Sword": 2, + "Tempered Sword": 3, + "Golden Sword": 4, + "Power Glove": 1, + "Titans Mitts": 2} + multi_items = {get_id(name) for name in ("Progressive Sword", "Progressive Bow", "Bottle", "Progressive Glove")} links = {get_id(key): get_id(value) for key, value in links.items()} +levels = {get_id(key): value for key, value in levels.items()} tracking_names = ["Progressive Sword", "Progressive Bow", "Book of Mudora", "Hammer", "Hookshot", "Magic Mirror", "Flute", @@ -143,6 +153,13 @@ for item in tracking_names: from MultiServer import get_item_name_from_id +def attribute_item(inventory, team, recipient, item): + target_item = links.get(item, item) + if item in levels: # non-progressive + inventory[team][recipient][target_item] = max(inventory[team][recipient][target_item], levels[item]) + else: + inventory[team][recipient][target_item] += 1 + @app.route('/tracker/') @cache.memoize(timeout=60) # update every minute def get_tracker(room: int): @@ -159,11 +176,16 @@ def get_tracker(room: int): checks_done = {teamnumber: {playernumber: {loc_name: 0 for loc_name in default_locations} for playernumber in range(1, len(team) + 1)} for teamnumber, team in enumerate(multidata["names"])} + precollected_items = room.seed.multidata.get("precollected_items", None) for (team, player), locations_checked in room.multisave.get("location_checks", {}): + if precollected_items: + precollected = precollected_items[player - 1] + for item_id in precollected: + attribute_item(inventory, team, player, item_id) for location in locations_checked: item, recipient = locations[location, player] - inventory[team][recipient][links.get(item, item)] += 1 + attribute_item(inventory, team, recipient, item) checks_done[team][player][location_to_area[location]] += 1 checks_done[team][player]["Total"] += 1 for (team, player), game_state in room.multisave.get("client_game_state", []):