WebHost: remove team argument from tracker arguments where it's irrelevant (#5272)

This commit is contained in:
Fabian Dill
2025-09-22 00:17:10 +02:00
committed by GitHub
parent 6c45c8d606
commit 68187ba25f
4 changed files with 46 additions and 46 deletions

View File

@@ -98,7 +98,7 @@
<td> <td>
{% if hint.finding_player == player %} {% if hint.finding_player == player %}
<b>{{ player_names_with_alias[(team, hint.finding_player)] }}</b> <b>{{ player_names_with_alias[(team, hint.finding_player)] }}</b>
{% elif get_slot_info(team, hint.finding_player).type == 2 %} {% elif get_slot_info(hint.finding_player).type == 2 %}
<i>{{ player_names_with_alias[(team, hint.finding_player)] }}</i> <i>{{ player_names_with_alias[(team, hint.finding_player)] }}</i>
{% else %} {% else %}
<a href="{{ url_for("get_player_tracker", tracker=room.tracker, tracked_team=team, tracked_player=hint.finding_player) }}"> <a href="{{ url_for("get_player_tracker", tracker=room.tracker, tracked_team=team, tracked_player=hint.finding_player) }}">
@@ -109,7 +109,7 @@
<td> <td>
{% if hint.receiving_player == player %} {% if hint.receiving_player == player %}
<b>{{ player_names_with_alias[(team, hint.receiving_player)] }}</b> <b>{{ player_names_with_alias[(team, hint.receiving_player)] }}</b>
{% elif get_slot_info(team, hint.receiving_player).type == 2 %} {% elif get_slot_info(hint.receiving_player).type == 2 %}
<i>{{ player_names_with_alias[(team, hint.receiving_player)] }}</i> <i>{{ player_names_with_alias[(team, hint.receiving_player)] }}</i>
{% else %} {% else %}
<a href="{{ url_for("get_player_tracker", tracker=room.tracker, tracked_team=team, tracked_player=hint.receiving_player) }}"> <a href="{{ url_for("get_player_tracker", tracker=room.tracker, tracked_team=team, tracked_player=hint.receiving_player) }}">

View File

@@ -45,15 +45,15 @@
{%- set current_sphere = loop.index %} {%- set current_sphere = loop.index %}
{%- for player, sphere_location_ids in sphere.items() %} {%- for player, sphere_location_ids in sphere.items() %}
{%- set checked_locations = tracker_data.get_player_checked_locations(team, player) %} {%- set checked_locations = tracker_data.get_player_checked_locations(team, player) %}
{%- set finder_game = tracker_data.get_player_game(team, player) %} {%- set finder_game = tracker_data.get_player_game(player) %}
{%- set player_location_data = tracker_data.get_player_locations(team, player) %} {%- set player_location_data = tracker_data.get_player_locations(player) %}
{%- for location_id in sphere_location_ids.intersection(checked_locations) %} {%- for location_id in sphere_location_ids.intersection(checked_locations) %}
<tr> <tr>
{%- set item_id, receiver, item_flags = player_location_data[location_id] %} {%- set item_id, receiver, item_flags = player_location_data[location_id] %}
{%- set receiver_game = tracker_data.get_player_game(team, receiver) %} {%- set receiver_game = tracker_data.get_player_game(receiver) %}
<td>{{ current_sphere }}</td> <td>{{ current_sphere }}</td>
<td>{{ tracker_data.get_player_name(team, player) }}</td> <td>{{ tracker_data.get_player_name(player) }}</td>
<td>{{ tracker_data.get_player_name(team, receiver) }}</td> <td>{{ tracker_data.get_player_name(receiver) }}</td>
<td>{{ tracker_data.item_id_to_name[receiver_game][item_id] }}</td> <td>{{ tracker_data.item_id_to_name[receiver_game][item_id] }}</td>
<td>{{ tracker_data.location_id_to_name[finder_game][location_id] }}</td> <td>{{ tracker_data.location_id_to_name[finder_game][location_id] }}</td>
<td>{{ finder_game }}</td> <td>{{ finder_game }}</td>

View File

