2V3-a: walk with the keyboard through the ported player chain

PythonPlayer, PythonPlayerInput{,Keyboard,Mouse}, PythonPlayerEventHandler,
PythonPlayerSkill, PythonPlayerModule and GameType are verbatim copies; the
`player` stub module and the pending PythonPlayer/GameType stand-ins are gone.
Unported callees (CPythonSkill, CItemData, CItemManager, CPythonItem, ...) are
pending stubs. 64-bit fixes: emotion icon handles use Py_BuildPointer, and
PyDict_Next takes Py_ssize_t.

The actor did not move because GrannyUpdateModelMatrix passed the model matrix
through. Walk/run motions use constant root-motion extraction
(AccumulationFlags=AccumulationExtracted, LoopTranslation e.g. (0,-300,0) for
the warrior run, same as the .msa Accumulation). libgr2 now reads both fields
from TrackGroups[0], and the runtime moves by LoopTranslation over each
control's local-clock span, blended by control weight. VDA extraction is not
implemented.

port.login_flow presses DIK_UP; the actor walks more than 100 cm, and the fake
server parses CG packets and sees CG_MOVE FUNC_MOVE, then FUNC_WAIT at the new
position. port.login_live against the real server walked 132 cm.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-23 23:41:31 +09:00
co-authored by Claude Opus 5.5
parent 157f7c3bb4
commit ff0983d3c8
39 changed files with 10170 additions and 2039 deletions
@@ -18,7 +18,6 @@ void AddStubConstants_item(PyObject* poModule);
void AddStubConstants_messenger(PyObject* poModule);
void AddStubConstants_miniMap(PyObject* poModule);
void AddStubConstants_nonplayer(PyObject* poModule);
void AddStubConstants_player(PyObject* poModule);
void AddStubConstants_profiler(PyObject* poModule);
void AddStubConstants_quest(PyObject* poModule);
void AddStubConstants_safebox(PyObject* poModule);
@@ -579,272 +578,6 @@ PyMethodDef methods_nonplayer[] = {
{ "LoadNonPlayerData", stub_nonplayer_LoadNonPlayerData, METH_VARARGS },
{ NULL, NULL }
};
// 40250 UserInterface/PythonPlayerModule.cpp: player export names.
PyObject* stub_player_GetAutoPotionInfo(PyObject*, PyObject*) { return stub_call_named("player.GetAutoPotionInfo", Py_BuildValue("biii", 0, 0, 0, 0)); }
PyObject* stub_player_SetAutoPotionInfo(PyObject*, PyObject*) { return stub_call_named("player.SetAutoPotionInfo", Py_BuildNone()); }
PyObject* stub_player_PickCloseItem(PyObject*, PyObject*) { return stub_call_named("player.PickCloseItem", Py_BuildNone()); }
PyObject* stub_player_SetGameWindow(PyObject*, PyObject*) { return stub_call_named("player.SetGameWindow", Py_BuildNone()); }
PyObject* stub_player_RegisterEffect(PyObject*, PyObject*) { return stub_call_named("player.RegisterEffect", Py_BuildNone()); }
PyObject* stub_player_RegisterCacheEffect(PyObject*, PyObject*) { return stub_call_named("player.RegisterCacheEffect", Py_BuildNone()); }
PyObject* stub_player_SetMouseState(PyObject*, PyObject*) { return stub_call_named("player.SetMouseState", Py_BuildNone()); }
PyObject* stub_player_SetMouseFunc(PyObject*, PyObject*) { return stub_call_named("player.SetMouseFunc", Py_BuildNone()); }
PyObject* stub_player_GetMouseFunc(PyObject*, PyObject*) { return stub_call_named("player.GetMouseFunc", Py_BuildValue("i", 0)); }
PyObject* stub_player_SetMouseMiddleButtonState(PyObject*, PyObject*) { return stub_call_named("player.SetMouseMiddleButtonState", Py_BuildNone()); }
PyObject* stub_player_SetMainCharacterIndex(PyObject*, PyObject*) { return stub_call_named("player.SetMainCharacterIndex", Py_BuildNone()); }
PyObject* stub_player_GetMainCharacterIndex(PyObject*, PyObject*) { return stub_call_named("player.GetMainCharacterIndex", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetMainCharacterName(PyObject*, PyObject*) { return stub_call_named("player.GetMainCharacterName", Py_BuildValue("s", "")); }
PyObject* stub_player_GetMainCharacterPosition(PyObject*, PyObject*) { return stub_call_named("player.GetMainCharacterPosition", Py_BuildValue("fff", 0.0, 0.0, 0.0)); }
PyObject* stub_player_IsMainCharacterIndex(PyObject*, PyObject*) { return stub_call_named("player.IsMainCharacterIndex", Py_BuildValue("i", 0)); }
PyObject* stub_player_CanAttackInstance(PyObject*, PyObject*) { return stub_call_named("player.CanAttackInstance", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsActingEmotion(PyObject*, PyObject*) { return stub_call_named("player.IsActingEmotion", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsPVPInstance(PyObject*, PyObject*) { return stub_call_named("player.IsPVPInstance", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsSameEmpire(PyObject*, PyObject*) { return stub_call_named("player.IsSameEmpire", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsChallengeInstance(PyObject*, PyObject*) { return stub_call_named("player.IsChallengeInstance", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsRevengeInstance(PyObject*, PyObject*) { return stub_call_named("player.IsRevengeInstance", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsCantFightInstance(PyObject*, PyObject*) { return stub_call_named("player.IsCantFightInstance", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetCharacterDistance(PyObject*, PyObject*) { return stub_call_named("player.GetCharacterDistance", Py_BuildValue("f", 0.0)); }
PyObject* stub_player_IsInSafeArea(PyObject*, PyObject*) { return stub_call_named("player.IsInSafeArea", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsMountingHorse(PyObject*, PyObject*) { return stub_call_named("player.IsMountingHorse", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsObserverMode(PyObject*, PyObject*) { return stub_call_named("player.IsObserverMode", Py_BuildValue("i", 0)); }
PyObject* stub_player_ActEmotion(PyObject*, PyObject*) { return stub_call_named("player.ActEmotion", Py_BuildNone()); }
PyObject* stub_player_ShowPlayer(PyObject*, PyObject*) { return stub_call_named("player.ShowPlayer", Py_BuildNone()); }
PyObject* stub_player_HidePlayer(PyObject*, PyObject*) { return stub_call_named("player.HidePlayer", Py_BuildNone()); }
PyObject* stub_player_ComboAttack(PyObject*, PyObject*) { return stub_call_named("player.ComboAttack", Py_BuildNone()); }
PyObject* stub_player_SetAutoCameraRotationSpeed(PyObject*, PyObject*) { return stub_call_named("player.SetAutoCameraRotationSpeed", Py_BuildNone()); }
PyObject* stub_player_SetAttackKeyState(PyObject*, PyObject*) { return stub_call_named("player.SetAttackKeyState", Py_BuildNone()); }
PyObject* stub_player_SetSingleDIKKeyState(PyObject*, PyObject*) { return stub_call_named("player.SetSingleDIKKeyState", Py_BuildNone()); }
PyObject* stub_player_EndKeyWalkingImmediately(PyObject*, PyObject*) { return stub_call_named("player.EndKeyWalkingImmediately", Py_BuildNone()); }
PyObject* stub_player_StartMouseWalking(PyObject*, PyObject*) { return stub_call_named("player.StartMouseWalking", Py_BuildNone()); }
PyObject* stub_player_EndMouseWalking(PyObject*, PyObject*) { return stub_call_named("player.EndMouseWalking", Py_BuildNone()); }
PyObject* stub_player_ResetCameraRotation(PyObject*, PyObject*) { return stub_call_named("player.ResetCameraRotation", Py_BuildNone()); }
PyObject* stub_player_SetQuickCameraMode(PyObject*, PyObject*) { return stub_call_named("player.SetQuickCameraMode", Py_BuildNone()); }
PyObject* stub_player_SetSkill(PyObject*, PyObject*) { return stub_call_named("player.SetSkill", Py_BuildNone()); }
PyObject* stub_player_GetSkillIndex(PyObject*, PyObject*) { return stub_call_named("player.GetSkillIndex", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetSkillSlotIndex(PyObject*, PyObject*) { return stub_call_named("player.GetSkillSlotIndex", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetSkillGrade(PyObject*, PyObject*) { return stub_call_named("player.GetSkillGrade", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetSkillLevel(PyObject*, PyObject*) { return stub_call_named("player.GetSkillLevel", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetSkillCurrentEfficientPercentage(PyObject*, PyObject*) { return stub_call_named("player.GetSkillCurrentEfficientPercentage", Py_BuildValue("f", 0.0)); }
PyObject* stub_player_GetSkillNextEfficientPercentage(PyObject*, PyObject*) { return stub_call_named("player.GetSkillNextEfficientPercentage", Py_BuildValue("f", 0.0)); }
PyObject* stub_player_ClickSkillSlot(PyObject*, PyObject*) { return stub_call_named("player.ClickSkillSlot", Py_BuildNone()); }
PyObject* stub_player_ChangeCurrentSkillNumberOnly(PyObject*, PyObject*) { return stub_call_named("player.ChangeCurrentSkillNumberOnly", Py_BuildNone()); }
PyObject* stub_player_ClearSkillDict(PyObject*, PyObject*) { return stub_call_named("player.ClearSkillDict", Py_BuildNone()); }
PyObject* stub_player_GetItemIndex(PyObject*, PyObject*) { return stub_call_named("player.GetItemIndex", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetItemFlags(PyObject*, PyObject*) { return stub_call_named("player.GetItemFlags", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetItemCount(PyObject*, PyObject*) { return stub_call_named("player.GetItemCount", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetItemCountByVnum(PyObject*, PyObject*) { return stub_call_named("player.GetItemCountByVnum", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetItemMetinSocket(PyObject*, PyObject*) { return stub_call_named("player.GetItemMetinSocket", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetItemAttribute(PyObject*, PyObject*) { return stub_call_named("player.GetItemAttribute", Py_BuildValue("ii", 0, 0)); }
PyObject* stub_player_GetItemUnbindTime(PyObject*, PyObject*) { return stub_call_named("player.GetItemUnbindTime", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetISellItemPrice(PyObject*, PyObject*) { return stub_call_named("player.GetISellItemPrice", Py_BuildValue("i", 0)); }
PyObject* stub_player_MoveItem(PyObject*, PyObject*) { return stub_call_named("player.MoveItem", Py_BuildNone()); }
PyObject* stub_player_SendClickItemPacket(PyObject*, PyObject*) { return stub_call_named("player.SendClickItemPacket", Py_BuildNone()); }
PyObject* stub_player_GetName(PyObject*, PyObject*) { return stub_call_named("player.GetName", Py_BuildValue("s", "")); }
PyObject* stub_player_GetJob(PyObject*, PyObject*) { return stub_call_named("player.GetJob", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetRace(PyObject*, PyObject*) { return stub_call_named("player.GetRace", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetPlayTime(PyObject*, PyObject*) { return stub_call_named("player.GetPlayTime", Py_BuildValue("i", 0)); }
PyObject* stub_player_SetPlayTime(PyObject*, PyObject*) { return stub_call_named("player.SetPlayTime", Py_BuildNone()); }
PyObject* stub_player_IsSkillCoolTime(PyObject*, PyObject*) { return stub_call_named("player.IsSkillCoolTime", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetSkillCoolTime(PyObject*, PyObject*) { return stub_call_named("player.GetSkillCoolTime", Py_BuildValue("ff", 0.0, 0.0)); }
PyObject* stub_player_IsSkillActive(PyObject*, PyObject*) { return stub_call_named("player.IsSkillActive", Py_BuildValue("i", 0)); }
PyObject* stub_player_UseGuildSkill(PyObject*, PyObject*) { return stub_call_named("player.UseGuildSkill", Py_BuildNone()); }
PyObject* stub_player_AffectIndexToSkillIndex(PyObject*, PyObject*) { return stub_call_named("player.AffectIndexToSkillIndex", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetEXP(PyObject*, PyObject*) { return stub_call_named("player.GetEXP", Py_BuildValue("l", 0L)); }
PyObject* stub_player_GetStatus(PyObject*, PyObject*) { return stub_call_named("player.GetStatus", Py_BuildValue("i", 0)); }
PyObject* stub_player_SetStatus(PyObject*, PyObject*) { return stub_call_named("player.SetStatus", Py_BuildNone()); }
PyObject* stub_player_GetElk(PyObject*, PyObject*) { return stub_call_named("player.GetElk", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetMoney(PyObject*, PyObject*) { return stub_call_named("player.GetMoney", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetGuildID(PyObject*, PyObject*) { return stub_call_named("player.GetGuildID", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetGuildName(PyObject*, PyObject*) { return stub_call_named("player.GetGuildName", Py_BuildValue("s", "")); }
PyObject* stub_player_GetAlignmentData(PyObject*, PyObject*) { return stub_call_named("player.GetAlignmentData", Py_BuildValue("ii", 0, 0)); }
PyObject* stub_player_RequestAddLocalQuickSlot(PyObject*, PyObject*) { return stub_call_named("player.RequestAddLocalQuickSlot", Py_BuildNone()); }
PyObject* stub_player_RequestAddToEmptyLocalQuickSlot(PyObject*, PyObject*) { return stub_call_named("player.RequestAddToEmptyLocalQuickSlot", Py_BuildNone()); }
PyObject* stub_player_RequestDeleteGlobalQuickSlot(PyObject*, PyObject*) { return stub_call_named("player.RequestDeleteGlobalQuickSlot", Py_BuildNone()); }
PyObject* stub_player_RequestMoveGlobalQuickSlotToLocalQuickSlot(PyObject*, PyObject*) { return stub_call_named("player.RequestMoveGlobalQuickSlotToLocalQuickSlot", Py_BuildNone()); }
PyObject* stub_player_RequestUseLocalQuickSlot(PyObject*, PyObject*) { return stub_call_named("player.RequestUseLocalQuickSlot", Py_BuildNone()); }
PyObject* stub_player_LocalQuickSlotIndexToGlobalQuickSlotIndex(PyObject*, PyObject*) { return stub_call_named("player.LocalQuickSlotIndexToGlobalQuickSlotIndex", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetQuickPage(PyObject*, PyObject*) { return stub_call_named("player.GetQuickPage", Py_BuildValue("i", 0)); }
PyObject* stub_player_SetQuickPage(PyObject*, PyObject*) { return stub_call_named("player.SetQuickPage", Py_BuildNone()); }
PyObject* stub_player_GetLocalQuickSlot(PyObject*, PyObject*) { return stub_call_named("player.GetLocalQuickSlot", Py_BuildValue("ii", 0, 0)); }
PyObject* stub_player_GetGlobalQuickSlot(PyObject*, PyObject*) { return stub_call_named("player.GetGlobalQuickSlot", Py_BuildValue("ii", 0, 0)); }
PyObject* stub_player_RemoveQuickSlotByValue(PyObject*, PyObject*) { return stub_call_named("player.RemoveQuickSlotByValue", Py_BuildNone()); }
PyObject* stub_player_isItem(PyObject*, PyObject*) { return stub_call_named("player.isItem", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsEquipmentSlot(PyObject*, PyObject*) { return stub_call_named("player.IsEquipmentSlot", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsDSEquipmentSlot(PyObject*, PyObject*) { return stub_call_named("player.IsDSEquipmentSlot", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsCostumeSlot(PyObject*, PyObject*) { return stub_call_named("player.IsCostumeSlot", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsValuableItem(PyObject*, PyObject*) { return stub_call_named("player.IsValuableItem", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsOpenPrivateShop(PyObject*, PyObject*) { return stub_call_named("player.IsOpenPrivateShop", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsBeltInventorySlot(PyObject*, PyObject*) { return stub_call_named("player.IsBeltInventorySlot", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsEquippingBelt(PyObject*, PyObject*) { return stub_call_named("player.IsEquippingBelt", Py_BuildValue("b", 0)); }
PyObject* stub_player_IsAvailableBeltInventoryCell(PyObject*, PyObject*) { return stub_call_named("player.IsAvailableBeltInventoryCell", Py_BuildValue("b", 0)); }
PyObject* stub_player_GetItemGrade(PyObject*, PyObject*) { return stub_call_named("player.GetItemGrade", Py_BuildValue("i", 0)); }
PyObject* stub_player_CanRefine(PyObject*, PyObject*) { return stub_call_named("player.CanRefine", Py_BuildValue("i", 0)); }
PyObject* stub_player_CanDetach(PyObject*, PyObject*) { return stub_call_named("player.CanDetach", Py_BuildValue("i", 0)); }
PyObject* stub_player_CanUnlock(PyObject*, PyObject*) { return stub_call_named("player.CanUnlock", Py_BuildValue("i", 0)); }
PyObject* stub_player_CanAttachMetin(PyObject*, PyObject*) { return stub_call_named("player.CanAttachMetin", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsRefineGradeScroll(PyObject*, PyObject*) { return stub_call_named("player.IsRefineGradeScroll", Py_BuildValue("i", 0)); }
PyObject* stub_player_ClearTarget(PyObject*, PyObject*) { return stub_call_named("player.ClearTarget", Py_BuildNone()); }
PyObject* stub_player_SetTarget(PyObject*, PyObject*) { return stub_call_named("player.SetTarget", Py_BuildNone()); }
PyObject* stub_player_OpenCharacterMenu(PyObject*, PyObject*) { return stub_call_named("player.OpenCharacterMenu", Py_BuildNone()); }
PyObject* stub_player_Update(PyObject*, PyObject*) { return stub_call_named("player.Update", Py_BuildNone()); }
PyObject* stub_player_Render(PyObject*, PyObject*) { return stub_call_named("player.Render", Py_BuildNone()); }
PyObject* stub_player_Clear(PyObject*, PyObject*) { return stub_call_named("player.Clear", Py_BuildNone()); }
PyObject* stub_player_IsPartyMember(PyObject*, PyObject*) { return stub_call_named("player.IsPartyMember", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsPartyLeader(PyObject*, PyObject*) { return stub_call_named("player.IsPartyLeader", Py_BuildValue("i", 0)); }
PyObject* stub_player_IsPartyLeaderByPID(PyObject*, PyObject*) { return stub_call_named("player.IsPartyLeaderByPID", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetPartyMemberHPPercentage(PyObject*, PyObject*) { return stub_call_named("player.GetPartyMemberHPPercentage", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetPartyMemberState(PyObject*, PyObject*) { return stub_call_named("player.GetPartyMemberState", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetPartyMemberAffects(PyObject*, PyObject*) { return stub_call_named("player.GetPartyMemberAffects", Py_BuildValue("iiiiiii", 0, 0, 0, 0, 0, 0, 0)); }
PyObject* stub_player_RemovePartyMember(PyObject*, PyObject*) { return stub_call_named("player.RemovePartyMember", Py_BuildNone()); }
PyObject* stub_player_ExitParty(PyObject*, PyObject*) { return stub_call_named("player.ExitParty", Py_BuildNone()); }
PyObject* stub_player_GetPKMode(PyObject*, PyObject*) { return stub_call_named("player.GetPKMode", Py_BuildValue("i", 0)); }
PyObject* stub_player_HasMobilePhoneNumber(PyObject*, PyObject*) { return stub_call_named("player.HasMobilePhoneNumber", Py_BuildValue("i", 0)); }
PyObject* stub_player_RegisterEmotionIcon(PyObject*, PyObject*) { return stub_call_named("player.RegisterEmotionIcon", Py_BuildNone()); }
PyObject* stub_player_GetEmotionIconImage(PyObject*, PyObject*) { return stub_call_named("player.GetEmotionIconImage", Py_BuildValue("i", 0)); }
PyObject* stub_player_SetWeaponAttackBonusFlag(PyObject*, PyObject*) { return stub_call_named("player.SetWeaponAttackBonusFlag", Py_BuildNone()); }
PyObject* stub_player_ToggleCoolTime(PyObject*, PyObject*) { return stub_call_named("player.ToggleCoolTime", Py_BuildValue("i", 0)); }
PyObject* stub_player_ToggleLevelLimit(PyObject*, PyObject*) { return stub_call_named("player.ToggleLevelLimit", Py_BuildValue("i", 0)); }
PyObject* stub_player_GetTargetVID(PyObject*, PyObject*) { return stub_call_named("player.GetTargetVID", Py_BuildValue("i", 0)); }
PyObject* stub_player_SetItemData(PyObject*, PyObject*) { return stub_call_named("player.SetItemData", Py_BuildNone()); }
PyObject* stub_player_SetItemMetinSocket(PyObject*, PyObject*) { return stub_call_named("player.SetItemMetinSocket", Py_BuildNone()); }
PyObject* stub_player_SetItemAttribute(PyObject*, PyObject*) { return stub_call_named("player.SetItemAttribute", Py_BuildNone()); }
PyObject* stub_player_SetItemCount(PyObject*, PyObject*) { return stub_call_named("player.SetItemCount", Py_BuildNone()); }
PyObject* stub_player_GetItemLink(PyObject*, PyObject*) { return stub_call_named("player.GetItemLink", Py_BuildValue("s", "")); }
PyObject* stub_player_SlotTypeToInvenType(PyObject*, PyObject*) { return stub_call_named("player.SlotTypeToInvenType", Py_BuildValue("i", 0)); }
PyObject* stub_player_SendDragonSoulRefine(PyObject*, PyObject*) { return stub_call_named("player.SendDragonSoulRefine", Py_BuildNone()); }
PyMethodDef methods_player[] = {
{ "GetAutoPotionInfo", stub_player_GetAutoPotionInfo, METH_VARARGS },
{ "SetAutoPotionInfo", stub_player_SetAutoPotionInfo, METH_VARARGS },
{ "PickCloseItem", stub_player_PickCloseItem, METH_VARARGS },
{ "SetGameWindow", stub_player_SetGameWindow, METH_VARARGS },
{ "RegisterEffect", stub_player_RegisterEffect, METH_VARARGS },
{ "RegisterCacheEffect", stub_player_RegisterCacheEffect, METH_VARARGS },
{ "SetMouseState", stub_player_SetMouseState, METH_VARARGS },
{ "SetMouseFunc", stub_player_SetMouseFunc, METH_VARARGS },
{ "GetMouseFunc", stub_player_GetMouseFunc, METH_VARARGS },
{ "SetMouseMiddleButtonState", stub_player_SetMouseMiddleButtonState, METH_VARARGS },
{ "SetMainCharacterIndex", stub_player_SetMainCharacterIndex, METH_VARARGS },
{ "GetMainCharacterIndex", stub_player_GetMainCharacterIndex, METH_VARARGS },
{ "GetMainCharacterName", stub_player_GetMainCharacterName, METH_VARARGS },
{ "GetMainCharacterPosition", stub_player_GetMainCharacterPosition, METH_VARARGS },
{ "IsMainCharacterIndex", stub_player_IsMainCharacterIndex, METH_VARARGS },
{ "CanAttackInstance", stub_player_CanAttackInstance, METH_VARARGS },
{ "IsActingEmotion", stub_player_IsActingEmotion, METH_VARARGS },
{ "IsPVPInstance", stub_player_IsPVPInstance, METH_VARARGS },
{ "IsSameEmpire", stub_player_IsSameEmpire, METH_VARARGS },
{ "IsChallengeInstance", stub_player_IsChallengeInstance, METH_VARARGS },
{ "IsRevengeInstance", stub_player_IsRevengeInstance, METH_VARARGS },
{ "IsCantFightInstance", stub_player_IsCantFightInstance, METH_VARARGS },
{ "GetCharacterDistance", stub_player_GetCharacterDistance, METH_VARARGS },
{ "IsInSafeArea", stub_player_IsInSafeArea, METH_VARARGS },
{ "IsMountingHorse", stub_player_IsMountingHorse, METH_VARARGS },
{ "IsObserverMode", stub_player_IsObserverMode, METH_VARARGS },
{ "ActEmotion", stub_player_ActEmotion, METH_VARARGS },
{ "ShowPlayer", stub_player_ShowPlayer, METH_VARARGS },
{ "HidePlayer", stub_player_HidePlayer, METH_VARARGS },
{ "ComboAttack", stub_player_ComboAttack, METH_VARARGS },
{ "SetAutoCameraRotationSpeed", stub_player_SetAutoCameraRotationSpeed, METH_VARARGS },
{ "SetAttackKeyState", stub_player_SetAttackKeyState, METH_VARARGS },
{ "SetSingleDIKKeyState", stub_player_SetSingleDIKKeyState, METH_VARARGS },
{ "EndKeyWalkingImmediately", stub_player_EndKeyWalkingImmediately, METH_VARARGS },
{ "StartMouseWalking", stub_player_StartMouseWalking, METH_VARARGS },
{ "EndMouseWalking", stub_player_EndMouseWalking, METH_VARARGS },
{ "ResetCameraRotation", stub_player_ResetCameraRotation, METH_VARARGS },
{ "SetQuickCameraMode", stub_player_SetQuickCameraMode, METH_VARARGS },
{ "SetSkill", stub_player_SetSkill, METH_VARARGS },
{ "GetSkillIndex", stub_player_GetSkillIndex, METH_VARARGS },
{ "GetSkillSlotIndex", stub_player_GetSkillSlotIndex, METH_VARARGS },
{ "GetSkillGrade", stub_player_GetSkillGrade, METH_VARARGS },
{ "GetSkillLevel", stub_player_GetSkillLevel, METH_VARARGS },
{ "GetSkillCurrentEfficientPercentage", stub_player_GetSkillCurrentEfficientPercentage, METH_VARARGS },
{ "GetSkillNextEfficientPercentage", stub_player_GetSkillNextEfficientPercentage, METH_VARARGS },
{ "ClickSkillSlot", stub_player_ClickSkillSlot, METH_VARARGS },
{ "ChangeCurrentSkillNumberOnly", stub_player_ChangeCurrentSkillNumberOnly, METH_VARARGS },
{ "ClearSkillDict", stub_player_ClearSkillDict, METH_VARARGS },
{ "GetItemIndex", stub_player_GetItemIndex, METH_VARARGS },
{ "GetItemFlags", stub_player_GetItemFlags, METH_VARARGS },
{ "GetItemCount", stub_player_GetItemCount, METH_VARARGS },
{ "GetItemCountByVnum", stub_player_GetItemCountByVnum, METH_VARARGS },
{ "GetItemMetinSocket", stub_player_GetItemMetinSocket, METH_VARARGS },
{ "GetItemAttribute", stub_player_GetItemAttribute, METH_VARARGS },
{ "GetItemUnbindTime", stub_player_GetItemUnbindTime, METH_VARARGS },
{ "GetISellItemPrice", stub_player_GetISellItemPrice, METH_VARARGS },
{ "MoveItem", stub_player_MoveItem, METH_VARARGS },
{ "SendClickItemPacket", stub_player_SendClickItemPacket, METH_VARARGS },
{ "GetName", stub_player_GetName, METH_VARARGS },
{ "GetJob", stub_player_GetJob, METH_VARARGS },
{ "GetRace", stub_player_GetRace, METH_VARARGS },
{ "GetPlayTime", stub_player_GetPlayTime, METH_VARARGS },
{ "SetPlayTime", stub_player_SetPlayTime, METH_VARARGS },
{ "IsSkillCoolTime", stub_player_IsSkillCoolTime, METH_VARARGS },
{ "GetSkillCoolTime", stub_player_GetSkillCoolTime, METH_VARARGS },
{ "IsSkillActive", stub_player_IsSkillActive, METH_VARARGS },
{ "UseGuildSkill", stub_player_UseGuildSkill, METH_VARARGS },
{ "AffectIndexToSkillIndex", stub_player_AffectIndexToSkillIndex, METH_VARARGS },
{ "GetEXP", stub_player_GetEXP, METH_VARARGS },
{ "GetStatus", stub_player_GetStatus, METH_VARARGS },
{ "SetStatus", stub_player_SetStatus, METH_VARARGS },
{ "GetElk", stub_player_GetElk, METH_VARARGS },
{ "GetMoney", stub_player_GetMoney, METH_VARARGS },
{ "GetGuildID", stub_player_GetGuildID, METH_VARARGS },
{ "GetGuildName", stub_player_GetGuildName, METH_VARARGS },
{ "GetAlignmentData", stub_player_GetAlignmentData, METH_VARARGS },
{ "RequestAddLocalQuickSlot", stub_player_RequestAddLocalQuickSlot, METH_VARARGS },
{ "RequestAddToEmptyLocalQuickSlot", stub_player_RequestAddToEmptyLocalQuickSlot, METH_VARARGS },
{ "RequestDeleteGlobalQuickSlot", stub_player_RequestDeleteGlobalQuickSlot, METH_VARARGS },
{ "RequestMoveGlobalQuickSlotToLocalQuickSlot", stub_player_RequestMoveGlobalQuickSlotToLocalQuickSlot, METH_VARARGS },
{ "RequestUseLocalQuickSlot", stub_player_RequestUseLocalQuickSlot, METH_VARARGS },
{ "LocalQuickSlotIndexToGlobalQuickSlotIndex", stub_player_LocalQuickSlotIndexToGlobalQuickSlotIndex, METH_VARARGS },
{ "GetQuickPage", stub_player_GetQuickPage, METH_VARARGS },
{ "SetQuickPage", stub_player_SetQuickPage, METH_VARARGS },
{ "GetLocalQuickSlot", stub_player_GetLocalQuickSlot, METH_VARARGS },
{ "GetGlobalQuickSlot", stub_player_GetGlobalQuickSlot, METH_VARARGS },
{ "RemoveQuickSlotByValue", stub_player_RemoveQuickSlotByValue, METH_VARARGS },
{ "isItem", stub_player_isItem, METH_VARARGS },
{ "IsEquipmentSlot", stub_player_IsEquipmentSlot, METH_VARARGS },
{ "IsDSEquipmentSlot", stub_player_IsDSEquipmentSlot, METH_VARARGS },
{ "IsCostumeSlot", stub_player_IsCostumeSlot, METH_VARARGS },
{ "IsValuableItem", stub_player_IsValuableItem, METH_VARARGS },
{ "IsOpenPrivateShop", stub_player_IsOpenPrivateShop, METH_VARARGS },
{ "IsBeltInventorySlot", stub_player_IsBeltInventorySlot, METH_VARARGS },
{ "IsEquippingBelt", stub_player_IsEquippingBelt, METH_VARARGS },
{ "IsAvailableBeltInventoryCell", stub_player_IsAvailableBeltInventoryCell, METH_VARARGS },
{ "GetItemGrade", stub_player_GetItemGrade, METH_VARARGS },
{ "CanRefine", stub_player_CanRefine, METH_VARARGS },
{ "CanDetach", stub_player_CanDetach, METH_VARARGS },
{ "CanUnlock", stub_player_CanUnlock, METH_VARARGS },
{ "CanAttachMetin", stub_player_CanAttachMetin, METH_VARARGS },
{ "IsRefineGradeScroll", stub_player_IsRefineGradeScroll, METH_VARARGS },
{ "ClearTarget", stub_player_ClearTarget, METH_VARARGS },
{ "SetTarget", stub_player_SetTarget, METH_VARARGS },
{ "OpenCharacterMenu", stub_player_OpenCharacterMenu, METH_VARARGS },
{ "Update", stub_player_Update, METH_VARARGS },
{ "Render", stub_player_Render, METH_VARARGS },
{ "Clear", stub_player_Clear, METH_VARARGS },
{ "IsPartyMember", stub_player_IsPartyMember, METH_VARARGS },
{ "IsPartyLeader", stub_player_IsPartyLeader, METH_VARARGS },
{ "IsPartyLeaderByPID", stub_player_IsPartyLeaderByPID, METH_VARARGS },
{ "GetPartyMemberHPPercentage", stub_player_GetPartyMemberHPPercentage, METH_VARARGS },
{ "GetPartyMemberState", stub_player_GetPartyMemberState, METH_VARARGS },
{ "GetPartyMemberAffects", stub_player_GetPartyMemberAffects, METH_VARARGS },
{ "RemovePartyMember", stub_player_RemovePartyMember, METH_VARARGS },
{ "ExitParty", stub_player_ExitParty, METH_VARARGS },
{ "GetPKMode", stub_player_GetPKMode, METH_VARARGS },
{ "HasMobilePhoneNumber", stub_player_HasMobilePhoneNumber, METH_VARARGS },
{ "RegisterEmotionIcon", stub_player_RegisterEmotionIcon, METH_VARARGS },
{ "GetEmotionIconImage", stub_player_GetEmotionIconImage, METH_VARARGS },
{ "SetWeaponAttackBonusFlag", stub_player_SetWeaponAttackBonusFlag, METH_VARARGS },
{ "ToggleCoolTime", stub_player_ToggleCoolTime, METH_VARARGS },
{ "ToggleLevelLimit", stub_player_ToggleLevelLimit, METH_VARARGS },
{ "GetTargetVID", stub_player_GetTargetVID, METH_VARARGS },
{ "SetItemData", stub_player_SetItemData, METH_VARARGS },
{ "SetItemMetinSocket", stub_player_SetItemMetinSocket, METH_VARARGS },
{ "SetItemAttribute", stub_player_SetItemAttribute, METH_VARARGS },
{ "SetItemCount", stub_player_SetItemCount, METH_VARARGS },
{ "GetItemLink", stub_player_GetItemLink, METH_VARARGS },
{ "SlotTypeToInvenType", stub_player_SlotTypeToInvenType, METH_VARARGS },
{ "SendDragonSoulRefine", stub_player_SendDragonSoulRefine, METH_VARARGS },
{ NULL, NULL }
};
// 40250 UserInterface/PythonProfilerModule.cpp: profiler export names.
PyObject* stub_profiler_Push(PyObject*, PyObject*) { return stub_call_named("profiler.Push", Py_BuildNone()); }
PyObject* stub_profiler_Pop(PyObject*, PyObject*) { return stub_call_named("profiler.Pop", Py_BuildNone()); }
@@ -1252,11 +985,6 @@ void init_2v0_gameplay_stubs() {
PyModule_AddIntConstant(module, "__port_stub__", 1);
AddStubConstants_nonplayer(module);
}
{
PyObject* module = Py_InitModule("player", methods_player);
PyModule_AddIntConstant(module, "__port_stub__", 1);
AddStubConstants_player(module);
}
{
PyObject* module = Py_InitModule("profiler", methods_profiler);
PyModule_AddIntConstant(module, "__port_stub__", 1);