mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-15 08:32:41 +00:00
Add housing/pets/Thom Krooke, wordle overhaul, boost system, backup strategy
Part 3 (Housing, Thom Krooke & Pets): - Housing system with tiered upgrades, mortgage loans, FRED API rates - Thom Krooke realtor NPC with !thom commands and !thom pay extra principal - Pet system with arrival, naming, leveling, combat, morning defense - Pet ditch recovery scales with level, name validation Wordle overhaul: - Remove daily expiration — puzzles persist until solved/failed - Auto-start new puzzle after solve, fail, or skip - Sequential puzzle IDs instead of date-based - Auto-create puzzle on first guess if none active Adventure fixes: - Double XP/money boost toggle (!adv boost, admin only) - Fix ensureCharacter wiping existing data on query errors - Fix rival RPS format string bug - Fix daily summary empty data (load today+yesterday logs) - Fix holdem DM-to-room reply routing - Fix Robbie payout to 25% of item value - Add fishing to leaderboard and TwinBee calculations - Add Thom to morning menu - Persist mortgage rate across restarts via db.CacheGet/Set Infrastructure: - Daily database backup via VACUUM INTO with 7-day retention - Admin DM notification on backup failure (async) - Daily NPC house balance reset for holdem Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -459,8 +459,11 @@ func (p *AdventurePlugin) resolveRivalRPSRound(ctx MessageContext, interaction *
|
||||
// Outcome line.
|
||||
outcomePool := rivalRoundOutcomeWin
|
||||
outcome := pickRivalFlavor(outcomePool)
|
||||
if strings.Contains(outcome, "%s") {
|
||||
switch strings.Count(outcome, "%s") {
|
||||
case 2:
|
||||
outcome = fmt.Sprintf(outcome, rpsNames[rivalThrow], rpsNames[playerThrow])
|
||||
case 1:
|
||||
outcome = fmt.Sprintf(outcome, rpsNames[rivalThrow])
|
||||
}
|
||||
sb.WriteString(outcome + "\n\n")
|
||||
sb.WriteString(fmt.Sprintf("Score: You %d -- Rival %d\n\n", challenge.PlayerScore, challenge.RivalScore))
|
||||
@@ -471,8 +474,11 @@ func (p *AdventurePlugin) resolveRivalRPSRound(ctx MessageContext, interaction *
|
||||
challenge.RivalScore++
|
||||
outcomePool := rivalRoundOutcomeLoss
|
||||
outcome := pickRivalFlavor(outcomePool)
|
||||
if strings.Contains(outcome, "%s") {
|
||||
switch strings.Count(outcome, "%s") {
|
||||
case 2:
|
||||
outcome = fmt.Sprintf(outcome, rpsNames[rivalThrow], rpsNames[playerThrow])
|
||||
case 1:
|
||||
outcome = fmt.Sprintf(outcome, rpsNames[rivalThrow])
|
||||
}
|
||||
sb.WriteString(outcome + "\n\n")
|
||||
sb.WriteString(fmt.Sprintf("Score: You %d -- Rival %d\n\n", challenge.PlayerScore, challenge.RivalScore))
|
||||
|
||||
Reference in New Issue
Block a user