mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-26 01:23:13 +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:
@@ -33,16 +33,18 @@ func TestHandlerMsgMhfSexChanger(t *testing.T) {
|
||||
|
||||
func TestHandlerMsgMhfEnterTournamentQuest(t *testing.T) {
|
||||
server := createMockServer()
|
||||
server.tournamentRepo = &mockTournamentRepo{}
|
||||
session := createMockSession(1, server)
|
||||
|
||||
// Should not panic with nil packet (empty handler)
|
||||
pkt := &mhfpacket.MsgMhfEnterTournamentQuest{AckHandle: 1}
|
||||
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
t.Errorf("handleMsgMhfEnterTournamentQuest panicked: %v", r)
|
||||
}
|
||||
}()
|
||||
|
||||
handleMsgMhfEnterTournamentQuest(session, nil)
|
||||
handleMsgMhfEnterTournamentQuest(session, pkt)
|
||||
}
|
||||
|
||||
func TestHandlerMsgMhfGetUdBonusQuestInfo(t *testing.T) {
|
||||
@@ -295,7 +297,6 @@ func TestEmptyHandlers_NoDb(t *testing.T) {
|
||||
{"handleMsgSysSetStatus", handleMsgSysSetStatus},
|
||||
{"handleMsgSysEcho", handleMsgSysEcho},
|
||||
{"handleMsgMhfUseUdShopCoin", handleMsgMhfUseUdShopCoin},
|
||||
{"handleMsgMhfEnterTournamentQuest", handleMsgMhfEnterTournamentQuest},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
|
||||
Reference in New Issue
Block a user