Close expedition/run seam on combat loss & flee

Run-loss paths (turn-based elite/boss death + flee, exploration combat
death/retreat, interrupt/patrol death) abandoned the zone run but left
the wrapping expedition row at status='active', so the ambient ticker
kept DMing about a dungeon the player had walked away from.

Adds forceExtractExpeditionForRunLoss helper and wires it into every
run-loss site; ambient ticker also skips when the expedition's run is
no longer active as a safety net.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
prosolis
2026-05-16 13:48:52 -07:00
parent 98ba416359
commit dcc039b7d5
5 changed files with 34 additions and 0 deletions

View File

@@ -188,6 +188,7 @@ func (p *AdventurePlugin) runHarvestInterrupt(
_, _ = applyMoodEvent(run.RunID, MoodEventPlayerDeath)
_ = abandonZoneRun(userID)
_ = retireAllRegionRuns(exp)
_, _, _ = forcedExtractExpedition(exp.ID, "interrupt death")
markAdventureDead(userID, "expedition", zone.Display)
if line := flavor.Pick(flavor.PlayerDeath); line != "" {
b.WriteString(line)
@@ -513,6 +514,7 @@ func (p *AdventurePlugin) tryPatrolEncounter(
_, _ = applyMoodEvent(run.RunID, MoodEventPlayerDeath)
_ = abandonZoneRun(userID)
_ = retireAllRegionRuns(exp)
_, _, _ = forcedExtractExpedition(exp.ID, "patrol death")
markAdventureDead(userID, "patrol", zone.Display)
if line := flavor.Pick(flavor.PlayerDeath); line != "" {
ob.WriteString(line)