mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-22 07:35:37 -07:00
* Player tracker: implement a stylized tracker (#447) * Move generic tracker to a WebWorld method * render both a generic tracker at generic_tracker and the specific tracker at /tracker * create a base template for generic specific tracker and instantiate some information before callng it * some baseline for the playerTracker.html. update information fed from tracker.py * playerTracker: finish implementing icons and generic locations rendering. hide any unacquired progression items when not using icons. Place the name of the progression item under its icon. * player tracker: starting work on regions table * player tracker: change method calls * Move generic tracker to a WebWorld method * render both a generic tracker at generic_tracker and the specific tracker at /tracker * create a base template for generic specific tracker and instantiate some information before callng it * some baseline for the playerTracker.html. update information fed from tracker.py * playerTracker: finish implementing icons and generic locations rendering. hide any unacquired progression items when not using icons. Place the name of the progression item under its icon. * player tracker: starting work on regions table * player tracker: change method calls * Move generic tracker to a WebWorld method * create a base template for generic specific tracker and instantiate some information before callng it * some baseline for the playerTracker.html. update information fed from tracker.py * playerTracker: finish implementing icons and generic locations rendering. hide any unacquired progression items when not using icons. Place the name of the progression item under its icon. * player tracker: starting work on regions table * player tracker: switch item, icon and location tables to flex views. Some styling based on theme * Player Tracker: Finish building html template for all blocks. Set groundwork for theme styling * Player Tracker: Implement tracker class. Document tracker usage. * Player Tracker: Add button to switch between trackers. Some styling for styled tracker. * Player Tracker: reword some text. Attempt to fix page refreshing. * Player Tracker: reremove the TODOs that got merged back in accidentally. * player tracker: move render_template import to webworld so it isn't required outside of webhost * Player Tracker: code cleanup, typing. Add inventory with names to PlayerTracker class in case custom trackers want to use it to change their prog_items attribute. * Player Tracker: delete a line I forgot about. Add typing to theme. * Player Tracker: Generate checks_done automatically so worlds don't have to do it * Player Tracker: Add typing to PlayerTracker class in webworld method. Update documentation * Player Tracker: code cleanup * Player Tracker: Sort of implement fetch (works but could be better). Make playerTracker.html more readable. * specific trackers: significant html cleanup. DOM Endpoint auto updating page every 30 seconds * Changes by Kono * specific trackers: cache and only load the data once every minute * specific tracker: allow for one icon placement to be used for multiple items. * Player tracker fixes/updates (#635) * Move generic tracker to a WebWorld method * render both a generic tracker at generic_tracker and the specific tracker at /tracker * create a base template for generic specific tracker and instantiate some information before callng it * some baseline for the playerTracker.html. update information fed from tracker.py * playerTracker: finish implementing icons and generic locations rendering. hide any unacquired progression items when not using icons. Place the name of the progression item under its icon. * player tracker: starting work on regions table * player tracker: change method calls * Move generic tracker to a WebWorld method * render both a generic tracker at generic_tracker and the specific tracker at /tracker * create a base template for generic specific tracker and instantiate some information before callng it * some baseline for the playerTracker.html. update information fed from tracker.py * playerTracker: finish implementing icons and generic locations rendering. hide any unacquired progression items when not using icons. Place the name of the progression item under its icon. * player tracker: starting work on regions table * player tracker: change method calls * Move generic tracker to a WebWorld method * create a base template for generic specific tracker and instantiate some information before callng it * some baseline for the playerTracker.html. update information fed from tracker.py * playerTracker: finish implementing icons and generic locations rendering. hide any unacquired progression items when not using icons. Place the name of the progression item under its icon. * player tracker: starting work on regions table * player tracker: switch item, icon and location tables to flex views. Some styling based on theme * Player Tracker: Finish building html template for all blocks. Set groundwork for theme styling * Player Tracker: Implement tracker class. Document tracker usage. * Player Tracker: Add button to switch between trackers. Some styling for styled tracker. * Player Tracker: reword some text. Attempt to fix page refreshing. * Player Tracker: reremove the TODOs that got merged back in accidentally. * player tracker: move render_template import to webworld so it isn't required outside of webhost * Player Tracker: code cleanup, typing. Add inventory with names to PlayerTracker class in case custom trackers want to use it to change their prog_items attribute. * Player Tracker: delete a line I forgot about. Add typing to theme. * Player Tracker: Generate checks_done automatically so worlds don't have to do it * Player Tracker: Add typing to PlayerTracker class in webworld method. Update documentation * Player Tracker: code cleanup * Player Tracker: Sort of implement fetch (works but could be better). Make playerTracker.html more readable. * specific trackers: significant html cleanup. DOM Endpoint auto updating page every 30 seconds * Changes by Kono * specific trackers: cache and only load the data once every minute * specific tracker: allow for one icon placement to be used for multiple items. * lttp: move tracker to new format. will need more modification to generic solution to handle region keys tracking. likely a new html template that inherits the current * lttp: fix broken icons rendering, add in progressive mail that i forgor. reorder some icons * tracker: fix non edited trackers being broken from changes. * tracker: move theme application before modify method so trackers can use a different theme than the world if desired. * tracker: starting work on key tracking. * tracker: styling and cleanup by Farrak * tracker: styling and cleanup by Farrak * tracker: styling and cleanup of playerTracker.html * Revert playerTracker.html * trackers: rename some files for clarity. move trackers into their own subdirectory * small tracker.py cleanup * move minecraft tracker to new system * add item link attributing from upstream * change getPlayerTracker to get_player_tracker. refactor broken linkings * refactor styling files to trackers folders * fix broken image in minecraft tracker. move oot tracker to new system * clean up my oot nightmare * rename lttpKeysTracker to zeldaKeysTracker. Move oot to keys tracker * implement zeldaKeysTracker.js. fix table locations hiding/showing
51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
import collections
|
|
|
|
from flask import jsonify
|
|
from typing import Optional, Dict, Any, Tuple, List
|
|
from Utils import restricted_loads
|
|
from uuid import UUID
|
|
|
|
from ..models import Room
|
|
from . import api_endpoints
|
|
from ..tracker import fill_tracker_data, get_static_room_data
|
|
from worlds import lookup_any_item_id_to_name, lookup_any_location_id_to_name
|
|
from WebHostLib import cache
|
|
|
|
|
|
@api_endpoints.route('/tracker/<suuid:tracker>/<int:tracked_team>/<int:tracked_player>')
|
|
@cache.memoize(timeout=60)
|
|
def update_player_tracker(tracker: UUID, tracked_team: int, tracked_player: int):
|
|
|
|
room: Optional[Room] = Room.get(tracker=tracker)
|
|
locations = get_static_room_data(room)[0]
|
|
items_counter: Dict[int, collections.Counter] = get_item_names_counter(locations)
|
|
player_tracker, multisave, inventory, seed_checks_in_area, lttp_checks_done, \
|
|
slot_data, games, player_name, display_icons = fill_tracker_data(room, tracked_team, tracked_player)
|
|
|
|
# convert numbers to string
|
|
for item in player_tracker.items_received:
|
|
if items_counter[tracked_player][item] == 1:
|
|
player_tracker.items_received[item] = '✔'
|
|
else:
|
|
player_tracker.items_received[item] = str(player_tracker.items_received[item])
|
|
|
|
return jsonify({
|
|
"items_received": player_tracker.items_received,
|
|
"checked_locations": list(sorted(player_tracker.checked_locations)),
|
|
"icons": display_icons,
|
|
"progressive_names": player_tracker.progressive_names
|
|
})
|
|
|
|
|
|
@cache.cached()
|
|
def get_item_names_counter(locations: Dict[int, Dict[int, Tuple[int, int, int]]]):
|
|
# create and fill dictionary of all progression items for players
|
|
items_counters: Dict[int, collections.Counter] = {}
|
|
for player in locations:
|
|
for location in locations[player]:
|
|
item, recipient, flags = locations[player][location]
|
|
item_name = lookup_any_item_id_to_name[item]
|
|
items_counters.setdefault(recipient, collections.Counter())[item_name] += 1
|
|
|
|
return items_counters
|