port 2V2-b: GamePhase dispatch consumes the Entergame burst

PythonNetworkStreamPhaseGame/PhaseGameActor/PhaseGameItem/Command,
NetworkActorManager and PythonChat/PythonChatModule are ported verbatim and
dispatched at runtime; the 2V0 chat stub module is removed and initChat()
runs before initnet() as in 40250. InstanceBase, PythonCharacterManager and
GameLib ActorInstance/RaceData/RaceManager compile but stay TODO until
2V2-c/d wire them.

Units not ported yet get their singletons from PythonBoot's GameSingletons
(CPythonApplication member order) and platform/pending stand-ins generated
by platform_stub.py pending; const char* stand-ins return "".

port.login_flow's fake server now sends the CInputLogin::Entergame order
(actor insert, NPC positions, PHASE_GAME, land list, time, channel, greet
notice, ping) and a TraceError observer asserts no unknown packet header.
port.login_live passes against the real server for 10 s of game phase.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-23 18:20:57 +09:00
co-authored by Claude Opus 5.5
parent d16fabf61c
commit 62b6e23bfc
76 changed files with 21087 additions and 753 deletions
@@ -7,7 +7,6 @@
// GameplayModuleConstants.cpp: each module's 40250 constants.
void AddStubConstants_ServerStateChecker(PyObject* poModule);
void AddStubConstants_background(PyObject* poModule);
void AddStubConstants_chat(PyObject* poModule);
void AddStubConstants_chr(PyObject* poModule);
void AddStubConstants_chrmgr(PyObject* poModule);
void AddStubConstants_effect(PyObject* poModule);
@@ -154,70 +153,6 @@ PyMethodDef methods_background[] = {
{ "WarpTest", stub_background_WarpTest, METH_VARARGS },
{ NULL, NULL }
};
// 40250 UserInterface/PythonChatModule.cpp: chat export names.
PyObject* stub_chat_SetChatColor(PyObject*, PyObject*) { return stub_call_named("chat.SetChatColor", Py_BuildNone()); }
PyObject* stub_chat_Clear(PyObject*, PyObject*) { return stub_call_named("chat.Clear", Py_BuildNone()); }
PyObject* stub_chat_Close(PyObject*, PyObject*) { return stub_call_named("chat.Close", Py_BuildNone()); }
PyObject* stub_chat_CreateChatSet(PyObject*, PyObject*) { return stub_call_named("chat.CreateChatSet", Py_BuildValue("i", 0)); }
PyObject* stub_chat_Update(PyObject*, PyObject*) { return stub_call_named("chat.Update", Py_BuildNone()); }
PyObject* stub_chat_Render(PyObject*, PyObject*) { return stub_call_named("chat.Render", Py_BuildNone()); }
PyObject* stub_chat_SetBoardState(PyObject*, PyObject*) { return stub_call_named("chat.SetBoardState", Py_BuildNone()); }
PyObject* stub_chat_SetPosition(PyObject*, PyObject*) { return stub_call_named("chat.SetPosition", Py_BuildNone()); }
PyObject* stub_chat_SetHeight(PyObject*, PyObject*) { return stub_call_named("chat.SetHeight", Py_BuildNone()); }
PyObject* stub_chat_SetStep(PyObject*, PyObject*) { return stub_call_named("chat.SetStep", Py_BuildNone()); }
PyObject* stub_chat_ToggleChatMode(PyObject*, PyObject*) { return stub_call_named("chat.ToggleChatMode", Py_BuildNone()); }
PyObject* stub_chat_EnableChatMode(PyObject*, PyObject*) { return stub_call_named("chat.EnableChatMode", Py_BuildNone()); }
PyObject* stub_chat_DisableChatMode(PyObject*, PyObject*) { return stub_call_named("chat.DisableChatMode", Py_BuildNone()); }
PyObject* stub_chat_SetEndPos(PyObject*, PyObject*) { return stub_call_named("chat.SetEndPos", Py_BuildNone()); }
PyObject* stub_chat_GetLineCount(PyObject*, PyObject*) { return stub_call_named("chat.GetLineCount", Py_BuildValue("i", 0)); }
PyObject* stub_chat_GetVisibleLineCount(PyObject*, PyObject*) { return stub_call_named("chat.GetVisibleLineCount", Py_BuildValue("i", 0)); }
PyObject* stub_chat_GetLineStep(PyObject*, PyObject*) { return stub_call_named("chat.GetLineStep", Py_BuildValue("i", 0)); }
PyObject* stub_chat_AppendChat(PyObject*, PyObject*) { return stub_call_named("chat.AppendChat", Py_BuildNone()); }
PyObject* stub_chat_AppendChatWithDelay(PyObject*, PyObject*) { return stub_call_named("chat.AppendChatWithDelay", Py_BuildNone()); }
PyObject* stub_chat_ArrangeShowingChat(PyObject*, PyObject*) { return stub_call_named("chat.ArrangeShowingChat", Py_BuildNone()); }
PyObject* stub_chat_IgnoreCharacter(PyObject*, PyObject*) { return stub_call_named("chat.IgnoreCharacter", Py_BuildNone()); }
PyObject* stub_chat_IsIgnoreCharacter(PyObject*, PyObject*) { return stub_call_named("chat.IsIgnoreCharacter", Py_BuildNone()); }
PyObject* stub_chat_CreateWhisper(PyObject*, PyObject*) { return stub_call_named("chat.CreateWhisper", Py_BuildNone()); }
PyObject* stub_chat_AppendWhisper(PyObject*, PyObject*) { return stub_call_named("chat.AppendWhisper", Py_BuildNone()); }
PyObject* stub_chat_RenderWhisper(PyObject*, PyObject*) { return stub_call_named("chat.RenderWhisper", Py_BuildNone()); }
PyObject* stub_chat_SetWhisperBoxSize(PyObject*, PyObject*) { return stub_call_named("chat.SetWhisperBoxSize", Py_BuildNone()); }
PyObject* stub_chat_SetWhisperPosition(PyObject*, PyObject*) { return stub_call_named("chat.SetWhisperPosition", Py_BuildNone()); }
PyObject* stub_chat_ClearWhisper(PyObject*, PyObject*) { return stub_call_named("chat.ClearWhisper", Py_BuildNone()); }
PyObject* stub_chat_InitWhisper(PyObject*, PyObject*) { return stub_call_named("chat.InitWhisper", Py_BuildNone()); }
PyObject* stub_chat_GetLinkFromHyperlink(PyObject*, PyObject*) { return stub_call_named("chat.GetLinkFromHyperlink", Py_BuildValue("s", "")); }
PyMethodDef methods_chat[] = {
{ "SetChatColor", stub_chat_SetChatColor, METH_VARARGS },
{ "Clear", stub_chat_Clear, METH_VARARGS },
{ "Close", stub_chat_Close, METH_VARARGS },
{ "CreateChatSet", stub_chat_CreateChatSet, METH_VARARGS },
{ "Update", stub_chat_Update, METH_VARARGS },
{ "Render", stub_chat_Render, METH_VARARGS },
{ "SetBoardState", stub_chat_SetBoardState, METH_VARARGS },
{ "SetPosition", stub_chat_SetPosition, METH_VARARGS },
{ "SetHeight", stub_chat_SetHeight, METH_VARARGS },
{ "SetStep", stub_chat_SetStep, METH_VARARGS },
{ "ToggleChatMode", stub_chat_ToggleChatMode, METH_VARARGS },
{ "EnableChatMode", stub_chat_EnableChatMode, METH_VARARGS },
{ "DisableChatMode", stub_chat_DisableChatMode, METH_VARARGS },
{ "SetEndPos", stub_chat_SetEndPos, METH_VARARGS },
{ "GetLineCount", stub_chat_GetLineCount, METH_VARARGS },
{ "GetVisibleLineCount", stub_chat_GetVisibleLineCount, METH_VARARGS },
{ "GetLineStep", stub_chat_GetLineStep, METH_VARARGS },
{ "AppendChat", stub_chat_AppendChat, METH_VARARGS },
{ "AppendChatWithDelay", stub_chat_AppendChatWithDelay, METH_VARARGS },
{ "ArrangeShowingChat", stub_chat_ArrangeShowingChat, METH_VARARGS },
{ "IgnoreCharacter", stub_chat_IgnoreCharacter, METH_VARARGS },
{ "IsIgnoreCharacter", stub_chat_IsIgnoreCharacter, METH_VARARGS },
{ "CreateWhisper", stub_chat_CreateWhisper, METH_VARARGS },
{ "AppendWhisper", stub_chat_AppendWhisper, METH_VARARGS },
{ "RenderWhisper", stub_chat_RenderWhisper, METH_VARARGS },
{ "SetWhisperBoxSize", stub_chat_SetWhisperBoxSize, METH_VARARGS },
{ "SetWhisperPosition", stub_chat_SetWhisperPosition, METH_VARARGS },
{ "ClearWhisper", stub_chat_ClearWhisper, METH_VARARGS },
{ "InitWhisper", stub_chat_InitWhisper, METH_VARARGS },
{ "GetLinkFromHyperlink", stub_chat_GetLinkFromHyperlink, METH_VARARGS },
{ NULL, NULL }
};
// 40250 UserInterface/PythonCharacterModule.cpp: chr export names.
PyObject* stub_chr_DismountHorse(PyObject*, PyObject*) { return stub_call_named("chr.DismountHorse", Py_BuildNone()); }
PyObject* stub_chr_MountHorse(PyObject*, PyObject*) { return stub_call_named("chr.MountHorse", Py_BuildNone()); }
@@ -1502,11 +1437,6 @@ void init_2v0_gameplay_stubs() {
PyModule_AddIntConstant(module, "__port_stub__", 1);
AddStubConstants_background(module);
}
{
PyObject* module = Py_InitModule("chat", methods_chat);
PyModule_AddIntConstant(module, "__port_stub__", 1);
AddStubConstants_chat(module);
}
{
PyObject* module = Py_InitModule("chr", methods_chr);
PyModule_AddIntConstant(module, "__port_stub__", 1);