diff --git a/WebHostLib/templates/multiTracker.html b/WebHostLib/templates/multiTracker.html
index c6defff0..11f62fd8 100644
--- a/WebHostLib/templates/multiTracker.html
+++ b/WebHostLib/templates/multiTracker.html
@@ -36,6 +36,7 @@
{% endblock %}
Checks |
% |
+ Status |
Last Activity |
@@ -51,8 +52,10 @@
{% endblock %}
{{ checks["Total"] }}/{{ checks_in_area[player]["Total"] }} |
{{ percent_total_checks_done[team][player] }} |
- {%- if activity_timers[(team, player)] -%}
- {{ activity_timers[(team, player)].total_seconds() }} |
+ {{ {0: "Disconnected", 5: "Connected", 10: "Ready", 20: "Playing",
+ "30": "Goal Completed"}.get(states[team, player], "Unknown State") }} |
+ {%- if activity_timers[team, player] -%}
+ {{ activity_timers[team, player].total_seconds() }} |
{%- else -%}
None |
{%- endif -%}
diff --git a/WebHostLib/tracker.py b/WebHostLib/tracker.py
index d4260bc8..8f9fb148 100644
--- a/WebHostLib/tracker.py
+++ b/WebHostLib/tracker.py
@@ -1384,24 +1384,26 @@ def _get_multiworld_tracker_data(tracker: UUID) -> typing.Optional[typing.Dict[s
activity_timers[team, player] = now - datetime.datetime.utcfromtimestamp(timestamp)
player_names = {}
+ states: typing.Dict[typing.Tuple[int, int], int] = {}
for team, names in enumerate(names):
for player, name in enumerate(names, 1):
- player_names[(team, player)] = name
+ player_names[team, player] = name
+ states[team, player] = multisave.get("client_game_state", {}).get((team, player), 0)
long_player_names = player_names.copy()
for (team, player), alias in multisave.get("name_aliases", {}).items():
- player_names[(team, player)] = alias
- long_player_names[(team, player)] = f"{alias} ({long_player_names[(team, player)]})"
+ player_names[team, player] = alias
+ long_player_names[(team, player)] = f"{alias} ({long_player_names[team, player]})"
video = {}
for (team, player), data in multisave.get("video", []):
- video[(team, player)] = data
+ video[team, player] = data
return dict(player_names=player_names, room=room, checks_done=checks_done,
percent_total_checks_done=percent_total_checks_done, checks_in_area=checks_in_area,
activity_timers=activity_timers, video=video, hints=hints,
long_player_names=long_player_names,
multisave=multisave, precollected_items=precollected_items, groups=groups,
- locations=locations, games=games)
+ locations=locations, games=games, states=states)
def _get_inventory_data(data: typing.Dict[str, typing.Any]) -> typing.Dict[int, typing.Dict[int, int]]: