feat(channelserver): implement monthly guild item claim tracking

Players could never claim monthly guild items because the handler
always returned 0x01 (claimed). Now tracks per-character per-type
(standard/HLC/EXC) claim timestamps in the stamps table, comparing
against the current month boundary to determine claim eligibility.

Adds MonthStart() to gametime, extends StampRepo with
GetMonthlyClaimed/SetMonthlyClaimed, and includes schema migration
31-monthly-items.sql.
This commit is contained in:
Houmgaor
2026-02-22 16:46:57 +01:00
parent 302453ce8e
commit 2acbb5d03a
11 changed files with 187 additions and 4 deletions

View File

@@ -663,6 +663,12 @@ type mockStampRepoForItems struct {
exchangeErr error
yearlyResult [2]uint16
yearlyErr error
// Monthly item fields
monthlyClaimed time.Time
monthlyClaimedErr error
monthlySetCalled bool
monthlySetType string
}
func (m *mockStampRepoForItems) GetChecked(_ uint32, _ string) (time.Time, error) {
@@ -696,6 +702,16 @@ func (m *mockStampRepoForItems) Exchange(_ uint32, _ string) (uint16, uint16, er
return m.exchangeResult[0], m.exchangeResult[1], m.exchangeErr
}
func (m *mockStampRepoForItems) GetMonthlyClaimed(_ uint32, _ string) (time.Time, error) {
return m.monthlyClaimed, m.monthlyClaimedErr
}
func (m *mockStampRepoForItems) SetMonthlyClaimed(_ uint32, monthlyType string, _ time.Time) error {
m.monthlySetCalled = true
m.monthlySetType = monthlyType
return nil
}
// --- mockHouseRepoForItems ---
type mockHouseRepoForItems struct {