itemdb.hpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143
  1. // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
  2. // For more information, see LICENCE in the main folder
  3. #ifndef ITEMDB_HPP
  4. #define ITEMDB_HPP
  5. #include <map>
  6. #include <vector>
  7. #include "../common/database.hpp"
  8. #include "../common/db.hpp"
  9. #include "../common/malloc.hpp"
  10. #include "../common/mmo.hpp" // ITEM_NAME_LENGTH
  11. #include "script.hpp"
  12. #include "status.hpp"
  13. enum e_ammo_type : uint8;
  14. ///Use apple for unknown items.
  15. const t_itemid UNKNOWN_ITEM_ID = 512;
  16. /// The maximum number of item delays
  17. #define MAX_ITEMDELAYS 10
  18. ///Designed for search functions, species max number of matches to display.
  19. #define MAX_SEARCH 5
  20. ///Maximum amount of items a combo may require
  21. #define MAX_ITEMS_PER_COMBO 6
  22. #define MAX_ROULETTE_LEVEL 7 /** client-defined value **/
  23. #define MAX_ROULETTE_COLUMNS 9 /** client-defined value **/
  24. const t_itemid CARD0_FORGE = 0x00FF;
  25. const t_itemid CARD0_CREATE = 0x00FE;
  26. const t_itemid CARD0_PET = 0x0100;
  27. ///Marks if the card0 given is "special" (non-item id used to mark pets/created items. [Skotlex]
  28. #define itemdb_isspecial(i) (i == CARD0_FORGE || i == CARD0_CREATE || i == CARD0_PET)
  29. ///Enum of item id (for hardcoded purpose)
  30. enum item_itemid : t_itemid
  31. {
  32. ITEMID_DUMMY = 499,
  33. ITEMID_RED_POTION = 501,
  34. ITEMID_YELLOW_POTION = 503,
  35. ITEMID_WHITE_POTION = 504,
  36. ITEMID_BLUE_POTION = 505,
  37. ITEMID_APPLE = 512,
  38. ITEMID_HOLY_WATER = 523,
  39. ITEMID_PUMPKIN = 535,
  40. ITEMID_RED_SLIM_POTION = 545,
  41. ITEMID_YELLOW_SLIM_POTION = 546,
  42. ITEMID_WHITE_SLIM_POTION = 547,
  43. ITEMID_WING_OF_FLY = 601,
  44. ITEMID_WING_OF_BUTTERFLY = 602,
  45. ITEMID_ANODYNE = 605,
  46. ITEMID_ALOEBERA = 606,
  47. ITEMID_MAGNIFIER = 611,
  48. ITEMID_POISON_BOTTLE = 678,
  49. ITEMID_EMPTY_BOTTLE = 713,
  50. ITEMID_EMPERIUM = 714,
  51. ITEMID_RED_GEMSTONE = 716,
  52. ITEMID_BLUE_GEMSTONE = 717,
  53. ITEMID_ORIDECON_STONE = 756,
  54. ITEMID_ALCOHOL = 970,
  55. ITEMID_ORIDECON = 984,
  56. ITEMID_ANVIL = 986,
  57. ITEMID_ORIDECON_ANVIL = 987,
  58. ITEMID_GOLDEN_ANVIL = 988,
  59. ITEMID_EMPERIUM_ANVIL = 989,
  60. ITEMID_BLOODY_RED = 990,
  61. ITEMID_CRYSTAL_BLUE = 991,
  62. ITEMID_WIND_OF_VERDURE = 992,
  63. ITEMID_YELLOW_LIVE = 993,
  64. ITEMID_FLAME_HEART = 994,
  65. ITEMID_MISTIC_FROZEN = 995,
  66. ITEMID_ROUGH_WIND = 996,
  67. ITEMID_GREAT_NATURE = 997,
  68. ITEMID_IRON = 998,
  69. ITEMID_STEEL = 999,
  70. ITEMID_STAR_CRUMB = 1000,
  71. ITEMID_IRON_ORE = 1002,
  72. ITEMID_PHRACON = 1010,
  73. ITEMID_EMVERETARCON = 1011,
  74. ITEMID_TRAP = 1065,
  75. ITEMID_ANGRA_MANYU = 1599,
  76. ITEMID_PAINT_BRUSH = 6122,
  77. ITEMID_MAGIC_GEAR_FUEL = 6146,
  78. ITEMID_NEW_INSURANCE = 6413,
  79. ITEMID_STRANGE_EMBRYO = 6415,
  80. ITEMID_BLACKSMITH_BLESSING = 6635,
  81. ITEMID_STONE = 7049,
  82. ITEMID_FIRE_BOTTLE = 7135,
  83. ITEMID_ACID_BOTTLE = 7136,
  84. ITEMID_MAN_EATER_BOTTLE = 7137,
  85. ITEMID_MINI_BOTTLE = 7138,
  86. ITEMID_COATING_BOTTLE = 7139,
  87. ITEMID_FRAGMENT_OF_CRYSTAL = 7321,
  88. ITEMID_SKULL_ = 7420,
  89. ITEMID_TRAP_ALLOY = 7940,
  90. ITEMID_COOKIE_BAT = 11605,
  91. ITEMID_MERCENARY_RED_POTION = 12184,
  92. ITEMID_MERCENARY_BLUE_POTION = 12185,
  93. ITEMID_GIANT_FLY_WING = 12212,
  94. ITEMID_NEURALIZER = 12213,
  95. ITEMID_M_CENTER_POTION = 12241,
  96. ITEMID_M_AWAKENING_POTION = 12242,
  97. ITEMID_M_BERSERK_POTION = 12243,
  98. ITEMID_N_FLY_WING = 12323,
  99. ITEMID_N_BUTTERFLY_WING = 12324,
  100. ITEMID_NOVICE_MAGNIFIER = 12325,
  101. ITEMID_ANCILLA = 12333,
  102. ITEMID_DUN_TELE_SCROLL3 = 12352,
  103. ITEMID_REINS_OF_MOUNT = 12622,
  104. ITEMID_NOBLE_NAMEPLATE = 12705,
  105. ITEMID_SILVER_BULLET = 13201,
  106. ITEMID_PURIFICATION_BULLET = 13220,
  107. ITEMID_SILVER_BULLET_ = 13221,
  108. ITEMID_DUN_TELE_SCROLL1 = 14527,
  109. ITEMID_DUN_TELE_SCROLL2 = 14581,
  110. ITEMID_WOB_RUNE = 14582,
  111. ITEMID_WOB_SCHWALTZ = 14583,
  112. ITEMID_WOB_RACHEL = 14584,
  113. ITEMID_WOB_LOCAL = 14585,
  114. ITEMID_SIEGE_TELEPORT_SCROLL = 14591,
  115. ITEMID_WL_MB_SG = 100065,
  116. ITEMID_HOMUNCULUS_SUPPLEMENT = 100371,
  117. };
  118. ///Rune Knight
  119. enum rune_item_list : t_itemid
  120. {
  121. ITEMID_NAUTHIZ = 12725,
  122. ITEMID_RAIDO,
  123. ITEMID_BERKANA,
  124. ITEMID_ISA,
  125. ITEMID_OTHILA,
  126. ITEMID_URUZ,
  127. ITEMID_THURISAZ,
  128. ITEMID_WYRD,
  129. ITEMID_HAGALAZ,
  130. ITEMID_LUX_ANIMA = 22540,
  131. };
  132. ///Mechanic
  133. enum mechanic_item_list : t_itemid
  134. {
  135. ITEMID_ACCELERATOR = 2800,
  136. ITEMID_HOVERING_BOOSTER,
  137. ITEMID_SUICIDAL_DEVICE,
  138. ITEMID_SHAPE_SHIFTER,
  139. ITEMID_COOLING_DEVICE,
  140. ITEMID_MAGNETIC_FIELD_GENERATOR,
  141. ITEMID_BARRIER_BUILDER,
  142. ITEMID_REPAIR_KIT,
  143. ITEMID_CAMOUFLAGE_GENERATOR,
  144. ITEMID_HIGH_QUALITY_COOLER,
  145. ITEMID_SPECIAL_COOLER,
  146. ITEMID_SCARLET_PTS = 6360,
  147. ITEMID_INDIGO_PTS,
  148. ITEMID_YELLOW_WISH_PTS,
  149. ITEMID_LIME_GREEN_PTS,
  150. ITEMID_REPAIR_A = 12392,
  151. ITEMID_REPAIR_B,
  152. ITEMID_REPAIR_C,
  153. };
  154. ///Genetic
  155. enum genetic_item_list : t_itemid
  156. {
  157. ITEMID_SEED_OF_HORNY_PLANT = 6210,
  158. ITEMID_BLOODSUCK_PLANT_SEED,
  159. ITEMID_BOMB_MUSHROOM_SPORE,
  160. ITEMID_HP_INCREASE_POTION_SMALL = 12422,
  161. ITEMID_HP_INCREASE_POTION_MEDIUM,
  162. ITEMID_HP_INCREASE_POTION_LARGE,
  163. ITEMID_SP_INCREASE_POTION_SMALL,
  164. ITEMID_SP_INCREASE_POTION_MEDIUM,
  165. ITEMID_SP_INCREASE_POTION_LARGE,
  166. ITEMID_CONCENTRATED_WHITE_POTION_Z,
  167. ITEMID_SAVAGE_FULL_ROAST,
  168. ITEMID_COCKTAIL_WARG_BLOOD,
  169. ITEMID_MINOR_STEW,
  170. ITEMID_SIROMA_ICED_TEA,
  171. ITEMID_DROSERA_HERB_SALAD,
  172. ITEMID_PETITE_TAIL_NOODLES,
  173. ITEMID_BLACK_MASS,
  174. ITEMID_VITATA500,
  175. ITEMID_CONCENTRATED_CEROMAIN_SOUP,
  176. ITEMID_CURE_FREE = 12475,
  177. ITEMID_APPLE_BOMB = 13260,
  178. ITEMID_COCONUT_BOMB,
  179. ITEMID_MELON_BOMB,
  180. ITEMID_PINEAPPLE_BOMB,
  181. ITEMID_BANANA_BOMB,
  182. ITEMID_BLACK_LUMP,
  183. ITEMID_BLACK_HARD_LUMP,
  184. ITEMID_VERY_HARD_LUMP,
  185. ITEMID_MYSTERIOUS_POWDER,
  186. ITEMID_HP_INC_POTS_TO_THROW = 13275,
  187. ITEMID_HP_INC_POTM_TO_THROW,
  188. ITEMID_HP_INC_POTL_TO_THROW,
  189. ITEMID_SP_INC_POTS_TO_THROW,
  190. ITEMID_SP_INC_POTM_TO_THROW,
  191. ITEMID_SP_INC_POTL_TO_THROW,
  192. };
  193. ///Guillotine Cross
  194. enum poison_item_list : t_itemid
  195. {
  196. ITEMID_PARALYSE = 12717,
  197. ITEMID_LEECHESEND,
  198. ITEMID_OBLIVIONCURSE,
  199. ITEMID_DEATHHURT,
  200. ITEMID_TOXIN,
  201. ITEMID_PYREXIA,
  202. ITEMID_MAGICMUSHROOM,
  203. ITEMID_VENOMBLEED,
  204. };
  205. ///Item job
  206. enum e_item_job : uint16
  207. {
  208. ITEMJ_NONE = 0x00,
  209. ITEMJ_NORMAL = 0x01,
  210. ITEMJ_UPPER = 0x02,
  211. ITEMJ_BABY = 0x04,
  212. ITEMJ_THIRD = 0x08,
  213. ITEMJ_THIRD_UPPER = 0x10,
  214. ITEMJ_THIRD_BABY = 0x20,
  215. ITEMJ_FOURTH = 0x40,
  216. ITEMJ_MAX = 0xFF,
  217. ITEMJ_ALL_UPPER = ITEMJ_UPPER | ITEMJ_THIRD_UPPER,
  218. ITEMJ_ALL_BABY = ITEMJ_BABY | ITEMJ_THIRD_BABY,
  219. ITEMJ_ALL_THIRD = ITEMJ_THIRD | ITEMJ_THIRD_UPPER | ITEMJ_THIRD_BABY,
  220. #ifdef RENEWAL
  221. ITEMJ_ALL = ITEMJ_NORMAL | ITEMJ_UPPER | ITEMJ_BABY | ITEMJ_THIRD | ITEMJ_THIRD_UPPER | ITEMJ_THIRD_BABY | ITEMJ_FOURTH,
  222. #else
  223. ITEMJ_ALL = ITEMJ_NORMAL | ITEMJ_UPPER | ITEMJ_BABY,
  224. #endif
  225. };
  226. #define AMMO_TYPE_ALL ((1<<MAX_AMMO_TYPE)-1)
  227. enum e_random_item_group {
  228. IG_BLUEBOX = 1,
  229. IG_VIOLETBOX,
  230. IG_CARDALBUM,
  231. IG_GIFTBOX,
  232. IG_SCROLLBOX,
  233. IG_FINDINGORE,
  234. IG_COOKIEBAG,
  235. IG_FIRSTAID,
  236. IG_HERB,
  237. IG_FRUIT,
  238. IG_MEAT,
  239. IG_CANDY,
  240. IG_JUICE,
  241. IG_FISH,
  242. IG_BOX,
  243. IG_GEMSTONE,
  244. IG_RESIST,
  245. IG_ORE,
  246. IG_FOOD,
  247. IG_RECOVERY,
  248. IG_MINERAL,
  249. IG_TAMING,
  250. IG_SCROLL,
  251. IG_QUIVER,
  252. IG_MASK,
  253. IG_ACCESORY,
  254. IG_JEWEL,
  255. IG_GIFTBOX_1,
  256. IG_GIFTBOX_2,
  257. IG_GIFTBOX_3,
  258. IG_GIFTBOX_4,
  259. IG_EGGBOY,
  260. IG_EGGGIRL,
  261. IG_GIFTBOXCHINA,
  262. IG_LOTTOBOX,
  263. IG_FOODBAG,
  264. IG_POTION,
  265. IG_REDBOX_2,
  266. IG_BLEUBOX,
  267. IG_REDBOX,
  268. IG_GREENBOX,
  269. IG_YELLOWBOX,
  270. IG_OLDGIFTBOX,
  271. IG_MAGICCARDALBUM,
  272. IG_HOMETOWNGIFT,
  273. IG_MASQUERADE,
  274. IG_TRESURE_BOX_WOE,
  275. IG_MASQUERADE_2,
  276. IG_EASTER_SCROLL,
  277. IG_PIERRE_TREASUREBOX,
  278. IG_CHERISH_BOX,
  279. IG_CHERISH_BOX_ORI,
  280. IG_LOUISE_COSTUME_BOX,
  281. IG_XMAS_GIFT,
  282. IG_FRUIT_BASKET,
  283. IG_IMPROVED_COIN_BAG,
  284. IG_INTERMEDIATE_COIN_BAG,
  285. IG_MINOR_COIN_BAG,
  286. IG_S_GRADE_COIN_BAG,
  287. IG_A_GRADE_COIN_BAG,
  288. IG_ADVANCED_WEAPONS_BOX,
  289. IG_SPLENDID_BOX,
  290. IG_CARDALBUM_ARMOR,
  291. IG_CARDALBUM_HELM,
  292. IG_CARDALBUM_ACC,
  293. IG_CARDALBUM_SHOES,
  294. IG_CARDALBUM_SHIELD,
  295. IG_CARDALBUM_WEAPON,
  296. IG_CARDALBUM_GARMENT,
  297. IG_FLAMEL_CARD,
  298. IG_SPECIAL_BOX,
  299. IG_TRESURE_BOX_WOE_,
  300. IG_RWC_PARTI_BOX,
  301. IG_RWC_FINAL_COMP_BOX,
  302. IG_GIFT_BUNDLE,
  303. IG_CARACAS_RING_BOX,
  304. IG_CRUMPLED_PAPER,
  305. IG_SOLO_GIFT_BASKET,
  306. IG_COUPLE_EVENT_BASKET,
  307. IG_GM_WARP_BOX,
  308. IG_FORTUNE_COOKIE1,
  309. IG_FORTUNE_COOKIE2,
  310. IG_FORTUNE_COOKIE3,
  311. IG_NEW_GIFT_ENVELOPE,
  312. IG_PASSION_FB_HAT_BOX,
  313. IG_COOL_FB_HAT_BOX,
  314. IG_VICTORY_FB_HAT_BOX,
  315. IG_GLORY_FB_HAT_BOX,
  316. IG_PASSION_HAT_BOX2,
  317. IG_COOL_HAT_BOX2,
  318. IG_VICTORY_HAT_BOX2,
  319. IG_ASPERSIO_5_SCROLL_BOX,
  320. IG_PET_EGG_SCROLL_BOX1,
  321. IG_PET_EGG_SCROLL_BOX2,
  322. IG_PET_EGG_SCROLL1,
  323. IG_PET_EGG_SCROLL2,
  324. IG_PET_EGG_SCROLL_BOX3,
  325. IG_PET_EGG_SCROLL_BOX4,
  326. IG_PET_EGG_SCROLL_BOX5,
  327. IG_PET_EGG_SCROLL3,
  328. IG_PET_EGG_SCROLL4,
  329. IG_PET_EGG_SCROLL5,
  330. IG_INFILTRATOR_BOX,
  331. IG_MURAMASA_BOX,
  332. IG_EXCALIBUR_BOX,
  333. IG_COMBAT_KNIFE_BOX,
  334. IG_COUNTER_DAGGER_BOX,
  335. IG_KAISER_KNUCKLE_BOX,
  336. IG_POLE_AXE_BOX,
  337. IG_MIGHTY_STAFF_BOX,
  338. IG_RIGHT_EPSILON_BOX,
  339. IG_BALISTAR_BOX,
  340. IG_DIARY_OF_GREAT_SAGE_BOX,
  341. IG_ASURA_BOX,
  342. IG_APPLE_OF_ARCHER_BOX,
  343. IG_BUNNY_BAND_BOX,
  344. IG_SAHKKAT_BOX,
  345. IG_LORD_CIRCLET_BOX,
  346. IG_ELVEN_EARS_BOX,
  347. IG_STEEL_FLOWER_BOX,
  348. IG_CRITICAL_RING_BOX,
  349. IG_EARRING_BOX,
  350. IG_RING_BOX,
  351. IG_NECKLACE_BOX,
  352. IG_GLOVE_BOX,
  353. IG_BROOCH_BOX,
  354. IG_ROSARY_BOX,
  355. IG_SAFETY_RING_BOX,
  356. IG_VESPER_CORE01_BOX,
  357. IG_VESPER_CORE02_BOX,
  358. IG_VESPER_CORE03_BOX,
  359. IG_VESPER_CORE04_BOX,
  360. IG_PET_EGG_SCROLL_BOX6,
  361. IG_PET_EGG_SCROLL_BOX7,
  362. IG_PET_EGG_SCROLL_BOX8,
  363. IG_PET_EGG_SCROLL_BOX9,
  364. IG_PET_EGG_SCROLL_BOX10,
  365. IG_PET_EGG_SCROLL_BOX11,
  366. IG_PET_EGG_SCROLL6,
  367. IG_PET_EGG_SCROLL7,
  368. IG_PET_EGG_SCROLL8,
  369. IG_PET_EGG_SCROLL9,
  370. IG_PET_EGG_SCROLL10,
  371. IG_PET_EGG_SCROLL11,
  372. IG_CP_HELM_SCROLL_BOX,
  373. IG_CP_SHIELD_SCROLL_BOX,
  374. IG_CP_ARMOR_SCROLL_BOX,
  375. IG_CP_WEAPON_SCROLL_BOX,
  376. IG_REPAIR_SCROLL_BOX,
  377. IG_SUPER_PET_EGG1,
  378. IG_SUPER_PET_EGG2,
  379. IG_SUPER_PET_EGG3,
  380. IG_SUPER_PET_EGG4,
  381. IG_SUPER_CARD_PET_EGG1,
  382. IG_SUPER_CARD_PET_EGG2,
  383. IG_SUPER_CARD_PET_EGG3,
  384. IG_SUPER_CARD_PET_EGG4,
  385. IG_VIGORGRA_PACKAGE1,
  386. IG_VIGORGRA_PACKAGE2,
  387. IG_VIGORGRA_PACKAGE3,
  388. IG_VIGORGRA_PACKAGE4,
  389. IG_VIGORGRA_PACKAGE5,
  390. IG_VIGORGRA_PACKAGE6,
  391. IG_VIGORGRA_PACKAGE7,
  392. IG_VIGORGRA_PACKAGE8,
  393. IG_VIGORGRA_PACKAGE9,
  394. IG_VIGORGRA_PACKAGE10,
  395. IG_VIGORGRA_PACKAGE11,
  396. IG_VIGORGRA_PACKAGE12,
  397. IG_PET_EGG_SCROLL12,
  398. IG_PET_EGG_SCROLL13,
  399. IG_PET_EGG_SCROLL14,
  400. IG_SUPER_PET_EGG5,
  401. IG_SUPER_PET_EGG6,
  402. IG_SUPER_PET_EGG7,
  403. IG_SUPER_PET_EGG8,
  404. IG_PET_EGG_SCROLL_E,
  405. IG_RAMEN_HAT_BOX,
  406. IG_MYSTERIOUS_TRAVEL_SACK1,
  407. IG_MYSTERIOUS_TRAVEL_SACK2,
  408. IG_MYSTERIOUS_TRAVEL_SACK3,
  409. IG_MYSTERIOUS_TRAVEL_SACK4,
  410. IG_MAGICIAN_CARD_BOX,
  411. IG_ACOLYTE_CARD_BOX,
  412. IG_ARCHER_CARD_BOX,
  413. IG_SWORDMAN_CARD_BOX,
  414. IG_THIEF_CARD_BOX,
  415. IG_MERCHANT_CARD_BOX,
  416. IG_HARD_CORE_SET_BOX,
  417. IG_KITTY_SET_BOX,
  418. IG_SOFT_CORE_SET_BOX,
  419. IG_DEVIRUCHI_SET_BOX,
  420. IG_MVP_HUNT_BOX,
  421. IG_BREWING_BOX,
  422. IG_XMAS_PET_SCROLL,
  423. IG_LUCKY_SCROLL08,
  424. IG_BR_SWORDPACKAGE,
  425. IG_BR_MAGEPACKAGE,
  426. IG_BR_ACOLPACKAGE,
  427. IG_BR_ARCHERPACKAGE,
  428. IG_BR_MERPACKAGE,
  429. IG_BR_THIEFPACKAGE,
  430. IG_ACIDBOMB_10_BOX,
  431. IG_BASIC_SIEGE_SUPPLY_BOX,
  432. IG_ADV_SIEGE_SUPPLY_BOX,
  433. IG_ELITE_SIEGE_SUPPLY_BOX,
  434. IG_SAKURA_SCROLL,
  435. IG_BEHOLDER_RING_BOX,
  436. IG_HALLOW_RING_BOX,
  437. IG_CLAMOROUS_RING_BOX,
  438. IG_CHEMICAL_RING_BOX,
  439. IG_INSECTICIDE_RING_BOX,
  440. IG_FISHER_RING_BOX,
  441. IG_DECUSSATE_RING_BOX,
  442. IG_BLOODY_RING_BOX,
  443. IG_SATANIC_RING_BOX,
  444. IG_DRAGOON_RING_BOX,
  445. IG_ANGEL_SCROLL,
  446. IG_DEVIL_SCROLL,
  447. IG_SURPRISE_SCROLL,
  448. IG_JULY7_SCROLL,
  449. IG_BACSOJIN_SCROLL,
  450. IG_ANIMAL_SCROLL,
  451. IG_HEART_SCROLL,
  452. IG_NEW_YEAR_SCROLL,
  453. IG_VALENTINE_PLEDGE_BOX,
  454. IG_OX_TAIL_SCROLL,
  455. IG_BUDDAH_SCROLL,
  456. IG_EVIL_INCARNATION,
  457. IG_F_CLOVER_BOX_MOUTH,
  458. IG_MOUTH_BUBBLE_GUM_BOX,
  459. IG_F_CLOVER_BOX_MOUTH2,
  460. IG_F_CLOVER_BOX_MOUTH4,
  461. IG_BGUM_BOX_IN_MOUTH2,
  462. IG_BGUM_BOX_IN_MOUTH4,
  463. IG_TW_OCTOBER_SCROLL,
  464. IG_MY_SCROLL1,
  465. IG_TW_NOV_SCROLL,
  466. IG_MY_SCROLL2,
  467. IG_PR_RESET_STONE_BOX,
  468. IG_FPR_RESET_STONE_BOX,
  469. IG_MAJESTIC_DEVIL_SCROLL,
  470. IG_LIFE_RIBBON_BOX,
  471. IG_LIFE_RIBBON_BOX2,
  472. IG_LIFE_RIBBON_BOX3,
  473. IG_MAGIC_CANDY_BOX10,
  474. IG_RWC2010_SUITCASEA,
  475. IG_RWC2010_SUITCASEB,
  476. IG_SAGITTARIUS_SCROLL,
  477. IG_SAGITTARIUS_SCR_BOX,
  478. IG_SAGITTAR_DIADEM_SCROLL,
  479. IG_SAGITTAR_DI_SCROLL_BOX,
  480. IG_CAPRI_CROWN_SCROLL,
  481. IG_CAPRI_CROWN_SCROLL_BOX,
  482. IG_CAPRICON_DI_SCROLL,
  483. IG_CAPRICON_DI_SCROLL_BOX,
  484. IG_AQUARIUS_DIADEM_SCROLL,
  485. IG_AQUARIUS_DI_SCROLL_BOX,
  486. IG_LOVELY_AQUARIUS_SCROLL,
  487. IG_LOVELY_AQUARIUS_BOX,
  488. IG_PISCES_DIADEM_SCROLL,
  489. IG_PISCES_DIADEM_BOX,
  490. IG_ENERGETIC_PISCES_SCROLL,
  491. IG_ENERGETIC_PISCES_BOX,
  492. IG_ARIES_SCROLL,
  493. IG_ARIES_SCROLL_BOX,
  494. IG_BOARDING_HALTER_BOX,
  495. IG_TAURUS_DIADEM_SCROLL,
  496. IG_TAURUS_DI_SCROLL_BOX,
  497. IG_UMBALA_SPIRIT_BOX2,
  498. IG_F_UMBALA_SPIRIT_BOX2,
  499. IG_TAURUS_CROWN_SCROLL,
  500. IG_TAURUS_CROWN_SCROLL_BOX,
  501. IG_GEMI_DIADEM_SCROLL,
  502. IG_GEMI_DIADEM_SCROLL_BOX,
  503. IG_SUPER_PET_EGG1_2,
  504. IG_SUPER_PET_EGG4_2,
  505. IG_FIRE_BRAND_BOX,
  506. IG_BR_INDEPENDENCE_SCROLL,
  507. IG_ALL_IN_ONE_RING_BOX,
  508. IG_GEMI_CROWN_SCROLL,
  509. IG_GEMI_CROWN_SCROLL_BOX,
  510. IG_RWC_SPECIAL_SCROLL,
  511. IG_RWC_LIMITED_SCROLL,
  512. IG_ASGARD_SCROLL,
  513. IG_MS_CANCER_SCROLL,
  514. IG_RWC_SUPER_SCROLL,
  515. IG_LEO_SCROLL,
  516. IG_MS_VIRGO_SCROLL,
  517. IG_LUCKY_EGG_C6,
  518. IG_LIBRA_SCROLL,
  519. IG_HALLO_SCROLL,
  520. IG_MS_SCORPIO_SCROLL,
  521. IG_TCG_CARD_SCROLL,
  522. IG_BOITATA_SCROLL,
  523. IG_LUCKY_EGG_C2,
  524. IG_LUCKY_EGG_C6_,
  525. IG_LUCKY_EGG_C9,
  526. IG_LUCKY_EGG_C7,
  527. IG_LUCKY_EGG_C8,
  528. IG_LUCKY_EGG_C10,
  529. IG_WIND_TYPE_SCROLL,
  530. IG_LUCKY_EGG_C3,
  531. IG_LUCKY_EGG_C4,
  532. IG_LUCKY_EGG_C5,
  533. IG_WEATHER_REPORT_BOX,
  534. IG_COMIN_ACTOR_BOX,
  535. IG_HEN_SET_BOX,
  536. IG_LUCKY_EGG_C,
  537. IG_WATER_TYPE_SCROLL,
  538. IG_EARTH_TYPE_SCROLL,
  539. IG_EARTH_TYPE_SCROLL_,
  540. IG_SPLASH_SCROLL,
  541. IG_VOCATION_SCROLL,
  542. IG_WISDOM_SCROLL,
  543. IG_PATRON_SCROLL,
  544. IG_HEAVEN_SCROLL,
  545. IG_TW_AUG_SCROLL,
  546. IG_TW_NOV_SCROLL2,
  547. IG_ILLUSION_NOTHING,
  548. IG_TW_SEP_SCROLL,
  549. IG_FLAME_LIGHT,
  550. IG_TW_RAINBOW_SCROLL,
  551. IG_TW_RED_SCROLL,
  552. IG_TW_ORANGE_SCROLL,
  553. IG_TW_YELLOW_SCROLL,
  554. IG_SCROLL_OF_DEATH,
  555. IG_SCROLL_OF_LIFE,
  556. IG_SCROLL_OF_MAGIC,
  557. IG_SCROLL_OF_THEWS,
  558. IG_SCROLL_OF_DARKNESS,
  559. IG_SCROLL_OF_HOLINESS,
  560. IG_HORNED_SCROLL,
  561. IG_MERCURY_SCROLL,
  562. IG_CHALLENGE_KIT,
  563. IG_TW_APRIL_SCROLL,
  564. IG_TW_OCTOBER_SCROLL_,
  565. IG_SUMMER_SCROLL3,
  566. IG_C_WING_OF_FLY_3DAY_BOX,
  567. IG_RWC_2012_SET_BOX,
  568. IG_EX_DEF_POTION_BOX,
  569. IG_RWC_SCROLL_2012,
  570. IG_OLD_COIN_POCKET,
  571. IG_HIGH_COIN_POCKET,
  572. IG_MID_COIN_POCKET,
  573. IG_LOW_COIN_POCKET,
  574. IG_SGRADE_POCKET,
  575. IG_AGRADE_POCKET,
  576. IG_BGRADE_POCKET,
  577. IG_CGRADE_POCKET,
  578. IG_DGRADE_POCKET,
  579. IG_EGRADE_POCKET,
  580. IG_PTOTECTION_SEAGOD_BOX,
  581. IG_HAIRTAIL_BOX1,
  582. IG_HAIRTAIL_BOX2,
  583. IG_SPEARFISH_BOX1,
  584. IG_SPEARFISH_BOX2,
  585. IG_SAUREL_BOX1,
  586. IG_SAUREL_BOX2,
  587. IG_TUNA_BOX1,
  588. IG_TUNA_BOX2,
  589. IG_MALANG_CRAB_BOX1,
  590. IG_MALANG_CRAB_BOX2,
  591. IG_BRINDLE_EEL_BOX1,
  592. IG_BRINDLE_EEL_BOX2,
  593. IG_PTOTECTION_SEAGOD_BOX2,
  594. IG_PTOTECTION_SEAGOD_BOX3,
  595. IG_OCTO_HSTICK_BOX,
  596. IG_OCTO_HSTICK_BOX2,
  597. IG_OCTO_HSTICK_BOX3,
  598. IG_SILVERVINE_FRUIT_BOX10,
  599. IG_SILVERVINE_FRUIT_BOX40,
  600. IG_SILVERVINE_FRUIT_BOX4,
  601. IG_MALANG_WOE_ENCARD_BOX,
  602. IG_XMAS_BLESS,
  603. IG_FIRE_TYPE_SCROLL,
  604. IG_BLUE_SCROLL,
  605. IG_GOOD_STUDENT_GIFT_BOX,
  606. IG_BAD_STUDENT_GIFT_BOX,
  607. IG_INDIGO_SCROLL,
  608. IG_VIOLET_SCROLL,
  609. IG_BI_HWANG_SCROLL,
  610. IG_JUNG_BI_SCROLL,
  611. IG_JE_UN_SCROLL,
  612. IG_YONG_KWANG_SCROLL,
  613. IG_HALLOWEEN_G_BOX,
  614. IG_SOLO_CHRISTMAS_GIFT,
  615. IG_SG_WEAPON_SUPPLY_BOX,
  616. IG_CANDY_HOLDER,
  617. IG_LUCKY_BAG,
  618. IG_HOLY_EGG_2,
  619. IG_ADVENTURER_RETURNS_SUPPORT_BOX,
  620. IG_SUPPORT_PACKAGE,
  621. IG_SUPPORT_PACKAGE_10,
  622. IG_EVENT_ALMIGHTY_BOX,
  623. IG_EVENT_ALMIGHTY_BOX_100,
  624. IG_LOTTOBOX1,
  625. IG_LOTTOBOX2,
  626. IG_LOTTOBOX3,
  627. IG_LOTTOBOX4,
  628. IG_LOTTOBOX5,
  629. IG_SUPPORT_PACKAGE_III,
  630. IG_SUPPORT_PACKAGE_III_10,
  631. IG_UNLIMITED_BOX,
  632. IG_UNLIMITED_BOX_10,
  633. IG_UNLIMITED_BOX_II,
  634. IG_UNLIMITED_BOX_II_10,
  635. IG_THREE_MASTER_PACKAGE_III,
  636. IG_THREE_MASTER_PACKAGE_III_10,
  637. IG_2013_RWC_SCROLL,
  638. IG_SUPPORT_PACKAGE_II,
  639. IG_SUPPORT_PACKAGE_II_10,
  640. IG_LEVEL_UP_BOX100,
  641. IG_LEVEL_UP_BOX120,
  642. IG_LEVEL_UP_BOX130,
  643. IG_LEVEL_UP_BOX140,
  644. IG_LEVEL_UP_BOX150,
  645. IG_LEVEL_UP_BOX160,
  646. IG_GIFT_BUFF_SET,
  647. IG_LUCKY_SILVERVINE_FRUIT_BOX_III10,
  648. IG_LUCKY_SILVERVINE_FRUIT_BOX_III110,
  649. IG_OLD_ORE_BOX,
  650. IG_BLESSING_LUCKY_SCROLL,
  651. IG_SOGRAT_LUCKY_SCROLL,
  652. IG_GARNET_LUCKY_SCROLL,
  653. IG_AMORA_LUCKY_SCROLL,
  654. IG_VENUS_LUCKY_SCROLL,
  655. IG_ERZULIE_LUCKY_SCROLL,
  656. IG_MAJESTIC_LUCKY_SCROLL,
  657. IG_EPIC_HEROES_LUCKY_EGG,
  658. IG_HERO_MIDGARD_EGG,
  659. IG_IMORTAL_MIDGARD_SCROLL,
  660. IG_TW_13Y_LUCKY_EGG_06,
  661. IG_HAPPY_TIME_SCROLL,
  662. IG_TIME_TRAVEL_SCROLL,
  663. IG_SOLARIS_FESTIVAL_SCROLL,
  664. IG_MIDGARD_FES_SCROLL,
  665. IG_MIDGARD_SCROLL,
  666. IG_SWEET_MIDGARD_SCROLL,
  667. IG_WINTER_MIDGARD_SCROLL,
  668. IG_SPRING_FESTIVAL_SCROLL,
  669. IG_IDRO10TH_SCROLL,
  670. IG_REQUIEM_SCROLL,
  671. IG_HOLY_SPIRIT_SCROLL,
  672. IG_GARUDA_SCROLL,
  673. IG_THANKS_GIVING_SCROLL,
  674. IG_IDN_LEGEND_HERO_SCROLL,
  675. IG_BLESSING_MIDGARD_SCROLL,
  676. IG_CHRONOSIAN_LUCKY_SCROLL,
  677. IG_SANCTUARY_LUCKY_SCROLL,
  678. IG_CYBORG_LUCKY_SCROLL,
  679. IG_UNDINE_LUCKY_SCROLL,
  680. IG_GOD_MATERIAL_BOX,
  681. IG_SEALED_MIND_BOX,
  682. IG_COSTAMA_EGG18,
  683. IG_COSTAMA_EGG19,
  684. IG_FLOWER_BLOSSOM_SCROLL,
  685. IG_COSTAMA_EGG24,
  686. IG_SMITHY_LUCKY_SCROLL,
  687. IG_GANYMEDE_LUCKY_SCROLL,
  688. IG_LASTANGEL_LUCKYSCROLL,
  689. IG_VALKYRIE_LUCKY_SCROLL,
  690. IG_SPLASH_RAINBOW_LUCKY_SCROLL,
  691. IG_SHAPESHIFTER_COSTUME,
  692. IG_JULY_LUCKY_SCROLL,
  693. IG_COSTAMA_EGG23,
  694. IG_COSTAMA_EGG28,
  695. IG_MIDGARD_LUCKY_SCROLL,
  696. IG_BLESSING_SCARLET_SCROLL,
  697. IG_COSTAMA_EGG29,
  698. IG_INK_BALL,
  699. IG_SOMETHING_CANDY_HOLDER,
  700. IG_SHINING_EGG,
  701. IG_AGUST_LUCKY_SCROLL,
  702. IG_ELEMENT,
  703. IG_POISON,
  704. IG_CASH_FOOD,
  705. IG_BOMB,
  706. IG_THROWABLE,
  707. IG_MERCENARY,
  708. IG_NOIVE_BOX,
  709. IG_VALERIAN_SCROLL,
  710. IG_IMMORTAL_EGG,
  711. IG_SAPPHIRE_EGG,
  712. IG_IDN_HEART_SCROLL,
  713. IG_IDN_WISDOM_EGG,
  714. IG_CHRISTMAS_BOX,
  715. IG_SPECIAL_CHRISTMAS_BOX,
  716. IG_SANTA_GIFT,
  717. IG_PRIZEOFHERO,
  718. IG_PRIVATE_AIRSHIP,
  719. IG_TOKEN_OF_SIEGFRIED,
  720. IG_ENCHANT_STONE_BOX,
  721. IG_ENCHANT_STONE_BOX2,
  722. IG_ENCHANT_STONE_BOX3,
  723. IG_ENCHANT_STONE_BOX4,
  724. IG_ENCHANT_STONE_BOX5,
  725. IG_ENCHANT_STONE_BOX6,
  726. IG_ENCHANT_STONE_BOX7,
  727. IG_ENCHANT_STONE_BOX8,
  728. IG_ENCHANT_STONE_BOX9,
  729. IG_ENCHANT_STONE_BOX10,
  730. IG_ENCHANT_STONE_BOX11,
  731. IG_ENCHANT_STONE_BOX12,
  732. IG_ENCHANT_STONE_BOX13,
  733. IG_ENCHANT_STONE_BOX14,
  734. IG_ENCHANT_STONE_BOX15,
  735. IG_ENCHANT_STONE_BOX16,
  736. IG_ENCHANT_STONE_BOX17,
  737. IG_ENCHANT_STONE_BOX18,
  738. IG_ENCHANT_STONE_BOX19,
  739. IG_ENCHANT_STONE_BOX20,
  740. IG_ENCHANT_STONE_BOX21,
  741. IG_XMAS_PACKAGE_14,
  742. IG_EASTER_EGG,
  743. IG_PITAPAT_BOX,
  744. IG_HAPPY_BOX_J,
  745. IG_MAX,
  746. };
  747. /// Enum for bound/sell restricted selling
  748. enum e_itemshop_restrictions {
  749. ISR_NONE = 0x0,
  750. ISR_BOUND = 0x1,
  751. ISR_SELLABLE = 0x2,
  752. ISR_BOUND_SELLABLE = 0x4,
  753. ISR_BOUND_GUILDLEADER_ONLY = 0x8,
  754. };
  755. /// Enum for item drop effects
  756. enum e_item_drop_effect : uint16 {
  757. DROPEFFECT_NONE = 0,
  758. DROPEFFECT_CLIENT,
  759. #if PACKETVER < 20200304
  760. DROPEFFECT_WHITE_PILLAR,
  761. #endif
  762. DROPEFFECT_BLUE_PILLAR,
  763. DROPEFFECT_YELLOW_PILLAR,
  764. DROPEFFECT_PURPLE_PILLAR,
  765. #if PACKETVER < 20200304
  766. DROPEFFECT_ORANGE_PILLAR,
  767. #else
  768. DROPEFFECT_GREEN_PILLAR,
  769. #endif
  770. #if PACKETVER >= 20200304
  771. DROPEFFECT_RED_PILLAR,
  772. #endif
  773. DROPEFFECT_MAX,
  774. #if PACKETVER >= 20200304
  775. // White was removed in 2020-03-04
  776. DROPEFFECT_WHITE_PILLAR,
  777. // Orange was replaced by green in 2020-03-04
  778. DROPEFFECT_ORANGE_PILLAR,
  779. #else
  780. // Not supported before 2020-03-04
  781. DROPEFFECT_GREEN_PILLAR,
  782. DROPEFFECT_RED_PILLAR,
  783. #endif
  784. };
  785. /// Enum for items with delayed consumption
  786. enum e_delay_consume : uint8 {
  787. DELAYCONSUME_NONE = 0x0,
  788. DELAYCONSUME_TEMP = 0x1, // Items that are not consumed immediately upon double-click
  789. DELAYCONSUME_NOCONSUME = 0x2, // Items that are not removed upon double-click
  790. };
  791. /// Item combo struct
  792. struct s_item_combo {
  793. std::vector<t_itemid> nameid;
  794. script_code *script;
  795. uint32 id;
  796. ~s_item_combo() {
  797. if (this->script) {
  798. script_free_code(this->script);
  799. this->script = nullptr;
  800. }
  801. this->nameid.clear();
  802. }
  803. };
  804. /// Struct of item group entry
  805. struct s_item_group_entry
  806. {
  807. t_itemid nameid; /// Item ID
  808. uint16 rate;
  809. uint16 duration, /// Duration if item as rental item (in minutes)
  810. amount; /// Amount of item will be obtained
  811. bool isAnnounced, /// Broadcast if player get this item
  812. GUID, /// Gives Unique ID for items in each box opened
  813. isStacked, /// Whether stackable items are given stacked
  814. isNamed; /// Named the item (if possible)
  815. uint8 bound; /// Makes the item as bound item (according to bound type)
  816. };
  817. /// Struct of random group
  818. struct s_item_group_random
  819. {
  820. uint32 total_rate;
  821. std::unordered_map<t_itemid, std::shared_ptr<s_item_group_entry>> data; /// item ID, s_item_group_entry
  822. std::shared_ptr<s_item_group_entry> get_random_itemsubgroup();
  823. };
  824. /// Struct of item group that will be used for db
  825. struct s_item_group_db
  826. {
  827. uint16 id; /// Item Group ID
  828. std::unordered_map<uint16, std::shared_ptr<s_item_group_random>> random; /// group ID, s_item_group_random
  829. };
  830. /// Struct of Roulette db
  831. struct s_roulette_db {
  832. t_itemid *nameid[MAX_ROULETTE_LEVEL]; /// Item ID
  833. unsigned short *qty[MAX_ROULETTE_LEVEL]; /// Amount of Item ID
  834. int *flag[MAX_ROULETTE_LEVEL]; /// Whether the item is for loss or win
  835. int items[MAX_ROULETTE_LEVEL]; /// Number of items in the list for each
  836. };
  837. extern struct s_roulette_db rd;
  838. ///Main item data struct
  839. struct item_data
  840. {
  841. t_itemid nameid;
  842. std::string name, ename;
  843. uint32 value_buy;
  844. uint32 value_sell;
  845. item_types type;
  846. uint8 subtype;
  847. int maxchance; //For logs, for external game info, for scripts: Max drop chance of this item (e.g. 0.01% , etc.. if it = 0, then monsters don't drop it, -1 denotes items sold in shops only) [Lupus]
  848. uint8 sex;
  849. uint32 equip;
  850. uint32 weight;
  851. uint32 atk;
  852. uint32 def;
  853. uint16 range;
  854. uint16 slots;
  855. uint32 look;
  856. uint16 elv;
  857. uint16 weapon_level;
  858. uint16 armor_level;
  859. t_itemid view_id;
  860. uint16 elvmax; ///< Maximum level for this item
  861. #ifdef RENEWAL
  862. uint32 matk;
  863. #endif
  864. //Lupus: I rearranged order of these fields due to compatibility with ITEMINFO script command
  865. // some script commands should be revised as well...
  866. uint64 class_base[3]; //Specifies if the base can wear this item (split in 3 indexes per type: 1-1, 2-1, 2-2)
  867. uint16 class_upper; //Specifies if the class-type can equip it (See e_item_job)
  868. struct {
  869. int chance;
  870. int id;
  871. } mob[MAX_SEARCH]; //Holds the mobs that have the highest drop rate for this item. [Skotlex]
  872. struct script_code *script; //Default script for everything.
  873. struct script_code *equip_script; //Script executed once when equipping.
  874. struct script_code *unequip_script;//Script executed once when unequipping.
  875. struct {
  876. unsigned available : 1;
  877. uint32 no_equip;
  878. unsigned no_refine : 1; // [celest]
  879. unsigned delay_consume; // [Skotlex]
  880. struct {
  881. bool drop, trade, trade_partner, sell, cart, storage, guild_storage, mail, auction;
  882. } trade_restriction; //Item restrictions mask [Skotlex]
  883. unsigned autoequip: 1;
  884. bool buyingstore;
  885. bool dead_branch; // As dead branch item. Logged at `branchlog` table and cannot be used at 'nobranch' mapflag [Cydh]
  886. bool group; // As item group container [Cydh]
  887. unsigned guid : 1; // This item always be attached with GUID and make it as bound item! [Cydh]
  888. bool broadcast; ///< Will be broadcasted if someone obtain the item [Cydh]
  889. bool bindOnEquip; ///< Set item as bound when equipped
  890. e_item_drop_effect dropEffect; ///< Drop Effect Mode
  891. } flag;
  892. struct {// item stacking limitation
  893. uint16 amount;
  894. bool inventory, cart, storage, guild_storage;
  895. } stack;
  896. struct {
  897. uint16 override;
  898. bool sitting;
  899. } item_usage;
  900. short gm_lv_trade_override; //GM-level to override trade_restriction
  901. std::vector<std::shared_ptr<s_item_combo>> combos;
  902. struct {
  903. uint32 duration;
  904. sc_type sc; ///< Use delay group if any instead using player's item_delay data [Cydh]
  905. } delay;
  906. ~item_data() {
  907. if (this->script){
  908. script_free_code(this->script);
  909. this->script = nullptr;
  910. }
  911. if (this->equip_script){
  912. script_free_code(this->equip_script);
  913. this->equip_script = nullptr;
  914. }
  915. if (this->unequip_script){
  916. script_free_code(this->unequip_script);
  917. this->unequip_script = nullptr;
  918. }
  919. this->combos.clear();
  920. }
  921. bool isStackable();
  922. int inventorySlotNeeded(int quantity);
  923. };
  924. // Struct for item random option [Secret]
  925. struct s_random_opt_data
  926. {
  927. uint16 id;
  928. std::string name;
  929. script_code *script;
  930. ~s_random_opt_data() {
  931. if (script)
  932. script_free_code(script);
  933. }
  934. };
  935. /// Struct for random option group entry
  936. struct s_random_opt_group_entry {
  937. uint16 id;
  938. int16 min_value, max_value;
  939. int8 param;
  940. uint16 chance;
  941. };
  942. /// Struct for Random Option Group
  943. struct s_random_opt_group {
  944. uint16 id;
  945. std::string name;
  946. std::map<uint16, std::vector<std::shared_ptr<s_random_opt_group_entry>>> slots;
  947. uint16 max_random;
  948. std::vector<std::shared_ptr<s_random_opt_group_entry>> random_options;
  949. };
  950. class RandomOptionDatabase : public TypesafeYamlDatabase<uint16, s_random_opt_data> {
  951. public:
  952. RandomOptionDatabase() : TypesafeYamlDatabase("RANDOM_OPTION_DB", 1) {
  953. }
  954. const std::string getDefaultLocation();
  955. uint64 parseBodyNode(const YAML::Node &node);
  956. void loadingFinished();
  957. // Additional
  958. bool option_exists(std::string name);
  959. bool option_get_id(std::string name, uint16 &id);
  960. };
  961. extern RandomOptionDatabase random_option_db;
  962. class RandomOptionGroupDatabase : public TypesafeYamlDatabase<uint16, s_random_opt_group> {
  963. public:
  964. RandomOptionGroupDatabase() : TypesafeYamlDatabase("RANDOM_OPTION_GROUP", 1) {
  965. }
  966. const std::string getDefaultLocation();
  967. uint64 parseBodyNode(const YAML::Node &node);
  968. // Additional
  969. bool add_option(const YAML::Node &node, std::shared_ptr<s_random_opt_group_entry> &entry);
  970. bool option_exists(std::string name);
  971. bool option_get_id(std::string name, uint16 &id);
  972. };
  973. extern RandomOptionGroupDatabase random_option_group;
  974. class ItemDatabase : public TypesafeCachedYamlDatabase<t_itemid, item_data> {
  975. private:
  976. std::unordered_map<std::string, std::shared_ptr<item_data>> nameToItemDataMap;
  977. std::unordered_map<std::string, std::shared_ptr<item_data>> aegisNameToItemDataMap;
  978. e_sex defaultGender( const YAML::Node &node, std::shared_ptr<item_data> id );
  979. public:
  980. ItemDatabase() : TypesafeCachedYamlDatabase("ITEM_DB", 2, 1) {
  981. }
  982. const std::string getDefaultLocation();
  983. uint64 parseBodyNode(const YAML::Node& node);
  984. void loadingFinished();
  985. void clear() override{
  986. TypesafeCachedYamlDatabase::clear();
  987. this->nameToItemDataMap.clear();
  988. this->aegisNameToItemDataMap.clear();
  989. }
  990. // Additional
  991. std::shared_ptr<item_data> searchname( const char* name );
  992. std::shared_ptr<item_data> search_aegisname( const char *name );
  993. };
  994. extern ItemDatabase item_db;
  995. class ItemGroupDatabase : public TypesafeCachedYamlDatabase<uint16, s_item_group_db> {
  996. public:
  997. ItemGroupDatabase() : TypesafeCachedYamlDatabase("ITEM_GROUP_DB", 1) {
  998. }
  999. const std::string getDefaultLocation();
  1000. uint64 parseBodyNode(const YAML::Node& node);
  1001. void loadingFinished();
  1002. // Additional
  1003. bool item_exists(uint16 group_id, t_itemid nameid);
  1004. int16 item_exists_pc(map_session_data *sd, uint16 group_id);
  1005. t_itemid get_random_item_id(uint16 group_id, uint8 sub_group);
  1006. std::shared_ptr<s_item_group_entry> get_random_entry(uint16 group_id, uint8 sub_group);
  1007. uint8 pc_get_itemgroup(uint16 group_id, bool identify, map_session_data *sd);
  1008. };
  1009. extern ItemGroupDatabase itemdb_group;
  1010. int itemdb_searchname_array(struct item_data** data, int size, const char *str);
  1011. struct item_data* itemdb_search(t_itemid nameid);
  1012. struct item_data* itemdb_exists(t_itemid nameid);
  1013. #define itemdb_name(n) itemdb_search(n)->name.c_str()
  1014. #define itemdb_ename(n) itemdb_search(n)->ename.c_str()
  1015. #define itemdb_type(n) itemdb_search(n)->type
  1016. #define itemdb_subtype(n) itemdb_search(n)->subtype
  1017. #define itemdb_atk(n) itemdb_search(n)->atk
  1018. #define itemdb_def(n) itemdb_search(n)->def
  1019. #define itemdb_look(n) itemdb_search(n)->look
  1020. #define itemdb_weight(n) itemdb_search(n)->weight
  1021. #define itemdb_equip(n) itemdb_search(n)->equip
  1022. #define itemdb_usescript(n) itemdb_search(n)->script
  1023. #define itemdb_equipscript(n) itemdb_search(n)->script
  1024. #define itemdb_wlv(n) itemdb_search(n)->weapon_level
  1025. #define itemdb_range(n) itemdb_search(n)->range
  1026. #define itemdb_slots(n) itemdb_search(n)->slots
  1027. #define itemdb_available(n) (itemdb_search(n)->flag.available)
  1028. #define itemdb_traderight(n) (itemdb_search(n)->flag.trade_restriction)
  1029. #define itemdb_viewid(n) (itemdb_search(n)->view_id)
  1030. #define itemdb_autoequip(n) (itemdb_search(n)->flag.autoequip)
  1031. #define itemdb_dropeffect(n) (itemdb_search(n)->flag.dropEffect)
  1032. const char* itemdb_typename(enum item_types type);
  1033. const char *itemdb_typename_ammo (e_ammo_type ammo);
  1034. #define itemdb_value_buy(n) itemdb_search(n)->value_buy
  1035. #define itemdb_value_sell(n) itemdb_search(n)->value_sell
  1036. #define itemdb_canrefine(n) (!itemdb_search(n)->flag.no_refine)
  1037. //Item trade restrictions [Skotlex]
  1038. bool itemdb_isdropable_sub(struct item_data *itd, int gmlv, int unused);
  1039. bool itemdb_cantrade_sub(struct item_data *itd, int gmlv, int gmlv2);
  1040. bool itemdb_canpartnertrade_sub(struct item_data *itd, int gmlv, int gmlv2);
  1041. bool itemdb_cansell_sub(struct item_data *itd, int gmlv, int unused);
  1042. bool itemdb_cancartstore_sub(struct item_data *itd, int gmlv, int unused);
  1043. bool itemdb_canstore_sub(struct item_data *itd, int gmlv, int unused);
  1044. bool itemdb_canguildstore_sub(struct item_data *itd, int gmlv, int unused);
  1045. bool itemdb_canmail_sub(struct item_data *itd, int gmlv, int unused);
  1046. bool itemdb_canauction_sub(struct item_data *itd, int gmlv, int unused);
  1047. bool itemdb_isrestricted(struct item* item, int gmlv, int gmlv2, bool (*func)(struct item_data*, int, int));
  1048. bool itemdb_ishatched_egg(struct item* item);
  1049. #define itemdb_isdropable(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_isdropable_sub)
  1050. #define itemdb_cantrade(item, gmlv, gmlv2) itemdb_isrestricted(item, gmlv, gmlv2, itemdb_cantrade_sub)
  1051. #define itemdb_canpartnertrade(item, gmlv, gmlv2) itemdb_isrestricted(item, gmlv, gmlv2, itemdb_canpartnertrade_sub)
  1052. #define itemdb_cansell(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_cansell_sub)
  1053. #define itemdb_cancartstore(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_cancartstore_sub)
  1054. #define itemdb_canstore(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_canstore_sub)
  1055. #define itemdb_canguildstore(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canguildstore_sub)
  1056. #define itemdb_canmail(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canmail_sub)
  1057. #define itemdb_canauction(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canauction_sub)
  1058. bool itemdb_isequip2(struct item_data *id);
  1059. #define itemdb_isequip(nameid) itemdb_isequip2(itemdb_search(nameid))
  1060. char itemdb_isidentified(t_itemid nameid);
  1061. bool itemdb_isstackable2(struct item_data *id);
  1062. #define itemdb_isstackable(nameid) itemdb_isstackable2(itemdb_search(nameid))
  1063. bool itemdb_isNoEquip(struct item_data *id, uint16 m);
  1064. s_item_combo *itemdb_combo_exists(uint32 combo_id);
  1065. bool itemdb_parse_roulette_db(void);
  1066. void itemdb_reload(void);
  1067. void do_final_itemdb(void);
  1068. void do_init_itemdb(void);
  1069. #endif /* ITEMDB_HPP */