port: CPythonSkill + skill module + EterBase/Poly (1:1 40250)

Copy PythonSkill.cpp and the EterBase/Poly formula parser verbatim, drop the
pending stand-in and the skill module stub, register initskill() after
initfly() and build CPythonSkill in m_pySkill's place. LoadLocaleData now
loads skilldesc/skilltable. Skill and item icon handles go through
Py_BuildPointer/PyTuple_GetPointer (ILP32 ints truncate 64-bit pointers).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-24 03:07:15 +09:00
co-authored by Claude Opus 5.5
parent 7358bf444a
commit 03de3f314a
25 changed files with 3944 additions and 328 deletions
@@ -63,8 +63,8 @@
"impl": [
"extension/src/platform/UserInterface/PythonApplication.cpp:LoadLocaleData"
],
"note": "Body verbatim in the platform CPythonApplication stand-in; CPythonSkill is still pending, so RegisterSkillDesc fails and it returns false after the item and mob tables load (localeinfo.py ignores the result).",
"test": "extension/tests/port_login_flow_test.cpp step 3c (port.login_flow / port.login_live: item 19 Sword+9, mob 101 Wild Dog)"
"note": "Body verbatim in the platform CPythonApplication stand-in (the class itself is not ported); it reads item/mob tables and CPythonSkill's skilldesc/skilltable.",
"test": "extension/tests/port_login_flow_test.cpp step 3c (port.login_flow / port.login_live: item 19 Sword+9, mob 101 Wild Dog, skill 1 Three-Way Cut cool time 12)"
},
"__GetWindowMode": {
"status": "TODO"