Files
aurorabot/shared/modules/leveling/AGENTS.md
syntaxbullet 2b89fb7ede
Some checks failed
Deploy to Production / test (push) Failing after 34s
docs: rename CLAUDE.md to AGENTS.md across the project
2026-04-06 14:18:56 +02:00

1.1 KiB

Leveling Module

  • Level is derived, not stored. Total XP is the source of truth. getLevelFromXp() recalculates level from cumulative XP on every addXp() call. Levels are monotonic — they never decrease.
  • XP curve is a power law: xpForLevel(n) = floor(base * n^exponent) where defaults are base: 100, exponent: 1.5. Config comes from gameSettingsService (30s cache TTL).
  • Chat XP (processChatXp()) awards random XP between minXp (5) and maxXp (15) per message, gated by a 60-second per-user cooldown (TimerType.COOLDOWN, key TimerKey.CHAT_XP). The cooldown is upserted atomically.
  • Quest/reward XP uses addXp() directly — it bypasses the chat cooldown.
  • XP boost multipliers come from active TimerType.EFFECT timers with key 'xp_boost' (metadata field: multiplier).
  • All XP values are bigint in the DB but converted to Number for arithmetic. Watch for overflow at extremely high XP values.
  • addXp() and processChatXp() run inside transactions. They emit XP_GAINED (fire-and-forget) which the quest system listens to — the weight equals the XP amount.