@@ -22,14 +22,14 @@
-%} -%}
<tr> <tr>
<td> <td>
{% if get_slot_info(team, hint.finding_player).type == 2 %} {% if get_slot_info(hint.finding_player).type == 2 %}
<i>{{ player_names_with_alias[(team, hint.finding_player)] }}</i> <i>{{ player_names_with_alias[(team, hint.finding_player)] }}</i>
{% else %} {% else %}
{{ player_names_with_alias[(team, hint.finding_player)] }} {{ player_names_with_alias[(team, hint.finding_player)] }}
{% endif %} {% endif %}
</td> </td>
<td> <td>
{% if get_slot_info(team, hint.receiving_player).type == 2 %} {% if get_slot_info(hint.receiving_player).type == 2 %}
<i>{{ player_names_with_alias[(team, hint.receiving_player)] }}</i> <i>{{ player_names_with_alias[(team, hint.receiving_player)] }}</i>
{% else %} {% else %}
{{ player_names_with_alias[(team, hint.receiving_player)] }} {{ player_names_with_alias[(team, hint.receiving_player)] }}

View File

@@ -85,27 +85,27 @@ class TrackerData:
"""Retrieves the seed name.""" """Retrieves the seed name."""
return self._multidata["seed_name"] return self._multidata["seed_name"]
def get_slot_data(self, team: int, player: int) -> Dict[str, Any]: def get_slot_data(self, player: int) -> Dict[str, Any]:
"""Retrieves the slot data for a given player.""" """Retrieves the slot data for a given player."""
return self._multidata["slot_data"][player] return self._multidata["slot_data"][player]
def get_slot_info(self, team: int, player: int) -> NetworkSlot: def get_slot_info(self, player: int) -> NetworkSlot:
"""Retrieves the NetworkSlot data for a given player.""" """Retrieves the NetworkSlot data for a given player."""
return self._multidata["slot_info"][player] return self._multidata["slot_info"][player]
def get_player_name(self, team: int, player: int) -> str: def get_player_name(self, player: int) -> str:
"""Retrieves the slot name for a given player.""" """Retrieves the slot name for a given player."""
return self.get_slot_info(team, player).name return self.get_slot_info(player).name
def get_player_game(self, team: int, player: int) -> str: def get_player_game(self, player: int) -> str:
"""Retrieves the game for a given player.""" """Retrieves the game for a given player."""
return self.get_slot_info(team, player).game return self.get_slot_info(player).game
def get_player_locations(self, team: int, player: int) -> Dict[int, ItemMetadata]: def get_player_locations(self, player: int) -> Dict[int, ItemMetadata]:
"""Retrieves all locations with their containing item's metadata for a given player.""" """Retrieves all locations with their containing item's metadata for a given player."""
return self._multidata["locations"][player] return self._multidata["locations"][player]
def get_player_starting_inventory(self, team: int, player: int) -> List[int]: def get_player_starting_inventory(self, player: int) -> List[int]:
"""Retrieves a list of all item codes a given slot starts with.""" """Retrieves a list of all item codes a given slot starts with."""
return self._multidata["precollected_items"][player] return self._multidata["precollected_items"][player]
@@ -116,7 +116,7 @@ class TrackerData:
@_cache_results @_cache_results
def get_player_missing_locations(self, team: int, player: int) -> Set[int]: def get_player_missing_locations(self, team: int, player: int) -> Set[int]:
"""Retrieves the set of all locations not marked complete by this player.""" """Retrieves the set of all locations not marked complete by this player."""
return set(self.get_player_locations(team, player)) - self.get_player_checked_locations(team, player) return set(self.get_player_locations(player)) - self.get_player_checked_locations(team, player)
def get_player_received_items(self, team: int, player: int) -> List[NetworkItem]: def get_player_received_items(self, team: int, player: int) -> List[NetworkItem]:
"""Returns all items received to this player in order of received.""" """Returns all items received to this player in order of received."""
@@ -126,7 +126,7 @@ class TrackerData:
def get_player_inventory_counts(self, team: int, player: int) -> collections.Counter: def get_player_inventory_counts(self, team: int, player: int) -> collections.Counter:
"""Retrieves a dictionary of all items received by their id and their received count.""" """Retrieves a dictionary of all items received by their id and their received count."""
received_items = self.get_player_received_items(team, player) received_items = self.get_player_received_items(team, player)
starting_items = self.get_player_starting_inventory(team, player) starting_items = self.get_player_starting_inventory(player)
inventory = collections.Counter() inventory = collections.Counter()
for item in received_items: for item in received_items:
inventory[item.item] += 1 inventory[item.item] += 1
@@ -179,7 +179,7 @@ class TrackerData:
def get_team_locations_total_count(self) -> Dict[int, int]: def get_team_locations_total_count(self) -> Dict[int, int]:
"""Retrieves a dictionary of total player locations each team has.""" """Retrieves a dictionary of total player locations each team has."""
return { return {
team: sum(len(self.get_player_locations(team, player)) for player in players) team: sum(len(self.get_player_locations(player)) for player in players)
for team, players in self.get_all_players().items() for team, players in self.get_all_players().items()
} }
@@ -210,7 +210,7 @@ class TrackerData:
return { return {
0: [ 0: [
player for player, slot_info in self._multidata["slot_info"].items() player for player, slot_info in self._multidata["slot_info"].items()
if self.get_slot_info(0, player).type == SlotType.player if self.get_slot_info(player).type == SlotType.player
] ]
} }
@@ -226,7 +226,7 @@ class TrackerData:
def get_room_locations(self) -> Dict[TeamPlayer, Dict[int, ItemMetadata]]: def get_room_locations(self) -> Dict[TeamPlayer, Dict[int, ItemMetadata]]:
"""Retrieves a dictionary of all locations and their associated item metadata per player.""" """Retrieves a dictionary of all locations and their associated item metadata per player."""
return { return {
(team, player): self.get_player_locations(team, player) (team, player): self.get_player_locations(player)
for team, players in self.get_all_players().items() for player in players for team, players in self.get_all_players().items() for player in players
} }
@@ -234,7 +234,7 @@ class TrackerData:
def get_room_games(self) -> Dict[TeamPlayer, str]: def get_room_games(self) -> Dict[TeamPlayer, str]:
"""Retrieves a dictionary of games for each player.""" """Retrieves a dictionary of games for each player."""
return { return {
(team, player): self.get_player_game(team, player) (team, player): self.get_player_game(player)
for team, players in self.get_all_slots().items() for player in players for team, players in self.get_all_slots().items() for player in players
} }
@@ -262,9 +262,9 @@ class TrackerData:
for player in players: for player in players:
alias = self.get_player_alias(team, player) alias = self.get_player_alias(team, player)
if alias: if alias:
long_player_names[team, player] = f"{alias} ({self.get_player_name(team, player)})" long_player_names[team, player] = f"{alias} ({self.get_player_name(player)})"
else: else:
long_player_names[team, player] = self.get_player_name(team, player) long_player_names[team, player] = self.get_player_name(player)
return long_player_names return long_player_names
@@ -344,7 +344,7 @@ def get_timeout_and_player_tracker(room: Room, tracked_team: int, tracked_player
tracker_data = TrackerData(room) tracker_data = TrackerData(room)
# Load and render the game-specific player tracker, or fallback to generic tracker if none exists. # Load and render the game-specific player tracker, or fallback to generic tracker if none exists.
game_specific_tracker = _player_trackers.get(tracker_data.get_player_game(tracked_team, tracked_player), None) game_specific_tracker = _player_trackers.get(tracker_data.get_player_game(tracked_player), None)
if game_specific_tracker and not generic: if game_specific_tracker and not generic:
tracker = game_specific_tracker(tracker_data, tracked_team, tracked_player) tracker = game_specific_tracker(tracker_data, tracked_team, tracked_player)
else: else:
@@ -409,10 +409,10 @@ def get_enabled_multiworld_trackers(room: Room) -> Dict[str, Callable]:
def render_generic_tracker(tracker_data: TrackerData, team: int, player: int) -> str: def render_generic_tracker(tracker_data: TrackerData, team: int, player: int) -> str:
game = tracker_data.get_player_game(team, player) game = tracker_data.get_player_game(player)
received_items_in_order = {} received_items_in_order = {}
starting_inventory = tracker_data.get_player_starting_inventory(team, player) starting_inventory = tracker_data.get_player_starting_inventory(player)
for index, item in enumerate(starting_inventory): for index, item in enumerate(starting_inventory):
received_items_in_order[item] = index received_items_in_order[item] = index
for index, network_item in enumerate(tracker_data.get_player_received_items(team, player), for index, network_item in enumerate(tracker_data.get_player_received_items(team, player),
@@ -428,7 +428,7 @@ def render_generic_tracker(tracker_data: TrackerData, team: int, player: int) ->
player=player, player=player,
player_name=tracker_data.get_room_long_player_names()[team, player], player_name=tracker_data.get_room_long_player_names()[team, player],
inventory=tracker_data.get_player_inventory_counts(team, player), inventory=tracker_data.get_player_inventory_counts(team, player),
locations=tracker_data.get_player_locations(team, player), locations=tracker_data.get_player_locations(player),
checked_locations=tracker_data.get_player_checked_locations(team, player), checked_locations=tracker_data.get_player_checked_locations(team, player),
received_items=received_items_in_order, received_items=received_items_in_order,
saving_second=tracker_data.get_room_saving_second(), saving_second=tracker_data.get_room_saving_second(),
@@ -500,7 +500,7 @@ if "Factorio" in network_data_package["games"]:
tracker_data.item_id_to_name["Factorio"][item_id]: count tracker_data.item_id_to_name["Factorio"][item_id]: count
for item_id, count in tracker_data.get_player_inventory_counts(team, player).items() for item_id, count in tracker_data.get_player_inventory_counts(team, player).items()
}) for team, players in tracker_data.get_all_players().items() for player in players }) for team, players in tracker_data.get_all_players().items() for player in players
if tracker_data.get_player_game(team, player) == "Factorio" if tracker_data.get_player_game(player) == "Factorio"
} }
return render_template( return render_template(
@@ -589,7 +589,7 @@ if "A Link to the Past" in network_data_package["games"]:
# Highlight 'bombs' if we received any bomb upgrades in bombless start. # Highlight 'bombs' if we received any bomb upgrades in bombless start.
# In race mode, we'll just assume bombless start for simplicity. # In race mode, we'll just assume bombless start for simplicity.
if tracker_data.get_slot_data(team, player).get("bombless_start", True): if tracker_data.get_slot_data(player).get("bombless_start", True):
inventory["Bombs"] = sum(count for item, count in inventory.items() if item.startswith("Bomb Upgrade")) inventory["Bombs"] = sum(count for item, count in inventory.items() if item.startswith("Bomb Upgrade"))
else: else:
inventory["Bombs"] = 1 inventory["Bombs"] = 1
@@ -605,7 +605,7 @@ if "A Link to the Past" in network_data_package["games"]:
for code, count in tracker_data.get_player_inventory_counts(team, player).items() for code, count in tracker_data.get_player_inventory_counts(team, player).items()
}) })
for team, players in tracker_data.get_all_players().items() for team, players in tracker_data.get_all_players().items()
for player in players if tracker_data.get_slot_info(team, player).game == "A Link to the Past" for player in players if tracker_data.get_slot_info(player).game == "A Link to the Past"
} }
# Translate non-progression items to progression items for tracker simplicity. # Translate non-progression items to progression items for tracker simplicity.
@@ -624,7 +624,7 @@ if "A Link to the Past" in network_data_package["games"]:
for region_name in known_regions for region_name in known_regions
} }
for team, players in tracker_data.get_all_players().items() for team, players in tracker_data.get_all_players().items()
for player in players if tracker_data.get_slot_info(team, player).game == "A Link to the Past" for player in players if tracker_data.get_slot_info(player).game == "A Link to the Past"
} }
# Get a totals count. # Get a totals count.
@@ -698,7 +698,7 @@ if "A Link to the Past" in network_data_package["games"]:
team=team, team=team,
player=player, player=player,
inventory=inventory, inventory=inventory,
player_name=tracker_data.get_player_name(team, player), player_name=tracker_data.get_player_name(player),
regions=regions, regions=regions,
known_regions=known_regions, known_regions=known_regions,
) )
@@ -845,7 +845,7 @@ if "Ocarina of Time" in network_data_package["games"]:
return full_name[len(area):] return full_name[len(area):]
return full_name return full_name
locations = tracker_data.get_player_locations(team, player) locations = tracker_data.get_player_locations(player)
checked_locations = tracker_data.get_player_checked_locations(team, player).intersection(set(locations)) checked_locations = tracker_data.get_player_checked_locations(team, player).intersection(set(locations))
location_info = {} location_info = {}
checks_done = {} checks_done = {}
@@ -907,7 +907,7 @@ if "Ocarina of Time" in network_data_package["games"]:
player=player, player=player,
team=team, team=team,
room=tracker_data.room, room=tracker_data.room,
player_name=tracker_data.get_player_name(team, player), player_name=tracker_data.get_player_name(player),
icons=icons, icons=icons,
acquired_items={lookup_any_item_id_to_name[id] for id, count in inventory.items() if count > 0}, acquired_items={lookup_any_item_id_to_name[id] for id, count in inventory.items() if count > 0},
checks_done=checks_done, checks_in_area=checks_in_area, location_info=location_info, checks_done=checks_done, checks_in_area=checks_in_area, location_info=location_info,
@@ -966,7 +966,7 @@ if "Timespinner" in network_data_package["games"]:
1337246, 1337247, 1337248, 1337249] 1337246, 1337247, 1337248, 1337249]
} }
slot_data = tracker_data.get_slot_data(team, player) slot_data = tracker_data.get_slot_data(player)
if (slot_data["DownloadableItems"]): if (slot_data["DownloadableItems"]):
timespinner_location_ids["Present"] += [1337156, 1337157] + list(range(1337159, 1337170)) timespinner_location_ids["Present"] += [1337156, 1337157] + list(range(1337159, 1337170))
if (slot_data["Cantoran"]): if (slot_data["Cantoran"]):
@@ -1015,7 +1015,7 @@ if "Timespinner" in network_data_package["games"]:
player=player, player=player,
team=team, team=team,
room=tracker_data.room, room=tracker_data.room,
player_name=tracker_data.get_player_name(team, player), player_name=tracker_data.get_player_name(player),
checks_done=checks_done, checks_done=checks_done,
checks_in_area=checks_in_area, checks_in_area=checks_in_area,
location_info=location_info, location_info=location_info,
@@ -1124,7 +1124,7 @@ if "Super Metroid" in network_data_package["games"]:
player=player, player=player,
team=team, team=team,
room=tracker_data.room, room=tracker_data.room,
player_name=tracker_data.get_player_name(team, player), player_name=tracker_data.get_player_name(player),
checks_done=checks_done, checks_done=checks_done,
checks_in_area=checks_in_area, checks_in_area=checks_in_area,
location_info=location_info, location_info=location_info,
@@ -1174,7 +1174,7 @@ if "ChecksFinder" in network_data_package["games"]:
display_data = {} display_data = {}
inventory = tracker_data.get_player_inventory_counts(team, player) inventory = tracker_data.get_player_inventory_counts(team, player)
locations = tracker_data.get_player_locations(team, player) locations = tracker_data.get_player_locations(player)
# Multi-items # Multi-items
multi_items = { multi_items = {
@@ -1216,7 +1216,7 @@ if "ChecksFinder" in network_data_package["games"]:
player=player, player=player,
team=team, team=team,
room=tracker_data.room, room=tracker_data.room,
player_name=tracker_data.get_player_name(team, player), player_name=tracker_data.get_player_name(player),
checks_done=checks_done, checks_done=checks_done,
checks_in_area=checks_in_area, checks_in_area=checks_in_area,
location_info=location_info, location_info=location_info,
@@ -1244,7 +1244,7 @@ if "Starcraft 2" in network_data_package["games"]:
UPGRADE_RESEARCH_SPEED_ITEM_ID = 1807 UPGRADE_RESEARCH_SPEED_ITEM_ID = 1807
UPGRADE_RESEARCH_COST_ITEM_ID = 1808 UPGRADE_RESEARCH_COST_ITEM_ID = 1808
REDUCED_MAX_SUPPLY_ITEM_ID = 1850 REDUCED_MAX_SUPPLY_ITEM_ID = 1850
slot_data = tracker_data.get_slot_data(team, player) slot_data = tracker_data.get_slot_data(player)
inventory: collections.Counter[int] = tracker_data.get_player_inventory_counts(team, player) inventory: collections.Counter[int] = tracker_data.get_player_inventory_counts(team, player)
item_id_to_name = tracker_data.item_id_to_name["Starcraft 2"] item_id_to_name = tracker_data.item_id_to_name["Starcraft 2"]
location_id_to_name = tracker_data.location_id_to_name["Starcraft 2"] location_id_to_name = tracker_data.location_id_to_name["Starcraft 2"]
@@ -1263,7 +1263,7 @@ if "Starcraft 2" in network_data_package["games"]:
# Locations # Locations
have_nco_locations = False have_nco_locations = False
locations = tracker_data.get_player_locations(team, player) locations = tracker_data.get_player_locations(player)
checked_locations = tracker_data.get_player_checked_locations(team, player) checked_locations = tracker_data.get_player_checked_locations(team, player)
missions: dict[str, list[tuple[str, bool]]] = {} missions: dict[str, list[tuple[str, bool]]] = {}
for location_id in locations: for location_id in locations:
@@ -1436,7 +1436,7 @@ if "Starcraft 2" in network_data_package["games"]:
player=player, player=player,
team=team, team=team,
room=tracker_data.room, room=tracker_data.room,
player_name=tracker_data.get_player_name(team, player), player_name=tracker_data.get_player_name(player),
missions=missions, missions=missions,
locations=locations, locations=locations,
checked_locations=checked_locations, checked_locations=checked_locations,