MrP0wers

PythonPlayerModule.cpp

Jan 10th, 2026
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 86.61 KB | None | 0 0
  1. #include "StdAfx.h"
  2. #include "PythonPlayer.h"
  3. #include "PythonApplication.h"
  4.  
  5. extern const DWORD c_iSkillIndex_Tongsol = 121;
  6. extern const DWORD c_iSkillIndex_Combo = 122;
  7. extern const DWORD c_iSkillIndex_Fishing = 123;
  8. extern const DWORD c_iSkillIndex_Mining = 124;
  9. extern const DWORD c_iSkillIndex_Making = 125;
  10. extern const DWORD c_iSkillIndex_Language1 = 126;
  11. extern const DWORD c_iSkillIndex_Language2 = 127;
  12. extern const DWORD c_iSkillIndex_Language3 = 128;
  13. extern const DWORD c_iSkillIndex_Polymorph = 129;
  14. extern const DWORD c_iSkillIndex_Riding = 130;
  15. extern const DWORD c_iSkillIndex_Summon = 131;
  16.  
  17. enum
  18. {
  19. EMOTION_CLAP = 1,
  20. EMOTION_CHEERS_1,
  21. EMOTION_CHEERS_2,
  22. EMOTION_DANCE_1,
  23. EMOTION_DANCE_2,
  24. EMOTION_DANCE_3,
  25. EMOTION_DANCE_4,
  26. EMOTION_DANCE_5,
  27. EMOTION_DANCE_6,
  28. EMOTION_CONGRATULATION,
  29. EMOTION_DANCE_7,
  30. EMOTION_SELFIE,
  31. EMOTION_DOZE,
  32. EMOTION_EXERCISE,
  33. EMOTION_PUSHUP,
  34. EMOTION_DAB,
  35. EMOTION_AMIN,
  36. EMOTION_BK,
  37. EMOTION_FC,
  38. EMOTION_COCALAR,
  39. EMOTION_BREAK,
  40. EMOTION_TWERK,
  41. EMOTION_LABA,
  42. EMOTION_FUCK,
  43. EMOTION_OR,
  44. EMOTION_SMK,
  45. EMOTION_BANI,
  46. EMOTION_MORI,
  47. EMOTION_PUMN,
  48. EMOTION_PICIOR,
  49. EMOTION_MISTOCAR,
  50. EMOTION_CERSETOR,
  51. EMOTION_FORGIVE,
  52. EMOTION_ANGRY,
  53. EMOTION_ATTRACTIVE,
  54. EMOTION_SAD,
  55. EMOTION_SHY,
  56. EMOTION_CHEERUP,
  57. EMOTION_BANTER,
  58. EMOTION_JOY,
  59. EMOTION_KISS = 51,
  60. EMOTION_FRENCH_KISS,
  61. EMOTION_SLAP,
  62.  
  63. };
  64.  
  65. std::map<int, CGraphicImage *> m_kMap_iEmotionIndex_pkIconImage;
  66.  
  67. extern int TWOHANDED_WEWAPON_ATT_SPEED_DECREASE_VALUE;
  68.  
  69. #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
  70. class CBeltInventoryHelper
  71. {
  72. public:
  73. typedef BYTE TGradeUnit;
  74.  
  75. static TGradeUnit GetBeltGradeByRefineLevel(int refineLevel)
  76. {
  77. static TGradeUnit beltGradeByLevelTable[] =
  78. {
  79. 0,
  80. 1,
  81. 1,
  82. 2,
  83. 2,
  84. 3,
  85. 4,
  86. 5,
  87. 6,
  88. 7,
  89. };
  90.  
  91. return beltGradeByLevelTable[refineLevel];
  92. }
  93.  
  94. static const TGradeUnit* GetAvailableRuleTableByGrade()
  95.  
  96. {
  97. static TGradeUnit availableRuleByGrade[c_Belt_Inventory_Slot_Count] = {
  98. 1, 2, 4, 6,
  99. 3, 3, 4, 6,
  100. 5, 5, 5, 6,
  101. 7, 7, 7, 7
  102. };
  103.  
  104. return availableRuleByGrade;
  105. }
  106.  
  107. static bool IsAvailableCell(WORD cell, int beltGrade )
  108. {
  109. const TGradeUnit* ruleTable = GetAvailableRuleTableByGrade();
  110.  
  111. return ruleTable[cell] <= beltGrade;
  112. }
  113.  
  114. };
  115. #endif
  116.  
  117. PyObject * playerPickCloseItem(PyObject* poSelf, PyObject* poArgs)
  118. {
  119. CPythonPlayer::Instance().PickCloseItem();
  120.  
  121. return Py_BuildNone();
  122. }
  123.  
  124. PyObject * playerPickCloseItemVector(PyObject* poSelf, PyObject* poArgs)
  125. {
  126. CPythonPlayer::Instance().PickCloseItemVector();
  127.  
  128. return Py_BuildNone();
  129. }
  130.  
  131. PyObject * playerSetGameWindow(PyObject* poSelf, PyObject* poArgs)
  132. {
  133. PyObject * pyHandle;
  134. if (!PyTuple_GetObject(poArgs, 0, &pyHandle))
  135. return Py_BadArgument();
  136.  
  137. CPythonPlayer & rkPlayer = CPythonPlayer::Instance();
  138. rkPlayer.SetGameWindow(pyHandle);
  139.  
  140. return Py_BuildNone();
  141. }
  142.  
  143.  
  144. PyObject * playerSetQuickCameraMode(PyObject* poSelf, PyObject* poArgs)
  145. {
  146. int nIsEnable;
  147. if (!PyTuple_GetInteger(poArgs, 0, &nIsEnable))
  148. return Py_BadArgument();
  149.  
  150. CPythonPlayer & rkPlayer = CPythonPlayer::Instance();
  151. rkPlayer.SetQuickCameraMode(nIsEnable ? true : false);
  152.  
  153. return Py_BuildNone();
  154. }
  155.  
  156. PyObject * playerSetMainCharacterIndex(PyObject* poSelf, PyObject* poArgs)
  157. {
  158. int iVID;
  159. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  160. return Py_BuildException();
  161.  
  162. CPythonPlayer::Instance().SetMainCharacterIndex(iVID);
  163. CPythonCharacterManager::Instance().SetMainInstance(iVID);
  164.  
  165. return Py_BuildNone();
  166. }
  167.  
  168. PyObject * playerGetMainCharacterIndex(PyObject* poSelf, PyObject* poArgs)
  169. {
  170. return Py_BuildValue("i", CPythonPlayer::Instance().GetMainCharacterIndex());
  171. }
  172.  
  173. PyObject * playerGetMainCharacterName(PyObject* poSelf, PyObject* poArgs)
  174. {
  175. return Py_BuildValue("s", CPythonPlayer::Instance().GetName());
  176. }
  177.  
  178. PyObject * playerGetMainCharacterPosition(PyObject* poSelf, PyObject* poArgs)
  179. {
  180. TPixelPosition kPPosMainActor;
  181. CPythonPlayer & rkPlayer = CPythonPlayer::Instance();
  182. rkPlayer.NEW_GetMainActorPosition(&kPPosMainActor);
  183.  
  184. return Py_BuildValue("fff", kPPosMainActor.x, kPPosMainActor.y, kPPosMainActor.z);
  185. }
  186.  
  187. PyObject * playerIsMainCharacterIndex(PyObject* poSelf, PyObject* poArgs)
  188. {
  189. int iVID;
  190. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  191. return Py_BuildException();
  192.  
  193. return Py_BuildValue("i", CPythonPlayer::Instance().IsMainCharacterIndex(iVID));
  194. }
  195.  
  196. PyObject * playerCanAttackInstance(PyObject* poSelf, PyObject* poArgs)
  197. {
  198. int iVID;
  199. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  200. return Py_BuildException();
  201.  
  202. CInstanceBase * pMainInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  203. CInstanceBase * pTargetInstance = CPythonCharacterManager::Instance().GetInstancePtr(iVID);
  204.  
  205. if (!pMainInstance)
  206. return Py_BuildValue("i", 0);
  207.  
  208. if (!pTargetInstance)
  209. return Py_BuildValue("i", 0);
  210.  
  211. return Py_BuildValue("i", pMainInstance->IsAttackableInstance(*pTargetInstance));
  212. }
  213.  
  214. PyObject * playerIsActingEmotion(PyObject* poSelf, PyObject* poArgs)
  215. {
  216. CInstanceBase * pMainInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  217. if (!pMainInstance)
  218. return Py_BuildValue("i", 0);
  219.  
  220. return Py_BuildValue("i", pMainInstance->IsActingEmotion());
  221. }
  222.  
  223. PyObject * playerIsPVPInstance(PyObject* poSelf, PyObject* poArgs)
  224. {
  225. int iVID;
  226. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  227. return Py_BuildException();
  228.  
  229. CInstanceBase * pMainInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  230. CInstanceBase * pTargetInstance = CPythonCharacterManager::Instance().GetInstancePtr(iVID);
  231.  
  232. if (!pMainInstance)
  233. return Py_BuildValue("i", 0);
  234.  
  235. if (!pTargetInstance)
  236. return Py_BuildValue("i", 0);
  237.  
  238. return Py_BuildValue("i", pMainInstance->IsPVPInstance(*pTargetInstance));
  239. }
  240.  
  241. PyObject * playerIsSameEmpire(PyObject* poSelf, PyObject* poArgs)
  242. {
  243. int iVID;
  244. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  245. return Py_BuildException();
  246.  
  247. CInstanceBase * pMainInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  248. CInstanceBase * pTargetInstance = CPythonCharacterManager::Instance().GetInstancePtr(iVID);
  249.  
  250. if (!pMainInstance)
  251. return Py_BuildValue("i", FALSE);
  252.  
  253. if (!pTargetInstance)
  254. return Py_BuildValue("i", FALSE);
  255.  
  256. return Py_BuildValue("i", pMainInstance->IsSameEmpire(*pTargetInstance));
  257. }
  258.  
  259. PyObject * playerIsChallengeInstance(PyObject* poSelf, PyObject* poArgs)
  260. {
  261. int iVID;
  262. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  263. return Py_BuildException();
  264.  
  265. return Py_BuildValue("i", CPythonPlayer::Instance().IsChallengeInstance(iVID));
  266. }
  267.  
  268. PyObject * playerIsRevengeInstance(PyObject* poSelf, PyObject* poArgs)
  269. {
  270. int iVID;
  271. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  272. return Py_BuildException();
  273.  
  274. return Py_BuildValue("i", CPythonPlayer::Instance().IsRevengeInstance(iVID));
  275. }
  276.  
  277. PyObject * playerIsCantFightInstance(PyObject* poSelf, PyObject* poArgs)
  278. {
  279. int iVID;
  280. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  281. return Py_BuildException();
  282.  
  283. return Py_BuildValue("i", CPythonPlayer::Instance().IsCantFightInstance(iVID));
  284. }
  285.  
  286. PyObject * playerGetCharacterDistance(PyObject* poSelf, PyObject* poArgs)
  287. {
  288. int iVID;
  289. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  290. return Py_BuildException();
  291.  
  292. CInstanceBase * pMainInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  293. CInstanceBase * pTargetInstance = CPythonCharacterManager::Instance().GetInstancePtr(iVID);
  294.  
  295. if (!pMainInstance)
  296. return Py_BuildValue("f", -1.0f);
  297.  
  298. if (!pTargetInstance)
  299. return Py_BuildValue("f", -1.0f);
  300.  
  301. return Py_BuildValue("f", pMainInstance->GetDistance(pTargetInstance));
  302. }
  303.  
  304. PyObject * playerIsInSafeArea(PyObject* poSelf, PyObject* poArgs)
  305. {
  306. CInstanceBase * pMainInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  307. if (!pMainInstance)
  308. return Py_BuildValue("i", FALSE);
  309.  
  310. return Py_BuildValue("i", pMainInstance->IsInSafe());
  311. }
  312.  
  313. PyObject * playerIsMountingHorse(PyObject* poSelf, PyObject* poArgs)
  314. {
  315. CInstanceBase * pMainInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  316. if (!pMainInstance)
  317. return Py_BuildValue("i", FALSE);
  318.  
  319. return Py_BuildValue("i", pMainInstance->IsMountingHorse());
  320. }
  321.  
  322. PyObject * playerIsObserverMode(PyObject* poSelf, PyObject* poArgs)
  323. {
  324. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  325.  
  326. return Py_BuildValue("i", rkPlayer.IsObserverMode());
  327. }
  328.  
  329. PyObject * playerActEmotion(PyObject* poSelf, PyObject* poArgs)
  330. {
  331. int iVID;
  332. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  333. return Py_BuildException();
  334.  
  335. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  336. rkPlayer.ActEmotion(iVID);
  337.  
  338. return Py_BuildNone();
  339. }
  340.  
  341. PyObject * playerShowPlayer(PyObject* poSelf, PyObject* poArgs)
  342. {
  343. CInstanceBase * pMainInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  344. if (pMainInstance)
  345. pMainInstance->GetGraphicThingInstanceRef().Show();
  346.  
  347. return Py_BuildNone();
  348. }
  349.  
  350. PyObject * playerHidePlayer(PyObject* poSelf, PyObject* poArgs)
  351. {
  352. CInstanceBase * pMainInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  353. if (pMainInstance)
  354. pMainInstance->GetGraphicThingInstanceRef().Hide();
  355.  
  356. return Py_BuildNone();
  357. }
  358.  
  359. PyObject * playerComboAttack(PyObject* poSelf, PyObject* poArgs)
  360. {
  361. CPythonPlayer::Instance().NEW_Attack();
  362.  
  363. return Py_BuildNone();
  364. }
  365.  
  366. PyObject * playerRegisterEffect(PyObject* poSelf, PyObject* poArgs)
  367. {
  368. int iEft;
  369. if (!PyTuple_GetInteger(poArgs, 0, &iEft))
  370. return Py_BadArgument();
  371.  
  372. char* szFileName;
  373. if (!PyTuple_GetString(poArgs, 1, &szFileName))
  374. return Py_BadArgument();
  375.  
  376. CPythonPlayer & rkPlayer = CPythonPlayer::Instance();
  377. if (!rkPlayer.RegisterEffect(iEft, szFileName, false))
  378. return Py_BuildException("CPythonPlayer::RegisterEffect(eEft=%d, szFileName=%s", iEft, szFileName);
  379.  
  380. return Py_BuildNone();
  381. }
  382.  
  383. PyObject * playerRegisterCacheEffect(PyObject* poSelf, PyObject* poArgs)
  384. {
  385. int iEft;
  386. if (!PyTuple_GetInteger(poArgs, 0, &iEft))
  387. return Py_BadArgument();
  388.  
  389. char* szFileName;
  390. if (!PyTuple_GetString(poArgs, 1, &szFileName))
  391. return Py_BadArgument();
  392.  
  393. CPythonPlayer & rkPlayer = CPythonPlayer::Instance();
  394. if (!rkPlayer.RegisterEffect(iEft, szFileName, true))
  395. return Py_BuildException("CPythonPlayer::RegisterEffect(eEft=%d, szFileName=%s", iEft, szFileName);
  396.  
  397. return Py_BuildNone();
  398. }
  399.  
  400. PyObject * playerSetAttackKeyState(PyObject* poSelf, PyObject* poArgs)
  401. {
  402. int isPressed;
  403. if (!PyTuple_GetInteger(poArgs, 0, &isPressed))
  404. return Py_BuildException("playerSetAttackKeyState(isPressed) - There is no first argument");
  405.  
  406. CPythonPlayer & rkPlayer = CPythonPlayer::Instance();
  407. rkPlayer.SetAttackKeyState(isPressed ? true : false);
  408.  
  409. return Py_BuildNone();
  410. }
  411.  
  412. PyObject * playerSetSingleDIKKeyState(PyObject* poSelf, PyObject* poArgs)
  413. {
  414. int eDIK;
  415. if (!PyTuple_GetInteger(poArgs, 0, &eDIK))
  416. return Py_BuildException("playerSetSingleDIKKeyState(eDIK, isPressed) - There is no first argument");
  417.  
  418. int isPressed;
  419. if (!PyTuple_GetInteger(poArgs, 1, &isPressed))
  420. return Py_BuildException("playerSetSingleDIKKeyState(eDIK, isPressed) - There is no second argument");
  421.  
  422. CPythonPlayer & rkPlayer = CPythonPlayer::Instance();
  423. rkPlayer.NEW_SetSingleDIKKeyState(eDIK, isPressed ? true : false);
  424.  
  425. return Py_BuildNone();
  426. }
  427.  
  428. PyObject * playerEndKeyWalkingImmediately(PyObject* poSelf, PyObject* poArgs)
  429. {
  430. CPythonPlayer::Instance().NEW_Stop();
  431. return Py_BuildNone();
  432. }
  433.  
  434. PyObject * playerStartMouseWalking(PyObject* poSelf, PyObject* poArgs)
  435. {
  436. return Py_BuildNone();
  437. }
  438.  
  439. PyObject * playerEndMouseWalking(PyObject* poSelf, PyObject* poArgs)
  440. {
  441. return Py_BuildNone();
  442. }
  443.  
  444. PyObject * playerResetCameraRotation(PyObject* poSelf, PyObject* poArgs)
  445. {
  446. CPythonPlayer::Instance().NEW_ResetCameraRotation();
  447. return Py_BuildNone();
  448. }
  449.  
  450. PyObject* playerSetAutoCameraRotationSpeed(PyObject* poSelf, PyObject* poArgs)
  451. {
  452. float fCmrRotSpd;
  453. if (!PyTuple_GetFloat(poArgs, 0, &fCmrRotSpd))
  454. return Py_BuildException();
  455.  
  456. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  457. rkPlayer.NEW_SetAutoCameraRotationSpeed(fCmrRotSpd);
  458.  
  459. return Py_BuildNone();
  460. }
  461.  
  462. PyObject* playerSetMouseState(PyObject* poSelf, PyObject* poArgs)
  463. {
  464. int eMBT;
  465. if (!PyTuple_GetInteger(poArgs, 0, &eMBT))
  466. return Py_BuildException();
  467.  
  468. int eMBS;
  469. if (!PyTuple_GetInteger(poArgs, 1, &eMBS))
  470. return Py_BuildException();
  471.  
  472. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  473. rkPlayer.NEW_SetMouseState(eMBT, eMBS);
  474.  
  475. return Py_BuildNone();
  476. }
  477.  
  478. PyObject* playerSetMouseFunc(PyObject* poSelf, PyObject* poArgs)
  479. {
  480. int eMBT;
  481. if (!PyTuple_GetInteger(poArgs, 0, &eMBT))
  482. return Py_BuildException();
  483.  
  484. int eMBS;
  485. if (!PyTuple_GetInteger(poArgs, 1, &eMBS))
  486. return Py_BuildException();
  487.  
  488. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  489. rkPlayer.NEW_SetMouseFunc(eMBT, eMBS);
  490.  
  491. return Py_BuildNone();
  492. }
  493.  
  494. PyObject* playerGetMouseFunc(PyObject* poSelf, PyObject* poArgs)
  495. {
  496. int eMBT;
  497. if (!PyTuple_GetInteger(poArgs, 0, &eMBT))
  498. return Py_BuildException();
  499.  
  500. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  501.  
  502. return Py_BuildValue("i", rkPlayer.NEW_GetMouseFunc(eMBT));
  503. }
  504.  
  505. PyObject* playerSetMouseMiddleButtonState(PyObject* poSelf, PyObject* poArgs)
  506. {
  507. int eMBS;
  508. if (!PyTuple_GetInteger(poArgs, 0, &eMBS))
  509. return Py_BuildException();
  510.  
  511. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  512. rkPlayer.NEW_SetMouseMiddleButtonState(eMBS);
  513.  
  514. return Py_BuildNone();
  515. }
  516.  
  517. PyObject * playerGetName(PyObject* poSelf, PyObject* poArgs)
  518. {
  519. return Py_BuildValue("s", CPythonPlayer::Instance().GetName());
  520. }
  521.  
  522. PyObject * playerGetRace(PyObject* poSelf, PyObject* poArgs)
  523. {
  524. return Py_BuildValue("i", CPythonPlayer::Instance().GetRace());
  525. }
  526.  
  527. PyObject * playerGetJob(PyObject* poSelf, PyObject* poArgs)
  528. {
  529. int race = CPythonPlayer::Instance().GetRace();
  530. int job = RaceToJob(race);
  531. return Py_BuildValue("i", job);
  532. }
  533.  
  534. PyObject * playerGetPlayTime(PyObject* poSelf, PyObject* poArgs)
  535. {
  536. return Py_BuildValue("i", CPythonPlayer::Instance().GetPlayTime());
  537. }
  538.  
  539. PyObject * playerSetPlayTime(PyObject* poSelf, PyObject* poArgs)
  540. {
  541. int iTime;
  542. if (!PyTuple_GetInteger(poArgs, 0, &iTime))
  543. return Py_BuildException();
  544.  
  545. CPythonPlayer::Instance().SetPlayTime(iTime);
  546.  
  547. return Py_BuildNone();
  548. }
  549.  
  550. PyObject * playerIsSkillCoolTime(PyObject* poSelf, PyObject* poArgs)
  551. {
  552. int iSlotIndex;
  553. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  554. return Py_BuildException();
  555.  
  556. return Py_BuildValue("i", CPythonPlayer::Instance().IsSkillCoolTime(iSlotIndex));
  557. }
  558.  
  559. PyObject * playerGetSkillCoolTime(PyObject* poSelf, PyObject* poArgs)
  560. {
  561. int iSlotIndex;
  562. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  563. return Py_BuildException();
  564.  
  565. float fCoolTime = CPythonPlayer::Instance().GetSkillCoolTime(iSlotIndex);
  566. float fElapsedCoolTime = CPythonPlayer::Instance().GetSkillElapsedCoolTime(iSlotIndex);
  567.  
  568. return Py_BuildValue("ff", fCoolTime, fElapsedCoolTime);
  569. }
  570.  
  571. PyObject * playerIsSkillActive(PyObject* poSelf, PyObject* poArgs)
  572. {
  573. int iSlotIndex;
  574. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  575. return Py_BuildException();
  576.  
  577. return Py_BuildValue("i", CPythonPlayer::Instance().IsSkillActive(iSlotIndex));
  578. }
  579.  
  580. PyObject * playerUseGuildSkill(PyObject* poSelf, PyObject* poArgs)
  581. {
  582. int iSkillSlotIndex;
  583. if (!PyTuple_GetInteger(poArgs, 0, &iSkillSlotIndex))
  584. return Py_BuildException();
  585.  
  586. CPythonPlayer::Instance().UseGuildSkill(iSkillSlotIndex);
  587.  
  588. return Py_BuildNone();
  589. }
  590.  
  591. PyObject * playerAffectIndexToSkillIndex(PyObject* poSelf, PyObject* poArgs)
  592. {
  593. int iAffectIndex;
  594. if (!PyTuple_GetInteger(poArgs, 0, &iAffectIndex))
  595. return Py_BuildException();
  596.  
  597. DWORD dwSkillIndex;
  598. if (!CPythonPlayer::Instance().AffectIndexToSkillIndex(iAffectIndex, &dwSkillIndex))
  599. return Py_BuildValue("i", 0);
  600.  
  601. return Py_BuildValue("i", dwSkillIndex);
  602. }
  603.  
  604. PyObject * playerGetEXP(PyObject* poSelf, PyObject* poArgs)
  605. {
  606. DWORD dwEXP = CPythonPlayer::Instance().GetStatus(POINT_EXP);
  607. return Py_BuildValue("l", dwEXP);
  608. }
  609.  
  610. PyObject * playerGetStatus(PyObject* poSelf, PyObject* poArgs)
  611. {
  612. int iType;
  613. if (!PyTuple_GetInteger(poArgs, 0, &iType))
  614. return Py_BuildException();
  615.  
  616. long iValue = CPythonPlayer::Instance().GetStatus(iType);
  617.  
  618. if (POINT_ATT_SPEED == iType)
  619. {
  620. CInstanceBase * pInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  621. if (pInstance && (CItemData::WEAPON_TWO_HANDED == pInstance->GetWeaponType()))
  622. {
  623. iValue -= TWOHANDED_WEWAPON_ATT_SPEED_DECREASE_VALUE;
  624. }
  625. }
  626.  
  627. return Py_BuildValue("i", iValue);
  628. }
  629.  
  630. PyObject * playerSetStatus(PyObject* poSelf, PyObject* poArgs)
  631. {
  632. int iType;
  633. if (!PyTuple_GetInteger(poArgs, 0, &iType))
  634. return Py_BuildException();
  635.  
  636. int iValue;
  637. if (!PyTuple_GetInteger(poArgs, 1, &iValue))
  638. return Py_BuildException();
  639.  
  640. CPythonPlayer::Instance().SetStatus(iType, iValue);
  641.  
  642. return Py_BuildNone();
  643. }
  644.  
  645. PyObject * playerGetElk(PyObject* poSelf, PyObject* poArgs)
  646. {
  647. return PyLong_FromLongLong(CPythonPlayer::Instance().GetStatus(POINT_GOLD));
  648. }
  649.  
  650. PyObject * playerGetGuildID(PyObject* poSelf, PyObject* poArgs)
  651. {
  652. CInstanceBase * pInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  653. if (!pInstance)
  654. return Py_BuildValue("i", 0);
  655.  
  656. return Py_BuildValue("i", pInstance->GetGuildID());
  657. }
  658.  
  659. PyObject * playerGetGuildName(PyObject* poSelf, PyObject* poArgs)
  660. {
  661. CInstanceBase * pInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  662. if (pInstance)
  663. {
  664. DWORD dwID = pInstance->GetGuildID();
  665. std::string strName;
  666.  
  667. if (CPythonGuild::Instance().GetGuildName(dwID, &strName))
  668. return Py_BuildValue("s", strName.c_str());
  669. }
  670.  
  671. return Py_BuildValue("s", "");
  672. }
  673.  
  674. PyObject * playerGetAlignmentData(PyObject* poSelf, PyObject* poArgs)
  675. {
  676. CInstanceBase * pInstance = CPythonPlayer::Instance().NEW_GetMainActorPtr();
  677. int iAlignmentPoint = 0;
  678. int iAlignmentGrade = 4;
  679.  
  680. if (pInstance)
  681. {
  682. iAlignmentPoint = pInstance->GetAlignment();
  683. iAlignmentGrade = pInstance->GetAlignmentGrade();
  684. }
  685.  
  686. return Py_BuildValue("ii", iAlignmentPoint, iAlignmentGrade);
  687. }
  688.  
  689. PyObject * playerSetSkill(PyObject* poSelf, PyObject* poArgs)
  690. {
  691. int iSlotIndex;
  692. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  693. return Py_BuildException();
  694.  
  695. int iSkillIndex;
  696. if (!PyTuple_GetInteger(poArgs, 1, &iSkillIndex))
  697. return Py_BuildException();
  698.  
  699. CPythonPlayer::Instance().SetSkill(iSlotIndex, iSkillIndex);
  700.  
  701. return Py_BuildNone();
  702. }
  703.  
  704. PyObject * playerGetSkillIndex(PyObject* poSelf, PyObject* poArgs)
  705. {
  706. int iSlotIndex;
  707. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  708. return Py_BuildException();
  709.  
  710. return Py_BuildValue("i", CPythonPlayer::Instance().GetSkillIndex(iSlotIndex));
  711. }
  712.  
  713. PyObject * playerGetSkillSlotIndex(PyObject* poSelf, PyObject* poArgs)
  714. {
  715. int iSkillIndex;
  716. if (!PyTuple_GetInteger(poArgs, 0, &iSkillIndex))
  717. return Py_BuildException();
  718.  
  719. DWORD dwSlotIndex;
  720. if (!CPythonPlayer::Instance().GetSkillSlotIndex(iSkillIndex, &dwSlotIndex))
  721. return Py_BuildException();
  722.  
  723. return Py_BuildValue("i", dwSlotIndex);
  724. }
  725.  
  726. PyObject * playerGetSkillGrade(PyObject* poSelf, PyObject* poArgs)
  727. {
  728. int iSlotIndex;
  729. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  730. return Py_BuildException();
  731.  
  732. return Py_BuildValue("i", CPythonPlayer::Instance().GetSkillGrade(iSlotIndex));
  733. }
  734.  
  735. PyObject * playerGetSkillLevel(PyObject* poSelf, PyObject* poArgs)
  736. {
  737. int iSlotIndex;
  738. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  739. return Py_BuildException();
  740.  
  741. return Py_BuildValue("i", CPythonPlayer::Instance().GetSkillLevel(iSlotIndex));
  742. }
  743.  
  744. PyObject * playerGetSkillCurrentEfficientPercentage(PyObject* poSelf, PyObject* poArgs)
  745. {
  746. int iSlotIndex;
  747. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  748. return Py_BuildException();
  749.  
  750. return Py_BuildValue("f", CPythonPlayer::Instance().GetSkillCurrentEfficientPercentage(iSlotIndex));
  751. }
  752.  
  753. PyObject * playerGetSkillNextEfficientPercentage(PyObject* poSelf, PyObject* poArgs)
  754. {
  755. int iSlotIndex;
  756. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  757. return Py_BuildException();
  758.  
  759. return Py_BuildValue("f", CPythonPlayer::Instance().GetSkillNextEfficientPercentage(iSlotIndex));
  760. }
  761.  
  762. PyObject * playerClickSkillSlot(PyObject * poSelf, PyObject * poArgs)
  763. {
  764. int iSkillSlot;
  765. if (!PyTuple_GetInteger(poArgs, 0, &iSkillSlot))
  766. return Py_BadArgument();
  767.  
  768. CPythonPlayer::Instance().ClickSkillSlot(iSkillSlot);
  769.  
  770. return Py_BuildNone();
  771. }
  772.  
  773. PyObject * playerChangeCurrentSkillNumberOnly(PyObject * poSelf, PyObject * poArgs)
  774. {
  775. int iSlotIndex;
  776. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  777. return Py_BadArgument();
  778.  
  779. CPythonPlayer::Instance().ChangeCurrentSkillNumberOnly(iSlotIndex);
  780.  
  781. return Py_BuildNone();
  782. }
  783.  
  784. PyObject * playerClearSkillDict(PyObject * poSelf, PyObject * poArgs)
  785. {
  786. CPythonPlayer::Instance().ClearSkillDict();
  787. return Py_BuildNone();
  788. }
  789.  
  790. PyObject * playerMoveItem(PyObject* poSelf, PyObject* poArgs)
  791. {
  792. TItemPos srcCell;
  793. TItemPos dstCell;
  794. switch (PyTuple_Size(poArgs))
  795. {
  796. case 2:
  797. if (!PyTuple_GetInteger(poArgs, 0, &srcCell.cell))
  798. return Py_BuildException();
  799.  
  800. if (!PyTuple_GetInteger(poArgs, 1, &dstCell.cell))
  801. return Py_BuildException();
  802. break;
  803.  
  804. case 4:
  805. if (!PyTuple_GetByte(poArgs, 0, &srcCell.window_type))
  806. return Py_BuildException();
  807.  
  808. if (!PyTuple_GetInteger(poArgs, 1, &srcCell.cell))
  809. return Py_BuildException();
  810.  
  811. if (!PyTuple_GetByte(poArgs, 2, &dstCell.window_type))
  812. return Py_BuildException();
  813.  
  814. if (!PyTuple_GetInteger(poArgs, 3, &dstCell.cell))
  815. return Py_BuildException();
  816.  
  817. default:
  818. return Py_BuildException();
  819. }
  820.  
  821. CPythonPlayer::Instance().MoveItemData(srcCell, dstCell);
  822.  
  823. return Py_BuildNone();
  824. }
  825.  
  826. PyObject * playerSendClickItemPacket(PyObject* poSelf, PyObject* poArgs)
  827. {
  828. int ivid;
  829. if (!PyTuple_GetInteger(poArgs, 0, &ivid))
  830. return Py_BuildException();
  831.  
  832. CPythonPlayer::Instance().SendClickItemPacket(ivid);
  833.  
  834. return Py_BuildNone();
  835. }
  836.  
  837. PyObject * playerGetItemIndex(PyObject* poSelf, PyObject* poArgs)
  838. {
  839. switch (PyTuple_Size(poArgs))
  840. {
  841. case 1:
  842. {
  843. int iSlotIndex;
  844. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  845. return Py_BuildException();
  846.  
  847. int ItemIndex = CPythonPlayer::Instance().GetItemIndex(TItemPos (INVENTORY, iSlotIndex));
  848.  
  849. return Py_BuildValue("i", ItemIndex);
  850. }
  851.  
  852. case 2:
  853. {
  854. TItemPos Cell;
  855. if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  856. return Py_BuildException();
  857.  
  858. if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  859. return Py_BuildException();
  860.  
  861. int ItemIndex = CPythonPlayer::Instance().GetItemIndex(Cell);
  862.  
  863. return Py_BuildValue("i", ItemIndex);
  864. }
  865.  
  866. default:
  867. return Py_BuildException();
  868. }
  869. }
  870.  
  871. PyObject * playerGetItemFlags(PyObject* poSelf, PyObject* poArgs)
  872. {
  873. switch (PyTuple_Size(poArgs))
  874. {
  875. case 1:
  876. {
  877. int iSlotIndex;
  878. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  879. return Py_BuildException();
  880.  
  881. DWORD flags = CPythonPlayer::Instance().GetItemFlags(TItemPos(INVENTORY, iSlotIndex));
  882.  
  883. return Py_BuildValue("i", flags);
  884. }
  885.  
  886. case 2:
  887. {
  888. TItemPos Cell;
  889. if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  890. return Py_BuildException();
  891.  
  892. if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  893. return Py_BuildException();
  894.  
  895. DWORD flags = CPythonPlayer::Instance().GetItemFlags(Cell);
  896.  
  897. return Py_BuildValue("i", flags);
  898. }
  899.  
  900. default:
  901. return Py_BuildException();
  902. }
  903. }
  904.  
  905.  
  906. PyObject * playerGetItemCount(PyObject* poSelf, PyObject* poArgs)
  907. {
  908. switch (PyTuple_Size(poArgs))
  909. {
  910. case 1:
  911. {
  912. int iSlotIndex;
  913. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  914. return Py_BuildException();
  915.  
  916. int ItemNum = CPythonPlayer::Instance().GetItemCount(TItemPos (INVENTORY, iSlotIndex));
  917.  
  918. return Py_BuildValue("i", ItemNum);
  919. }
  920.  
  921. case 2:
  922. {
  923. TItemPos Cell;
  924. if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  925. return Py_BuildException();
  926.  
  927. if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  928. return Py_BuildException();
  929.  
  930. int ItemNum = CPythonPlayer::Instance().GetItemCount(Cell);
  931.  
  932. return Py_BuildValue("i", ItemNum);
  933. }
  934.  
  935. default:
  936. return Py_BuildException();
  937. }
  938. }
  939.  
  940. PyObject * playerSetItemCount(PyObject * poSelf, PyObject * poArgs)
  941. {
  942. switch (PyTuple_Size(poArgs))
  943. {
  944. case 2:
  945. {
  946. int iSlotIndex;
  947. if (!PyTuple_GetInteger(poArgs, 0, & iSlotIndex))
  948. return Py_BuildException();
  949.  
  950. WORD wCount;
  951. if (!PyTuple_GetInteger(poArgs, 1, & wCount))
  952. return Py_BuildException();
  953.  
  954. if (0 == wCount)
  955. return Py_BuildException();
  956.  
  957. CPythonPlayer::Instance().SetItemCount(TItemPos(INVENTORY, iSlotIndex), wCount);
  958.  
  959. return Py_BuildNone();
  960. }
  961.  
  962. case 3:
  963. {
  964. TItemPos Cell;
  965. if (!PyTuple_GetByte(poArgs, 0, & Cell.window_type))
  966. return Py_BuildException();
  967.  
  968. if (!PyTuple_GetInteger(poArgs, 1, & Cell.cell))
  969. return Py_BuildException();
  970.  
  971. WORD wCount;
  972. if (!PyTuple_GetInteger(poArgs, 2, & wCount))
  973. return Py_BuildException();
  974.  
  975. CPythonPlayer::Instance().SetItemCount(Cell, wCount);
  976.  
  977. return Py_BuildNone();
  978. }
  979.  
  980. default:
  981. return Py_BuildException();
  982. }
  983. }
  984.  
  985. PyObject * playerGetItemCountByVnum(PyObject* poSelf, PyObject* poArgs)
  986. {
  987. int ivnum;
  988. if (!PyTuple_GetInteger(poArgs, 0, &ivnum))
  989. return Py_BuildException();
  990.  
  991. int ItemNum = CPythonPlayer::Instance().GetItemCountByVnum(ivnum);
  992.  
  993. return Py_BuildValue("i", ItemNum);
  994. }
  995.  
  996. PyObject * playerGetItemMetinSocket(PyObject* poSelf, PyObject* poArgs)
  997. {
  998. TItemPos Cell;
  999. int iMetinSocketIndex;
  1000.  
  1001. switch (PyTuple_Size(poArgs))
  1002. {
  1003. case 2:
  1004. if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
  1005. return Py_BuildException();
  1006.  
  1007. if (!PyTuple_GetInteger(poArgs, 1, &iMetinSocketIndex))
  1008. return Py_BuildException();
  1009.  
  1010. break;
  1011.  
  1012. case 3:
  1013. if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  1014. return Py_BuildException();
  1015.  
  1016. if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  1017. return Py_BuildException();
  1018.  
  1019. if (!PyTuple_GetInteger(poArgs, 2, &iMetinSocketIndex))
  1020. return Py_BuildException();
  1021.  
  1022. break;
  1023.  
  1024. default:
  1025. return Py_BuildException();
  1026. }
  1027.  
  1028. int nMetinSocketValue = CPythonPlayer::Instance().GetItemMetinSocket(Cell, iMetinSocketIndex);
  1029.  
  1030. return Py_BuildValue("i", nMetinSocketValue);
  1031. }
  1032.  
  1033. PyObject * playerGetItemAttribute(PyObject* poSelf, PyObject* poArgs)
  1034. {
  1035. TItemPos Cell;
  1036. int iAttributeSlotIndex;
  1037.  
  1038. switch (PyTuple_Size(poArgs))
  1039. {
  1040. case 2:
  1041. if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
  1042. return Py_BuildException();
  1043.  
  1044. if (!PyTuple_GetInteger(poArgs, 1, &iAttributeSlotIndex))
  1045. return Py_BuildException();
  1046.  
  1047. break;
  1048.  
  1049. case 3:
  1050. if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  1051. return Py_BuildException();
  1052.  
  1053. if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  1054. return Py_BuildException();
  1055.  
  1056. if (!PyTuple_GetInteger(poArgs, 2, &iAttributeSlotIndex))
  1057. return Py_BuildException();
  1058. break;
  1059.  
  1060. default:
  1061. return Py_BuildException();
  1062. }
  1063.  
  1064. BYTE byType;
  1065.  
  1066. short sValue;
  1067.  
  1068. CPythonPlayer::Instance().GetItemAttribute(Cell, iAttributeSlotIndex, &byType, &sValue);
  1069.  
  1070. return Py_BuildValue("ii", byType, sValue);
  1071. }
  1072.  
  1073. PyObject * playerGetItemLink(PyObject * poSelf, PyObject * poArgs)
  1074. {
  1075. TItemPos Cell;
  1076.  
  1077. switch (PyTuple_Size(poArgs))
  1078. {
  1079. case 1:
  1080. if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
  1081. return Py_BuildException();
  1082. break;
  1083.  
  1084. case 2:
  1085. if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  1086. return Py_BuildException();
  1087.  
  1088. if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  1089. return Py_BuildException();
  1090. break;
  1091.  
  1092. default:
  1093. return Py_BuildException();
  1094. }
  1095.  
  1096. const TItemData * pPlayerItem = CPythonPlayer::Instance().GetItemData(Cell);
  1097.  
  1098. CItemData * pItemData = NULL;
  1099.  
  1100. char buf[1024];
  1101.  
  1102. if (pPlayerItem && CItemManager::Instance().GetItemDataPointer(pPlayerItem->vnum, &pItemData))
  1103. {
  1104. char itemlink[256];
  1105. int len;
  1106. bool isAttr = false;
  1107.  
  1108. len = snprintf(itemlink, sizeof(itemlink), "item:%x:%x:%x:%x:%x",
  1109. pPlayerItem->vnum, pPlayerItem->flags,
  1110. pPlayerItem->alSockets[0], pPlayerItem->alSockets[1], pPlayerItem->alSockets[2]);
  1111.  
  1112. for (int i = 0; i < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++i)
  1113. if (pPlayerItem->aAttr[i].bType != 0)
  1114. {
  1115. len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d", pPlayerItem->aAttr[i].bType, pPlayerItem->aAttr[i].sValue);
  1116.  
  1117. isAttr = true;
  1118. }
  1119.  
  1120. if( GetDefaultCodePage() == CP_ARABIC )
  1121. {
  1122. if (isAttr)
  1123. snprintf(buf, sizeof(buf), " |h|r[%s]|cffffc700|H%s|h", pItemData->GetName(), itemlink);
  1124. else
  1125. snprintf(buf, sizeof(buf), " |h|r[%s]|cfff1e6c0|H%s|h", pItemData->GetName(), itemlink);
  1126. }
  1127.  
  1128. else
  1129. {
  1130. if (isAttr)
  1131. snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
  1132. else
  1133. snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
  1134. }
  1135. }
  1136.  
  1137. else
  1138. buf[0] = '\0';
  1139.  
  1140. return Py_BuildValue("s", buf);
  1141. }
  1142.  
  1143. PyObject * playerGetISellItemPrice(PyObject * poSelf, PyObject * poArgs)
  1144. {
  1145. TItemPos Cell;
  1146.  
  1147. switch (PyTuple_Size(poArgs))
  1148. {
  1149. case 1:
  1150. if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
  1151. return Py_BuildException();
  1152. break;
  1153.  
  1154. case 2:
  1155. if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  1156. return Py_BuildException();
  1157.  
  1158. if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  1159. return Py_BuildException();
  1160. break;
  1161.  
  1162. default:
  1163. return Py_BuildException();
  1164. }
  1165. CItemData * pItemData;
  1166.  
  1167. if (!CItemManager::Instance().GetItemDataPointer(CPythonPlayer::Instance().GetItemIndex(Cell), &pItemData))
  1168. return Py_BuildValue("i", 0);
  1169.  
  1170. int iPrice;
  1171.  
  1172. if (pItemData->IsFlag(CItemData::ITEM_FLAG_COUNT_PER_1GOLD))
  1173. iPrice = CPythonPlayer::Instance().GetItemCount(Cell) / pItemData->GetISellItemPrice();
  1174. else
  1175. iPrice = pItemData->GetISellItemPrice() * CPythonPlayer::Instance().GetItemCount(Cell);
  1176.  
  1177. iPrice /= 5;
  1178.  
  1179. return Py_BuildValue("i", iPrice);
  1180. }
  1181.  
  1182. PyObject * playerGetQuickPage(PyObject* poSelf, PyObject* poArgs)
  1183. {
  1184. return Py_BuildValue("i", CPythonPlayer::Instance().GetQuickPage());
  1185. }
  1186.  
  1187. PyObject * playerSetQuickPage(PyObject* poSelf, PyObject* poArgs)
  1188. {
  1189. int iPageIndex;
  1190. if (!PyTuple_GetInteger(poArgs, 0, &iPageIndex))
  1191. return Py_BuildException();
  1192.  
  1193. CPythonPlayer::Instance().SetQuickPage(iPageIndex);
  1194.  
  1195. return Py_BuildNone();
  1196. }
  1197.  
  1198. PyObject * playerLocalQuickSlotIndexToGlobalQuickSlotIndex(PyObject* poSelf, PyObject* poArgs)
  1199. {
  1200. int iLocalSlotIndex;
  1201. if (!PyTuple_GetInteger(poArgs, 0, &iLocalSlotIndex))
  1202. return Py_BuildException();
  1203.  
  1204. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  1205.  
  1206. return Py_BuildValue("i", rkPlayer.LocalQuickSlotIndexToGlobalQuickSlotIndex(iLocalSlotIndex));
  1207. }
  1208.  
  1209.  
  1210. PyObject * playerGetLocalQuickSlot(PyObject* poSelf, PyObject* poArgs)
  1211. {
  1212. int iSlotIndex;
  1213. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  1214. return Py_BuildException();
  1215.  
  1216. DWORD dwWndType;
  1217. DWORD dwWndItemPos;
  1218.  
  1219. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  1220. rkPlayer.GetLocalQuickSlotData(iSlotIndex, &dwWndType, &dwWndItemPos);
  1221.  
  1222. return Py_BuildValue("ii", dwWndType, dwWndItemPos);
  1223. }
  1224.  
  1225. PyObject * playerGetGlobalQuickSlot(PyObject* poSelf, PyObject* poArgs)
  1226. {
  1227. int iSlotIndex;
  1228. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  1229. return Py_BuildException();
  1230.  
  1231. DWORD dwWndType;
  1232. DWORD dwWndItemPos;
  1233.  
  1234. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  1235. rkPlayer.GetGlobalQuickSlotData(iSlotIndex, &dwWndType, &dwWndItemPos);
  1236.  
  1237. return Py_BuildValue("ii", dwWndType, dwWndItemPos);
  1238. }
  1239.  
  1240.  
  1241. PyObject * playerRequestAddLocalQuickSlot(PyObject * poSelf, PyObject * poArgs)
  1242. {
  1243. int nSlotIndex;
  1244. int nWndType;
  1245. int nWndItemPos;
  1246.  
  1247. if (!PyTuple_GetInteger(poArgs, 0, &nSlotIndex))
  1248. return Py_BuildException();
  1249.  
  1250. if (!PyTuple_GetInteger(poArgs, 1, &nWndType))
  1251. return Py_BuildException();
  1252.  
  1253. if (!PyTuple_GetInteger(poArgs, 2, &nWndItemPos))
  1254. return Py_BuildException();
  1255.  
  1256. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  1257. rkPlayer.RequestAddLocalQuickSlot(nSlotIndex, nWndType, nWndItemPos);
  1258.  
  1259. return Py_BuildNone();
  1260. }
  1261.  
  1262. PyObject * playerRequestAddToEmptyLocalQuickSlot(PyObject* poSelf, PyObject* poArgs)
  1263. {
  1264. int nWndType;
  1265. if (!PyTuple_GetInteger(poArgs, 0, &nWndType))
  1266. return Py_BuildException();
  1267.  
  1268. int nWndItemPos;
  1269. if (!PyTuple_GetInteger(poArgs, 1, &nWndItemPos))
  1270. return Py_BuildException();
  1271.  
  1272. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  1273. rkPlayer.RequestAddToEmptyLocalQuickSlot(nWndType, nWndItemPos);
  1274.  
  1275. return Py_BuildNone();
  1276. }
  1277.  
  1278. PyObject * playerRequestDeleteGlobalQuickSlot(PyObject * poSelf, PyObject * poArgs)
  1279. {
  1280. int nGlobalSlotIndex;
  1281. if (!PyTuple_GetInteger(poArgs, 0, &nGlobalSlotIndex))
  1282. return Py_BuildException();
  1283.  
  1284. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  1285. rkPlayer.RequestDeleteGlobalQuickSlot(nGlobalSlotIndex);
  1286.  
  1287. return Py_BuildNone();
  1288. }
  1289.  
  1290. PyObject * playerRequestMoveGlobalQuickSlotToLocalQuickSlot(PyObject * poSelf, PyObject * poArgs)
  1291. {
  1292. int nGlobalSrcSlotIndex;
  1293. int nLocalDstSlotIndex;
  1294.  
  1295. if (!PyTuple_GetInteger(poArgs, 0, &nGlobalSrcSlotIndex))
  1296. return Py_BuildException();
  1297.  
  1298. if (!PyTuple_GetInteger(poArgs, 1, &nLocalDstSlotIndex))
  1299. return Py_BuildException();
  1300.  
  1301. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  1302. rkPlayer.RequestMoveGlobalQuickSlotToLocalQuickSlot(nGlobalSrcSlotIndex, nLocalDstSlotIndex);
  1303.  
  1304. return Py_BuildNone();
  1305. }
  1306.  
  1307. PyObject * playerRequestUseLocalQuickSlot(PyObject* poSelf, PyObject* poArgs)
  1308. {
  1309. int iLocalPosition;
  1310. if (!PyTuple_GetInteger(poArgs, 0, &iLocalPosition))
  1311. return Py_BuildException();
  1312.  
  1313. CPythonPlayer::Instance().RequestUseLocalQuickSlot(iLocalPosition);
  1314.  
  1315. return Py_BuildNone();
  1316. }
  1317.  
  1318. PyObject * playerRemoveQuickSlotByValue(PyObject* poSelf, PyObject* poArgs)
  1319. {
  1320. int iType;
  1321. if (!PyTuple_GetInteger(poArgs, 0, &iType))
  1322. return Py_BuildException();
  1323.  
  1324. int iPosition;
  1325. if (!PyTuple_GetInteger(poArgs, 1, &iPosition))
  1326. return Py_BuildException();
  1327.  
  1328. CPythonPlayer::Instance().RemoveQuickSlotByValue(iType, iPosition);
  1329.  
  1330. return Py_BuildNone();
  1331. }
  1332.  
  1333. PyObject * playerisItem(PyObject* poSelf, PyObject* poArgs)
  1334. {
  1335. int iSlotIndex;
  1336. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  1337. return Py_BuildException();
  1338.  
  1339. char Flag = CPythonPlayer::Instance().IsItem(TItemPos(INVENTORY, iSlotIndex));
  1340.  
  1341. return Py_BuildValue("i", Flag);
  1342. }
  1343.  
  1344. #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
  1345. PyObject * playerIsBeltInventorySlot(PyObject* poSelf, PyObject* poArgs)
  1346. {
  1347. int iSlotIndex;
  1348. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  1349. return Py_BuildException();
  1350.  
  1351. char Flag = CPythonPlayer::Instance().IsBeltInventorySlot(TItemPos(INVENTORY, iSlotIndex));
  1352.  
  1353. return Py_BuildValue("i", Flag);
  1354. }
  1355. #endif
  1356.  
  1357. PyObject * playerIsEquipmentSlot(PyObject* poSelf, PyObject* poArgs)
  1358. {
  1359. int iSlotIndex;
  1360. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  1361. return Py_BuildException();
  1362.  
  1363. if (iSlotIndex >= c_Equipment_Start)
  1364. if (iSlotIndex <= c_DragonSoul_Equip_End)
  1365. return Py_BuildValue("i", 1);
  1366.  
  1367. return Py_BuildValue("i", 0);
  1368. }
  1369.  
  1370. PyObject * playerIsDSEquipmentSlot(PyObject* poSelf, PyObject* poArgs)
  1371. {
  1372. BYTE bWindowType;
  1373. if (!PyTuple_GetInteger(poArgs, 0, &bWindowType))
  1374. return Py_BuildException();
  1375.  
  1376. int iSlotIndex;
  1377. if (!PyTuple_GetInteger(poArgs, 1, &iSlotIndex))
  1378. return Py_BuildException();
  1379.  
  1380. if (INVENTORY == bWindowType)
  1381. if (iSlotIndex >= c_DragonSoul_Equip_Start)
  1382. if (iSlotIndex <= c_DragonSoul_Equip_End)
  1383. return Py_BuildValue("i", 1);
  1384.  
  1385. return Py_BuildValue("i", 0);
  1386. }
  1387.  
  1388. PyObject * playerIsCostumeSlot(PyObject* poSelf, PyObject* poArgs)
  1389. {
  1390. int iSlotIndex;
  1391. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  1392. return Py_BuildException();
  1393.  
  1394. #ifdef ENABLE_COSTUME_SYSTEM
  1395. if (iSlotIndex >= c_Costume_Slot_Start)
  1396. if (iSlotIndex <= c_Costume_Slot_End)
  1397. return Py_BuildValue("i", 1);
  1398. #endif
  1399.  
  1400. return Py_BuildValue("i", 0);
  1401. }
  1402.  
  1403. PyObject * playerIsOpenPrivateShop(PyObject* poSelf, PyObject* poArgs)
  1404. {
  1405. return Py_BuildValue("i", CPythonPlayer::Instance().IsOpenPrivateShop());
  1406. }
  1407.  
  1408. PyObject * playerIsValuableItem(PyObject* poSelf, PyObject* poArgs)
  1409. {
  1410. TItemPos SlotIndex;
  1411.  
  1412. switch (PyTuple_Size (poArgs))
  1413. {
  1414. case 1:
  1415. if (!PyTuple_GetInteger(poArgs, 0, &SlotIndex.cell))
  1416. return Py_BuildException();
  1417. break;
  1418.  
  1419. case 2:
  1420. if (!PyTuple_GetInteger(poArgs, 0, &SlotIndex.window_type))
  1421. return Py_BuildException();
  1422.  
  1423. if (!PyTuple_GetInteger(poArgs, 0, &SlotIndex.cell))
  1424. return Py_BuildException();
  1425. break;
  1426.  
  1427. default:
  1428. return Py_BuildException();
  1429. }
  1430.  
  1431. DWORD dwItemIndex = CPythonPlayer::Instance().GetItemIndex(SlotIndex);
  1432.  
  1433. CItemManager::Instance().SelectItemData(dwItemIndex);
  1434. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  1435.  
  1436. if (!pItemData)
  1437. return Py_BuildException("Can't find item data");
  1438.  
  1439. BOOL hasMetinSocket = FALSE;
  1440. BOOL isHighPrice = FALSE;
  1441.  
  1442. for (int i = 0; i < METIN_SOCKET_COUNT; ++i)
  1443. if (CPythonPlayer::METIN_SOCKET_TYPE_NONE != CPythonPlayer::Instance().GetItemMetinSocket(SlotIndex, i))
  1444. hasMetinSocket = TRUE;
  1445.  
  1446. DWORD dwValue = pItemData->GetISellItemPrice();
  1447. if (dwValue > 5000)
  1448. isHighPrice = TRUE;
  1449.  
  1450. return Py_BuildValue("i", hasMetinSocket || isHighPrice);
  1451. }
  1452.  
  1453. int GetItemGrade(const char * c_szItemName)
  1454. {
  1455. std::string strName = c_szItemName;
  1456. if (strName.empty())
  1457. return 0;
  1458.  
  1459. char chGrade = strName[strName.length() - 1];
  1460. if (chGrade < '0' || chGrade > '9')
  1461. chGrade = '0';
  1462.  
  1463. int iGrade = chGrade - '0';
  1464.  
  1465. return iGrade;
  1466. }
  1467.  
  1468. PyObject * playerGetItemGrade(PyObject* poSelf, PyObject* poArgs)
  1469. {
  1470. TItemPos SlotIndex;
  1471. switch (PyTuple_Size(poArgs))
  1472. {
  1473. case 1:
  1474. if (!PyTuple_GetInteger(poArgs, 0, &SlotIndex.cell))
  1475. return Py_BuildException();
  1476. break;
  1477.  
  1478. case 2:
  1479. if (!PyTuple_GetInteger(poArgs, 0, &SlotIndex.window_type))
  1480. return Py_BuildException();
  1481.  
  1482. if (!PyTuple_GetInteger(poArgs, 1, &SlotIndex.cell))
  1483. return Py_BuildException();
  1484. break;
  1485.  
  1486. default:
  1487. return Py_BuildException();
  1488. }
  1489.  
  1490. int iItemIndex = CPythonPlayer::Instance().GetItemIndex(SlotIndex);
  1491.  
  1492. CItemManager::Instance().SelectItemData(iItemIndex);
  1493. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  1494.  
  1495. if (!pItemData)
  1496. return Py_BuildException("Can't find item data");
  1497.  
  1498. return Py_BuildValue("i", GetItemGrade(pItemData->GetName()));
  1499. }
  1500.  
  1501. #if defined(GAIDEN)
  1502. PyObject * playerGetItemUnbindTime(PyObject* poSelf, PyObject* poArgs)
  1503. {
  1504. int iSlotIndex;
  1505. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  1506. return Py_BuildException();
  1507.  
  1508. return Py_BuildValue("i", (int) CPythonPlayer::instance().GetItemUnbindTime(iSlotIndex));
  1509. }
  1510. #endif
  1511.  
  1512. enum
  1513. {
  1514. REFINE_SCROLL_TYPE_MAKE_SOCKET = 1,
  1515. REFINE_SCROLL_TYPE_UP_GRADE = 2,
  1516. };
  1517.  
  1518. enum
  1519. {
  1520. REFINE_CANT,
  1521. REFINE_OK,
  1522. REFINE_ALREADY_MAX_SOCKET_COUNT,
  1523. REFINE_NEED_MORE_GOOD_SCROLL,
  1524. REFINE_CANT_MAKE_SOCKET_ITEM,
  1525. REFINE_NOT_NEXT_GRADE_ITEM,
  1526. REFINE_CANT_REFINE_METIN_TO_EQUIPMENT,
  1527. REFINE_CANT_REFINE_ROD,
  1528. };
  1529.  
  1530. PyObject * playerCanRefine(PyObject * poSelf, PyObject * poArgs)
  1531. {
  1532. int iScrollItemIndex;
  1533. TItemPos TargetSlotIndex;
  1534.  
  1535. switch (PyTuple_Size(poArgs))
  1536. {
  1537. case 2:
  1538. if (!PyTuple_GetInteger(poArgs, 0, &iScrollItemIndex))
  1539. return Py_BadArgument();
  1540.  
  1541. if (!PyTuple_GetInteger(poArgs, 1, &TargetSlotIndex.cell))
  1542. return Py_BadArgument();
  1543. break;
  1544.  
  1545. case 3:
  1546. if (!PyTuple_GetInteger(poArgs, 0, &iScrollItemIndex))
  1547. return Py_BadArgument();
  1548.  
  1549. if (!PyTuple_GetInteger(poArgs, 1, &TargetSlotIndex.window_type))
  1550. return Py_BadArgument();
  1551.  
  1552. if (!PyTuple_GetInteger(poArgs, 2, &TargetSlotIndex.cell))
  1553. return Py_BadArgument();
  1554. break;
  1555.  
  1556. default:
  1557. return Py_BadArgument();
  1558. }
  1559.  
  1560. if (CPythonPlayer::Instance().IsEquipmentSlot(TargetSlotIndex))
  1561. {
  1562. return Py_BuildValue("i", REFINE_CANT_REFINE_METIN_TO_EQUIPMENT);
  1563. }
  1564.  
  1565. CItemManager::Instance().SelectItemData(iScrollItemIndex);
  1566. CItemData * pScrollItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  1567.  
  1568. if (!pScrollItemData)
  1569. return Py_BuildValue("i", REFINE_CANT);
  1570.  
  1571. int iScrollType = pScrollItemData->GetType();
  1572. int iScrollSubType = pScrollItemData->GetSubType();
  1573.  
  1574. if (iScrollType != CItemData::ITEM_TYPE_USE)
  1575. return Py_BuildValue("i", REFINE_CANT);
  1576.  
  1577. if (iScrollSubType != CItemData::USE_TUNING)
  1578. return Py_BuildValue("i", REFINE_CANT);
  1579.  
  1580. int iTargetItemIndex = CPythonPlayer::Instance().GetItemIndex(TargetSlotIndex);
  1581.  
  1582. CItemManager::Instance().SelectItemData(iTargetItemIndex);
  1583. CItemData * pTargetItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  1584.  
  1585. if (!pTargetItemData)
  1586. return Py_BuildValue("i", REFINE_CANT);
  1587.  
  1588. int iTargetType = pTargetItemData->GetType();
  1589.  
  1590. if (CItemData::ITEM_TYPE_ROD == iTargetType)
  1591. return Py_BuildValue("i", REFINE_CANT_REFINE_ROD);
  1592.  
  1593. if (pTargetItemData->HasNextGrade())
  1594. {
  1595. return Py_BuildValue("i", REFINE_OK);
  1596. }
  1597.  
  1598. else
  1599. {
  1600. return Py_BuildValue("i", REFINE_NOT_NEXT_GRADE_ITEM);
  1601. }
  1602.  
  1603. return Py_BuildValue("i", REFINE_CANT);
  1604. }
  1605.  
  1606. enum
  1607. {
  1608. ATTACH_METIN_CANT,
  1609. ATTACH_METIN_OK,
  1610. ATTACH_METIN_NOT_MATCHABLE_ITEM,
  1611. ATTACH_METIN_NO_MATCHABLE_SOCKET,
  1612. ATTACH_METIN_NOT_EXIST_GOLD_SOCKET,
  1613. ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT,
  1614. };
  1615.  
  1616. PyObject * playerCanAttachMetin(PyObject* poSelf, PyObject* poArgs)
  1617. {
  1618. int iMetinItemID;
  1619. TItemPos TargetSlotIndex;
  1620.  
  1621. switch (PyTuple_Size(poArgs))
  1622. {
  1623. case 2:
  1624. if (!PyTuple_GetInteger(poArgs, 0, &iMetinItemID))
  1625. return Py_BuildException();
  1626.  
  1627. if (!PyTuple_GetInteger(poArgs, 1, &TargetSlotIndex.cell))
  1628. return Py_BuildException();
  1629. break;
  1630.  
  1631. case 3:
  1632. if (!PyTuple_GetInteger(poArgs, 0, &iMetinItemID))
  1633. return Py_BuildException();
  1634.  
  1635. if (!PyTuple_GetInteger(poArgs, 1, &TargetSlotIndex.window_type))
  1636. return Py_BuildException();
  1637.  
  1638. if (!PyTuple_GetInteger(poArgs, 2, &TargetSlotIndex.cell))
  1639. return Py_BuildException();
  1640. break;
  1641.  
  1642. default:
  1643. return Py_BuildException();
  1644. }
  1645.  
  1646. if (CPythonPlayer::Instance().IsEquipmentSlot(TargetSlotIndex))
  1647. {
  1648. return Py_BuildValue("i", ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT);
  1649. }
  1650.  
  1651. CItemData * pMetinItemData;
  1652. if (!CItemManager::Instance().GetItemDataPointer(iMetinItemID, &pMetinItemData))
  1653. return Py_BuildException("can't find item data");
  1654.  
  1655. DWORD dwTargetItemIndex = CPythonPlayer::Instance().GetItemIndex(TargetSlotIndex);
  1656. CItemData * pTargetItemData;
  1657. if (!CItemManager::Instance().GetItemDataPointer(dwTargetItemIndex, &pTargetItemData))
  1658. return Py_BuildException("can't find item data");
  1659.  
  1660. DWORD dwMetinWearFlags = pMetinItemData->GetWearFlags();
  1661. DWORD dwTargetWearFlags = pTargetItemData->GetWearFlags();
  1662.  
  1663. if (0 == (dwMetinWearFlags & dwTargetWearFlags))
  1664. return Py_BuildValue("i", ATTACH_METIN_NOT_MATCHABLE_ITEM);
  1665.  
  1666. if (CItemData::ITEM_TYPE_ROD == pTargetItemData->GetType())
  1667. return Py_BuildValue("i", ATTACH_METIN_CANT);
  1668.  
  1669. BOOL bNotExistGoldSocket = FALSE;
  1670.  
  1671. int iSubType = pMetinItemData->GetSubType();
  1672. for (int i = 0; i < ITEM_SOCKET_SLOT_MAX_NUM; ++i)
  1673. {
  1674. DWORD dwSocketType = CPythonPlayer::Instance().GetItemMetinSocket(TargetSlotIndex, i);
  1675. if (CItemData::METIN_NORMAL == iSubType)
  1676. {
  1677. if (CPythonPlayer::METIN_SOCKET_TYPE_SILVER == dwSocketType || CPythonPlayer::METIN_SOCKET_TYPE_GOLD == dwSocketType)
  1678. {
  1679. return Py_BuildValue("i", ATTACH_METIN_OK);
  1680. }
  1681. }
  1682.  
  1683. else if (CItemData::METIN_GOLD == iSubType)
  1684. {
  1685. if (CPythonPlayer::METIN_SOCKET_TYPE_GOLD == dwSocketType)
  1686. {
  1687. return Py_BuildValue("i", ATTACH_METIN_OK);
  1688. }
  1689.  
  1690. else if (CPythonPlayer::METIN_SOCKET_TYPE_SILVER == dwSocketType)
  1691. {
  1692. bNotExistGoldSocket = TRUE;
  1693. }
  1694. }
  1695. }
  1696.  
  1697. if (bNotExistGoldSocket)
  1698. {
  1699. return Py_BuildValue("i", ATTACH_METIN_NOT_EXIST_GOLD_SOCKET);
  1700. }
  1701.  
  1702. return Py_BuildValue("i", ATTACH_METIN_NO_MATCHABLE_SOCKET);
  1703. }
  1704.  
  1705. enum
  1706. {
  1707. DETACH_METIN_CANT,
  1708. DETACH_METIN_OK,
  1709. };
  1710.  
  1711. PyObject * playerCanDetach(PyObject * poSelf, PyObject * poArgs)
  1712. {
  1713. int iScrollItemIndex;
  1714.  
  1715. TItemPos TargetSlotIndex;
  1716.  
  1717. switch (PyTuple_Size (poArgs))
  1718. {
  1719. case 2:
  1720. if (!PyTuple_GetInteger(poArgs, 0, &iScrollItemIndex))
  1721. return Py_BadArgument();
  1722.  
  1723. if (!PyTuple_GetInteger(poArgs, 1, &TargetSlotIndex.cell))
  1724. return Py_BadArgument();
  1725. break;
  1726.  
  1727. case 3:
  1728. if (!PyTuple_GetInteger(poArgs, 0, &iScrollItemIndex))
  1729. return Py_BadArgument();
  1730.  
  1731. if (!PyTuple_GetInteger(poArgs, 1, &TargetSlotIndex.window_type))
  1732. return Py_BadArgument();
  1733.  
  1734. if (!PyTuple_GetInteger(poArgs, 2, &TargetSlotIndex.cell))
  1735. return Py_BadArgument();
  1736. break;
  1737.  
  1738. default:
  1739. return Py_BadArgument();
  1740. }
  1741.  
  1742. CItemManager::Instance().SelectItemData(iScrollItemIndex);
  1743. CItemData * pScrollItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  1744.  
  1745. if (!pScrollItemData)
  1746. return Py_BuildException("Can't find item data");
  1747.  
  1748. int iScrollType = pScrollItemData->GetType();
  1749. int iScrollSubType = pScrollItemData->GetSubType();
  1750.  
  1751. if (iScrollType != CItemData::ITEM_TYPE_USE)
  1752. return Py_BuildValue("i", DETACH_METIN_CANT);
  1753.  
  1754. if (iScrollSubType != CItemData::USE_DETACHMENT)
  1755. return Py_BuildValue("i", DETACH_METIN_CANT);
  1756.  
  1757. int iTargetItemIndex = CPythonPlayer::Instance().GetItemIndex(TargetSlotIndex);
  1758.  
  1759. CItemManager::Instance().SelectItemData(iTargetItemIndex);
  1760. CItemData * pTargetItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  1761.  
  1762. if (!pTargetItemData)
  1763. return Py_BuildException("Can't find item data");
  1764.  
  1765. if (pTargetItemData->IsFlag(CItemData::ITEM_FLAG_REFINEABLE))
  1766. {
  1767. for (int iSlotCount = 0; iSlotCount < METIN_SOCKET_COUNT; ++iSlotCount)
  1768. if (CPythonPlayer::Instance().GetItemMetinSocket(TargetSlotIndex, iSlotCount) > 2)
  1769. {
  1770. return Py_BuildValue("i", DETACH_METIN_OK);
  1771. }
  1772. }
  1773.  
  1774. return Py_BuildValue("i", DETACH_METIN_CANT);
  1775. }
  1776.  
  1777. PyObject * playerCanUnlock(PyObject * poSelf, PyObject * poArgs)
  1778. {
  1779. int iKeyItemIndex;
  1780.  
  1781. TItemPos TargetSlotIndex;
  1782.  
  1783. switch (PyTuple_Size(poArgs))
  1784. {
  1785. case 2:
  1786. if (!PyTuple_GetInteger(poArgs, 0, &iKeyItemIndex))
  1787. return Py_BadArgument();
  1788.  
  1789. if (!PyTuple_GetInteger(poArgs, 1, &TargetSlotIndex.cell))
  1790. return Py_BadArgument();
  1791. break;
  1792.  
  1793. case 3:
  1794. if (!PyTuple_GetInteger(poArgs, 0, &iKeyItemIndex))
  1795. return Py_BadArgument();
  1796.  
  1797. if (!PyTuple_GetInteger(poArgs, 1, &TargetSlotIndex.window_type))
  1798. return Py_BadArgument();
  1799.  
  1800. if (!PyTuple_GetInteger(poArgs, 2, &TargetSlotIndex.cell))
  1801. return Py_BadArgument();
  1802. break;
  1803.  
  1804. default:
  1805. return Py_BadArgument();
  1806. }
  1807.  
  1808.  
  1809. CItemManager::Instance().SelectItemData(iKeyItemIndex);
  1810. CItemData * pKeyItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  1811.  
  1812. if (!pKeyItemData)
  1813. return Py_BuildException("Can't find item data");
  1814.  
  1815. int iKeyType = pKeyItemData->GetType();
  1816.  
  1817. if (iKeyType != CItemData::ITEM_TYPE_TREASURE_KEY)
  1818. return Py_BuildValue("i", FALSE);
  1819.  
  1820. int iTargetItemIndex = CPythonPlayer::Instance().GetItemIndex(TargetSlotIndex);
  1821.  
  1822. CItemManager::Instance().SelectItemData(iTargetItemIndex);
  1823. CItemData * pTargetItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  1824.  
  1825. if (!pTargetItemData)
  1826. return Py_BuildException("Can't find item data");
  1827.  
  1828. int iTargetType = pTargetItemData->GetType();
  1829.  
  1830. if (iTargetType != CItemData::ITEM_TYPE_TREASURE_BOX)
  1831. return Py_BuildValue("i", FALSE);
  1832.  
  1833. return Py_BuildValue("i", TRUE);
  1834. }
  1835.  
  1836. PyObject * playerIsRefineGradeScroll(PyObject* poSelf, PyObject* poArgs)
  1837. {
  1838. TItemPos ScrollSlotIndex;
  1839.  
  1840. switch (PyTuple_Size(poArgs))
  1841. {
  1842. case 1:
  1843. if (!PyTuple_GetInteger(poArgs, 0, &ScrollSlotIndex.cell))
  1844. return Py_BuildException();
  1845.  
  1846. case 2:
  1847. if (!PyTuple_GetInteger(poArgs, 0, &ScrollSlotIndex.window_type))
  1848. return Py_BuildException();
  1849.  
  1850. if (!PyTuple_GetInteger(poArgs, 1, &ScrollSlotIndex.cell))
  1851. return Py_BuildException();
  1852.  
  1853. default:
  1854. return Py_BuildException();
  1855. }
  1856.  
  1857. int iScrollItemIndex = CPythonPlayer::Instance().GetItemIndex(ScrollSlotIndex);
  1858.  
  1859. CItemManager::Instance().SelectItemData(iScrollItemIndex);
  1860. CItemData * pScrollItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  1861.  
  1862. if (!pScrollItemData)
  1863. return Py_BuildException("Can't find item data");
  1864.  
  1865. return Py_BuildValue("i", REFINE_SCROLL_TYPE_UP_GRADE == pScrollItemData->GetValue(0));
  1866. }
  1867.  
  1868. PyObject * playerUpdate(PyObject* poSelf, PyObject* poArgs)
  1869. {
  1870. CPythonPlayer::Instance().Update();
  1871.  
  1872. return Py_BuildNone();
  1873. }
  1874.  
  1875. PyObject * playerRender(PyObject* poSelf, PyObject* poArgs)
  1876. {
  1877. return Py_BuildNone();
  1878. }
  1879.  
  1880. PyObject * playerClear(PyObject* poSelf, PyObject* poArgs)
  1881. {
  1882. CPythonPlayer::Instance().Clear();
  1883.  
  1884. return Py_BuildNone();
  1885. }
  1886.  
  1887. PyObject * playerClearTarget(PyObject* poSelf, PyObject* poArgs)
  1888. {
  1889. CPythonPlayer::Instance().SetTarget(0);
  1890.  
  1891. return Py_BuildNone();
  1892. }
  1893.  
  1894. PyObject * playerSetTarget(PyObject* poSelf, PyObject* poArgs)
  1895. {
  1896. int iVID;
  1897. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  1898. return Py_BuildException();
  1899.  
  1900. CPythonPlayer::Instance().SetTarget(iVID);
  1901.  
  1902. return Py_BuildNone();
  1903. }
  1904.  
  1905. PyObject * playerOpenCharacterMenu(PyObject* poSelf, PyObject* poArgs)
  1906. {
  1907. int iVID;
  1908. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  1909. return Py_BuildException();
  1910.  
  1911. CPythonPlayer::Instance().OpenCharacterMenu(iVID);
  1912.  
  1913. return Py_BuildNone();
  1914. }
  1915.  
  1916. PyObject * playerIsPartyMember(PyObject* poSelf, PyObject* poArgs)
  1917. {
  1918. int iVID;
  1919. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  1920. return Py_BuildException();
  1921.  
  1922. return Py_BuildValue("i", CPythonPlayer::Instance().IsPartyMemberByVID(iVID));
  1923. }
  1924.  
  1925. PyObject * playerIsPartyLeader(PyObject* poSelf, PyObject* poArgs)
  1926. {
  1927. int iVID;
  1928. if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  1929. return Py_BuildException();
  1930.  
  1931. DWORD dwPID;
  1932. if (!CPythonPlayer::Instance().PartyMemberVIDToPID(iVID, &dwPID))
  1933. return Py_BuildValue("i", FALSE);
  1934.  
  1935. CPythonPlayer::TPartyMemberInfo * pPartyMemberInfo;
  1936. if (!CPythonPlayer::Instance().GetPartyMemberPtr(dwPID, &pPartyMemberInfo))
  1937. return Py_BuildValue("i", FALSE);
  1938.  
  1939. return Py_BuildValue("i", CPythonPlayer::PARTY_ROLE_LEADER == pPartyMemberInfo->byState);
  1940. }
  1941.  
  1942. PyObject * playerIsPartyLeaderByPID(PyObject* poSelf, PyObject* poArgs)
  1943. {
  1944. int iPID;
  1945. if (!PyTuple_GetInteger(poArgs, 0, &iPID))
  1946. return Py_BuildException();
  1947.  
  1948. CPythonPlayer::TPartyMemberInfo * pPartyMemberInfo;
  1949. if (!CPythonPlayer::Instance().GetPartyMemberPtr(iPID, &pPartyMemberInfo))
  1950. return Py_BuildValue("i", FALSE);
  1951.  
  1952. return Py_BuildValue("i", CPythonPlayer::PARTY_ROLE_LEADER == pPartyMemberInfo->byState);
  1953. }
  1954.  
  1955. PyObject * playerGetPartyMemberHPPercentage(PyObject* poSelf, PyObject* poArgs)
  1956. {
  1957. int iPID;
  1958. if (!PyTuple_GetInteger(poArgs, 0, &iPID))
  1959. return Py_BuildException();
  1960.  
  1961. CPythonPlayer::TPartyMemberInfo * pPartyMemberInfo;
  1962. if (!CPythonPlayer::Instance().GetPartyMemberPtr(iPID, &pPartyMemberInfo))
  1963. return Py_BuildValue("i", FALSE);
  1964.  
  1965. return Py_BuildValue("i", pPartyMemberInfo->byHPPercentage);
  1966. }
  1967.  
  1968. PyObject * playerGetPartyMemberState(PyObject* poSelf, PyObject* poArgs)
  1969. {
  1970. int iPID;
  1971. if (!PyTuple_GetInteger(poArgs, 0, &iPID))
  1972. return Py_BuildException();
  1973.  
  1974. CPythonPlayer::TPartyMemberInfo * pPartyMemberInfo;
  1975. if (!CPythonPlayer::Instance().GetPartyMemberPtr(iPID, &pPartyMemberInfo))
  1976. return Py_BuildValue("i", FALSE);
  1977.  
  1978. return Py_BuildValue("i", pPartyMemberInfo->byState);
  1979. }
  1980.  
  1981. PyObject * playerGetPartyMemberAffects(PyObject* poSelf, PyObject* poArgs)
  1982. {
  1983. int iPID;
  1984. if (!PyTuple_GetInteger(poArgs, 0, &iPID))
  1985. return Py_BuildException();
  1986.  
  1987. CPythonPlayer::TPartyMemberInfo * pPartyMemberInfo;
  1988. if (!CPythonPlayer::Instance().GetPartyMemberPtr(iPID, &pPartyMemberInfo))
  1989. return Py_BuildValue("i", FALSE);
  1990.  
  1991. return Py_BuildValue("iiiiiii", pPartyMemberInfo->sAffects[0],
  1992. pPartyMemberInfo->sAffects[1],
  1993. pPartyMemberInfo->sAffects[2],
  1994. pPartyMemberInfo->sAffects[3],
  1995. pPartyMemberInfo->sAffects[4],
  1996. pPartyMemberInfo->sAffects[5],
  1997. pPartyMemberInfo->sAffects[6]);
  1998. }
  1999.  
  2000. PyObject * playerRemovePartyMember(PyObject* poSelf, PyObject* poArgs)
  2001. {
  2002. int iPID;
  2003. if (!PyTuple_GetInteger(poArgs, 0, &iPID))
  2004. return Py_BuildException();
  2005.  
  2006. CPythonPlayer::Instance().RemovePartyMember(iPID);
  2007.  
  2008. return Py_BuildNone();
  2009. }
  2010.  
  2011. PyObject * playerExitParty(PyObject* poSelf, PyObject* poArgs)
  2012. {
  2013. CPythonPlayer::Instance().ExitParty();
  2014.  
  2015. return Py_BuildNone();
  2016. }
  2017.  
  2018. PyObject * playerGetPKMode(PyObject* poSelf, PyObject* poArgs)
  2019. {
  2020. return Py_BuildValue("i", CPythonPlayer::Instance().GetPKMode());
  2021. }
  2022.  
  2023. PyObject * playerSetWeaponAttackBonusFlag(PyObject* poSelf, PyObject* poArgs)
  2024. {
  2025. int iFlag;
  2026. if (!PyTuple_GetInteger(poArgs, 0, &iFlag))
  2027. return Py_BuildException();
  2028.  
  2029. return Py_BuildNone();
  2030. }
  2031.  
  2032. PyObject * playerToggleCoolTime(PyObject* poSelf, PyObject* poArgs)
  2033. {
  2034. return Py_BuildValue("i", CPythonPlayer::Instance().__ToggleCoolTime());
  2035. }
  2036.  
  2037. PyObject * playerToggleLevelLimit(PyObject* poSelf, PyObject* poArgs)
  2038. {
  2039. return Py_BuildValue("i", CPythonPlayer::Instance().__ToggleLevelLimit());
  2040. }
  2041.  
  2042. PyObject * playerGetTargetVID(PyObject* poSelf, PyObject* poArgs)
  2043. {
  2044. return Py_BuildValue("i", CPythonPlayer::Instance().GetTargetVID());
  2045. }
  2046.  
  2047. PyObject * playerRegisterEmotionIcon(PyObject* poSelf, PyObject* poArgs)
  2048. {
  2049. int iIndex;
  2050. if (!PyTuple_GetInteger(poArgs, 0, &iIndex))
  2051. return Py_BuildException();
  2052.  
  2053. char * szFileName;
  2054. if (!PyTuple_GetString(poArgs, 1, &szFileName))
  2055. return Py_BuildException();
  2056.  
  2057. CGraphicImage * pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(szFileName);
  2058. m_kMap_iEmotionIndex_pkIconImage.insert(make_pair(iIndex, pImage));
  2059.  
  2060. return Py_BuildNone();
  2061. }
  2062.  
  2063. PyObject * playerGetEmotionIconImage(PyObject* poSelf, PyObject* poArgs)
  2064. {
  2065. int iIndex;
  2066. if (!PyTuple_GetInteger(poArgs, 0, &iIndex))
  2067. return Py_BuildException();
  2068.  
  2069. if (m_kMap_iEmotionIndex_pkIconImage.end() == m_kMap_iEmotionIndex_pkIconImage.find(iIndex))
  2070. return Py_BuildValue("i", 0);
  2071.  
  2072. return Py_BuildValue("i", m_kMap_iEmotionIndex_pkIconImage[iIndex]);
  2073. }
  2074.  
  2075. PyObject * playerSetItemData(PyObject* poSelf, PyObject* poArgs)
  2076. {
  2077. int iSlotIndex;
  2078. if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  2079. return Py_BuildException();
  2080.  
  2081. int iVirtualID;
  2082. if (!PyTuple_GetInteger(poArgs, 1, &iVirtualID))
  2083. return Py_BuildException();
  2084.  
  2085. int iNum;
  2086. if (!PyTuple_GetInteger(poArgs, 2, &iNum))
  2087. return Py_BuildException();
  2088.  
  2089. TItemData kItemInst;
  2090. ZeroMemory(&kItemInst, sizeof(kItemInst));
  2091.  
  2092. kItemInst.vnum=iVirtualID;
  2093. kItemInst.count=iNum;
  2094.  
  2095. CPythonPlayer::Instance().SetItemData(TItemPos(INVENTORY, iSlotIndex), kItemInst);
  2096.  
  2097. return Py_BuildNone();
  2098. }
  2099.  
  2100. PyObject * playerSetItemMetinSocket(PyObject* poSelf, PyObject* poArgs)
  2101. {
  2102. TItemPos ItemPos;
  2103.  
  2104. int iMetinSocketNumber;
  2105. int iNum;
  2106.  
  2107. switch (PyTuple_Size(poArgs))
  2108. {
  2109. case 3:
  2110. if (!PyTuple_GetInteger(poArgs, 0, &ItemPos.cell))
  2111. return Py_BuildException();
  2112.  
  2113. if (!PyTuple_GetInteger(poArgs, 1, &iMetinSocketNumber))
  2114. return Py_BuildException();
  2115.  
  2116. if (!PyTuple_GetInteger(poArgs, 2, &iNum))
  2117. return Py_BuildException();
  2118.  
  2119. break;
  2120.  
  2121. case 4:
  2122. if (!PyTuple_GetInteger(poArgs, 0, &ItemPos.window_type))
  2123. return Py_BuildException();
  2124.  
  2125. if (!PyTuple_GetInteger(poArgs, 1, &ItemPos.cell))
  2126. return Py_BuildException();
  2127.  
  2128. if (!PyTuple_GetInteger(poArgs, 2, &iMetinSocketNumber))
  2129. return Py_BuildException();
  2130.  
  2131. if (!PyTuple_GetInteger(poArgs, 3, &iNum))
  2132. return Py_BuildException();
  2133. break;
  2134.  
  2135. default:
  2136. return Py_BuildException();
  2137. }
  2138.  
  2139. CPythonPlayer::Instance().SetItemMetinSocket(ItemPos, iMetinSocketNumber, iNum);
  2140.  
  2141. return Py_BuildNone();
  2142. }
  2143.  
  2144. PyObject * playerSetItemAttribute(PyObject* poSelf, PyObject* poArgs)
  2145. {
  2146. TItemPos ItemPos;
  2147.  
  2148. int iAttributeSlotIndex;
  2149. int iAttributeType;
  2150. int iAttributeValue;
  2151.  
  2152. switch (PyTuple_Size(poArgs))
  2153. {
  2154. case 4:
  2155. if (!PyTuple_GetInteger(poArgs, 0, &ItemPos.cell))
  2156. return Py_BuildException();
  2157.  
  2158. if (!PyTuple_GetInteger(poArgs, 1, &iAttributeSlotIndex))
  2159. return Py_BuildException();
  2160.  
  2161. if (!PyTuple_GetInteger(poArgs, 2, &iAttributeType))
  2162. return Py_BuildException();
  2163.  
  2164. if (!PyTuple_GetInteger(poArgs, 3, &iAttributeValue))
  2165. return Py_BuildException();
  2166. break;
  2167.  
  2168. case 5:
  2169. if (!PyTuple_GetInteger(poArgs, 0, &ItemPos.window_type))
  2170. return Py_BuildException();
  2171.  
  2172. if (!PyTuple_GetInteger(poArgs, 1, &ItemPos.cell))
  2173. return Py_BuildException();
  2174.  
  2175. if (!PyTuple_GetInteger(poArgs, 2, &iAttributeSlotIndex))
  2176. return Py_BuildException();
  2177.  
  2178. if (!PyTuple_GetInteger(poArgs, 3, &iAttributeType))
  2179. return Py_BuildException();
  2180.  
  2181. if (!PyTuple_GetInteger(poArgs, 4, &iAttributeValue))
  2182. return Py_BuildException();
  2183. break;
  2184. }
  2185.  
  2186. CPythonPlayer::Instance().SetItemAttribute(ItemPos, iAttributeSlotIndex, iAttributeType, iAttributeValue);
  2187.  
  2188. return Py_BuildNone();
  2189. }
  2190.  
  2191. PyObject * playerSetAutoPotionInfo(PyObject* poSelf, PyObject* poArgs)
  2192. {
  2193. int potionType = 0;
  2194. if (!PyTuple_GetInteger(poArgs, 0, &potionType))
  2195. return Py_BadArgument();
  2196.  
  2197. CPythonPlayer* player = CPythonPlayer::InstancePtr();
  2198.  
  2199. CPythonPlayer::SAutoPotionInfo& potionInfo = player->GetAutoPotionInfo(potionType);
  2200.  
  2201. if (!PyTuple_GetBoolean(poArgs, 1, &potionInfo.bActivated))
  2202. return Py_BadArgument();
  2203.  
  2204. if (!PyTuple_GetLong(poArgs, 2, &potionInfo.currentAmount))
  2205. return Py_BadArgument();
  2206.  
  2207. if (!PyTuple_GetLong(poArgs, 3, &potionInfo.totalAmount))
  2208. return Py_BadArgument();
  2209.  
  2210. if (!PyTuple_GetLong(poArgs, 4, &potionInfo.inventorySlotIndex))
  2211. return Py_BadArgument();
  2212.  
  2213. return Py_BuildNone();
  2214. }
  2215.  
  2216. PyObject * playerGetAutoPotionInfo(PyObject* poSelf, PyObject* poArgs)
  2217. {
  2218. CPythonPlayer* player = CPythonPlayer::InstancePtr();
  2219.  
  2220. int potionType = 0;
  2221. if (!PyTuple_GetInteger(poArgs, 0, &potionType))
  2222. return Py_BadArgument();
  2223.  
  2224. CPythonPlayer::SAutoPotionInfo& potionInfo = player->GetAutoPotionInfo(potionType);
  2225.  
  2226. return Py_BuildValue("biii", potionInfo.bActivated, int(potionInfo.currentAmount), int(potionInfo.totalAmount), int(potionInfo.inventorySlotIndex));
  2227. }
  2228.  
  2229. PyObject * playerSlotTypeToInvenType(PyObject* poSelf, PyObject* poArgs)
  2230. {
  2231. int slotType = 0;
  2232. if (!PyTuple_GetInteger(poArgs, 0, &slotType))
  2233. return Py_BadArgument();
  2234.  
  2235. return Py_BuildValue("i", SlotTypeToInvenType((BYTE)slotType));
  2236. }
  2237.  
  2238. #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
  2239. PyObject * playerIsEquippingBelt(PyObject* poSelf, PyObject* poArgs)
  2240. {
  2241. const CPythonPlayer* player = CPythonPlayer::InstancePtr();
  2242. bool bEquipping = false;
  2243.  
  2244. const TItemData* data = player->GetItemData(TItemPos(EQUIPMENT, c_Equipment_Belt));
  2245.  
  2246. if (NULL != data)
  2247. bEquipping = 0 < data->count;
  2248.  
  2249. return Py_BuildValue("b", bEquipping);
  2250.  
  2251. }
  2252.  
  2253. PyObject * playerIsAvailableBeltInventoryCell(PyObject* poSelf, PyObject* poArgs)
  2254. {
  2255. const CPythonPlayer* player = CPythonPlayer::InstancePtr();
  2256. const TItemData* pData = player->GetItemData(TItemPos(EQUIPMENT, c_Equipment_Belt));
  2257.  
  2258. if (NULL == pData || 0 == pData->count)
  2259. return Py_BuildValue("b", false);
  2260.  
  2261. CItemManager::Instance().SelectItemData(pData->vnum);
  2262. CItemData * pItem = CItemManager::Instance().GetSelectedItemDataPointer();
  2263.  
  2264. long beltGrade = pItem->GetValue(0);
  2265.  
  2266. int pos = 0;
  2267. if (!PyTuple_GetInteger(poArgs, 0, &pos))
  2268. return Py_BadArgument();
  2269.  
  2270. return Py_BuildValue("b", CBeltInventoryHelper::IsAvailableCell(pos - c_Belt_Inventory_Slot_Start, beltGrade));
  2271. }
  2272. #endif
  2273.  
  2274. PyObject* playerSendDragonSoulRefine(PyObject* poSelf, PyObject* poArgs)
  2275. {
  2276. BYTE bSubHeader;
  2277. PyObject* pDic;
  2278. TItemPos RefineItemPoses[DS_REFINE_WINDOW_MAX_NUM];
  2279.  
  2280. if (!PyTuple_GetByte(poArgs, 0, &bSubHeader))
  2281. return Py_BuildException();
  2282.  
  2283. switch (bSubHeader)
  2284. {
  2285. case DS_SUB_HEADER_CLOSE:
  2286. break;
  2287.  
  2288. case DS_SUB_HEADER_DO_UPGRADE:
  2289. case DS_SUB_HEADER_DO_IMPROVEMENT:
  2290. case DS_SUB_HEADER_DO_REFINE:
  2291. {
  2292. if (!PyTuple_GetObject(poArgs, 1, &pDic))
  2293. return Py_BuildException();
  2294.  
  2295. int pos = 0;
  2296.  
  2297. PyObject* key, *value;
  2298.  
  2299. int size = PyDict_Size(pDic);
  2300.  
  2301. while (PyDict_Next(pDic, &pos, &key, &value))
  2302. {
  2303. int i = PyInt_AsLong(key);
  2304. if (i > DS_REFINE_WINDOW_MAX_NUM)
  2305. return Py_BuildException();
  2306.  
  2307. if (!PyTuple_GetByte(value, 0, &RefineItemPoses[i].window_type) || !PyTuple_GetInteger(value, 1, &RefineItemPoses[i].cell))
  2308. {
  2309. return Py_BuildException();
  2310. }
  2311. }
  2312. }
  2313. break;
  2314. }
  2315.  
  2316. CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  2317. rns.SendDragonSoulRefinePacket(bSubHeader, RefineItemPoses);
  2318.  
  2319. return Py_BuildNone();
  2320. }
  2321.  
  2322. #ifdef ENABLE_TITLE_SYSTEM
  2323. PyObject * playerChooseTitle(PyObject* poSelf, PyObject* poArgs)
  2324. {
  2325. int iTitle = 0;
  2326. if (!PyTuple_GetInteger(poArgs, 0, &iTitle))
  2327. return Py_BadArgument();
  2328.  
  2329. CPythonPlayer::Instance().RequestChangeTitle((int)iTitle);
  2330.  
  2331. return Py_BuildNone();
  2332. }
  2333. #endif
  2334.  
  2335. #ifdef ENABLE_AUTONAME_SYSTEM
  2336. PyObject* playerSetAutoName(PyObject* poSelf, PyObject* poArgs)
  2337. {
  2338. char* szName;
  2339. if (!PyTuple_GetString(poArgs, 0, &szName))
  2340. return Py_BadArgument();
  2341.  
  2342. CPythonNetworkStream::Instance().SendAutoNamePacket(szName);
  2343.  
  2344. return Py_BuildNone();
  2345. }
  2346. #endif
  2347.  
  2348. #ifdef ENABLE_CUSTOM_TITLE_SYSTEM
  2349. PyObject* playerSetTitle(PyObject* poSelf, PyObject* poArgs)
  2350. {
  2351. char* szTitle;
  2352. if (!PyTuple_GetString(poArgs, 0, &szTitle))
  2353. return Py_BadArgument();
  2354.  
  2355. BYTE r, g, b, a = 0;
  2356. if (!PyTuple_GetInteger(poArgs, 1, &r))
  2357. return Py_BadArgument();
  2358.  
  2359. if (!PyTuple_GetInteger(poArgs, 2, &g))
  2360. return Py_BadArgument();
  2361.  
  2362. if (!PyTuple_GetInteger(poArgs, 3, &b))
  2363. return Py_BadArgument();
  2364.  
  2365. if (!PyTuple_GetInteger(poArgs, 4, &a))
  2366. return Py_BadArgument();
  2367.  
  2368. CPythonNetworkStream::Instance().SendTitlePacket(szTitle, r, g, b, a);
  2369. return Py_BuildNone();
  2370. }
  2371.  
  2372. PyObject* playerSetTitle2(PyObject* poSelf, PyObject* poArgs)
  2373. {
  2374. char* szTitle2;
  2375. if (!PyTuple_GetString(poArgs, 0, &szTitle2))
  2376. return Py_BadArgument();
  2377.  
  2378. BYTE r, g, b, a = 0;
  2379. if (!PyTuple_GetInteger(poArgs, 1, &r))
  2380. return Py_BadArgument();
  2381.  
  2382. if (!PyTuple_GetInteger(poArgs, 2, &g))
  2383. return Py_BadArgument();
  2384.  
  2385. if (!PyTuple_GetInteger(poArgs, 3, &b))
  2386. return Py_BadArgument();
  2387.  
  2388. if (!PyTuple_GetInteger(poArgs, 4, &a))
  2389. return Py_BadArgument();
  2390.  
  2391. CPythonNetworkStream::Instance().SendTitle2Packet(szTitle2, r, g, b, a);
  2392. return Py_BuildNone();
  2393. }
  2394. #endif
  2395.  
  2396. void initPlayer()
  2397. {
  2398. static PyMethodDef s_methods[] =
  2399. {
  2400. { "GetAutoPotionInfo", playerGetAutoPotionInfo, METH_VARARGS },
  2401. { "SetAutoPotionInfo", playerSetAutoPotionInfo, METH_VARARGS },
  2402.  
  2403. { "PickCloseItem", playerPickCloseItem, METH_VARARGS },
  2404. { "PickCloseItemVector", playerPickCloseItemVector, METH_VARARGS },
  2405. { "SetGameWindow", playerSetGameWindow, METH_VARARGS },
  2406. { "RegisterEffect", playerRegisterEffect, METH_VARARGS },
  2407. { "RegisterCacheEffect", playerRegisterCacheEffect, METH_VARARGS },
  2408. { "SetMouseState", playerSetMouseState, METH_VARARGS },
  2409. { "SetMouseFunc", playerSetMouseFunc, METH_VARARGS },
  2410. { "GetMouseFunc", playerGetMouseFunc, METH_VARARGS },
  2411. { "SetMouseMiddleButtonState", playerSetMouseMiddleButtonState, METH_VARARGS },
  2412. { "SetMainCharacterIndex", playerSetMainCharacterIndex, METH_VARARGS },
  2413. { "GetMainCharacterIndex", playerGetMainCharacterIndex, METH_VARARGS },
  2414. { "GetMainCharacterName", playerGetMainCharacterName, METH_VARARGS },
  2415. { "GetMainCharacterPosition", playerGetMainCharacterPosition, METH_VARARGS },
  2416. { "IsMainCharacterIndex", playerIsMainCharacterIndex, METH_VARARGS },
  2417. { "CanAttackInstance", playerCanAttackInstance, METH_VARARGS },
  2418. { "IsActingEmotion", playerIsActingEmotion, METH_VARARGS },
  2419. { "IsPVPInstance", playerIsPVPInstance, METH_VARARGS },
  2420. { "IsSameEmpire", playerIsSameEmpire, METH_VARARGS },
  2421. { "IsChallengeInstance", playerIsChallengeInstance, METH_VARARGS },
  2422. { "IsRevengeInstance", playerIsRevengeInstance, METH_VARARGS },
  2423. { "IsCantFightInstance", playerIsCantFightInstance, METH_VARARGS },
  2424. { "GetCharacterDistance", playerGetCharacterDistance, METH_VARARGS },
  2425. { "IsInSafeArea", playerIsInSafeArea, METH_VARARGS },
  2426. { "IsMountingHorse", playerIsMountingHorse, METH_VARARGS },
  2427. { "IsObserverMode", playerIsObserverMode, METH_VARARGS },
  2428. { "ActEmotion", playerActEmotion, METH_VARARGS },
  2429.  
  2430. { "ShowPlayer", playerShowPlayer, METH_VARARGS },
  2431. { "HidePlayer", playerHidePlayer, METH_VARARGS },
  2432.  
  2433. { "ComboAttack", playerComboAttack, METH_VARARGS },
  2434.  
  2435. { "SetAutoCameraRotationSpeed", playerSetAutoCameraRotationSpeed, METH_VARARGS },
  2436. { "SetAttackKeyState", playerSetAttackKeyState, METH_VARARGS },
  2437. { "SetSingleDIKKeyState", playerSetSingleDIKKeyState, METH_VARARGS },
  2438. { "EndKeyWalkingImmediately", playerEndKeyWalkingImmediately, METH_VARARGS },
  2439. { "StartMouseWalking", playerStartMouseWalking, METH_VARARGS },
  2440. { "EndMouseWalking", playerEndMouseWalking, METH_VARARGS },
  2441. { "ResetCameraRotation", playerResetCameraRotation, METH_VARARGS },
  2442. { "SetQuickCameraMode", playerSetQuickCameraMode, METH_VARARGS },
  2443.  
  2444. { "SetSkill", playerSetSkill, METH_VARARGS },
  2445. { "GetSkillIndex", playerGetSkillIndex, METH_VARARGS },
  2446. { "GetSkillSlotIndex", playerGetSkillSlotIndex, METH_VARARGS },
  2447. { "GetSkillGrade", playerGetSkillGrade, METH_VARARGS },
  2448. { "GetSkillLevel", playerGetSkillLevel, METH_VARARGS },
  2449. { "GetSkillCurrentEfficientPercentage", playerGetSkillCurrentEfficientPercentage, METH_VARARGS },
  2450. { "GetSkillNextEfficientPercentage", playerGetSkillNextEfficientPercentage, METH_VARARGS },
  2451. { "ClickSkillSlot", playerClickSkillSlot, METH_VARARGS },
  2452. { "ChangeCurrentSkillNumberOnly", playerChangeCurrentSkillNumberOnly, METH_VARARGS },
  2453. { "ClearSkillDict", playerClearSkillDict, METH_VARARGS },
  2454.  
  2455. { "GetItemIndex", playerGetItemIndex, METH_VARARGS },
  2456. { "GetItemFlags", playerGetItemFlags, METH_VARARGS },
  2457. { "GetItemCount", playerGetItemCount, METH_VARARGS },
  2458. { "GetItemCountByVnum", playerGetItemCountByVnum, METH_VARARGS },
  2459. { "GetItemMetinSocket", playerGetItemMetinSocket, METH_VARARGS },
  2460. { "GetItemAttribute", playerGetItemAttribute, METH_VARARGS },
  2461.  
  2462. #if defined(GAIDEN)
  2463. { "GetItemUnbindTime", playerGetItemUnbindTime, METH_VARARGS },
  2464. #endif
  2465. { "GetISellItemPrice", playerGetISellItemPrice, METH_VARARGS },
  2466. { "MoveItem", playerMoveItem, METH_VARARGS },
  2467. { "SendClickItemPacket", playerSendClickItemPacket, METH_VARARGS },
  2468.  
  2469. { "GetName", playerGetName, METH_VARARGS },
  2470. { "GetJob", playerGetJob, METH_VARARGS },
  2471. { "GetRace", playerGetRace, METH_VARARGS },
  2472. { "GetPlayTime", playerGetPlayTime, METH_VARARGS },
  2473. { "SetPlayTime", playerSetPlayTime, METH_VARARGS },
  2474.  
  2475. { "IsSkillCoolTime", playerIsSkillCoolTime, METH_VARARGS },
  2476. { "GetSkillCoolTime", playerGetSkillCoolTime, METH_VARARGS },
  2477. { "IsSkillActive", playerIsSkillActive, METH_VARARGS },
  2478. { "UseGuildSkill", playerUseGuildSkill, METH_VARARGS },
  2479. { "AffectIndexToSkillIndex", playerAffectIndexToSkillIndex, METH_VARARGS },
  2480. { "GetEXP", playerGetEXP, METH_VARARGS },
  2481. { "GetStatus", playerGetStatus, METH_VARARGS },
  2482. { "SetStatus", playerSetStatus, METH_VARARGS },
  2483. { "GetElk", playerGetElk, METH_VARARGS },
  2484. { "GetMoney", playerGetElk, METH_VARARGS },
  2485. { "GetGuildID", playerGetGuildID, METH_VARARGS },
  2486. { "GetGuildName", playerGetGuildName, METH_VARARGS },
  2487. { "GetAlignmentData", playerGetAlignmentData, METH_VARARGS },
  2488. { "RequestAddLocalQuickSlot", playerRequestAddLocalQuickSlot, METH_VARARGS },
  2489. { "RequestAddToEmptyLocalQuickSlot", playerRequestAddToEmptyLocalQuickSlot, METH_VARARGS },
  2490. { "RequestDeleteGlobalQuickSlot", playerRequestDeleteGlobalQuickSlot, METH_VARARGS },
  2491. { "RequestMoveGlobalQuickSlotToLocalQuickSlot", playerRequestMoveGlobalQuickSlotToLocalQuickSlot, METH_VARARGS },
  2492. { "RequestUseLocalQuickSlot", playerRequestUseLocalQuickSlot, METH_VARARGS },
  2493. { "LocalQuickSlotIndexToGlobalQuickSlotIndex", playerLocalQuickSlotIndexToGlobalQuickSlotIndex, METH_VARARGS },
  2494.  
  2495. { "GetQuickPage", playerGetQuickPage, METH_VARARGS },
  2496. { "SetQuickPage", playerSetQuickPage, METH_VARARGS },
  2497. { "GetLocalQuickSlot", playerGetLocalQuickSlot, METH_VARARGS },
  2498. { "GetGlobalQuickSlot", playerGetGlobalQuickSlot, METH_VARARGS },
  2499. { "RemoveQuickSlotByValue", playerRemoveQuickSlotByValue, METH_VARARGS },
  2500.  
  2501. { "isItem", playerisItem, METH_VARARGS },
  2502. { "IsEquipmentSlot", playerIsEquipmentSlot, METH_VARARGS },
  2503. { "IsDSEquipmentSlot", playerIsDSEquipmentSlot, METH_VARARGS },
  2504. { "IsCostumeSlot", playerIsCostumeSlot, METH_VARARGS },
  2505. { "IsValuableItem", playerIsValuableItem, METH_VARARGS },
  2506. { "IsOpenPrivateShop", playerIsOpenPrivateShop, METH_VARARGS },
  2507.  
  2508. #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
  2509. { "IsBeltInventorySlot", playerIsBeltInventorySlot, METH_VARARGS },
  2510. { "IsEquippingBelt", playerIsEquippingBelt, METH_VARARGS },
  2511. { "IsAvailableBeltInventoryCell", playerIsAvailableBeltInventoryCell, METH_VARARGS },
  2512. #endif
  2513. { "GetItemGrade", playerGetItemGrade, METH_VARARGS },
  2514. { "CanRefine", playerCanRefine, METH_VARARGS },
  2515. { "CanDetach", playerCanDetach, METH_VARARGS },
  2516. { "CanUnlock", playerCanUnlock, METH_VARARGS },
  2517. { "CanAttachMetin", playerCanAttachMetin, METH_VARARGS },
  2518. { "IsRefineGradeScroll", playerIsRefineGradeScroll, METH_VARARGS },
  2519.  
  2520. { "ClearTarget", playerClearTarget, METH_VARARGS },
  2521. { "SetTarget", playerSetTarget, METH_VARARGS },
  2522. { "OpenCharacterMenu", playerOpenCharacterMenu, METH_VARARGS },
  2523.  
  2524. { "Update", playerUpdate, METH_VARARGS },
  2525. { "Render", playerRender, METH_VARARGS },
  2526. { "Clear", playerClear, METH_VARARGS },
  2527.  
  2528. { "IsPartyMember", playerIsPartyMember, METH_VARARGS },
  2529. { "IsPartyLeader", playerIsPartyLeader, METH_VARARGS },
  2530. { "IsPartyLeaderByPID", playerIsPartyLeaderByPID, METH_VARARGS },
  2531. { "GetPartyMemberHPPercentage", playerGetPartyMemberHPPercentage, METH_VARARGS },
  2532. { "GetPartyMemberState", playerGetPartyMemberState, METH_VARARGS },
  2533. { "GetPartyMemberAffects", playerGetPartyMemberAffects, METH_VARARGS },
  2534. { "RemovePartyMember", playerRemovePartyMember, METH_VARARGS },
  2535. { "ExitParty", playerExitParty, METH_VARARGS },
  2536.  
  2537. { "GetPKMode", playerGetPKMode, METH_VARARGS },
  2538.  
  2539. { "RegisterEmotionIcon", playerRegisterEmotionIcon, METH_VARARGS },
  2540. { "GetEmotionIconImage", playerGetEmotionIconImage, METH_VARARGS },
  2541.  
  2542. { "SetWeaponAttackBonusFlag", playerSetWeaponAttackBonusFlag, METH_VARARGS },
  2543. { "ToggleCoolTime", playerToggleCoolTime, METH_VARARGS },
  2544. { "ToggleLevelLimit", playerToggleLevelLimit, METH_VARARGS },
  2545. { "GetTargetVID", playerGetTargetVID, METH_VARARGS },
  2546.  
  2547. { "SetItemData", playerSetItemData, METH_VARARGS },
  2548. { "SetItemMetinSocket", playerSetItemMetinSocket, METH_VARARGS },
  2549. { "SetItemAttribute", playerSetItemAttribute, METH_VARARGS },
  2550. { "SetItemCount", playerSetItemCount, METH_VARARGS },
  2551.  
  2552. { "GetItemLink", playerGetItemLink, METH_VARARGS },
  2553. { "SlotTypeToInvenType", playerSlotTypeToInvenType, METH_VARARGS },
  2554. { "SendDragonSoulRefine", playerSendDragonSoulRefine, METH_VARARGS },
  2555.  
  2556. #ifdef ENABLE_CUSTOM_TITLE_SYSTEM
  2557. { "SetTitle", playerSetTitle, METH_VARARGS },
  2558. { "SetTitle2", playerSetTitle2, METH_VARARGS },
  2559. #endif
  2560.  
  2561. #ifdef ENABLE_TITLE_SYSTEM
  2562. {"ChooseTitle", playerChooseTitle, METH_VARARGS},
  2563. #endif
  2564.  
  2565. #ifdef ENABLE_AUTONAME_SYSTEM
  2566. { "SetAutoName", playerSetAutoName, METH_VARARGS },
  2567. #endif
  2568. { NULL, NULL, NULL },
  2569. };
  2570.  
  2571. PyObject* poModule = Py_InitModule("player", s_methods);
  2572. PyModule_AddIntConstant(poModule, "LEVEL", POINT_LEVEL);
  2573. PyModule_AddIntConstant(poModule, "VOICE", POINT_VOICE);
  2574. PyModule_AddIntConstant(poModule, "EXP", POINT_EXP);
  2575. PyModule_AddIntConstant(poModule, "NEXT_EXP", POINT_NEXT_EXP);
  2576. PyModule_AddIntConstant(poModule, "HP", POINT_HP);
  2577. PyModule_AddIntConstant(poModule, "MAX_HP", POINT_MAX_HP);
  2578. PyModule_AddIntConstant(poModule, "SP", POINT_SP);
  2579. PyModule_AddIntConstant(poModule, "MAX_SP", POINT_MAX_SP);
  2580. PyModule_AddIntConstant(poModule, "STAMINA", POINT_STAMINA);
  2581. PyModule_AddIntConstant(poModule, "MAX_STAMINA", POINT_MAX_STAMINA);
  2582. PyModule_AddIntConstant(poModule, "ELK", POINT_GOLD);
  2583. PyModule_AddIntConstant(poModule, "ST", POINT_ST);
  2584. PyModule_AddIntConstant(poModule, "HT", POINT_HT);
  2585. PyModule_AddIntConstant(poModule, "DX", POINT_DX);
  2586. PyModule_AddIntConstant(poModule, "IQ", POINT_IQ);
  2587. PyModule_AddIntConstant(poModule, "ATT_POWER", POINT_ATT_POWER);
  2588. PyModule_AddIntConstant(poModule, "ATT_MIN", POINT_MIN_ATK);
  2589. PyModule_AddIntConstant(poModule, "ATT_MAX", POINT_MAX_ATK);
  2590. PyModule_AddIntConstant(poModule, "MIN_MAGIC_WEP", POINT_MIN_MAGIC_WEP);
  2591. PyModule_AddIntConstant(poModule, "MAX_MAGIC_WEP", POINT_MAX_MAGIC_WEP);
  2592. PyModule_AddIntConstant(poModule, "ATT_SPEED", POINT_ATT_SPEED);
  2593. PyModule_AddIntConstant(poModule, "ATT_BONUS", POINT_ATT_GRADE_BONUS);
  2594. PyModule_AddIntConstant(poModule, "EVADE_RATE", POINT_EVADE_RATE);
  2595. PyModule_AddIntConstant(poModule, "MOVING_SPEED", POINT_MOV_SPEED);
  2596. PyModule_AddIntConstant(poModule, "DEF_GRADE", POINT_DEF_GRADE);
  2597. PyModule_AddIntConstant(poModule, "DEF_BONUS", POINT_DEF_GRADE_BONUS);
  2598. PyModule_AddIntConstant(poModule, "CASTING_SPEED", POINT_CASTING_SPEED);
  2599. PyModule_AddIntConstant(poModule, "MAG_ATT", POINT_MAGIC_ATT_GRADE);
  2600. PyModule_AddIntConstant(poModule, "MAG_DEF", POINT_MAGIC_DEF_GRADE);
  2601. PyModule_AddIntConstant(poModule, "EMPIRE_POINT", POINT_EMPIRE_POINT);
  2602. PyModule_AddIntConstant(poModule, "STAT", POINT_STAT);
  2603. PyModule_AddIntConstant(poModule, "SKILL_PASSIVE", POINT_SUB_SKILL);
  2604. PyModule_AddIntConstant(poModule, "SKILL_SUPPORT", POINT_SUB_SKILL);
  2605. PyModule_AddIntConstant(poModule, "SKILL_ACTIVE", POINT_SKILL);
  2606. PyModule_AddIntConstant(poModule, "SKILL_HORSE", POINT_HORSE_SKILL);
  2607. PyModule_AddIntConstant(poModule, "PLAYTIME", POINT_PLAYTIME);
  2608. PyModule_AddIntConstant(poModule, "BOW_DISTANCE", POINT_BOW_DISTANCE);
  2609. PyModule_AddIntConstant(poModule, "HP_RECOVERY", POINT_HP_RECOVERY);
  2610. PyModule_AddIntConstant(poModule, "SP_RECOVERY", POINT_SP_RECOVERY);
  2611. PyModule_AddIntConstant(poModule, "ATTACKER_BONUS", POINT_PARTY_ATT_GRADE);
  2612. PyModule_AddIntConstant(poModule, "MAX_NUM", POINT_MAX_NUM);
  2613.  
  2614. PyModule_AddIntConstant(poModule, "POINT_CRITICAL_PCT", POINT_CRITICAL_PCT);
  2615. PyModule_AddIntConstant(poModule, "POINT_PENETRATE_PCT", POINT_PENETRATE_PCT);
  2616. PyModule_AddIntConstant(poModule, "POINT_MALL_ATTBONUS", POINT_MALL_ATTBONUS);
  2617. PyModule_AddIntConstant(poModule, "POINT_MALL_DEFBONUS", POINT_MALL_DEFBONUS);
  2618. PyModule_AddIntConstant(poModule, "POINT_MALL_EXPBONUS", POINT_MALL_EXPBONUS);
  2619. PyModule_AddIntConstant(poModule, "POINT_MALL_ITEMBONUS", POINT_MALL_ITEMBONUS);
  2620. PyModule_AddIntConstant(poModule, "POINT_MALL_GOLDBONUS", POINT_MALL_GOLDBONUS);
  2621. PyModule_AddIntConstant(poModule, "POINT_MAX_HP_PCT", POINT_MAX_HP_PCT);
  2622. PyModule_AddIntConstant(poModule, "POINT_MAX_SP_PCT", POINT_MAX_SP_PCT);
  2623.  
  2624. PyModule_AddIntConstant(poModule, "POINT_SKILL_DAMAGE_BONUS", POINT_SKILL_DAMAGE_BONUS);
  2625. PyModule_AddIntConstant(poModule, "POINT_NORMAL_HIT_DAMAGE_BONUS", POINT_NORMAL_HIT_DAMAGE_BONUS);
  2626. PyModule_AddIntConstant(poModule, "POINT_SKILL_DEFEND_BONUS", POINT_SKILL_DEFEND_BONUS);
  2627. PyModule_AddIntConstant(poModule, "POINT_NORMAL_HIT_DEFEND_BONUS", POINT_NORMAL_HIT_DEFEND_BONUS);
  2628.  
  2629. PyModule_AddIntConstant(poModule, "ENERGY", POINT_ENERGY);
  2630. PyModule_AddIntConstant(poModule, "ENERGY_END_TIME", POINT_ENERGY_END_TIME);
  2631.  
  2632. PyModule_AddIntConstant(poModule, "SKILL_GRADE_NORMAL", CPythonPlayer::SKILL_NORMAL);
  2633. PyModule_AddIntConstant(poModule, "SKILL_GRADE_MASTER", CPythonPlayer::SKILL_MASTER);
  2634. PyModule_AddIntConstant(poModule, "SKILL_GRADE_GRAND_MASTER", CPythonPlayer::SKILL_GRAND_MASTER);
  2635. PyModule_AddIntConstant(poModule, "SKILL_GRADE_PERFECT_MASTER", CPythonPlayer::SKILL_PERFECT_MASTER);
  2636.  
  2637. PyModule_AddIntConstant(poModule, "CATEGORY_ACTIVE", CPythonPlayer::CATEGORY_ACTIVE);
  2638. PyModule_AddIntConstant(poModule, "CATEGORY_PASSIVE", CPythonPlayer::CATEGORY_PASSIVE);
  2639.  
  2640. PyModule_AddIntConstant(poModule, "INVENTORY_PAGE_SIZE", c_Inventory_Page_Size);
  2641. PyModule_AddIntConstant(poModule, "INVENTORY_PAGE_COUNT", c_Inventory_Page_Count);
  2642. PyModule_AddIntConstant(poModule, "INVENTORY_SLOT_COUNT", c_Inventory_Count);
  2643. PyModule_AddIntConstant(poModule, "EQUIPMENT_SLOT_START", c_Equipment_Start);
  2644. PyModule_AddIntConstant(poModule, "EQUIPMENT_PAGE_COUNT", c_Equipment_Count);
  2645.  
  2646. #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
  2647. PyModule_AddIntConstant(poModule, "NEW_EQUIPMENT_SLOT_START", c_New_Equipment_Start);
  2648. PyModule_AddIntConstant(poModule, "NEW_EQUIPMENT_SLOT_COUNT", c_New_Equipment_Count);
  2649. #endif
  2650.  
  2651. PyModule_AddIntConstant(poModule, "MBF_SKILL", CPythonPlayer::MBF_SKILL);
  2652. PyModule_AddIntConstant(poModule, "MBF_ATTACK", CPythonPlayer::MBF_ATTACK);
  2653. PyModule_AddIntConstant(poModule, "MBF_CAMERA", CPythonPlayer::MBF_CAMERA);
  2654. PyModule_AddIntConstant(poModule, "MBF_SMART", CPythonPlayer::MBF_SMART);
  2655. PyModule_AddIntConstant(poModule, "MBF_MOVE", CPythonPlayer::MBF_MOVE);
  2656. PyModule_AddIntConstant(poModule, "MBF_AUTO", CPythonPlayer::MBF_AUTO);
  2657. PyModule_AddIntConstant(poModule, "MBS_PRESS", CPythonPlayer::MBS_PRESS);
  2658. PyModule_AddIntConstant(poModule, "MBS_CLICK", CPythonPlayer::MBS_CLICK);
  2659. PyModule_AddIntConstant(poModule, "MBT_RIGHT", CPythonPlayer::MBT_RIGHT);
  2660. PyModule_AddIntConstant(poModule, "MBT_LEFT", CPythonPlayer::MBT_LEFT);
  2661.  
  2662. PyModule_AddIntConstant(poModule, "SLOT_TYPE_NONE", SLOT_TYPE_NONE);
  2663. PyModule_AddIntConstant(poModule, "SLOT_TYPE_INVENTORY", SLOT_TYPE_INVENTORY);
  2664. PyModule_AddIntConstant(poModule, "SLOT_TYPE_SKILL", SLOT_TYPE_SKILL);
  2665.  
  2666. PyModule_AddIntConstant(poModule, "SLOT_TYPE_SHOP", SLOT_TYPE_SHOP);
  2667. PyModule_AddIntConstant(poModule, "SLOT_TYPE_EXCHANGE_OWNER", SLOT_TYPE_EXCHANGE_OWNER);
  2668. PyModule_AddIntConstant(poModule, "SLOT_TYPE_EXCHANGE_TARGET", SLOT_TYPE_EXCHANGE_TARGET);
  2669. PyModule_AddIntConstant(poModule, "SLOT_TYPE_QUICK_SLOT", SLOT_TYPE_QUICK_SLOT);
  2670. PyModule_AddIntConstant(poModule, "SLOT_TYPE_SAFEBOX", SLOT_TYPE_SAFEBOX);
  2671. PyModule_AddIntConstant(poModule, "SLOT_TYPE_PRIVATE_SHOP", SLOT_TYPE_PRIVATE_SHOP);
  2672. PyModule_AddIntConstant(poModule, "SLOT_TYPE_MALL", SLOT_TYPE_MALL);
  2673. PyModule_AddIntConstant(poModule, "SLOT_TYPE_EMOTION", SLOT_TYPE_EMOTION);
  2674. PyModule_AddIntConstant(poModule, "SLOT_TYPE_DRAGON_SOUL_INVENTORY", SLOT_TYPE_DRAGON_SOUL_INVENTORY);
  2675.  
  2676. PyModule_AddIntConstant(poModule, "RESERVED_WINDOW", RESERVED_WINDOW);
  2677. PyModule_AddIntConstant(poModule, "INVENTORY", INVENTORY);
  2678. PyModule_AddIntConstant(poModule, "EQUIPMENT", EQUIPMENT);
  2679. PyModule_AddIntConstant(poModule, "SAFEBOX", SAFEBOX);
  2680. PyModule_AddIntConstant(poModule, "MALL", MALL);
  2681. PyModule_AddIntConstant(poModule, "DRAGON_SOUL_INVENTORY", DRAGON_SOUL_INVENTORY);
  2682. PyModule_AddIntConstant(poModule, "GROUND", GROUND);
  2683.  
  2684. PyModule_AddIntConstant(poModule, "ITEM_MONEY", -1);
  2685.  
  2686. PyModule_AddIntConstant(poModule, "SKILL_SLOT_COUNT", SKILL_MAX_NUM);
  2687.  
  2688. PyModule_AddIntConstant(poModule, "EFFECT_PICK", CPythonPlayer::EFFECT_PICK);
  2689.  
  2690. PyModule_AddIntConstant(poModule, "METIN_SOCKET_TYPE_NONE", CPythonPlayer::METIN_SOCKET_TYPE_NONE);
  2691. PyModule_AddIntConstant(poModule, "METIN_SOCKET_TYPE_SILVER", CPythonPlayer::METIN_SOCKET_TYPE_SILVER);
  2692. PyModule_AddIntConstant(poModule, "METIN_SOCKET_TYPE_GOLD", CPythonPlayer::METIN_SOCKET_TYPE_GOLD);
  2693. PyModule_AddIntConstant(poModule, "METIN_SOCKET_MAX_NUM", ITEM_SOCKET_SLOT_MAX_NUM);
  2694. PyModule_AddIntConstant(poModule, "ATTRIBUTE_SLOT_MAX_NUM", ITEM_ATTRIBUTE_SLOT_MAX_NUM);
  2695.  
  2696. PyModule_AddIntConstant(poModule, "REFINE_CANT", REFINE_CANT);
  2697. PyModule_AddIntConstant(poModule, "REFINE_OK", REFINE_OK);
  2698. PyModule_AddIntConstant(poModule, "REFINE_ALREADY_MAX_SOCKET_COUNT", REFINE_ALREADY_MAX_SOCKET_COUNT);
  2699. PyModule_AddIntConstant(poModule, "REFINE_NEED_MORE_GOOD_SCROLL", REFINE_NEED_MORE_GOOD_SCROLL);
  2700. PyModule_AddIntConstant(poModule, "REFINE_CANT_MAKE_SOCKET_ITEM", REFINE_CANT_MAKE_SOCKET_ITEM);
  2701. PyModule_AddIntConstant(poModule, "REFINE_NOT_NEXT_GRADE_ITEM", REFINE_NOT_NEXT_GRADE_ITEM);
  2702. PyModule_AddIntConstant(poModule, "REFINE_CANT_REFINE_METIN_TO_EQUIPMENT", REFINE_CANT_REFINE_METIN_TO_EQUIPMENT);
  2703. PyModule_AddIntConstant(poModule, "REFINE_CANT_REFINE_ROD", REFINE_CANT_REFINE_ROD);
  2704. PyModule_AddIntConstant(poModule, "ATTACH_METIN_CANT", ATTACH_METIN_CANT);
  2705. PyModule_AddIntConstant(poModule, "ATTACH_METIN_OK", ATTACH_METIN_OK);
  2706. PyModule_AddIntConstant(poModule, "ATTACH_METIN_NOT_MATCHABLE_ITEM", ATTACH_METIN_NOT_MATCHABLE_ITEM);
  2707. PyModule_AddIntConstant(poModule, "ATTACH_METIN_NO_MATCHABLE_SOCKET", ATTACH_METIN_NO_MATCHABLE_SOCKET);
  2708. PyModule_AddIntConstant(poModule, "ATTACH_METIN_NOT_EXIST_GOLD_SOCKET", ATTACH_METIN_NOT_EXIST_GOLD_SOCKET);
  2709. PyModule_AddIntConstant(poModule, "ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT", ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT);
  2710. PyModule_AddIntConstant(poModule, "DETACH_METIN_CANT", DETACH_METIN_CANT);
  2711. PyModule_AddIntConstant(poModule, "DETACH_METIN_OK", DETACH_METIN_OK);
  2712.  
  2713. PyModule_AddIntConstant(poModule, "PARTY_STATE_NORMAL", CPythonPlayer::PARTY_ROLE_NORMAL);
  2714. PyModule_AddIntConstant(poModule, "PARTY_STATE_LEADER", CPythonPlayer::PARTY_ROLE_LEADER);
  2715. PyModule_AddIntConstant(poModule, "PARTY_STATE_ATTACKER", CPythonPlayer::PARTY_ROLE_ATTACKER);
  2716. PyModule_AddIntConstant(poModule, "PARTY_STATE_TANKER", CPythonPlayer::PARTY_ROLE_TANKER);
  2717. PyModule_AddIntConstant(poModule, "PARTY_STATE_BUFFER", CPythonPlayer::PARTY_ROLE_BUFFER);
  2718. PyModule_AddIntConstant(poModule, "PARTY_STATE_SKILL_MASTER", CPythonPlayer::PARTY_ROLE_SKILL_MASTER);
  2719. PyModule_AddIntConstant(poModule, "PARTY_STATE_BERSERKER", CPythonPlayer::PARTY_ROLE_BERSERKER);
  2720. PyModule_AddIntConstant(poModule, "PARTY_STATE_DEFENDER", CPythonPlayer::PARTY_ROLE_DEFENDER);
  2721. PyModule_AddIntConstant(poModule, "PARTY_STATE_MAX_NUM", CPythonPlayer::PARTY_ROLE_MAX_NUM);
  2722.  
  2723. PyModule_AddIntConstant(poModule, "SKILL_INDEX_TONGSOL", c_iSkillIndex_Tongsol);
  2724. PyModule_AddIntConstant(poModule, "SKILL_INDEX_FISHING", c_iSkillIndex_Fishing);
  2725. PyModule_AddIntConstant(poModule, "SKILL_INDEX_MINING", c_iSkillIndex_Mining);
  2726. PyModule_AddIntConstant(poModule, "SKILL_INDEX_MAKING", c_iSkillIndex_Making);
  2727. PyModule_AddIntConstant(poModule, "SKILL_INDEX_COMBO", c_iSkillIndex_Combo);
  2728. PyModule_AddIntConstant(poModule, "SKILL_INDEX_LANGUAGE1", c_iSkillIndex_Language1);
  2729. PyModule_AddIntConstant(poModule, "SKILL_INDEX_LANGUAGE2", c_iSkillIndex_Language2);
  2730. PyModule_AddIntConstant(poModule, "SKILL_INDEX_LANGUAGE3", c_iSkillIndex_Language3);
  2731. PyModule_AddIntConstant(poModule, "SKILL_INDEX_POLYMORPH", c_iSkillIndex_Polymorph);
  2732. PyModule_AddIntConstant(poModule, "SKILL_INDEX_RIDING", c_iSkillIndex_Riding);
  2733. PyModule_AddIntConstant(poModule, "SKILL_INDEX_SUMMON", c_iSkillIndex_Summon);
  2734.  
  2735. PyModule_AddIntConstant(poModule, "PK_MODE_PEACE", PK_MODE_PEACE);
  2736. PyModule_AddIntConstant(poModule, "PK_MODE_REVENGE", PK_MODE_REVENGE);
  2737. PyModule_AddIntConstant(poModule, "PK_MODE_FREE", PK_MODE_FREE);
  2738. PyModule_AddIntConstant(poModule, "PK_MODE_PROTECT", PK_MODE_PROTECT);
  2739. PyModule_AddIntConstant(poModule, "PK_MODE_GUILD", PK_MODE_GUILD);
  2740. PyModule_AddIntConstant(poModule, "PK_MODE_MAX_NUM", PK_MODE_MAX_NUM);
  2741.  
  2742. PyModule_AddIntConstant(poModule, "BLOCK_EXCHANGE", BLOCK_EXCHANGE);
  2743. PyModule_AddIntConstant(poModule, "BLOCK_PARTY", BLOCK_PARTY_INVITE);
  2744. PyModule_AddIntConstant(poModule, "BLOCK_GUILD", BLOCK_GUILD_INVITE);
  2745. PyModule_AddIntConstant(poModule, "BLOCK_WHISPER", BLOCK_WHISPER);
  2746. PyModule_AddIntConstant(poModule, "BLOCK_FRIEND", BLOCK_MESSENGER_INVITE);
  2747. PyModule_AddIntConstant(poModule, "BLOCK_PARTY_REQUEST", BLOCK_PARTY_REQUEST);
  2748.  
  2749. #ifdef ENABLE_VIEW_EQUIP
  2750. PyModule_AddIntConstant(poModule, "BLOCK_VIEW_EQUIPMENT", BLOCK_VIEW_EQUIPMENT);
  2751. #endif
  2752.  
  2753. PyModule_AddIntConstant(poModule, "PARTY_EXP_NON_DISTRIBUTION", PARTY_EXP_DISTRIBUTION_NON_PARITY);
  2754. PyModule_AddIntConstant(poModule, "PARTY_EXP_DISTRIBUTION_PARITY", PARTY_EXP_DISTRIBUTION_PARITY);
  2755.  
  2756. PyModule_AddIntConstant(poModule, "EMOTION_CLAP", EMOTION_CLAP);
  2757. PyModule_AddIntConstant(poModule, "EMOTION_CHEERS_1", EMOTION_CHEERS_1);
  2758. PyModule_AddIntConstant(poModule, "EMOTION_CHEERS_2", EMOTION_CHEERS_2);
  2759. PyModule_AddIntConstant(poModule, "EMOTION_DANCE_1", EMOTION_DANCE_1);
  2760. PyModule_AddIntConstant(poModule, "EMOTION_DANCE_2", EMOTION_DANCE_2);
  2761. PyModule_AddIntConstant(poModule, "EMOTION_DANCE_3", EMOTION_DANCE_3);
  2762. PyModule_AddIntConstant(poModule, "EMOTION_DANCE_4", EMOTION_DANCE_4);
  2763. PyModule_AddIntConstant(poModule, "EMOTION_DANCE_5", EMOTION_DANCE_5);
  2764. PyModule_AddIntConstant(poModule, "EMOTION_DANCE_6", EMOTION_DANCE_6);
  2765. PyModule_AddIntConstant(poModule, "EMOTION_CONGRATULATION", EMOTION_CONGRATULATION);
  2766. PyModule_AddIntConstant(poModule, "EMOTION_FORGIVE", EMOTION_FORGIVE);
  2767. PyModule_AddIntConstant(poModule, "EMOTION_ANGRY", EMOTION_ANGRY);
  2768. PyModule_AddIntConstant(poModule, "EMOTION_ATTRACTIVE", EMOTION_ATTRACTIVE);
  2769. PyModule_AddIntConstant(poModule, "EMOTION_SAD", EMOTION_SAD);
  2770. PyModule_AddIntConstant(poModule, "EMOTION_SHY", EMOTION_SHY);
  2771. PyModule_AddIntConstant(poModule, "EMOTION_CHEERUP", EMOTION_CHEERUP);
  2772. PyModule_AddIntConstant(poModule, "EMOTION_BANTER", EMOTION_BANTER);
  2773. PyModule_AddIntConstant(poModule, "EMOTION_JOY", EMOTION_JOY);
  2774. PyModule_AddIntConstant(poModule, "EMOTION_KISS", EMOTION_KISS);
  2775. PyModule_AddIntConstant(poModule, "EMOTION_FRENCH_KISS", EMOTION_FRENCH_KISS);
  2776. PyModule_AddIntConstant(poModule, "EMOTION_SLAP", EMOTION_SLAP);
  2777.  
  2778. PyModule_AddIntConstant(poModule, "AUTO_POTION_TYPE_HP", CPythonPlayer::AUTO_POTION_TYPE_HP);
  2779. PyModule_AddIntConstant(poModule, "AUTO_POTION_TYPE_SP", CPythonPlayer::AUTO_POTION_TYPE_SP);
  2780.  
  2781. PyModule_AddIntConstant(poModule, "DRAGON_SOUL_PAGE_SIZE", c_DragonSoul_Inventory_Box_Size);
  2782. PyModule_AddIntConstant(poModule, "DRAGON_SOUL_PAGE_COUNT", DRAGON_SOUL_GRADE_MAX);
  2783. PyModule_AddIntConstant(poModule, "DRAGON_SOUL_SLOT_COUNT", c_DragonSoul_Inventory_Count);
  2784. PyModule_AddIntConstant(poModule, "DRAGON_SOUL_EQUIPMENT_SLOT_START", c_DragonSoul_Equip_Start);
  2785. PyModule_AddIntConstant(poModule, "DRAGON_SOUL_EQUIPMENT_PAGE_COUNT", DS_DECK_MAX_NUM);
  2786. PyModule_AddIntConstant(poModule, "DRAGON_SOUL_EQUIPMENT_FIRST_SIZE", c_DragonSoul_Equip_Slot_Max);
  2787.  
  2788. PyModule_AddIntConstant(poModule, "DRAGON_SOUL_REFINE_CLOSE", DS_SUB_HEADER_CLOSE);
  2789. PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_DO_UPGRADE", DS_SUB_HEADER_DO_UPGRADE);
  2790. PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_DO_IMPROVEMENT", DS_SUB_HEADER_DO_IMPROVEMENT);
  2791. PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_DO_REFINE", DS_SUB_HEADER_DO_REFINE);
  2792.  
  2793. #ifdef ENABLE_SWITCHBOT
  2794. PyModule_AddIntConstant(poModule, "SWITCHBOT", SWITCHBOT);
  2795. PyModule_AddIntConstant(poModule, "SLOT_TYPE_SWITCHBOT", SLOT_TYPE_SWITCHBOT);
  2796. #endif
  2797.  
  2798. }
  2799.  
Advertisement
Add Comment
Please, Sign In to add comment