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
@@ -0,0 +1,800 @@
{
"reference": "UserInterface/PythonPlayerModule.cpp",
"reference_sha256": "15416546cb584c518de5b984a7dc6ca3f1af1a093b028e834edb7e9c087a1c63",
"priority": "P4",
"contracts": [],
"functions": {
"playerPickCloseItem": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerPickCloseItem"
]
},
"playerSetGameWindow": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetGameWindow"
]
},
"playerSetQuickCameraMode": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetQuickCameraMode"
]
},
"playerSetMainCharacterIndex": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetMainCharacterIndex"
]
},
"playerGetMainCharacterIndex": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetMainCharacterIndex"
]
},
"playerGetMainCharacterName": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetMainCharacterName"
]
},
"playerGetMainCharacterPosition": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetMainCharacterPosition"
]
},
"playerIsMainCharacterIndex": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsMainCharacterIndex"
]
},
"playerCanAttackInstance": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerCanAttackInstance"
]
},
"playerIsActingEmotion": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsActingEmotion"
]
},
"playerIsPVPInstance": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsPVPInstance"
]
},
"playerIsSameEmpire": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsSameEmpire"
]
},
"playerIsChallengeInstance": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsChallengeInstance"
]
},
"playerIsRevengeInstance": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsRevengeInstance"
]
},
"playerIsCantFightInstance": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsCantFightInstance"
]
},
"playerGetCharacterDistance": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetCharacterDistance"
]
},
"playerIsInSafeArea": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsInSafeArea"
]
},
"playerIsMountingHorse": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsMountingHorse"
]
},
"playerIsObserverMode": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsObserverMode"
]
},
"playerActEmotion": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerActEmotion"
]
},
"playerShowPlayer": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerShowPlayer"
]
},
"playerHidePlayer": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerHidePlayer"
]
},
"playerComboAttack": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerComboAttack"
]
},
"playerRegisterEffect": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerRegisterEffect"
]
},
"playerRegisterCacheEffect": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerRegisterCacheEffect"
]
},
"playerSetAttackKeyState": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetAttackKeyState"
]
},
"playerSetSingleDIKKeyState": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetSingleDIKKeyState"
]
},
"playerEndKeyWalkingImmediately": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerEndKeyWalkingImmediately"
]
},
"playerStartMouseWalking": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerStartMouseWalking"
]
},
"playerEndMouseWalking": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerEndMouseWalking"
]
},
"playerResetCameraRotation": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerResetCameraRotation"
]
},
"playerSetAutoCameraRotationSpeed": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetAutoCameraRotationSpeed"
]
},
"playerSetMouseState": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetMouseState"
]
},
"playerSetMouseFunc": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetMouseFunc"
]
},
"playerGetMouseFunc": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetMouseFunc"
]
},
"playerSetMouseMiddleButtonState": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetMouseMiddleButtonState"
]
},
"playerGetName": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetName"
]
},
"playerGetRace": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetRace"
]
},
"playerGetJob": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetJob"
]
},
"playerGetPlayTime": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetPlayTime"
]
},
"playerSetPlayTime": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetPlayTime"
]
},
"playerIsSkillCoolTime": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsSkillCoolTime"
]
},
"playerGetSkillCoolTime": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetSkillCoolTime"
]
},
"playerIsSkillActive": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsSkillActive"
]
},
"playerUseGuildSkill": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerUseGuildSkill"
]
},
"playerAffectIndexToSkillIndex": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerAffectIndexToSkillIndex"
]
},
"playerGetEXP": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetEXP"
]
},
"playerGetStatus": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetStatus"
]
},
"playerSetStatus": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetStatus"
]
},
"playerGetElk": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetElk"
]
},
"playerGetGuildID": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetGuildID"
]
},
"playerGetGuildName": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetGuildName"
]
},
"playerGetAlignmentData": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetAlignmentData"
]
},
"playerSetSkill": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetSkill"
]
},
"playerGetSkillIndex": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetSkillIndex"
]
},
"playerGetSkillSlotIndex": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetSkillSlotIndex"
]
},
"playerGetSkillGrade": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetSkillGrade"
]
},
"playerGetSkillLevel": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetSkillLevel"
]
},
"playerGetSkillCurrentEfficientPercentage": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetSkillCurrentEfficientPercentage"
]
},
"playerGetSkillNextEfficientPercentage": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetSkillNextEfficientPercentage"
]
},
"playerClickSkillSlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerClickSkillSlot"
]
},
"playerChangeCurrentSkillNumberOnly": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerChangeCurrentSkillNumberOnly"
]
},
"playerClearSkillDict": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerClearSkillDict"
]
},
"playerMoveItem": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerMoveItem"
]
},
"playerSendClickItemPacket": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSendClickItemPacket"
]
},
"playerGetItemIndex": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetItemIndex"
]
},
"playerGetItemFlags": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetItemFlags"
]
},
"playerGetItemCount": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetItemCount"
]
},
"playerSetItemCount": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetItemCount"
]
},
"playerGetItemCountByVnum": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetItemCountByVnum"
]
},
"playerGetItemMetinSocket": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetItemMetinSocket"
]
},
"playerGetItemAttribute": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetItemAttribute"
]
},
"playerGetItemLink": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetItemLink"
]
},
"playerGetISellItemPrice": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetISellItemPrice"
]
},
"playerGetQuickPage": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetQuickPage"
]
},
"playerSetQuickPage": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetQuickPage"
]
},
"playerLocalQuickSlotIndexToGlobalQuickSlotIndex": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerLocalQuickSlotIndexToGlobalQuickSlotIndex"
]
},
"playerGetLocalQuickSlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetLocalQuickSlot"
]
},
"playerGetGlobalQuickSlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetGlobalQuickSlot"
]
},
"playerRequestAddLocalQuickSlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerRequestAddLocalQuickSlot"
]
},
"playerRequestAddToEmptyLocalQuickSlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerRequestAddToEmptyLocalQuickSlot"
]
},
"playerRequestDeleteGlobalQuickSlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerRequestDeleteGlobalQuickSlot"
]
},
"playerRequestMoveGlobalQuickSlotToLocalQuickSlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerRequestMoveGlobalQuickSlotToLocalQuickSlot"
]
},
"playerRequestUseLocalQuickSlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerRequestUseLocalQuickSlot"
]
},
"playerRemoveQuickSlotByValue": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerRemoveQuickSlotByValue"
]
},
"playerisItem": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerisItem"
]
},
"playerIsBeltInventorySlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsBeltInventorySlot"
]
},
"playerIsEquipmentSlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsEquipmentSlot"
]
},
"playerIsDSEquipmentSlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsDSEquipmentSlot"
]
},
"playerIsCostumeSlot": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsCostumeSlot"
]
},
"playerIsOpenPrivateShop": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsOpenPrivateShop"
]
},
"playerIsValuableItem": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsValuableItem"
]
},
"GetItemGrade": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:GetItemGrade"
]
},
"playerGetItemGrade": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetItemGrade"
]
},
"playerGetItemUnbindTime": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetItemUnbindTime"
]
},
"playerCanRefine": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerCanRefine"
]
},
"playerCanAttachMetin": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerCanAttachMetin"
]
},
"playerCanDetach": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerCanDetach"
]
},
"playerCanUnlock": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerCanUnlock"
]
},
"playerIsRefineGradeScroll": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsRefineGradeScroll"
]
},
"playerUpdate": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerUpdate"
]
},
"playerRender": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerRender"
]
},
"playerClear": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerClear"
]
},
"playerClearTarget": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerClearTarget"
]
},
"playerSetTarget": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetTarget"
]
},
"playerOpenCharacterMenu": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerOpenCharacterMenu"
]
},
"playerIsPartyMember": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsPartyMember"
]
},
"playerIsPartyLeader": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsPartyLeader"
]
},
"playerIsPartyLeaderByPID": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsPartyLeaderByPID"
]
},
"playerGetPartyMemberHPPercentage": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetPartyMemberHPPercentage"
]
},
"playerGetPartyMemberState": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetPartyMemberState"
]
},
"playerGetPartyMemberAffects": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetPartyMemberAffects"
]
},
"playerRemovePartyMember": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerRemovePartyMember"
]
},
"playerExitParty": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerExitParty"
]
},
"playerGetPKMode": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetPKMode"
]
},
"playerHasMobilePhoneNumber": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerHasMobilePhoneNumber"
]
},
"playerSetWeaponAttackBonusFlag": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetWeaponAttackBonusFlag"
]
},
"playerToggleCoolTime": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerToggleCoolTime"
]
},
"playerToggleLevelLimit": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerToggleLevelLimit"
]
},
"playerGetTargetVID": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetTargetVID"
]
},
"playerRegisterEmotionIcon": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerRegisterEmotionIcon"
]
},
"playerGetEmotionIconImage": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetEmotionIconImage"
]
},
"playerSetItemData": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetItemData"
]
},
"playerSetItemMetinSocket": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetItemMetinSocket"
]
},
"playerSetItemAttribute": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetItemAttribute"
]
},
"playerSetAutoPotionInfo": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSetAutoPotionInfo"
]
},
"playerGetAutoPotionInfo": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerGetAutoPotionInfo"
]
},
"playerSlotTypeToInvenType": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSlotTypeToInvenType"
]
},
"playerIsEquippingBelt": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsEquippingBelt"
]
},
"playerIsAvailableBeltInventoryCell": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerIsAvailableBeltInventoryCell"
]
},
"playerSendDragonSoulRefine": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:playerSendDragonSoulRefine"
]
},
"initPlayer": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerModule.cpp:initPlayer"
]
}
}
}