Add WOTD language rotation, fancy word detection, arena improvements, and death consolidation

- Rotate WOTD between Portuguese, French, and English daily with cognate filtering
- Replace LLM-based fancy word detection with DreamDict frequency data (batch API + cache)
- Track fancy word usage per user and add Wordsmith archetype
- Restore full arena combat flavor text and add player miss actions
- Consolidate death logic into Kill() method with 2-hour lockout
- Fix arena death XP grant missing level-up check
- Fix LLM wotd_used classification by injecting actual WOTD into prompt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
prosolis
2026-03-31 18:47:49 -07:00
parent 306b4c2ae8
commit 3d6bc1a066
9 changed files with 350 additions and 139 deletions

View File

@@ -534,13 +534,11 @@ func (p *AdventurePlugin) resolveArenaDeath(ctx MessageContext, run *ArenaRun, c
lostEarnings := run.Earnings
// Kill the character (locked out for 2 hours)
char.Alive = false
char.Kill()
now := time.Now().UTC()
deadUntil := now.Add(2 * time.Hour)
char.DeadUntil = &deadUntil
char.ArenaLosses++
char.CombatXP += arenaParticipationXP // +60 flat participation XP
checkAdvLevelUp(char, "combat")
if err := saveAdvCharacter(char); err != nil {
slog.Error("arena: failed to save character after death", "user", ctx.Sender, "err", err)
}