Happenings: weather and seasons, minor threats, hardships, fortunes, dragons

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rope 2026-10-19 09:34:18 +01:00
parent a4e4bd4385
commit 75327f30e0
6 changed files with 903 additions and 38 deletions

16
app.py
View file

@ -330,6 +330,10 @@ class Handler(BaseHTTPRequestHandler):
return "There's no raid to stand guard for"
player["garrison"] = bool(body.get("join"))
return None
if path == "/api/aid":
return game.aid_problem(world, player, str(body.get("kind")), str(body.get("item")), str(body.get("source")), now)
if path == "/api/hire":
return game.hire_mercenaries(world, player, now)
if path == "/api/potion":
return game.use_potion(player, str(body.get("item")))
if path == "/api/prayers":
@ -409,6 +413,13 @@ class Handler(BaseHTTPRequestHandler):
world["config"]["clock_offset"] += hours * game.HOUR / game.speed(world)
game.tick(world, self.store.now(), self.store.rng)
return None
if path == "/api/dev/happen":
track = body.get("track")
fire = {"minor": game._minor_threat, "hardship": game._hardship, "fortune": game._fortune}.get(track)
if not fire:
return "No such track"
fire(world, self.store.now(), self.store.rng, body.get("kind"))
return None
if path == "/api/dev/event":
world["next_event_at"] = self.store.now()
game.tick(world, self.store.now(), self.store.rng)
@ -421,9 +432,9 @@ class Handler(BaseHTTPRequestHandler):
player = world["players"].get(uid)
upcoming = game.upcoming_event(world)
history = [
{"id": e["id"], "kind": e["kind"], "at": e["resolved"], "report": e.get("report")}
{"id": e["id"], "kind": e["kind"], "track": e.get("track", "major"), "at": e["resolved"], "report": e.get("report")}
for e in reversed(world["events"]) if e["status"] == "done"
][:10]
][:15]
return {
"now": now, "dev": self.dev, "uid": uid, "version": VERSION,
"me": player_view(world, player, now) if player else None,
@ -431,6 +442,7 @@ class Handler(BaseHTTPRequestHandler):
"city": city_view(world, now),
"upcoming": game.event_view(world, upcoming, now) if upcoming else None,
"favours": game.favours(world, now),
"happenings": game.happenings_view(world, now),
"history": history,
"players": roster(world, now),
"ledger": world["ledger"][-80:],