Severity: HIGH
File: src/IncomeSystem.lua:280-302 + src/Settings.lua:84-88
Multiplayer: No
Fix Complexity: SIMPLE
Confidence: 100% (source-verified)
Description
checkHourly() pays catch-up for gap between self.lastHour and currentHour (clamped to 24). setPayMode() does not reset the inactive mode's timer state.
Impact
After N days in Daily mode, switching to Hourly triggers catch-up: (3 days * 24) + (15 - 10) = 77, clamped to 24. At Easy/10x ($50,000/interval), player receives $1,200,000 instantly.
Fix
Reset both lastHour and lastDay to current values in setPayMode().
Source: Consolidated Bug Review 2026-07-26, IM-001
Severity: HIGH
File:
src/IncomeSystem.lua:280-302+src/Settings.lua:84-88Multiplayer: No
Fix Complexity: SIMPLE
Confidence: 100% (source-verified)
Description
checkHourly()pays catch-up for gap betweenself.lastHourandcurrentHour(clamped to 24).setPayMode()does not reset the inactive mode's timer state.Impact
After N days in Daily mode, switching to Hourly triggers catch-up:
(3 days * 24) + (15 - 10) = 77, clamped to 24. At Easy/10x ($50,000/interval), player receives $1,200,000 instantly.Fix
Reset both
lastHourandlastDayto current values insetPayMode().Source: Consolidated Bug Review 2026-07-26, IM-001