mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-25 17:12:52 +01:00
feat(tournament): implement hunting tournament system end-to-end
Wire format for MsgMhfEnterTournamentQuest (0x00D2) derived from mhfo-hd.dll binary analysis (FUN_114f4280). Five new tables back the full lifecycle: schedule, cups, sub-events, player registrations, and run submissions. All six tournament handlers are now DB-driven: - EnumerateRanking: returns active tournament schedule with cups and sub-events; computes phase state byte from timestamps - EnumerateOrder: returns per-event leaderboard ranked by submission time, with SJIS-encoded character and guild names - InfoTournament: exposes tournament detail and player registration state across all three query types - EntryTournament: registers player and returns entry handle used by the client in the subsequent EnterTournamentQuest packet - EnterTournamentQuest: parses the previously-unimplemented packet and records the run in tournament_results - AcquireTournament: stubs rewards (item IDs not yet reversed) Seed data (TournamentDefaults.sql) reproduces tournament #150 cups and sub-events so a fresh install has a working tournament immediately.
This commit is contained in:
@@ -1265,3 +1265,35 @@ func (m *mockCafeRepo) GetBonusItem(_ uint32) (uint32, uint32, error) {
|
||||
return m.bonusItemType, m.bonusItemQty, m.bonusItemErr
|
||||
}
|
||||
func (m *mockCafeRepo) AcceptBonus(_, _ uint32) error { return nil }
|
||||
|
||||
// --- mockTournamentRepo ---
|
||||
|
||||
type mockTournamentRepo struct {
|
||||
active *Tournament
|
||||
activeErr error
|
||||
cups []TournamentCup
|
||||
subEvents []TournamentSubEvent
|
||||
ranks []TournamentRankEntry
|
||||
registerID uint32
|
||||
registerErr error
|
||||
entry *TournamentEntry
|
||||
entryErr error
|
||||
}
|
||||
|
||||
func (m *mockTournamentRepo) GetActive(_ int64) (*Tournament, error) {
|
||||
return m.active, m.activeErr
|
||||
}
|
||||
func (m *mockTournamentRepo) GetCups(_ uint32) ([]TournamentCup, error) { return m.cups, nil }
|
||||
func (m *mockTournamentRepo) GetSubEvents() ([]TournamentSubEvent, error) {
|
||||
return m.subEvents, nil
|
||||
}
|
||||
func (m *mockTournamentRepo) Register(_, _ uint32) (uint32, error) {
|
||||
return m.registerID, m.registerErr
|
||||
}
|
||||
func (m *mockTournamentRepo) GetEntry(_, _ uint32) (*TournamentEntry, error) {
|
||||
return m.entry, m.entryErr
|
||||
}
|
||||
func (m *mockTournamentRepo) SubmitResult(_, _, _, _, _ uint32) error { return nil }
|
||||
func (m *mockTournamentRepo) GetLeaderboard(_ uint32) ([]TournamentRankEntry, error) {
|
||||
return m.ranks, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user