track precollected items after first location check and add some non-progressive item handling
This commit is contained in:
parent
8c358a449b
commit
8367351c62
5
Main.py
5
Main.py
|
@ -253,6 +253,10 @@ def main(args, seed=None):
|
||||||
if lookup_vanilla_location_to_entrance[location.address] != main_entrance.name:
|
if lookup_vanilla_location_to_entrance[location.address] != main_entrance.name:
|
||||||
er_hint_data[region.player][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,
|
multidata = zlib.compress(json.dumps({"names": parsed_names,
|
||||||
"roms": rom_names,
|
"roms": rom_names,
|
||||||
"remote_items": [player for player in range(1, world.players + 1) if
|
"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],
|
type(location.address) is int],
|
||||||
"server_options": get_options()["server_options"],
|
"server_options": get_options()["server_options"],
|
||||||
"er_hint_data": er_hint_data,
|
"er_hint_data": er_hint_data,
|
||||||
|
"precollected_items": precollected_items
|
||||||
}).encode("utf-8"), 9)
|
}).encode("utf-8"), 9)
|
||||||
|
|
||||||
with open(output_path('%s.multidata' % outfilebase), 'wb') as f:
|
with open(output_path('%s.multidata' % outfilebase), 'wb') as f:
|
||||||
|
|
|
@ -3,6 +3,7 @@ import collections
|
||||||
from flask import render_template
|
from flask import render_template
|
||||||
from werkzeug.exceptions import abort
|
from werkzeug.exceptions import abort
|
||||||
import datetime
|
import datetime
|
||||||
|
import logging
|
||||||
|
|
||||||
import Items
|
import Items
|
||||||
from WebHost import app, cache, Room
|
from WebHost import app, cache, Room
|
||||||
|
@ -87,8 +88,17 @@ links = {"Bow": "Progressive Bow",
|
||||||
"Power Glove": "Progressive Glove",
|
"Power Glove": "Progressive Glove",
|
||||||
"Titans Mitts": "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")}
|
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()}
|
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",
|
tracking_names = ["Progressive Sword", "Progressive Bow", "Book of Mudora", "Hammer",
|
||||||
"Hookshot", "Magic Mirror", "Flute",
|
"Hookshot", "Magic Mirror", "Flute",
|
||||||
|
@ -143,6 +153,13 @@ for item in tracking_names:
|
||||||
from MultiServer import get_item_name_from_id
|
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/<int:room>')
|
@app.route('/tracker/<int:room>')
|
||||||
@cache.memoize(timeout=60) # update every minute
|
@cache.memoize(timeout=60) # update every minute
|
||||||
def get_tracker(room: int):
|
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}
|
checks_done = {teamnumber: {playernumber: {loc_name: 0 for loc_name in default_locations}
|
||||||
for playernumber in range(1, len(team) + 1)}
|
for playernumber in range(1, len(team) + 1)}
|
||||||
for teamnumber, team in enumerate(multidata["names"])}
|
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", {}):
|
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:
|
for location in locations_checked:
|
||||||
item, recipient = locations[location, player]
|
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][location_to_area[location]] += 1
|
||||||
checks_done[team][player]["Total"] += 1
|
checks_done[team][player]["Total"] += 1
|
||||||
for (team, player), game_state in room.multisave.get("client_game_state", []):
|
for (team, player), game_state in room.multisave.get("client_game_state", []):
|
||||||
|
|
Loading…
Reference in New Issue