mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-15 08:32:41 +00:00
Coop: lock combat actions for the full duration of an active run
Players in a co-op were getting their combat action back every midnight reset and offered the dungeon option in the morning DM. Per spec they should be "off in the Co-op" and unable to also solo-grind dungeons. Fix at the DB layer (so all CanDoCombat() paths agree): - New helper lockCoopCombatActions() sets combat_actions_used=99 for any user in an active coop run. Called immediately after every resetAllAdvDailyActions() — at startup and at midnight. - Render layer: morning DM now shows "combat locked (in Co-op #N, day X/Y)" and replaces the dungeon section with an explanatory line pointing them at !coop status. Combat returns to normal automatically once the run completes/wipes — the next midnight reset finds status != 'active' and skips the lock. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -422,6 +422,13 @@ func (p *AdventurePlugin) midnightReset() error {
|
||||
slog.Warn("adventure: daily action reset failed, retrying", "attempt", attempt+1, "err", resetErr)
|
||||
time.Sleep(time.Duration(attempt+1) * 2 * time.Second)
|
||||
}
|
||||
if resetErr == nil {
|
||||
// Re-lock combat for active co-op participants after the universal
|
||||
// reset would otherwise have given them a fresh combat action.
|
||||
if err := lockCoopCombatActions(); err != nil {
|
||||
slog.Error("adventure: post-reset coop combat lock failed", "err", err)
|
||||
}
|
||||
}
|
||||
if resetErr != nil {
|
||||
return fmt.Errorf("reset daily actions after 3 attempts: %w", resetErr)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user