mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-07 23:25:51 -08:00
Compare commits
5 Commits
0.3.6
...
show_all_h
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
87152f17f5 | ||
|
|
c1b099d44e | ||
|
|
d20ade7ff8 | ||
|
|
df90ff4ddb | ||
|
|
a798e8aea2 |
@@ -110,6 +110,10 @@ class ClientCommandProcessor(CommandProcessor):
|
||||
self.output("Unreadied.")
|
||||
asyncio.create_task(self.ctx.send_msgs([{"cmd": "StatusUpdate", "status": state}]), name="send StatusUpdate")
|
||||
|
||||
def _cmd_show_all_hints(self):
|
||||
"""Allows the player to see all hints, not just the ones that apply to them."""
|
||||
asyncio.create_task(self.ctx.update_show_all_hints("ShowAllHints" not in self.ctx.tags))
|
||||
|
||||
def default(self, raw: str):
|
||||
raw = self.ctx.on_user_say(raw)
|
||||
if raw:
|
||||
@@ -402,6 +406,15 @@ class CommonContext:
|
||||
}
|
||||
}])
|
||||
|
||||
async def update_show_all_hints(self, show_all_hints: bool):
|
||||
old_tags = self.tags.copy()
|
||||
if show_all_hints:
|
||||
self.tags.add("ShowAllHints")
|
||||
else:
|
||||
self.tags -= {"ShowAllHints"}
|
||||
if old_tags != self.tags and self.server and not self.server.socket.closed:
|
||||
await self.send_msgs([{"cmd": "ConnectUpdate", "tags": self.tags}])
|
||||
|
||||
async def update_death_link(self, death_link: bool):
|
||||
old_tags = self.tags.copy()
|
||||
if death_link:
|
||||
|
||||
@@ -559,12 +559,19 @@ def notify_hints(ctx: Context, team: int, hints: typing.List[NetUtils.Hint], onl
|
||||
if not hints:
|
||||
return
|
||||
concerns = collections.defaultdict(list)
|
||||
all_hints = collections.defaultdict(list)
|
||||
for hint in sorted(hints, key=operator.attrgetter('found'), reverse=True):
|
||||
data = (hint, hint.as_network_message())
|
||||
for player in ctx.slot_set(hint.receiving_player):
|
||||
concerns[player].append(data)
|
||||
if not hint.local and data not in concerns[hint.finding_player]:
|
||||
concerns[hint.finding_player].append(data)
|
||||
for slot, clients in ctx.clients[team].items():
|
||||
if not clients or slot == hint.finding_player or slot in ctx.slot_set(hint.receiving_player) or \
|
||||
(ctx.games[slot] != "Archipelago" and all(["ShowAllHints" not in client.tags for client in clients])):
|
||||
continue
|
||||
for client in [client for client in clients if "ShowAllHints" in client.tags or ctx.games[slot] == "Archipelago"]:
|
||||
all_hints[client].append(data)
|
||||
# remember hints in all cases
|
||||
if not hint.found:
|
||||
# since hints are bidirectional, finding player and receiving player,
|
||||
@@ -584,6 +591,10 @@ def notify_hints(ctx: Context, team: int, hints: typing.List[NetUtils.Hint], onl
|
||||
for client in clients:
|
||||
asyncio.create_task(ctx.send_msgs(client, client_hints))
|
||||
|
||||
for client, hint_data in all_hints.items():
|
||||
client_hints = [datum[1] for datum in sorted(hint_data)]
|
||||
asyncio.create_task(ctx.send_msgs(client, client_hints))
|
||||
|
||||
|
||||
def update_aliases(ctx: Context, team: int):
|
||||
cmd = ctx.dumper([{"cmd": "RoomUpdate",
|
||||
|
||||
Reference in New Issue
Block a user