fix(gameserver): answer UI-gating cmds the 4.6.51 client stalls on
First real-client session (2026-10-07 01:00) showed the client walking and attacking but UI interactions stalling: ~120 CsReq dropped with no reply. - auto-empty responder: any unknown CsReq with a Cmd-enum ScRsp pair now gets an empty ScRsp, except the danger families (GridFight/ChessRogue/ EvolveBuild/ChimeraDuel/Jukebox/CycleScore) which must stay dropped (client Sync(nil) NREs on empty, per the Rust lessons) - GetUnreleasedBlockInfo: the Endgame entry waits on this - 4.6.51 wire is CsReq 4190 -> ScRsp 4112 retcode tag 14 (the Rust build answered 4130, an id this client never sends) - SetClientPaused acked (client pauses itself when opening menus/map) - explicit handlers: TakeQuestReward, GetFirstTalkNpc, QuitBattle, GetMapRotationData (Amphoreus teleport pillars), GetPamSkinData, GetAllServerPrefsData/UpdateServerPrefsData, GetHeartDialInfo, GetPetData, GetShopList - SendRaw now logs (dummy/raw replies were invisible in gameserver.log) - cmdpairs.go: req->rsp id pairs generated from the Cmd enum (865 pairs), stable across message renames - smoke test extended: 4190->4112 and SetClientPaused ack verified
This commit is contained in:
1 parent
580717c3d8
commit
91ee027eb7
8 files changed
+1154
-115
No files matched your search
@@ -0,0 +1,26 @@
|
||||
package gameserver
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
goproto "gac-hkrpg-go/protocol/proto"
|
||||
)
|
||||
|
||||
func TestDispatchMapsRegistered(t *testing.T) {
|
||||
t.Logf("typedHandlers=%d dummyResponses=%d rawHandlers=%d", len(typedHandlers), len(dummyResponses), len(rawHandlers))
|
||||
if len(dummyResponses) == 0 {
|
||||
t.Fatal("dummyResponses is EMPTY - handlers_raw.go init did not run")
|
||||
}
|
||||
if len(rawHandlers) == 0 {
|
||||
t.Fatal("rawHandlers is EMPTY")
|
||||
}
|
||||
if _, ok := dummyResponses[17]; !ok {
|
||||
t.Fatal("GetVideoVersionKeyCsReq (17) not in dummyResponses")
|
||||
}
|
||||
if _, ok := dummyResponses[uint16(goproto.CmdIDByName["GetSecretKeyInfoCsReq"])]; !ok {
|
||||
t.Fatal("GetSecretKeyInfoCsReq not in dummyResponses")
|
||||
}
|
||||
if _, ok := rawHandlers[8115]; !ok {
|
||||
t.Fatal("8115 GetSwitchHandData not in rawHandlers")
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user