diff --git a/WebHostLib/templates/tracker.html b/WebHostLib/templates/tracker.html
index 1d92e512..18cf2ae2 100644
--- a/WebHostLib/templates/tracker.html
+++ b/WebHostLib/templates/tracker.html
@@ -122,7 +122,7 @@
{{ player_names[(team, loop.index)]|e }} |
{%- for area in ordered_areas -%}
{%- set checks_done = checks[area] -%}
- {%- set checks_total = checks_in_area[area] -%}
+ {%- set checks_total = checks_in_area[player][area] -%}
{%- if checks_done == checks_total -%}
{{ checks_done }}/{{ checks_total }} |
diff --git a/WebHostLib/tracker.py b/WebHostLib/tracker.py
index f80d1a99..fadc2c8e 100644
--- a/WebHostLib/tracker.py
+++ b/WebHostLib/tracker.py
@@ -258,6 +258,14 @@ def render_timedelta(delta: datetime.timedelta):
_multidata_cache = {}
+def get_location_table(checks_table: dict) -> dict:
+ loc_to_area = {}
+ for area, locations in checks_table.items():
+ if area == "Total":
+ continue
+ for location in locations:
+ loc_to_area[location] = area
+ return loc_to_area
def get_static_room_data(room: Room):
result = _multidata_cache.get(room.seed.id, None)
@@ -276,7 +284,21 @@ def get_static_room_data(room: Room):
for area, checks in key_only_locations.items():
seed_checks_in_area[area] += len(checks)
seed_checks_in_area["Total"] = 249
- result = locations, names, use_door_tracker, seed_checks_in_area
+ if "checks_in_area" not in multidata:
+ player_checks_in_area = {playernumber: (seed_checks_in_area if use_door_tracker and
+ (0x140031, playernumber) in locations else checks_in_area)
+ for playernumber in range(1, len(names[0]) + 1)}
+ player_location_to_area = {playernumber: location_to_area
+ for playernumber in range(1, len(names[0]) + 1)}
+
+ else:
+ player_checks_in_area = {playernumber: {areaname: len(multidata["checks_in_area"][f'{playernumber}'][areaname])
+ if areaname != "Total" else multidata["checks_in_area"][f'{playernumber}']["Total"]
+ for areaname in ordered_areas}
+ for playernumber in range(1, len(names[0]) + 1)}
+ player_location_to_area = {playernumber: get_location_table(multidata["checks_in_area"][f'{playernumber}'])
+ for playernumber in range(1, len(names[0]) + 1)}
+ result = locations, names, use_door_tracker, player_checks_in_area, player_location_to_area
_multidata_cache[room.seed.id] = result
return result
@@ -287,7 +309,7 @@ def get_tracker(tracker: UUID):
room = Room.get(tracker=tracker)
if not room:
abort(404)
- locations, names, use_door_tracker, seed_checks_in_area = get_static_room_data(room)
+ locations, names, use_door_tracker, seed_checks_in_area, player_location_to_area = get_static_room_data(room)
inventory = {teamnumber: {playernumber: collections.Counter() for playernumber in range(1, len(team) + 1)}
for teamnumber, team in enumerate(names)}
@@ -308,12 +330,12 @@ def get_tracker(tracker: UUID):
for item_id in precollected:
attribute_item(inventory, team, player, item_id)
for location in locations_checked:
- if (location, player) not in locations or location not in location_to_area:
+ if (location, player) not in locations or location not in player_location_to_area[player]:
continue
item, recipient = locations[location, player]
attribute_item(inventory, team, recipient, item)
- checks_done[team][player][location_to_area[location]] += 1
+ checks_done[team][player][player_location_to_area[player][location]] += 1
checks_done[team][player]["Total"] += 1
for (team, player), game_state in room.multisave.get("client_game_state", []):