elws

pythonitemmodule

Nov 5th, 2024
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 54.50 KB | None | 0 0
  1. #include "StdAfx.h"
  2. #include "PythonItem.h"
  3.  
  4. #include "../gamelib/ItemManager.h"
  5. #include "../gamelib/GameLibDefines.h"
  6. #include "InstanceBase.h"
  7. #include "AbstractApplication.h"
  8.  
  9. #ifdef __BL__DETAILS_UI__
  10. #include "Packet.h"
  11.  
  12. static BYTE __GetApplyPointType(BYTE bApplyType)
  13. {
  14. switch (bApplyType)
  15. {
  16. // Generated from constants.cpp(aApplyInfo)
  17. case CItemData::EApplyTypes::APPLY_NONE: return EPointTypes::POINT_NONE;
  18. case CItemData::EApplyTypes::APPLY_MAX_HP: return EPointTypes::POINT_MAX_HP;
  19. case CItemData::EApplyTypes::APPLY_MAX_SP: return EPointTypes::POINT_MAX_SP;
  20. case CItemData::EApplyTypes::APPLY_CON: return EPointTypes::POINT_HT;
  21. case CItemData::EApplyTypes::APPLY_INT: return EPointTypes::POINT_IQ;
  22. case CItemData::EApplyTypes::APPLY_STR: return EPointTypes::POINT_ST;
  23. case CItemData::EApplyTypes::APPLY_DEX: return EPointTypes::POINT_DX;
  24. case CItemData::EApplyTypes::APPLY_ATT_SPEED: return EPointTypes::POINT_ATT_SPEED;
  25. case CItemData::EApplyTypes::APPLY_MOV_SPEED: return EPointTypes::POINT_MOV_SPEED;
  26. case CItemData::EApplyTypes::APPLY_CAST_SPEED: return EPointTypes::POINT_CASTING_SPEED;
  27. case CItemData::EApplyTypes::APPLY_HP_REGEN: return EPointTypes::POINT_HP_REGEN;
  28. case CItemData::EApplyTypes::APPLY_SP_REGEN: return EPointTypes::POINT_SP_REGEN;
  29. case CItemData::EApplyTypes::APPLY_POISON_PCT: return EPointTypes::POINT_POISON_PCT;
  30. case CItemData::EApplyTypes::APPLY_STUN_PCT: return EPointTypes::POINT_STUN_PCT;
  31. case CItemData::EApplyTypes::APPLY_SLOW_PCT: return EPointTypes::POINT_SLOW_PCT;
  32. case CItemData::EApplyTypes::APPLY_CRITICAL_PCT: return EPointTypes::POINT_CRITICAL_PCT;
  33. case CItemData::EApplyTypes::APPLY_PENETRATE_PCT: return EPointTypes::POINT_PENETRATE_PCT;
  34. case CItemData::EApplyTypes::APPLY_ATTBONUS_HUMAN: return EPointTypes::POINT_ATTBONUS_HUMAN;
  35. case CItemData::EApplyTypes::APPLY_ATTBONUS_ANIMAL: return EPointTypes::POINT_ATTBONUS_ANIMAL;
  36. case CItemData::EApplyTypes::APPLY_ATTBONUS_ORC: return EPointTypes::POINT_ATTBONUS_ORC;
  37. case CItemData::EApplyTypes::APPLY_ATTBONUS_MILGYO: return EPointTypes::POINT_ATTBONUS_MILGYO;
  38. case CItemData::EApplyTypes::APPLY_ATTBONUS_UNDEAD: return EPointTypes::POINT_ATTBONUS_UNDEAD;
  39. case CItemData::EApplyTypes::APPLY_ATTBONUS_DEVIL: return EPointTypes::POINT_ATTBONUS_DEVIL;
  40. case CItemData::EApplyTypes::APPLY_STEAL_HP: return EPointTypes::POINT_STEAL_HP;
  41. case CItemData::EApplyTypes::APPLY_STEAL_SP: return EPointTypes::POINT_STEAL_SP;
  42. case CItemData::EApplyTypes::APPLY_MANA_BURN_PCT: return EPointTypes::POINT_MANA_BURN_PCT;
  43. case CItemData::EApplyTypes::APPLY_DAMAGE_SP_RECOVER: return EPointTypes::POINT_DAMAGE_SP_RECOVER;
  44. case CItemData::EApplyTypes::APPLY_BLOCK: return EPointTypes::POINT_BLOCK;
  45. case CItemData::EApplyTypes::APPLY_DODGE: return EPointTypes::POINT_DODGE;
  46. case CItemData::EApplyTypes::APPLY_RESIST_SWORD: return EPointTypes::POINT_RESIST_SWORD;
  47. case CItemData::EApplyTypes::APPLY_RESIST_TWOHAND: return EPointTypes::POINT_RESIST_TWOHAND;
  48. case CItemData::EApplyTypes::APPLY_RESIST_DAGGER: return EPointTypes::POINT_RESIST_DAGGER;
  49. case CItemData::EApplyTypes::APPLY_RESIST_BELL: return EPointTypes::POINT_RESIST_BELL;
  50. case CItemData::EApplyTypes::APPLY_RESIST_FAN: return EPointTypes::POINT_RESIST_FAN;
  51. case CItemData::EApplyTypes::APPLY_RESIST_BOW: return EPointTypes::POINT_RESIST_BOW;
  52. case CItemData::EApplyTypes::APPLY_RESIST_FIRE: return EPointTypes::POINT_RESIST_FIRE;
  53. case CItemData::EApplyTypes::APPLY_RESIST_ELEC: return EPointTypes::POINT_RESIST_ELEC;
  54. case CItemData::EApplyTypes::APPLY_RESIST_MAGIC: return EPointTypes::POINT_RESIST_MAGIC;
  55. case CItemData::EApplyTypes::APPLY_RESIST_WIND: return EPointTypes::POINT_RESIST_WIND;
  56. case CItemData::EApplyTypes::APPLY_REFLECT_MELEE: return EPointTypes::POINT_REFLECT_MELEE;
  57. case CItemData::EApplyTypes::APPLY_REFLECT_CURSE: return EPointTypes::POINT_REFLECT_CURSE;
  58. case CItemData::EApplyTypes::APPLY_POISON_REDUCE: return EPointTypes::POINT_POISON_REDUCE;
  59. case CItemData::EApplyTypes::APPLY_KILL_SP_RECOVER: return EPointTypes::POINT_KILL_SP_RECOVER;
  60. case CItemData::EApplyTypes::APPLY_EXP_DOUBLE_BONUS: return EPointTypes::POINT_EXP_DOUBLE_BONUS;
  61. case CItemData::EApplyTypes::APPLY_GOLD_DOUBLE_BONUS: return EPointTypes::POINT_GOLD_DOUBLE_BONUS;
  62. case CItemData::EApplyTypes::APPLY_ITEM_DROP_BONUS: return EPointTypes::POINT_ITEM_DROP_BONUS;
  63. case CItemData::EApplyTypes::APPLY_POTION_BONUS: return EPointTypes::POINT_POTION_BONUS;
  64. case CItemData::EApplyTypes::APPLY_KILL_HP_RECOVER: return EPointTypes::POINT_KILL_HP_RECOVER;
  65. case CItemData::EApplyTypes::APPLY_IMMUNE_STUN: return EPointTypes::POINT_IMMUNE_STUN;
  66. case CItemData::EApplyTypes::APPLY_IMMUNE_SLOW: return EPointTypes::POINT_IMMUNE_SLOW;
  67. case CItemData::EApplyTypes::APPLY_IMMUNE_FALL: return EPointTypes::POINT_IMMUNE_FALL;
  68. case CItemData::EApplyTypes::APPLY_SKILL: return EPointTypes::POINT_NONE;
  69. case CItemData::EApplyTypes::APPLY_BOW_DISTANCE: return EPointTypes::POINT_BOW_DISTANCE;
  70. case CItemData::EApplyTypes::APPLY_ATT_GRADE_BONUS: return EPointTypes::POINT_ATT_GRADE_BONUS;
  71. case CItemData::EApplyTypes::APPLY_DEF_GRADE_BONUS: return EPointTypes::POINT_DEF_GRADE_BONUS;
  72. case CItemData::EApplyTypes::APPLY_MAGIC_ATT_GRADE: return EPointTypes::POINT_MAGIC_ATT_GRADE_BONUS;
  73. case CItemData::EApplyTypes::APPLY_MAGIC_DEF_GRADE: return EPointTypes::POINT_MAGIC_DEF_GRADE_BONUS;
  74. case CItemData::EApplyTypes::APPLY_CURSE_PCT: return EPointTypes::POINT_CURSE_PCT;
  75. case CItemData::EApplyTypes::APPLY_MAX_STAMINA: return EPointTypes::POINT_MAX_STAMINA;
  76. case CItemData::EApplyTypes::APPLY_ATT_BONUS_TO_WARRIOR: return EPointTypes::POINT_ATTBONUS_UNUSED1;
  77. case CItemData::EApplyTypes::APPLY_ATT_BONUS_TO_ASSASSIN: return EPointTypes::POINT_ATTBONUS_UNUSED2;
  78. case CItemData::EApplyTypes::APPLY_ATT_BONUS_TO_SURA: return EPointTypes::POINT_ATTBONUS_UNUSED3;
  79. case CItemData::EApplyTypes::APPLY_ATT_BONUS_TO_SHAMAN: return EPointTypes::POINT_ATTBONUS_UNUSED4;
  80. case CItemData::EApplyTypes::APPLY_ATT_BONUS_TO_MONSTER: return EPointTypes::POINT_ATTBONUS_UNUSED0;
  81. case CItemData::EApplyTypes::APPLY_MALL_ATTBONUS: return EPointTypes::POINT_ATT_BONUS;
  82. case CItemData::EApplyTypes::APPLY_MALL_DEFBONUS: return EPointTypes::POINT_MALL_DEFBONUS;
  83. case CItemData::EApplyTypes::APPLY_MALL_EXPBONUS: return EPointTypes::POINT_MALL_EXPBONUS;
  84. case CItemData::EApplyTypes::APPLY_MALL_ITEMBONUS: return EPointTypes::POINT_MALL_ITEMBONUS;
  85. case CItemData::EApplyTypes::APPLY_MALL_GOLDBONUS: return EPointTypes::POINT_MALL_GOLDBONUS;
  86. case CItemData::EApplyTypes::APPLY_MAX_HP_PCT: return EPointTypes::POINT_MAX_HP_PCT;
  87. case CItemData::EApplyTypes::APPLY_MAX_SP_PCT: return EPointTypes::POINT_MAX_SP_PCT;
  88. case CItemData::EApplyTypes::APPLY_SKILL_DAMAGE_BONUS: return EPointTypes::POINT_SKILL_DAMAGE_BONUS;
  89. case CItemData::EApplyTypes::APPLY_NORMAL_HIT_DAMAGE_BONUS: return EPointTypes::POINT_NORMAL_HIT_DAMAGE_BONUS;
  90. case CItemData::EApplyTypes::APPLY_SKILL_DEFEND_BONUS: return EPointTypes::POINT_SKILL_DEFEND_BONUS;
  91. case CItemData::EApplyTypes::APPLY_NORMAL_HIT_DEFEND_BONUS: return EPointTypes::POINT_NORMAL_HIT_DEFEND_BONUS;
  92. case CItemData::EApplyTypes::APPLY_EXTRACT_HP_PCT: return EPointTypes::POINT_NONE;
  93. case CItemData::EApplyTypes::APPLY_PC_BANG_EXP_BONUS: return EPointTypes::POINT_PC_BANG_EXP_BONUS;
  94. case CItemData::EApplyTypes::APPLY_PC_BANG_DROP_BONUS: return EPointTypes::POINT_PC_BANG_DROP_BONUS;
  95. case CItemData::EApplyTypes::APPLY_RESIST_WARRIOR: return EPointTypes::POINT_ATTBONUS_UNUSED6;
  96. case CItemData::EApplyTypes::APPLY_RESIST_ASSASSIN: return EPointTypes::POINT_ATTBONUS_UNUSED7;
  97. case CItemData::EApplyTypes::APPLY_RESIST_SURA: return EPointTypes::POINT_ATTBONUS_UNUSED8;
  98. case CItemData::EApplyTypes::APPLY_RESIST_SHAMAN: return EPointTypes::POINT_ATTBONUS_UNUSED9;
  99. case CItemData::EApplyTypes::APPLY_ENERGY: return EPointTypes::POINT_ENERGY;
  100. case CItemData::EApplyTypes::APPLY_DEF_GRADE: return EPointTypes::POINT_DEF_GRADE;
  101. case CItemData::EApplyTypes::APPLY_COSTUME_ATTR_BONUS: return EPointTypes::POINT_COSTUME_ATTR_BONUS;
  102. case CItemData::EApplyTypes::APPLY_MAGIC_ATTBONUS_PER: return EPointTypes::POINT_MAGIC_ATT_BONUS_PER;
  103. case CItemData::EApplyTypes::APPLY_MELEE_MAGIC_ATTBONUS_PER: return EPointTypes::POINT_MELEE_MAGIC_ATT_BONUS_PER;
  104. case CItemData::EApplyTypes::APPLY_RESIST_ICE: return EPointTypes::POINT_RESIST_ICE;
  105. case CItemData::EApplyTypes::APPLY_RESIST_EARTH: return EPointTypes::POINT_RESIST_EARTH;
  106. case CItemData::EApplyTypes::APPLY_RESIST_DARK: return EPointTypes::POINT_RESIST_DARK;
  107. case CItemData::EApplyTypes::APPLY_ANTI_CRITICAL_PCT: return EPointTypes::POINT_RESIST_CRITICAL;
  108. case CItemData::EApplyTypes::APPLY_ANTI_PENETRATE_PCT: return EPointTypes::POINT_RESIST_PENETRATE;
  109.  
  110. #if 0
  111. case CItemData::EApplyTypes::APPLY_RESIST_HUMAN: return EPointTypes::POINT_NONE;
  112. case CItemData::EApplyTypes::APPLY_ATTBONUS_CZ: return EPointTypes::POINT_NONE;
  113. case CItemData::EApplyTypes::APPLY_ATTBONUS_DESERT: return EPointTypes::POINT_NONE;
  114. case CItemData::EApplyTypes::APPLY_ATTBONUS_INSECT: return EPointTypes::POINT_NONE;
  115. case CItemData::EApplyTypes::APPLY_RESIST_MAGIC_REDUCTION: return EPointTypes::POINT_NONE;
  116. case CItemData::EApplyTypes::APPLY_ENCHANT_ELECT: return EPointTypes::POINT_NONE;
  117. case CItemData::EApplyTypes::APPLY_ENCHANT_ICE: return EPointTypes::POINT_NONE;
  118. case CItemData::EApplyTypes::APPLY_ENCHANT_DARK: return EPointTypes::POINT_NONE;
  119. case CItemData::EApplyTypes::APPLY_ENCHANT_FIRE: return EPointTypes::POINT_NONE;
  120. case CItemData::EApplyTypes::APPLY_ENCHANT_WIND: return EPointTypes::POINT_NONE;
  121. case CItemData::EApplyTypes::APPLY_ENCHANT_EARTH: return EPointTypes::POINT_NONE;
  122. case CItemData::EApplyTypes::APPLY_ATTBONUS_WOLFMAN: return EPointTypes::POINT_NONE;
  123. case CItemData::EApplyTypes::APPLY_RESIST_WOLFMAN: return EPointTypes::POINT_NONE;
  124. case CItemData::EApplyTypes::APPLY_RESIST_CLAW: return EPointTypes::POINT_NONE;
  125. case CItemData::EApplyTypes::APPLY_ATTBONUS_SWORD: return EPointTypes::POINT_NONE;
  126. case CItemData::EApplyTypes::APPLY_ATTBONUS_TWOHAND: return EPointTypes::POINT_NONE;
  127. case CItemData::EApplyTypes::APPLY_ATTBONUS_DAGGER: return EPointTypes::POINT_NONE;
  128. case CItemData::EApplyTypes::APPLY_ATTBONUS_BELL: return EPointTypes::POINT_NONE;
  129. case CItemData::EApplyTypes::APPLY_ATTBONUS_FAN: return EPointTypes::POINT_NONE;
  130. case CItemData::EApplyTypes::APPLY_ATTBONUS_BOW: return EPointTypes::POINT_NONE;
  131. case CItemData::EApplyTypes::APPLY_ATTBONUS_CLAW: return EPointTypes::POINT_NONE;
  132. case CItemData::EApplyTypes::APPLY_RESIST_MOUNT_FALL: return EPointTypes::POINT_NONE;
  133. case CItemData::EApplyTypes::APPLY_BLEEDING_PCT: return EPointTypes::POINT_NONE;
  134. case CItemData::EApplyTypes::APPLY_BLEEDING_REDUCE: return EPointTypes::POINT_NONE;
  135. #endif
  136. }
  137.  
  138. return POINT_MAX_NUM;
  139. }
  140.  
  141. PyObject* itemGetApplyPoint(PyObject* poSelf, PyObject* poArgs)
  142. {
  143. BYTE bApplyType;
  144. if (!PyTuple_GetByte(poArgs, 0, &bApplyType))
  145. return Py_BuildException();
  146.  
  147. const BYTE bApplyPointType{ __GetApplyPointType(bApplyType) };
  148. if (bApplyPointType == POINT_MAX_NUM)
  149. TraceError("itemGetApplyPoint - Cannot find Apply Point Type(Apply Type: %d)", bApplyType);
  150.  
  151. return Py_BuildValue("i", bApplyPointType);
  152. }
  153. #endif
  154.  
  155. extern int TWOHANDED_WEWAPON_ATT_SPEED_DECREASE_VALUE;
  156.  
  157. PyObject * itemSetUseSoundFileName(PyObject * poSelf, PyObject * poArgs)
  158. {
  159. int iUseSound;
  160. if (!PyTuple_GetInteger(poArgs, 0, &iUseSound))
  161. return Py_BadArgument();
  162.  
  163. char* szFileName;
  164. if (!PyTuple_GetString(poArgs, 1, &szFileName))
  165. return Py_BadArgument();
  166.  
  167. CPythonItem& rkItem=CPythonItem::Instance();
  168. rkItem.SetUseSoundFileName(iUseSound, szFileName);
  169. return Py_BuildNone();
  170. }
  171.  
  172. PyObject * itemSetDropSoundFileName(PyObject * poSelf, PyObject * poArgs)
  173. {
  174. int iDropSound;
  175. if (!PyTuple_GetInteger(poArgs, 0, &iDropSound))
  176. return Py_BadArgument();
  177.  
  178. char* szFileName;
  179. if (!PyTuple_GetString(poArgs, 1, &szFileName))
  180. return Py_BadArgument();
  181.  
  182. CPythonItem& rkItem=CPythonItem::Instance();
  183. rkItem.SetDropSoundFileName(iDropSound, szFileName);
  184. return Py_BuildNone();
  185. }
  186.  
  187. PyObject * itemSelectItem(PyObject * poSelf, PyObject * poArgs)
  188. {
  189. int iIndex;
  190. if (!PyTuple_GetInteger(poArgs, 0, &iIndex))
  191. return Py_BadArgument();
  192.  
  193. if (!CItemManager::Instance().SelectItemData(iIndex))
  194. {
  195. TraceError("Cannot find item by %d", iIndex);
  196. CItemManager::Instance().SelectItemData(60001);
  197. }
  198.  
  199. return Py_BuildNone();
  200. }
  201.  
  202. PyObject * itemGetItemName(PyObject * poSelf, PyObject * poArgs)
  203. {
  204. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  205. if (!pItemData)
  206. return Py_BuildException("no selected item data");
  207.  
  208. return Py_BuildValue("s", pItemData->GetName());
  209. }
  210.  
  211. PyObject * itemGetItemDescription(PyObject * poSelf, PyObject * poArgs)
  212. {
  213. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  214. if (!pItemData)
  215. return Py_BuildException("no selected item data");
  216.  
  217. return Py_BuildValue("s", pItemData->GetDescription());
  218. }
  219.  
  220. PyObject * itemGetItemSummary(PyObject * poSelf, PyObject * poArgs)
  221. {
  222. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  223. if (!pItemData)
  224. return Py_BuildException("no selected item data");
  225.  
  226. return Py_BuildValue("s", pItemData->GetSummary());
  227. }
  228.  
  229. PyObject * itemGetIconImage(PyObject * poSelf, PyObject * poArgs)
  230. {
  231. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  232. if (!pItemData)
  233. return Py_BuildException("no selected item data");
  234.  
  235. // if (CItemData::ITEM_TYPE_SKILLBOOK == pItemData->GetType())
  236. // {
  237. // char szItemName[64+1];
  238. // _snprintf(szItemName, "d:/ymir work/ui/items/etc/book_%02d.sub", );
  239. // CGraphicImage * pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(szItemName);
  240. // }
  241.  
  242. return Py_BuildValue("i", pItemData->GetIconImage());
  243. }
  244.  
  245. PyObject * itemGetIconImageFileName(PyObject * poSelf, PyObject * poArgs)
  246. {
  247. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  248. if (!pItemData)
  249. return Py_BuildException("no selected item data");
  250.  
  251. CGraphicSubImage * pImage = pItemData->GetIconImage();
  252. if (!pImage)
  253. return Py_BuildValue("s", "Noname");
  254.  
  255. return Py_BuildValue("s", pImage->GetFileName());
  256. }
  257.  
  258. PyObject * itemGetItemSize(PyObject * poSelf, PyObject * poArgs)
  259. {
  260. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  261. if (!pItemData)
  262. return Py_BuildException("no selected item data");
  263.  
  264. return Py_BuildValue("(ii)", 1, pItemData->GetSize());
  265. }
  266.  
  267. PyObject * itemGetItemType(PyObject * poSelf, PyObject * poArgs)
  268. {
  269. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  270. if (!pItemData)
  271. return Py_BuildException("no selected item data");
  272.  
  273. return Py_BuildValue("i", pItemData->GetType());
  274. }
  275.  
  276. PyObject * itemGetItemSubType(PyObject * poSelf, PyObject * poArgs)
  277. {
  278. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  279. if (!pItemData)
  280. return Py_BuildException("no selected item data");
  281.  
  282. return Py_BuildValue("i", pItemData->GetSubType());
  283. }
  284.  
  285. PyObject * itemGetIBuyItemPrice(PyObject * poSelf, PyObject * poArgs)
  286. {
  287. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  288.  
  289. if (!pItemData)
  290. return Py_BuildException("no selected item data");
  291.  
  292. return Py_BuildValue("i", pItemData->GetIBuyItemPrice());
  293. }
  294.  
  295. PyObject * itemGetISellItemPrice(PyObject * poSelf, PyObject * poArgs)
  296. {
  297. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  298.  
  299. if (!pItemData)
  300. return Py_BuildException("no selected item data");
  301.  
  302. return Py_BuildValue("i", pItemData->GetISellItemPrice());
  303. }
  304.  
  305.  
  306. PyObject * itemIsAntiFlag(PyObject * poSelf, PyObject * poArgs)
  307. {
  308. int iFlag;
  309. if (!PyTuple_GetInteger(poArgs, 0, &iFlag))
  310. return Py_BadArgument();
  311.  
  312. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  313. if (!pItemData)
  314. return Py_BuildException("no selected item data");
  315.  
  316. return Py_BuildValue("i", pItemData->IsAntiFlag(iFlag));
  317. }
  318.  
  319. PyObject * itemIsFlag(PyObject * poSelf, PyObject * poArgs)
  320. {
  321. int iFlag;
  322. if (!PyTuple_GetInteger(poArgs, 0, &iFlag))
  323. return Py_BadArgument();
  324.  
  325. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  326. if (!pItemData)
  327. return Py_BuildException("no selected item data");
  328.  
  329. return Py_BuildValue("i", pItemData->IsFlag(iFlag));
  330. }
  331.  
  332. PyObject * itemIsWearableFlag(PyObject * poSelf, PyObject * poArgs)
  333. {
  334. int iFlag;
  335. if (!PyTuple_GetInteger(poArgs, 0, &iFlag))
  336. return Py_BadArgument();
  337.  
  338. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  339. if (!pItemData)
  340. return Py_BuildException("no selected item data");
  341.  
  342. return Py_BuildValue("i", pItemData->IsWearableFlag(iFlag));
  343. }
  344.  
  345. PyObject * itemIs1GoldItem(PyObject * poSelf, PyObject * poArgs)
  346. {
  347. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  348. if (!pItemData)
  349. return Py_BuildException("no selected item data");
  350.  
  351. return Py_BuildValue("i", pItemData->IsFlag(CItemData::ITEM_FLAG_COUNT_PER_1GOLD));
  352. }
  353.  
  354. PyObject * itemGetLimit(PyObject * poSelf, PyObject * poArgs)
  355. {
  356. int iValueIndex;
  357. if (!PyTuple_GetInteger(poArgs, 0, &iValueIndex))
  358. return Py_BadArgument();
  359.  
  360. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  361. if (!pItemData)
  362. return Py_BuildException("Not yet select item data");
  363.  
  364. CItemData::TItemLimit ItemLimit;
  365. if (!pItemData->GetLimit(iValueIndex, &ItemLimit))
  366. return Py_BuildException();
  367.  
  368. return Py_BuildValue("ii", ItemLimit.bType, ItemLimit.lValue);
  369. }
  370.  
  371. PyObject * itemGetAffect(PyObject * poSelf, PyObject * poArgs)
  372. {
  373. int iValueIndex;
  374. if (!PyTuple_GetInteger(poArgs, 0, &iValueIndex))
  375. return Py_BadArgument();
  376.  
  377. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  378. if (!pItemData)
  379. return Py_BuildException("Not yet select item data");
  380.  
  381. CItemData::TItemApply ItemApply;
  382. if (!pItemData->GetApply(iValueIndex, &ItemApply))
  383. return Py_BuildException();
  384.  
  385. if ((CItemData::APPLY_ATT_SPEED == ItemApply.bType) && (CItemData::ITEM_TYPE_WEAPON == pItemData->GetType()) && (CItemData::WEAPON_TWO_HANDED == pItemData->GetSubType()))
  386. {
  387. ItemApply.lValue -= TWOHANDED_WEWAPON_ATT_SPEED_DECREASE_VALUE;
  388. }
  389.  
  390. return Py_BuildValue("ii", ItemApply.bType, ItemApply.lValue);
  391. }
  392.  
  393. PyObject * itemGetValue(PyObject * poSelf, PyObject * poArgs)
  394. {
  395. int iValueIndex;
  396. if (!PyTuple_GetInteger(poArgs, 0, &iValueIndex))
  397. return Py_BadArgument();
  398.  
  399. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  400. if (!pItemData)
  401. return Py_BuildException("Not yet select item data");
  402.  
  403. return Py_BuildValue("i", pItemData->GetValue(iValueIndex));
  404. }
  405.  
  406. PyObject * itemGetSocket(PyObject * poSelf, PyObject * poArgs)
  407. {
  408. int iValueIndex;
  409. if (!PyTuple_GetInteger(poArgs, 0, &iValueIndex))
  410. return Py_BadArgument();
  411.  
  412. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  413. if (!pItemData)
  414. return Py_BuildException("Not yet select item data");
  415.  
  416. return Py_BuildValue("i", pItemData->GetSocket(iValueIndex));
  417. }
  418.  
  419. PyObject * itemGetIconInstance(PyObject * poSelf, PyObject * poArgs)
  420. {
  421. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  422. if (!pItemData)
  423. return Py_BuildException("Not yet select item data");
  424.  
  425. CGraphicSubImage * pImage = pItemData->GetIconImage();
  426. if (!pImage)
  427. return Py_BuildException("Cannot get icon image by %d", pItemData->GetIndex());
  428.  
  429. CGraphicImageInstance * pImageInstance = CGraphicImageInstance::New();
  430. pImageInstance->SetImagePointer(pImage);
  431.  
  432. return Py_BuildValue("i", pImageInstance);
  433. }
  434.  
  435. PyObject * itemDeleteIconInstance(PyObject * poSelf, PyObject * poArgs)
  436. {
  437. int iHandle;
  438. if (!PyTuple_GetInteger(poArgs, 0, &iHandle))
  439. return Py_BadArgument();
  440.  
  441. CGraphicImageInstance::Delete((CGraphicImageInstance *) iHandle);
  442.  
  443. return Py_BuildNone();
  444. }
  445.  
  446. PyObject * itemIsEquipmentVID(PyObject * poSelf, PyObject * poArgs)
  447. {
  448. int iItemVID;
  449. if (!PyTuple_GetInteger(poArgs, 0, &iItemVID))
  450. return Py_BadArgument();
  451.  
  452. CItemManager::Instance().SelectItemData(iItemVID);
  453. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  454. if (!pItemData)
  455. return Py_BuildException("Not yet select item data");
  456.  
  457. return Py_BuildValue("i", pItemData->IsEquipment());
  458. }
  459.  
  460. PyObject* itemGetApplyPoint(PyObject* poSelf, PyObject* poArgs)
  461. {
  462. int applyType = 0;
  463. if (!PyTuple_GetInteger(poArgs, 0, &applyType))
  464. return Py_BadArgument();
  465.  
  466. return Py_BuildValue("i", ApplyTypeToPointType((BYTE)applyType));
  467. }
  468.  
  469. // 2005.05.20.myevan.통합 USE_TYPE 체크
  470. PyObject* itemGetUseType(PyObject * poSelf, PyObject * poArgs)
  471. {
  472. int iItemVID;
  473. if (!PyTuple_GetInteger(poArgs, 0, &iItemVID))
  474. return Py_BadArgument();
  475.  
  476. CItemManager::Instance().SelectItemData(iItemVID);
  477. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  478. if (!pItemData)
  479. return Py_BuildException("Can't find select item data");
  480.  
  481. return Py_BuildValue("s", pItemData->GetUseTypeString());
  482. }
  483.  
  484. PyObject * itemIsRefineScroll(PyObject * poSelf, PyObject * poArgs)
  485. {
  486. int iItemIndex;
  487. if (!PyTuple_GetInteger(poArgs, 0, &iItemIndex))
  488. return Py_BadArgument();
  489.  
  490. CItemManager::Instance().SelectItemData(iItemIndex);
  491. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  492. if (!pItemData)
  493. return Py_BuildException("Can't find select item data");
  494.  
  495. if (pItemData->GetType() != CItemData::ITEM_TYPE_USE)
  496. return Py_BuildValue("i", FALSE);
  497.  
  498. switch (pItemData->GetSubType())
  499. {
  500. case CItemData::USE_TUNING:
  501. return Py_BuildValue("i", TRUE);
  502. break;
  503. }
  504.  
  505. return Py_BuildValue("i", FALSE);
  506. }
  507.  
  508. PyObject * itemIsDetachScroll(PyObject * poSelf, PyObject * poArgs)
  509. {
  510. int iItemIndex;
  511. if (!PyTuple_GetInteger(poArgs, 0, &iItemIndex))
  512. return Py_BadArgument();
  513.  
  514. CItemManager::Instance().SelectItemData(iItemIndex);
  515. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  516. if (!pItemData)
  517. return Py_BuildException("Can't find select item data");
  518.  
  519. int iType = pItemData->GetType();
  520. int iSubType = pItemData->GetSubType();
  521. if (iType == CItemData::ITEM_TYPE_USE)
  522. if (iSubType == CItemData::USE_DETACHMENT)
  523. {
  524. return Py_BuildValue("i", TRUE);
  525. }
  526.  
  527. return Py_BuildValue("i", FALSE);
  528. }
  529.  
  530. PyObject * itemCanAddToQuickSlotItem(PyObject * poSelf, PyObject * poArgs)
  531. {
  532. int iItemIndex;
  533. if (!PyTuple_GetInteger(poArgs, 0, &iItemIndex))
  534. return Py_BadArgument();
  535.  
  536. CItemManager::Instance().SelectItemData(iItemIndex);
  537. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  538. if (!pItemData)
  539. return Py_BuildException("Can't find select item data");
  540.  
  541. if (CItemData::ITEM_TYPE_USE == pItemData->GetType() || CItemData::ITEM_TYPE_QUEST == pItemData->GetType())
  542. {
  543. return Py_BuildValue("i", TRUE);
  544. }
  545.  
  546. return Py_BuildValue("i", FALSE);
  547. }
  548.  
  549. PyObject * itemIsKey(PyObject * poSelf, PyObject * poArgs)
  550. {
  551. int iItemIndex;
  552. if (!PyTuple_GetInteger(poArgs, 0, &iItemIndex))
  553. return Py_BadArgument();
  554.  
  555. CItemManager::Instance().SelectItemData(iItemIndex);
  556. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  557. if (!pItemData)
  558. return Py_BuildException("Can't find select item data");
  559.  
  560. if (CItemData::ITEM_TYPE_TREASURE_KEY == pItemData->GetType())
  561. {
  562. return Py_BuildValue("i", TRUE);
  563. }
  564.  
  565. return Py_BuildValue("i", FALSE);
  566. }
  567.  
  568. PyObject * itemIsMetin(PyObject * poSelf, PyObject * poArgs)
  569. {
  570. int iItemIndex;
  571. if (!PyTuple_GetInteger(poArgs, 0, &iItemIndex))
  572. return Py_BadArgument();
  573.  
  574. CItemManager::Instance().SelectItemData(iItemIndex);
  575. CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
  576. if (!pItemData)
  577. return Py_BuildException("Can't find select item data");
  578.  
  579. if (CItemData::ITEM_TYPE_METIN == pItemData->GetType())
  580. {
  581. return Py_BuildValue("i", TRUE);
  582. }
  583.  
  584. return Py_BuildValue("i", FALSE);
  585. }
  586.  
  587. PyObject * itemRender(PyObject * poSelf, PyObject * poArgs)
  588. {
  589. CPythonItem::Instance().Render();
  590. return Py_BuildNone();
  591. }
  592.  
  593. PyObject * itemUpdate(PyObject * poSelf, PyObject * poArgs)
  594. {
  595. IAbstractApplication& rkApp=IAbstractApplication::GetSingleton();
  596.  
  597. POINT ptMouse;
  598. rkApp.GetMousePosition(&ptMouse);
  599.  
  600. CPythonItem::Instance().Update(ptMouse);
  601. return Py_BuildNone();
  602. }
  603.  
  604. PyObject * itemCreateItem(PyObject * poSelf, PyObject * poArgs)
  605. {
  606. int iVirtualID;
  607. if (!PyTuple_GetInteger(poArgs, 0, &iVirtualID))
  608. return Py_BadArgument();
  609. int iVirtualNumber;
  610. if (!PyTuple_GetInteger(poArgs, 1, &iVirtualNumber))
  611. return Py_BadArgument();
  612.  
  613. float x;
  614. if (!PyTuple_GetFloat(poArgs, 2, &x))
  615. return Py_BadArgument();
  616. float y;
  617. if (!PyTuple_GetFloat(poArgs, 3, &y))
  618. return Py_BadArgument();
  619. float z;
  620. if (!PyTuple_GetFloat(poArgs, 4, &z))
  621. return Py_BadArgument();
  622.  
  623. bool bDrop = true;
  624. PyTuple_GetBoolean(poArgs, 5, &bDrop);
  625.  
  626. CPythonItem::Instance().CreateItem(iVirtualID, iVirtualNumber, x, y, z, bDrop);
  627.  
  628. return Py_BuildNone();
  629. }
  630.  
  631. PyObject * itemDeleteItem(PyObject * poSelf, PyObject * poArgs)
  632. {
  633. int iVirtualID;
  634. if (!PyTuple_GetInteger(poArgs, 0, &iVirtualID))
  635. return Py_BadArgument();
  636.  
  637. CPythonItem::Instance().DeleteItem(iVirtualID);
  638. return Py_BuildNone();
  639. }
  640.  
  641. PyObject * itemPick(PyObject * poSelf, PyObject * poArgs)
  642. {
  643. DWORD dwItemID;
  644. if (CPythonItem::Instance().GetPickedItemID(&dwItemID))
  645. return Py_BuildValue("i", dwItemID);
  646. else
  647. return Py_BuildValue("i", -1);
  648. }
  649.  
  650. PyObject* itemLoadItemTable(PyObject* poSelf, PyObject* poArgs)
  651. {
  652. char * szFileName;
  653. if (!PyTuple_GetString(poArgs, 0, &szFileName))
  654. return Py_BadArgument();
  655.  
  656. CItemManager::Instance().LoadItemTable(szFileName);
  657. return Py_BuildNone();
  658. }
  659.  
  660. void initItem()
  661. {
  662. static PyMethodDef s_methods[] =
  663. {
  664. { "SetUseSoundFileName", itemSetUseSoundFileName, METH_VARARGS },
  665. { "SetDropSoundFileName", itemSetDropSoundFileName, METH_VARARGS },
  666. { "SelectItem", itemSelectItem, METH_VARARGS },
  667.  
  668. { "GetItemName", itemGetItemName, METH_VARARGS },
  669. { "GetItemDescription", itemGetItemDescription, METH_VARARGS },
  670. { "GetItemSummary", itemGetItemSummary, METH_VARARGS },
  671. { "GetIconImage", itemGetIconImage, METH_VARARGS },
  672. { "GetIconImageFileName", itemGetIconImageFileName, METH_VARARGS },
  673. { "GetItemSize", itemGetItemSize, METH_VARARGS },
  674. { "GetItemType", itemGetItemType, METH_VARARGS },
  675. { "GetItemSubType", itemGetItemSubType, METH_VARARGS },
  676. { "GetIBuyItemPrice", itemGetIBuyItemPrice, METH_VARARGS },
  677. { "GetISellItemPrice", itemGetISellItemPrice, METH_VARARGS },
  678. { "IsAntiFlag", itemIsAntiFlag, METH_VARARGS },
  679. { "IsFlag", itemIsFlag, METH_VARARGS },
  680. { "IsWearableFlag", itemIsWearableFlag, METH_VARARGS },
  681. { "Is1GoldItem", itemIs1GoldItem, METH_VARARGS },
  682. { "GetLimit", itemGetLimit, METH_VARARGS },
  683. { "GetAffect", itemGetAffect, METH_VARARGS },
  684. { "GetValue", itemGetValue, METH_VARARGS },
  685. { "GetSocket", itemGetSocket, METH_VARARGS },
  686. { "GetIconInstance", itemGetIconInstance, METH_VARARGS },
  687. { "GetUseType", itemGetUseType, METH_VARARGS },
  688. { "DeleteIconInstance", itemDeleteIconInstance, METH_VARARGS },
  689. { "IsEquipmentVID", itemIsEquipmentVID, METH_VARARGS },
  690. { "IsRefineScroll", itemIsRefineScroll, METH_VARARGS },
  691. { "IsDetachScroll", itemIsDetachScroll, METH_VARARGS },
  692. { "IsKey", itemIsKey, METH_VARARGS },
  693. { "IsMetin", itemIsMetin, METH_VARARGS },
  694. { "CanAddToQuickSlotItem", itemCanAddToQuickSlotItem, METH_VARARGS },
  695.  
  696. { "Update", itemUpdate, METH_VARARGS },
  697. { "Render", itemRender, METH_VARARGS },
  698. { "CreateItem", itemCreateItem, METH_VARARGS },
  699. { "DeleteItem", itemDeleteItem, METH_VARARGS },
  700. { "Pick", itemPick, METH_VARARGS },
  701.  
  702. { "LoadItemTable", itemLoadItemTable, METH_VARARGS },
  703. #ifdef __BL__DETAILS_UI__
  704. { "GetApplyPoint", itemGetApplyPoint, METH_VARARGS },
  705. #endif
  706.  
  707. #ifdef ENABLE_SEALBIND_SYSTEM
  708. { "IsSealScroll", itemIsSealScroll, METH_VARARGS },
  709. { "GetDefaultSealDate", itemGetDefaultSealDate, METH_VARARGS },
  710. { "GetUnlimitedSealDate", itemGetUnlimitedSealDate, METH_VARARGS },
  711. #endif
  712. { "GetApplyPoint", itemGetApplyPoint, METH_VARARGS },
  713. { NULL, NULL, NULL },
  714. };
  715.  
  716. PyObject * poModule = Py_InitModule("item", s_methods);
  717.  
  718. PyModule_AddIntConstant(poModule, "USESOUND_ACCESSORY", CPythonItem::USESOUND_ACCESSORY);
  719. PyModule_AddIntConstant(poModule, "USESOUND_ARMOR", CPythonItem::USESOUND_ARMOR);
  720. PyModule_AddIntConstant(poModule, "USESOUND_BOW", CPythonItem::USESOUND_BOW);
  721. PyModule_AddIntConstant(poModule, "USESOUND_DEFAULT", CPythonItem::USESOUND_DEFAULT);
  722. PyModule_AddIntConstant(poModule, "USESOUND_WEAPON", CPythonItem::USESOUND_WEAPON);
  723. PyModule_AddIntConstant(poModule, "USESOUND_POTION", CPythonItem::USESOUND_POTION);
  724. PyModule_AddIntConstant(poModule, "USESOUND_PORTAL", CPythonItem::USESOUND_PORTAL);
  725.  
  726. PyModule_AddIntConstant(poModule, "DROPSOUND_ACCESSORY", CPythonItem::DROPSOUND_ACCESSORY);
  727. PyModule_AddIntConstant(poModule, "DROPSOUND_ARMOR", CPythonItem::DROPSOUND_ARMOR);
  728. PyModule_AddIntConstant(poModule, "DROPSOUND_BOW", CPythonItem::DROPSOUND_BOW);
  729. PyModule_AddIntConstant(poModule, "DROPSOUND_DEFAULT", CPythonItem::DROPSOUND_DEFAULT);
  730. PyModule_AddIntConstant(poModule, "DROPSOUND_WEAPON", CPythonItem::DROPSOUND_WEAPON);
  731.  
  732. PyModule_AddIntConstant(poModule, "EQUIPMENT_COUNT", c_Equipment_Count);
  733. PyModule_AddIntConstant(poModule, "EQUIPMENT_HEAD", c_Equipment_Head);
  734. PyModule_AddIntConstant(poModule, "EQUIPMENT_BODY", c_Equipment_Body);
  735. PyModule_AddIntConstant(poModule, "EQUIPMENT_WEAPON", c_Equipment_Weapon);
  736. PyModule_AddIntConstant(poModule, "EQUIPMENT_WRIST", c_Equipment_Wrist);
  737. PyModule_AddIntConstant(poModule, "EQUIPMENT_SHOES", c_Equipment_Shoes);
  738. PyModule_AddIntConstant(poModule, "EQUIPMENT_NECK", c_Equipment_Neck);
  739. PyModule_AddIntConstant(poModule, "EQUIPMENT_EAR", c_Equipment_Ear);
  740. PyModule_AddIntConstant(poModule, "EQUIPMENT_UNIQUE1", c_Equipment_Unique1);
  741. PyModule_AddIntConstant(poModule, "EQUIPMENT_UNIQUE2", c_Equipment_Unique2);
  742. PyModule_AddIntConstant(poModule, "EQUIPMENT_ARROW", c_Equipment_Arrow);
  743.  
  744. #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
  745. PyModule_AddIntConstant(poModule, "EQUIPMENT_RING1", c_Equipment_Ring1);
  746. PyModule_AddIntConstant(poModule, "EQUIPMENT_RING2", c_Equipment_Ring2);
  747. PyModule_AddIntConstant(poModule, "EQUIPMENT_BELT", c_Equipment_Belt);
  748. #endif
  749.  
  750. PyModule_AddIntConstant(poModule, "ITEM_TYPE_NONE", CItemData::ITEM_TYPE_NONE);
  751. PyModule_AddIntConstant(poModule, "ITEM_TYPE_WEAPON", CItemData::ITEM_TYPE_WEAPON);
  752. PyModule_AddIntConstant(poModule, "ITEM_TYPE_ARMOR", CItemData::ITEM_TYPE_ARMOR);
  753. PyModule_AddIntConstant(poModule, "ITEM_TYPE_USE", CItemData::ITEM_TYPE_USE);
  754. PyModule_AddIntConstant(poModule, "ITEM_TYPE_AUTOUSE", CItemData::ITEM_TYPE_AUTOUSE);
  755. PyModule_AddIntConstant(poModule, "ITEM_TYPE_MATERIAL", CItemData::ITEM_TYPE_MATERIAL);
  756. PyModule_AddIntConstant(poModule, "ITEM_TYPE_SPECIAL", CItemData::ITEM_TYPE_SPECIAL);
  757. PyModule_AddIntConstant(poModule, "ITEM_TYPE_TOOL", CItemData::ITEM_TYPE_TOOL);
  758. PyModule_AddIntConstant(poModule, "ITEM_TYPE_LOTTERY", CItemData::ITEM_TYPE_LOTTERY);
  759. PyModule_AddIntConstant(poModule, "ITEM_TYPE_ELK", CItemData::ITEM_TYPE_ELK);
  760. PyModule_AddIntConstant(poModule, "ITEM_TYPE_METIN", CItemData::ITEM_TYPE_METIN);
  761. PyModule_AddIntConstant(poModule, "ITEM_TYPE_CONTAINER", CItemData::ITEM_TYPE_CONTAINER);
  762. PyModule_AddIntConstant(poModule, "ITEM_TYPE_FISH", CItemData::ITEM_TYPE_FISH);
  763. PyModule_AddIntConstant(poModule, "ITEM_TYPE_ROD", CItemData::ITEM_TYPE_ROD);
  764. PyModule_AddIntConstant(poModule, "ITEM_TYPE_RESOURCE", CItemData::ITEM_TYPE_RESOURCE);
  765. PyModule_AddIntConstant(poModule, "ITEM_TYPE_CAMPFIRE", CItemData::ITEM_TYPE_CAMPFIRE);
  766. PyModule_AddIntConstant(poModule, "ITEM_TYPE_UNIQUE", CItemData::ITEM_TYPE_UNIQUE);
  767. PyModule_AddIntConstant(poModule, "ITEM_TYPE_SKILLBOOK", CItemData::ITEM_TYPE_SKILLBOOK);
  768. PyModule_AddIntConstant(poModule, "ITEM_TYPE_QUEST", CItemData::ITEM_TYPE_QUEST);
  769. PyModule_AddIntConstant(poModule, "ITEM_TYPE_POLYMORPH", CItemData::ITEM_TYPE_POLYMORPH);
  770. PyModule_AddIntConstant(poModule, "ITEM_TYPE_TREASURE_BOX", CItemData::ITEM_TYPE_TREASURE_BOX);
  771. PyModule_AddIntConstant(poModule, "ITEM_TYPE_TREASURE_KEY", CItemData::ITEM_TYPE_TREASURE_KEY);
  772. PyModule_AddIntConstant(poModule, "ITEM_TYPE_PICK", CItemData::ITEM_TYPE_PICK);
  773. PyModule_AddIntConstant(poModule, "ITEM_TYPE_BLEND", CItemData::ITEM_TYPE_BLEND);
  774. PyModule_AddIntConstant(poModule, "ITEM_TYPE_DS", CItemData::ITEM_TYPE_DS);
  775. PyModule_AddIntConstant(poModule, "ITEM_TYPE_SPECIAL_DS", CItemData::ITEM_TYPE_SPECIAL_DS);
  776. PyModule_AddIntConstant(poModule, "ITEM_TYPE_RING", CItemData::ITEM_TYPE_RING);
  777. PyModule_AddIntConstant(poModule, "ITEM_TYPE_BELT", CItemData::ITEM_TYPE_BELT);
  778.  
  779.  
  780. #ifdef ENABLE_COSTUME_SYSTEM
  781. PyModule_AddIntConstant(poModule, "ITEM_TYPE_COSTUME", CItemData::ITEM_TYPE_COSTUME);
  782.  
  783. // Item Sub Type
  784. PyModule_AddIntConstant(poModule, "COSTUME_TYPE_BODY", CItemData::COSTUME_BODY);
  785. PyModule_AddIntConstant(poModule, "COSTUME_TYPE_HAIR", CItemData::COSTUME_HAIR);
  786. #ifdef ENABLE_MOUNT_COSTUME_SYSTEM
  787. PyModule_AddIntConstant(poModule, "COSTUME_TYPE_MOUNT", CItemData::COSTUME_MOUNT);
  788. #endif
  789. #ifdef ENABLE_ACCE_COSTUME_SYSTEM
  790. PyModule_AddIntConstant(poModule, "COSTUME_TYPE_ACCE", CItemData::COSTUME_ACCE);
  791. #endif
  792. #ifdef ENABLE_WEAPON_COSTUME_SYSTEM
  793. PyModule_AddIntConstant(poModule, "COSTUME_TYPE_WEAPON", CItemData::COSTUME_WEAPON);
  794. #endif
  795.  
  796. // 인벤토리 및 장비창에서의 슬롯 번호
  797. PyModule_AddIntConstant(poModule, "COSTUME_SLOT_START", c_Costume_Slot_Start);
  798. PyModule_AddIntConstant(poModule, "COSTUME_SLOT_COUNT", c_Costume_Slot_Count);
  799. PyModule_AddIntConstant(poModule, "COSTUME_SLOT_BODY", c_Costume_Slot_Body);
  800. PyModule_AddIntConstant(poModule, "COSTUME_SLOT_HAIR", c_Costume_Slot_Hair);
  801. #ifdef ENABLE_MOUNT_COSTUME_SYSTEM
  802. PyModule_AddIntConstant(poModule, "COSTUME_SLOT_MOUNT", c_Costume_Slot_Mount);
  803. #endif
  804. #ifdef ENABLE_ACCE_COSTUME_SYSTEM
  805. PyModule_AddIntConstant(poModule, "COSTUME_SLOT_ACCE", c_Costume_Slot_Acce);
  806. #endif
  807. #ifdef ENABLE_WEAPON_COSTUME_SYSTEM
  808. PyModule_AddIntConstant(poModule, "COSTUME_SLOT_WEAPON", c_Costume_Slot_Weapon);
  809. #endif
  810. PyModule_AddIntConstant(poModule, "COSTUME_SLOT_END", c_Costume_Slot_End);
  811. #endif
  812.  
  813. #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
  814. PyModule_AddIntConstant(poModule, "BELT_INVENTORY_SLOT_START", c_Belt_Inventory_Slot_Start);
  815. PyModule_AddIntConstant(poModule, "BELT_INVENTORY_SLOT_COUNT", c_Belt_Inventory_Slot_Count);
  816. PyModule_AddIntConstant(poModule, "BELT_INVENTORY_SLOT_END", c_Belt_Inventory_Slot_End);
  817.  
  818. #endif
  819.  
  820. PyModule_AddIntConstant(poModule, "WEAPON_SWORD", CItemData::WEAPON_SWORD);
  821. PyModule_AddIntConstant(poModule, "WEAPON_DAGGER", CItemData::WEAPON_DAGGER);
  822. PyModule_AddIntConstant(poModule, "WEAPON_BOW", CItemData::WEAPON_BOW);
  823. PyModule_AddIntConstant(poModule, "WEAPON_TWO_HANDED", CItemData::WEAPON_TWO_HANDED);
  824. PyModule_AddIntConstant(poModule, "WEAPON_BELL", CItemData::WEAPON_BELL);
  825. PyModule_AddIntConstant(poModule, "WEAPON_FAN", CItemData::WEAPON_FAN);
  826. PyModule_AddIntConstant(poModule, "WEAPON_ARROW", CItemData::WEAPON_ARROW);
  827. PyModule_AddIntConstant(poModule, "WEAPON_MOUNT_SPEAR", CItemData::WEAPON_MOUNT_SPEAR);
  828. #ifdef ENABLE_WOLFMAN_CHARACTER
  829. PyModule_AddIntConstant(poModule, "WEAPON_CLAW", CItemData::WEAPON_CLAW);
  830. #endif
  831. PyModule_AddIntConstant(poModule, "WEAPON_NUM_TYPES", CItemData::WEAPON_NUM_TYPES);
  832.  
  833. PyModule_AddIntConstant(poModule, "USE_POTION", CItemData::USE_POTION);
  834. PyModule_AddIntConstant(poModule, "USE_TALISMAN", CItemData::USE_TALISMAN);
  835. PyModule_AddIntConstant(poModule, "USE_TUNING", CItemData::USE_TUNING);
  836. PyModule_AddIntConstant(poModule, "USE_MOVE", CItemData::USE_MOVE);
  837. PyModule_AddIntConstant(poModule, "USE_TREASURE_BOX", CItemData::USE_TREASURE_BOX);
  838. PyModule_AddIntConstant(poModule, "USE_MONEYBAG", CItemData::USE_MONEYBAG);
  839. PyModule_AddIntConstant(poModule, "USE_BAIT", CItemData::USE_BAIT);
  840. PyModule_AddIntConstant(poModule, "USE_ABILITY_UP", CItemData::USE_ABILITY_UP);
  841. PyModule_AddIntConstant(poModule, "USE_AFFECT", CItemData::USE_AFFECT);
  842. PyModule_AddIntConstant(poModule, "USE_CREATE_STONE", CItemData::USE_CREATE_STONE);
  843. PyModule_AddIntConstant(poModule, "USE_SPECIAL", CItemData::USE_SPECIAL);
  844. PyModule_AddIntConstant(poModule, "USE_POTION_NODELAY", CItemData::USE_POTION_NODELAY);
  845. PyModule_AddIntConstant(poModule, "USE_CLEAR", CItemData::USE_CLEAR);
  846. PyModule_AddIntConstant(poModule, "USE_INVISIBILITY", CItemData::USE_INVISIBILITY);
  847. PyModule_AddIntConstant(poModule, "USE_DETACHMENT", CItemData::USE_DETACHMENT);
  848. PyModule_AddIntConstant(poModule, "USE_TIME_CHARGE_PER", CItemData::USE_TIME_CHARGE_PER);
  849. PyModule_AddIntConstant(poModule, "USE_TIME_CHARGE_FIX", CItemData::USE_TIME_CHARGE_FIX);
  850.  
  851. PyModule_AddIntConstant(poModule, "MATERIAL_DS_REFINE_NORMAL", CItemData::MATERIAL_DS_REFINE_NORMAL);
  852. PyModule_AddIntConstant(poModule, "MATERIAL_DS_REFINE_BLESSED", CItemData::MATERIAL_DS_REFINE_BLESSED);
  853. PyModule_AddIntConstant(poModule, "MATERIAL_DS_REFINE_HOLLY", CItemData::MATERIAL_DS_REFINE_HOLLY);
  854.  
  855. PyModule_AddIntConstant(poModule, "METIN_NORMAL", CItemData::METIN_NORMAL);
  856. PyModule_AddIntConstant(poModule, "METIN_GOLD", CItemData::METIN_GOLD);
  857.  
  858. PyModule_AddIntConstant(poModule, "LIMIT_NONE", CItemData::LIMIT_NONE);
  859. PyModule_AddIntConstant(poModule, "LIMIT_LEVEL", CItemData::LIMIT_LEVEL);
  860. PyModule_AddIntConstant(poModule, "LIMIT_STR", CItemData::LIMIT_STR);
  861. PyModule_AddIntConstant(poModule, "LIMIT_DEX", CItemData::LIMIT_DEX);
  862. PyModule_AddIntConstant(poModule, "LIMIT_INT", CItemData::LIMIT_INT);
  863. PyModule_AddIntConstant(poModule, "LIMIT_CON", CItemData::LIMIT_CON);
  864. PyModule_AddIntConstant(poModule, "LIMIT_PCBANG", CItemData::LIMIT_PCBANG);
  865. PyModule_AddIntConstant(poModule, "LIMIT_REAL_TIME", CItemData::LIMIT_REAL_TIME);
  866. PyModule_AddIntConstant(poModule, "LIMIT_REAL_TIME_START_FIRST_USE", CItemData::LIMIT_REAL_TIME_START_FIRST_USE);
  867. PyModule_AddIntConstant(poModule, "LIMIT_TIMER_BASED_ON_WEAR", CItemData::LIMIT_TIMER_BASED_ON_WEAR);
  868. PyModule_AddIntConstant(poModule, "LIMIT_TYPE_MAX_NUM", CItemData::LIMIT_MAX_NUM);
  869. PyModule_AddIntConstant(poModule, "LIMIT_MAX_NUM", CItemData::ITEM_LIMIT_MAX_NUM);
  870.  
  871. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_FEMALE", CItemData::ITEM_ANTIFLAG_FEMALE);
  872. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_MALE", CItemData::ITEM_ANTIFLAG_MALE);
  873. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_WARRIOR", CItemData::ITEM_ANTIFLAG_WARRIOR);
  874. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_ASSASSIN", CItemData::ITEM_ANTIFLAG_ASSASSIN);
  875. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_SURA", CItemData::ITEM_ANTIFLAG_SURA);
  876. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_SHAMAN", CItemData::ITEM_ANTIFLAG_SHAMAN);
  877. #ifdef ENABLE_WOLFMAN_CHARACTER
  878. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_WOLFMAN", CItemData::ITEM_ANTIFLAG_WOLFMAN);
  879. #endif
  880. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_GET", CItemData::ITEM_ANTIFLAG_GET);
  881. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_DROP", CItemData::ITEM_ANTIFLAG_DROP);
  882. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_SELL", CItemData::ITEM_ANTIFLAG_SELL);
  883. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_EMPIRE_A", CItemData::ITEM_ANTIFLAG_EMPIRE_A);
  884. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_EMPIRE_B", CItemData::ITEM_ANTIFLAG_EMPIRE_B);
  885. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_EMPIRE_R", CItemData::ITEM_ANTIFLAG_EMPIRE_R);
  886. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_SAVE", CItemData::ITEM_ANTIFLAG_SAVE);
  887. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_GIVE", CItemData::ITEM_ANTIFLAG_GIVE);
  888. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_PKDROP", CItemData::ITEM_ANTIFLAG_PKDROP);
  889. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_STACK", CItemData::ITEM_ANTIFLAG_STACK);
  890. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_MYSHOP", CItemData::ITEM_ANTIFLAG_MYSHOP);
  891. PyModule_AddIntConstant(poModule, "ITEM_ANTIFLAG_SAFEBOX", CItemData::ITEM_ANTIFLAG_SAFEBOX);
  892.  
  893. PyModule_AddIntConstant(poModule, "ITEM_FLAG_RARE", CItemData::ITEM_FLAG_RARE);
  894. PyModule_AddIntConstant(poModule, "ITEM_FLAG_UNIQUE", CItemData::ITEM_FLAG_UNIQUE);
  895. PyModule_AddIntConstant(poModule, "ITEM_FLAG_CONFIRM_WHEN_USE", CItemData::ITEM_FLAG_CONFIRM_WHEN_USE);
  896.  
  897. PyModule_AddIntConstant(poModule, "ANTIFLAG_FEMALE", CItemData::ITEM_ANTIFLAG_FEMALE);
  898. PyModule_AddIntConstant(poModule, "ANTIFLAG_MALE", CItemData::ITEM_ANTIFLAG_MALE);
  899. PyModule_AddIntConstant(poModule, "ANTIFLAG_WARRIOR", CItemData::ITEM_ANTIFLAG_WARRIOR);
  900. PyModule_AddIntConstant(poModule, "ANTIFLAG_ASSASSIN", CItemData::ITEM_ANTIFLAG_ASSASSIN);
  901. PyModule_AddIntConstant(poModule, "ANTIFLAG_SURA", CItemData::ITEM_ANTIFLAG_SURA);
  902. PyModule_AddIntConstant(poModule, "ANTIFLAG_SHAMAN", CItemData::ITEM_ANTIFLAG_SHAMAN);
  903. #ifdef ENABLE_WOLFMAN_CHARACTER
  904. PyModule_AddIntConstant(poModule, "ANTIFLAG_WOLFMAN", CItemData::ITEM_ANTIFLAG_WOLFMAN);
  905. #endif
  906. PyModule_AddIntConstant(poModule, "ANTIFLAG_GET", CItemData::ITEM_ANTIFLAG_GET);
  907. PyModule_AddIntConstant(poModule, "ANTIFLAG_DROP", CItemData::ITEM_ANTIFLAG_DROP);
  908. PyModule_AddIntConstant(poModule, "ANTIFLAG_SELL", CItemData::ITEM_ANTIFLAG_SELL);
  909. PyModule_AddIntConstant(poModule, "ANTIFLAG_EMPIRE_A", CItemData::ITEM_ANTIFLAG_EMPIRE_A);
  910. PyModule_AddIntConstant(poModule, "ANTIFLAG_EMPIRE_B", CItemData::ITEM_ANTIFLAG_EMPIRE_B);
  911. PyModule_AddIntConstant(poModule, "ANTIFLAG_EMPIRE_R", CItemData::ITEM_ANTIFLAG_EMPIRE_R);
  912. PyModule_AddIntConstant(poModule, "ANTIFLAG_SAVE", CItemData::ITEM_ANTIFLAG_SAVE);
  913. PyModule_AddIntConstant(poModule, "ANTIFLAG_GIVE", CItemData::ITEM_ANTIFLAG_GIVE);
  914. PyModule_AddIntConstant(poModule, "ANTIFLAG_PKDROP", CItemData::ITEM_ANTIFLAG_PKDROP);
  915. PyModule_AddIntConstant(poModule, "ANTIFLAG_STACK", CItemData::ITEM_ANTIFLAG_STACK);
  916. PyModule_AddIntConstant(poModule, "ANTIFLAG_MYSHOP", CItemData::ITEM_ANTIFLAG_MYSHOP);
  917. PyModule_AddIntConstant(poModule, "ANTIFLAG_SAFEBOX", CItemData::ITEM_ANTIFLAG_SAFEBOX);
  918.  
  919. PyModule_AddIntConstant(poModule, "WEARABLE_BODY", CItemData::WEARABLE_BODY);
  920. PyModule_AddIntConstant(poModule, "WEARABLE_HEAD", CItemData::WEARABLE_HEAD);
  921. PyModule_AddIntConstant(poModule, "WEARABLE_FOOTS", CItemData::WEARABLE_FOOTS);
  922. PyModule_AddIntConstant(poModule, "WEARABLE_WRIST", CItemData::WEARABLE_WRIST);
  923. PyModule_AddIntConstant(poModule, "WEARABLE_WEAPON", CItemData::WEARABLE_WEAPON);
  924. PyModule_AddIntConstant(poModule, "WEARABLE_NECK", CItemData::WEARABLE_NECK);
  925. PyModule_AddIntConstant(poModule, "WEARABLE_EAR", CItemData::WEARABLE_EAR);
  926. PyModule_AddIntConstant(poModule, "WEARABLE_UNIQUE", CItemData::WEARABLE_UNIQUE);
  927. PyModule_AddIntConstant(poModule, "WEARABLE_SHIELD", CItemData::WEARABLE_SHIELD);
  928. PyModule_AddIntConstant(poModule, "WEARABLE_ARROW", CItemData::WEARABLE_ARROW);
  929.  
  930. PyModule_AddIntConstant(poModule, "ARMOR_BODY", CItemData::ARMOR_BODY);
  931. PyModule_AddIntConstant(poModule, "ARMOR_HEAD", CItemData::ARMOR_HEAD);
  932. PyModule_AddIntConstant(poModule, "ARMOR_SHIELD", CItemData::ARMOR_SHIELD);
  933. PyModule_AddIntConstant(poModule, "ARMOR_WRIST", CItemData::ARMOR_WRIST);
  934. PyModule_AddIntConstant(poModule, "ARMOR_FOOTS", CItemData::ARMOR_FOOTS);
  935. PyModule_AddIntConstant(poModule, "ARMOR_NECK", CItemData::ARMOR_NECK);
  936. PyModule_AddIntConstant(poModule, "ARMOR_EAR", CItemData::ARMOR_EAR);
  937.  
  938. PyModule_AddIntConstant(poModule, "ITEM_APPLY_MAX_NUM", CItemData::ITEM_APPLY_MAX_NUM);
  939. PyModule_AddIntConstant(poModule, "ITEM_SOCKET_MAX_NUM", CItemData::ITEM_SOCKET_MAX_NUM);
  940.  
  941. PyModule_AddIntConstant(poModule, "APPLY_NONE", CItemData::APPLY_NONE);
  942. PyModule_AddIntConstant(poModule, "APPLY_STR", CItemData::APPLY_STR);
  943. PyModule_AddIntConstant(poModule, "APPLY_DEX", CItemData::APPLY_DEX);
  944. PyModule_AddIntConstant(poModule, "APPLY_CON", CItemData::APPLY_CON);
  945. PyModule_AddIntConstant(poModule, "APPLY_INT", CItemData::APPLY_INT);
  946. PyModule_AddIntConstant(poModule, "APPLY_MAX_HP", CItemData::APPLY_MAX_HP);
  947. PyModule_AddIntConstant(poModule, "APPLY_MAX_SP", CItemData::APPLY_MAX_SP);
  948. PyModule_AddIntConstant(poModule, "APPLY_HP_REGEN", CItemData::APPLY_HP_REGEN);
  949. PyModule_AddIntConstant(poModule, "APPLY_SP_REGEN", CItemData::APPLY_SP_REGEN);
  950. PyModule_AddIntConstant(poModule, "APPLY_DEF_GRADE_BONUS", CItemData::APPLY_DEF_GRADE_BONUS);
  951. PyModule_AddIntConstant(poModule, "APPLY_ATT_GRADE_BONUS", CItemData::APPLY_ATT_GRADE_BONUS);
  952. PyModule_AddIntConstant(poModule, "APPLY_ATT_SPEED", CItemData::APPLY_ATT_SPEED);
  953. PyModule_AddIntConstant(poModule, "APPLY_MOV_SPEED", CItemData::APPLY_MOV_SPEED);
  954. PyModule_AddIntConstant(poModule, "APPLY_CAST_SPEED", CItemData::APPLY_CAST_SPEED);
  955. PyModule_AddIntConstant(poModule, "APPLY_MAGIC_ATT_GRADE", CItemData::APPLY_MAGIC_ATT_GRADE);
  956. PyModule_AddIntConstant(poModule, "APPLY_MAGIC_DEF_GRADE", CItemData::APPLY_MAGIC_DEF_GRADE);
  957. PyModule_AddIntConstant(poModule, "APPLY_SKILL", CItemData::APPLY_SKILL);
  958. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ANIMAL", CItemData::APPLY_ATTBONUS_ANIMAL);
  959. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_UNDEAD", CItemData::APPLY_ATTBONUS_UNDEAD);
  960. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_DEVIL", CItemData::APPLY_ATTBONUS_DEVIL);
  961. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_HUMAN", CItemData::APPLY_ATTBONUS_HUMAN);
  962. PyModule_AddIntConstant(poModule, "APPLY_BOW_DISTANCE", CItemData::APPLY_BOW_DISTANCE);
  963. PyModule_AddIntConstant(poModule, "APPLY_RESIST_BOW", CItemData::APPLY_RESIST_BOW);
  964. PyModule_AddIntConstant(poModule, "APPLY_RESIST_FIRE", CItemData::APPLY_RESIST_FIRE);
  965. PyModule_AddIntConstant(poModule, "APPLY_RESIST_ELEC", CItemData::APPLY_RESIST_ELEC);
  966. PyModule_AddIntConstant(poModule, "APPLY_RESIST_MAGIC", CItemData::APPLY_RESIST_MAGIC);
  967. PyModule_AddIntConstant(poModule, "APPLY_POISON_PCT", CItemData::APPLY_POISON_PCT);
  968. PyModule_AddIntConstant(poModule, "APPLY_SLOW_PCT", CItemData::APPLY_SLOW_PCT);
  969. PyModule_AddIntConstant(poModule, "APPLY_STUN_PCT", CItemData::APPLY_STUN_PCT);
  970. PyModule_AddIntConstant(poModule, "APPLY_CRITICAL_PCT", CItemData::APPLY_CRITICAL_PCT); // n% 확률로 두배 타격
  971. PyModule_AddIntConstant(poModule, "APPLY_PENETRATE_PCT", CItemData::APPLY_PENETRATE_PCT); // n% 확률로 적의 방어력 무시
  972. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ORC", CItemData::APPLY_ATTBONUS_ORC); // 웅귀에게 n% 추가 데미지
  973. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_MILGYO", CItemData::APPLY_ATTBONUS_MILGYO); // 밀교에게 n% 추가 데미지
  974. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_UNDEAD", CItemData::APPLY_ATTBONUS_UNDEAD); // 시체에게 n% 추가 데미지
  975. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_DEVIL", CItemData::APPLY_ATTBONUS_DEVIL); // 악마에게 n% 추가 데미지
  976. PyModule_AddIntConstant(poModule, "APPLY_STEAL_HP", CItemData::APPLY_STEAL_HP); // n% 확률로 타격의 10% 를 생명력으로 흡수
  977. PyModule_AddIntConstant(poModule, "APPLY_STEAL_SP", CItemData::APPLY_STEAL_SP); // n% 확률로 타격의 10% 를 정신력으로 흡수
  978. PyModule_AddIntConstant(poModule, "APPLY_MANA_BURN_PCT", CItemData::APPLY_MANA_BURN_PCT); // n% 확률로 상대의 마나를 깎는다
  979. PyModule_AddIntConstant(poModule, "APPLY_DAMAGE_SP_RECOVER", CItemData::APPLY_DAMAGE_SP_RECOVER); // n% 확률로 정신력 2 회복
  980. PyModule_AddIntConstant(poModule, "APPLY_BLOCK", CItemData::APPLY_BLOCK); // n% 확률로 물리공격 완벽 방어
  981. PyModule_AddIntConstant(poModule, "APPLY_DODGE", CItemData::APPLY_DODGE); // n% 확률로 물리공격 완벽 회피
  982. PyModule_AddIntConstant(poModule, "APPLY_RESIST_SWORD", CItemData::APPLY_RESIST_SWORD); // 한손검에 의한 피해를 n% 감소
  983. PyModule_AddIntConstant(poModule, "APPLY_RESIST_TWOHAND", CItemData::APPLY_RESIST_TWOHAND); // 양손검에 의한 피해를 n% 감소
  984. PyModule_AddIntConstant(poModule, "APPLY_RESIST_DAGGER", CItemData::APPLY_RESIST_DAGGER); // 단도에 의한 피해를 n% 감소
  985. PyModule_AddIntConstant(poModule, "APPLY_RESIST_BELL", CItemData::APPLY_RESIST_BELL); // 방울에 의한 피해를 n% 감소
  986. PyModule_AddIntConstant(poModule, "APPLY_RESIST_FAN", CItemData::APPLY_RESIST_FAN); // 부채에 의한 피해를 n% 감소
  987. PyModule_AddIntConstant(poModule, "APPLY_RESIST_WIND", CItemData::APPLY_RESIST_WIND); // 바람에 의한 피해를 n% 감소
  988. PyModule_AddIntConstant(poModule, "APPLY_REFLECT_MELEE", CItemData::APPLY_REFLECT_MELEE); // 근접 타격 n% 를 적에게 되돌린다
  989. PyModule_AddIntConstant(poModule, "APPLY_REFLECT_CURSE", CItemData::APPLY_REFLECT_CURSE); // 적이 나에게 저주 사용시 n% 확률로 되돌린다
  990. PyModule_AddIntConstant(poModule, "APPLY_POISON_REDUCE", CItemData::APPLY_POISON_REDUCE); // 독에 의한 데미지 감소
  991. PyModule_AddIntConstant(poModule, "APPLY_KILL_SP_RECOVER", CItemData::APPLY_KILL_SP_RECOVER); // 적을 죽였을때 n% 확률로 정신력 10 회복
  992. PyModule_AddIntConstant(poModule, "APPLY_EXP_DOUBLE_BONUS", CItemData::APPLY_EXP_DOUBLE_BONUS); // n% 확률로 경험치 획득량 2배
  993. PyModule_AddIntConstant(poModule, "APPLY_GOLD_DOUBLE_BONUS", CItemData::APPLY_GOLD_DOUBLE_BONUS); // n% 확률로 돈 획득량 2배
  994. PyModule_AddIntConstant(poModule, "APPLY_ITEM_DROP_BONUS", CItemData::APPLY_ITEM_DROP_BONUS); // n% 확률로 아이템 획득량 2배
  995. PyModule_AddIntConstant(poModule, "APPLY_POTION_BONUS", CItemData::APPLY_POTION_BONUS); // 물약 복용시 n% 만큼 성능 증대
  996. PyModule_AddIntConstant(poModule, "APPLY_KILL_HP_RECOVER", CItemData::APPLY_KILL_HP_RECOVER); // 죽일때마다 생명력 회복
  997. PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_STUN", CItemData::APPLY_IMMUNE_STUN); // 기절 하지 않는다
  998. PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_SLOW", CItemData::APPLY_IMMUNE_SLOW); // 느려지지 않는다
  999. PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_FALL", CItemData::APPLY_IMMUNE_FALL); // 넘어지지 않는다
  1000. PyModule_AddIntConstant(poModule, "APPLY_MAX_STAMINA", CItemData::APPLY_MAX_STAMINA); // 최대 스테미너 증가
  1001. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_WARRIOR", CItemData::APPLY_ATT_BONUS_TO_WARRIOR);
  1002. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ASSASSIN", CItemData::APPLY_ATT_BONUS_TO_ASSASSIN);
  1003. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_SURA", CItemData::APPLY_ATT_BONUS_TO_SURA);
  1004. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_SHAMAN", CItemData::APPLY_ATT_BONUS_TO_SHAMAN);
  1005. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_MONSTER", CItemData::APPLY_ATT_BONUS_TO_MONSTER);
  1006. PyModule_AddIntConstant(poModule, "APPLY_MALL_ATTBONUS", CItemData::APPLY_MALL_ATTBONUS);
  1007. PyModule_AddIntConstant(poModule, "APPLY_MALL_DEFBONUS", CItemData::APPLY_MALL_DEFBONUS);
  1008. PyModule_AddIntConstant(poModule, "APPLY_MALL_EXPBONUS", CItemData::APPLY_MALL_EXPBONUS);
  1009. PyModule_AddIntConstant(poModule, "APPLY_MALL_ITEMBONUS", CItemData::APPLY_MALL_ITEMBONUS);
  1010. PyModule_AddIntConstant(poModule, "APPLY_MALL_GOLDBONUS", CItemData::APPLY_MALL_GOLDBONUS);
  1011. PyModule_AddIntConstant(poModule, "APPLY_MAX_HP_PCT", CItemData::APPLY_MAX_HP_PCT);
  1012. PyModule_AddIntConstant(poModule, "APPLY_MAX_SP_PCT", CItemData::APPLY_MAX_SP_PCT);
  1013. PyModule_AddIntConstant(poModule, "APPLY_SKILL_DAMAGE_BONUS", CItemData::APPLY_SKILL_DAMAGE_BONUS);
  1014. PyModule_AddIntConstant(poModule, "APPLY_NORMAL_HIT_DAMAGE_BONUS", CItemData::APPLY_NORMAL_HIT_DAMAGE_BONUS);
  1015. PyModule_AddIntConstant(poModule, "APPLY_SKILL_DEFEND_BONUS", CItemData::APPLY_SKILL_DEFEND_BONUS);
  1016. PyModule_AddIntConstant(poModule, "APPLY_NORMAL_HIT_DEFEND_BONUS", CItemData::APPLY_NORMAL_HIT_DEFEND_BONUS);
  1017.  
  1018. PyModule_AddIntConstant(poModule, "APPLY_PC_BANG_EXP_BONUS", CItemData::APPLY_PC_BANG_EXP_BONUS);
  1019. PyModule_AddIntConstant(poModule, "APPLY_PC_BANG_DROP_BONUS", CItemData::APPLY_PC_BANG_DROP_BONUS);
  1020.  
  1021. PyModule_AddIntConstant(poModule, "APPLY_RESIST_WARRIOR", CItemData::APPLY_RESIST_WARRIOR );
  1022. PyModule_AddIntConstant(poModule, "APPLY_RESIST_ASSASSIN", CItemData::APPLY_RESIST_ASSASSIN );
  1023. PyModule_AddIntConstant(poModule, "APPLY_RESIST_SURA", CItemData::APPLY_RESIST_SURA );
  1024. PyModule_AddIntConstant(poModule, "APPLY_RESIST_SHAMAN", CItemData::APPLY_RESIST_SHAMAN );
  1025. PyModule_AddIntConstant(poModule, "APPLY_ENERGY", CItemData::APPLY_ENERGY ); // 기력
  1026. PyModule_AddIntConstant(poModule, "APPLY_COSTUME_ATTR_BONUS", CItemData::APPLY_COSTUME_ATTR_BONUS );
  1027.  
  1028. PyModule_AddIntConstant(poModule, "APPLY_MAGIC_ATTBONUS_PER", CItemData::APPLY_MAGIC_ATTBONUS_PER );
  1029. PyModule_AddIntConstant(poModule, "APPLY_MELEE_MAGIC_ATTBONUS_PER", CItemData::APPLY_MELEE_MAGIC_ATTBONUS_PER );
  1030. PyModule_AddIntConstant(poModule, "APPLY_RESIST_ICE", CItemData::APPLY_RESIST_ICE );
  1031. PyModule_AddIntConstant(poModule, "APPLY_RESIST_EARTH", CItemData::APPLY_RESIST_EARTH );
  1032. PyModule_AddIntConstant(poModule, "APPLY_RESIST_DARK", CItemData::APPLY_RESIST_DARK );
  1033. PyModule_AddIntConstant(poModule, "APPLY_ANTI_CRITICAL_PCT", CItemData::APPLY_ANTI_CRITICAL_PCT );
  1034. PyModule_AddIntConstant(poModule, "APPLY_ANTI_PENETRATE_PCT", CItemData::APPLY_ANTI_PENETRATE_PCT );
  1035. #ifdef ENABLE_WOLFMAN_CHARACTER
  1036. PyModule_AddIntConstant(poModule, "APPLY_BLEEDING_PCT", CItemData::APPLY_BLEEDING_PCT );
  1037. PyModule_AddIntConstant(poModule, "APPLY_BLEEDING_REDUCE", CItemData::APPLY_BLEEDING_REDUCE );
  1038. PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_WOLFMAN", CItemData::APPLY_ATT_BONUS_TO_WOLFMAN );
  1039. PyModule_AddIntConstant(poModule, "APPLY_RESIST_WOLFMAN", CItemData::APPLY_RESIST_WOLFMAN );
  1040. PyModule_AddIntConstant(poModule, "APPLY_RESIST_CLAW", CItemData::APPLY_RESIST_CLAW );
  1041. #endif
  1042.  
  1043. #ifdef ENABLE_ACCE_COSTUME_SYSTEM
  1044. PyModule_AddIntConstant(poModule, "APPLY_ACCEDRAIN_RATE", CItemData::APPLY_ACCEDRAIN_RATE);
  1045. #endif
  1046. #ifdef ENABLE_MAGIC_REDUCTION_SYSTEM
  1047. PyModule_AddIntConstant(poModule, "APPLY_RESIST_MAGIC_REDUCTION", CItemData::APPLY_RESIST_MAGIC_REDUCTION);
  1048. #endif
  1049.  
  1050. #ifdef ENABLE_SEALBIND_SYSTEM
  1051. PyModule_AddIntConstant(poModule, "E_SEAL_DATE_DEFAULT_TIMESTAMP", CItemData::SEAL_DATE_DEFAULT_TIMESTAMP);
  1052. PyModule_AddIntConstant(poModule, "E_SEAL_DATE_UNLIMITED_TIMESTAMP", CItemData::SEAL_DATE_UNLIMITED_TIMESTAMP);
  1053. #endif
  1054. }
  1055.  
Advertisement
Add Comment
Please, Sign In to add comment