Map ping with sound (custom MP3 per lobby)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HJhXuLD2Z6hv3Wqeq9UL9K
This commit is contained in:
@@ -774,6 +774,29 @@ def install(api, db, current_user, lobby_for, dm_only, hub, event, store_dir: Pa
|
||||
hub.notify(lid, "map")
|
||||
return {"ok": True}
|
||||
|
||||
pinged: dict = {}
|
||||
|
||||
@api.post("/lobbies/{lid}/ping")
|
||||
def ping(lid: str, body: dict = Body(...), user: dict = Depends(current_user)):
|
||||
"""Anybody at the table can point at a spot of the map; everybody sees a ring there (and hears a ping)."""
|
||||
with db() as con:
|
||||
lobby = lobby_for(con, lid, user)
|
||||
m = need_map(con, lobby)
|
||||
try:
|
||||
x, y = float(body.get("x")), float(body.get("y"))
|
||||
except (TypeError, ValueError):
|
||||
raise HTTPException(422, "Invalid position")
|
||||
if not (0 <= x <= m["w"] and 0 <= y <= m["h"]):
|
||||
raise HTTPException(422, "Outside of the map")
|
||||
now = time.time()
|
||||
if now - pinged.get((lid, user["id"]), 0) < 0.8:
|
||||
raise HTTPException(429, "Slow down")
|
||||
pinged[(lid, user["id"])] = now
|
||||
if len(pinged) > 2000:
|
||||
pinged.clear()
|
||||
hub.notify(lid, "ping", delay=0, x=round(x, 1), y=round(y, 1), user=user["username"], dm=lobby["owner_id"] == user["id"])
|
||||
return {"ok": True}
|
||||
|
||||
@api.put("/lobbies/{lid}/sight")
|
||||
def set_sight(lid: str, body: dict = Body(...), user: dict = Depends(current_user)):
|
||||
"""DM: switch line of sight on or off for the table (off: players see the whole map)."""
|
||||
|
||||
Reference in New Issue
Block a user