itemdb.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. // Copyright (c) Athena Dev Teams - Licensed under GNU GPL
  2. // For more information, see LICENCE in the main folder
  3. #ifndef _ITEMDB_H_
  4. #define _ITEMDB_H_
  5. #include "../common/db.h"
  6. #include "../common/mmo.h" // ITEM_NAME_LENGTH
  7. #include "map.h"
  8. /// 32k array entries in array (the rest goes to the db)
  9. #define MAX_ITEMDB 0x8000
  10. ///Use apple for unknown items.
  11. #define UNKNOWN_ITEM_ID 512
  12. /// The maximum number of item delays
  13. #define MAX_ITEMDELAYS 10
  14. ///Designed for search functions, species max number of matches to display.
  15. #define MAX_SEARCH 5
  16. ///Maximum amount of items a combo may require
  17. #define MAX_ITEMS_PER_COMBO 6
  18. //The only item group required by the code to be known. See const.txt for the full list.
  19. #define IG_FINDINGORE 6
  20. #define IG_POTION 37
  21. #define MAX_ITEMGROUP_RANDGROUP 4 ///Max group for random item (increase this when needed). TODO: Remove this limit and use dynamic size if needed
  22. #define CARD0_FORGE 0x00FF
  23. #define CARD0_CREATE 0x00FE
  24. #define CARD0_PET ((short)0xFF00)
  25. ///Marks if the card0 given is "special" (non-item id used to mark pets/created items. [Skotlex]
  26. #define itemdb_isspecial(i) (i == CARD0_FORGE || i == CARD0_CREATE || i == CARD0_PET)
  27. ///Enum of item id (for hardcoded purpose)
  28. enum item_itemid {
  29. ITEMID_RED_POTION = 501,
  30. ITEMID_YELLOW_POTION = 503,
  31. ITEMID_WHITE_POTION = 504,
  32. ITEMID_BLUE_POTION = 505,
  33. ITEMID_HOLY_WATER = 523,
  34. ITEMID_RED_SLIM_POTION = 545,
  35. ITEMID_YELLOW_SLIM_POTION = 546,
  36. ITEMID_WHITE_SLIM_POTION = 547,
  37. ITEMID_WING_OF_FLY = 601,
  38. ITEMID_WING_OF_BUTTERFLY = 602,
  39. ITEMID_ANODYNE = 605,
  40. ITEMID_ALOEBERA = 606,
  41. ITEMID_EMPTY_BOTTLE = 713,
  42. ITEMID_EMPERIUM = 714,
  43. ITEMID_YELLOW_GEMSTONE = 715,
  44. ITEMID_RED_GEMSTONE = 716,
  45. ITEMID_BLUE_GEMSTONE = 717,
  46. ITEMID_ALCOHOL = 970,
  47. ITEMID_ORIDECON = 984,
  48. ITEMID_ANVIL = 986,
  49. ITEMID_ORIDECON_ANVIL = 987,
  50. ITEMID_GOLDEN_ANVIL = 988,
  51. ITEMID_EMPERIUM_ANVIL = 989,
  52. ITEMID_BLOODY_RED = 990,
  53. ITEMID_CRYSTAL_BLUE = 991,
  54. ITEMID_WIND_OF_VERDURE = 992,
  55. ITEMID_YELLOW_LIVE = 993,
  56. ITEMID_FLAME_HEART = 994,
  57. ITEMID_MISTIC_FROZEN = 995,
  58. ITEMID_ROUGH_WIND = 996,
  59. ITEMID_GREAT_NATURE = 997,
  60. ITEMID_IRON = 998,
  61. ITEMID_STEEL = 999,
  62. ITEMID_STAR_CRUMB = 1000,
  63. ITEMID_PHRACON = 1010,
  64. ITEMID_EMVERETARCON = 1011,
  65. ITEMID_TRAP = 1065,
  66. ITEMID_PAINT_BRUSH = 6122,
  67. ITEMID_STRANGE_EMBRYO = 6415,
  68. ITEMID_STONE = 7049,
  69. ITEMID_FIRE_BOTTLE = 7135,
  70. ITEMID_ACID_BOTTLE = 7136,
  71. ITEMID_MAN_EATER_BOTTLE = 7137,
  72. ITEMID_MINI_BOTTLE = 7138,
  73. ITEMID_COATING_BOTTLE = 7139,
  74. ITEMID_FRAGMENT_OF_CRYSTAL = 7321,
  75. ITEMID_SKULL_ = 7420,
  76. ITEMID_TOKEN_OF_SIEGFRIED = 7621,
  77. ITEMID_TRAP_ALLOY = 7940,
  78. ITEMID_MERCENARY_RED_POTION = 12184,
  79. ITEMID_MERCENARY_BLUE_POTION = 12185,
  80. ITEMID_BATTLE_MANUAL = 12208,
  81. ITEMID_BUBBLE_GUM = 12210,
  82. ITEMID_GIANT_FLY_WING = 12212,
  83. ITEMID_NEURALIZER = 12213,
  84. ITEMID_M_CENTER_POTION = 12241,
  85. ITEMID_M_AWAKENING_POTION = 12242,
  86. ITEMID_M_BERSERK_POTION = 12243,
  87. ITEMID_COMP_BATTLE_MANUAL = 12263,
  88. ITEMID_LOVE_ANGEL = 12287,
  89. ITEMID_SQUIRREL = 12288,
  90. ITEMID_GOGO = 12289,
  91. ITEMID_PICTURE_DIARY = 12304,
  92. ITEMID_MINI_HEART = 12305,
  93. ITEMID_NEWCOMER = 12306,
  94. ITEMID_KID = 12307,
  95. ITEMID_MAGIC_CASTLE = 12308,
  96. ITEMID_BULGING_HEAD = 12309,
  97. ITEMID_THICK_BATTLE_MANUAL = 12312,
  98. ITEMID_ANCILLA = 12333,
  99. ITEMID_DUN_TELE_SCROLL3 = 12352,
  100. ITEMID_REINS_OF_MOUNT = 12622,
  101. ITEMID_COMP_BUBBLE_GUM = 12264,
  102. ITEMID_NOBLE_NAMEPLATE = 12705,
  103. ITEMID_DUN_TELE_SCROLL1 = 14527,
  104. ITEMID_BATTLE_MANUAL25 = 14532,
  105. ITEMID_BATTLE_MANUAL100 = 14533,
  106. ITEMID_BATTLE_MANUAL300 = 14545,
  107. ITEMID_DUN_TELE_SCROLL2 = 14581,
  108. ITEMID_WOB_RUNE = 14582,
  109. ITEMID_WOB_SCHWALTZ = 14583,
  110. ITEMID_WOB_RACHEL = 14584,
  111. ITEMID_WOB_LOCAL = 14585,
  112. ITEMID_SIEGE_TELEPORT_SCROLL = 14591,
  113. ITEMID_JOB_MANUAL50 = 14592,
  114. };
  115. ///Mercenary Scrolls
  116. enum mercenary_scroll_item_list {
  117. ITEMID_BOW_MERCENARY_SCROLL1 = 12153,
  118. ITEMID_BOW_MERCENARY_SCROLL2,
  119. ITEMID_BOW_MERCENARY_SCROLL3,
  120. ITEMID_BOW_MERCENARY_SCROLL4,
  121. ITEMID_BOW_MERCENARY_SCROLL5,
  122. ITEMID_BOW_MERCENARY_SCROLL6,
  123. ITEMID_BOW_MERCENARY_SCROLL7,
  124. ITEMID_BOW_MERCENARY_SCROLL8,
  125. ITEMID_BOW_MERCENARY_SCROLL9,
  126. ITEMID_BOW_MERCENARY_SCROLL10,
  127. ITEMID_SWORDMERCENARY_SCROLL1,
  128. ITEMID_SWORDMERCENARY_SCROLL2,
  129. ITEMID_SWORDMERCENARY_SCROLL3,
  130. ITEMID_SWORDMERCENARY_SCROLL4,
  131. ITEMID_SWORDMERCENARY_SCROLL5,
  132. ITEMID_SWORDMERCENARY_SCROLL6,
  133. ITEMID_SWORDMERCENARY_SCROLL7,
  134. ITEMID_SWORDMERCENARY_SCROLL8,
  135. ITEMID_SWORDMERCENARY_SCROLL9,
  136. ITEMID_SWORDMERCENARY_SCROLL10,
  137. ITEMID_SPEARMERCENARY_SCROLL1,
  138. ITEMID_SPEARMERCENARY_SCROLL2,
  139. ITEMID_SPEARMERCENARY_SCROLL3,
  140. ITEMID_SPEARMERCENARY_SCROLL4,
  141. ITEMID_SPEARMERCENARY_SCROLL5,
  142. ITEMID_SPEARMERCENARY_SCROLL6,
  143. ITEMID_SPEARMERCENARY_SCROLL7,
  144. ITEMID_SPEARMERCENARY_SCROLL8,
  145. ITEMID_SPEARMERCENARY_SCROLL9,
  146. ITEMID_SPEARMERCENARY_SCROLL10,
  147. };
  148. ///Rune Knight
  149. enum rune_item_list {
  150. ITEMID_NAUTHIZ = 12725,
  151. ITEMID_RAIDO,
  152. ITEMID_BERKANA,
  153. ITEMID_ISA,
  154. ITEMID_OTHILA,
  155. ITEMID_URUZ,
  156. ITEMID_THURISAZ,
  157. ITEMID_WYRD,
  158. ITEMID_HAGALAZ,
  159. ITEMID_LUX_ANIMA = 22540,
  160. };
  161. ///Mechanic
  162. enum mechanic_item_list {
  163. ITEMID_ACCELERATOR = 2800,
  164. ITEMID_HOVERING_BOOSTER,
  165. ITEMID_SUICIDAL_DEVICE,
  166. ITEMID_SHAPE_SHIFTER,
  167. ITEMID_COOLING_DEVICE,
  168. ITEMID_MAGNETIC_FIELD_GENERATOR,
  169. ITEMID_BARRIER_BUILDER,
  170. ITEMID_REPAIR_KIT,
  171. ITEMID_CAMOUFLAGE_GENERATOR,
  172. ITEMID_HIGH_QUALITY_COOLER,
  173. ITEMID_SPECIAL_COOLER,
  174. ITEMID_SCARLET_PTS = 6360,
  175. ITEMID_INDIGO_PTS,
  176. ITEMID_YELLOW_WISH_PTS,
  177. ITEMID_LIME_GREEN_PTS,
  178. ITEMID_REPAIR_A = 12392,
  179. ITEMID_REPAIR_B,
  180. ITEMID_REPAIR_C,
  181. };
  182. ///Genetic
  183. enum genetic_item_list {
  184. ITEMID_SEED_OF_HORNY_PLANT = 6210,
  185. ITEMID_BLOODSUCK_PLANT_SEED = 6211,
  186. ITEMID_BOMB_MUSHROOM_SPORE = 6212,
  187. ITEMID_HP_INCREASE_POTION_SMALL = 12422,
  188. ITEMID_HP_INCREASE_POTION_MEDIUM,
  189. ITEMID_HP_INCREASE_POTION_LARGE,
  190. ITEMID_SP_INCREASE_POTION_SMALL,
  191. ITEMID_SP_INCREASE_POTION_MEDIUM,
  192. ITEMID_SP_INCREASE_POTION_LARGE,
  193. ITEMID_CONCENTRATED_WHITE_POTION_Z,
  194. ITEMID_SAVAGE_FULL_ROAST,
  195. ITEMID_COCKTAIL_WARG_BLOOD,
  196. ITEMID_MINOR_STEW,
  197. ITEMID_SIROMA_ICED_TEA,
  198. ITEMID_DROSERA_HERB_SALAD,
  199. ITEMID_PETITE_TAIL_NOODLES,
  200. ITEMID_BLACK_MASS,
  201. ITEMID_VITATA500,
  202. ITEMID_CONCENTRATED_CEROMAIN_SOUP,
  203. ITEMID_CURE_FREE = 12475,
  204. ITEMID_APPLE_BOMB = 13260,
  205. ITEMID_COCONUT_BOMB,
  206. ITEMID_MELON_BOMB,
  207. ITEMID_PINEAPPLE_BOMB,
  208. ITEMID_BANANA_BOMB,
  209. ITEMID_BLACK_LUMP,
  210. ITEMID_BLACK_HARD_LUMP,
  211. ITEMID_VERY_HARD_LUMP,
  212. ITEMID_MYSTERIOUS_POWDER,
  213. ITEMID_BOOST500_TO_THROW,
  214. ITEMID_FULL_SWINGK_TO_THROW,
  215. ITEMID_MANA_PLUS_TO_THROW,
  216. ITEMID_CURE_FREE_TO_THROW,
  217. ITEMID_STAMINA_UP_M_TO_THROW,
  218. ITEMID_DIGESTIVE_F_TO_THROW,
  219. ITEMID_HP_INC_POTS_TO_THROW,
  220. ITEMID_HP_INC_POTM_TO_THROW,
  221. ITEMID_HP_INC_POTL_TO_THROW,
  222. ITEMID_SP_INC_POTS_TO_THROW,
  223. ITEMID_SP_INC_POTM_TO_THROW,
  224. ITEMID_SP_INC_POTL_TO_THROW,
  225. ITEMID_EN_WHITE_POTZ_TO_THROW,
  226. ITEMID_VITATA500_TO_THROW,
  227. ITEMID_EN_CEL_JUICE_TO_THROW,
  228. ITEMID_SAVAGE_BBQ_TO_THROW,
  229. ITEMID_WUG_COCKTAIL_TO_THROW,
  230. ITEMID_M_BRISKET_TO_THROW,
  231. ITEMID_SIROMA_ICETEA_TO_THROW,
  232. ITEMID_DROCERA_STEW_TO_THROW,
  233. ITEMID_PETTI_NOODLE_TO_THROW,
  234. ITEMID_BLACK_THING_TO_THROW,
  235. };
  236. ///Guillotine Cross
  237. enum poison_item_list {
  238. ITEMID_PARALYSE = 12717,
  239. ITEMID_LEECHESEND,
  240. ITEMID_OBLIVIONCURSE,
  241. ITEMID_DEATHHURT,
  242. ITEMID_TOXIN,
  243. ITEMID_PYREXIA,
  244. ITEMID_MAGICMUSHROOM,
  245. ITEMID_VENOMBLEED,
  246. };
  247. ///Spell Books
  248. enum spell_book_item_list {
  249. ITEMID_MAGIC_BOOK_FB = 6189,
  250. ITEMID_MAGIC_BOOK_CB,
  251. ITEMID_MAGIC_BOOK_LB,
  252. ITEMID_MAGIC_BOOK_SG,
  253. ITEMID_MAGIC_BOOK_LOV,
  254. ITEMID_MAGIC_BOOK_MS,
  255. ITEMID_MAGIC_BOOK_CM,
  256. ITEMID_MAGIC_BOOK_TV,
  257. ITEMID_MAGIC_BOOK_TS,
  258. ITEMID_MAGIC_BOOK_JT,
  259. ITEMID_MAGIC_BOOK_WB,
  260. ITEMID_MAGIC_BOOK_HD,
  261. ITEMID_MAGIC_BOOK_ES,
  262. ITEMID_MAGIC_BOOK_ES_,
  263. ITEMID_MAGIC_BOOK_CL,
  264. ITEMID_MAGIC_BOOK_CR,
  265. ITEMID_MAGIC_BOOK_DL,
  266. };
  267. ///Cash Food
  268. enum cash_food_item_list {
  269. ITEMID_STR_DISH10_ = 12202,
  270. ITEMID_AGI_DISH10_,
  271. ITEMID_INT_DISH10_,
  272. ITEMID_DEX_DISH10_,
  273. ITEMID_LUK_DISH10_,
  274. ITEMID_VIT_DISH10_,
  275. };
  276. ///Item No Use List
  277. enum item_nouse_list {
  278. NOUSE_SITTING = 0x01,
  279. };
  280. ///Item job
  281. enum e_item_job {
  282. ITEMJ_NORMAL = 0x01,
  283. ITEMJ_UPPER = 0x02,
  284. ITEMJ_BABY = 0x04,
  285. ITEMJ_THIRD = 0x08,
  286. ITEMJ_THIRD_TRANS = 0x10,
  287. ITEMJ_THIRD_BABY = 0x20,
  288. };
  289. enum e_item_ammo {
  290. AMMO_ARROW = 1,
  291. AMMO_THROWABLE_DAGGER,
  292. AMMO_BULLET,
  293. AMMO_SHELL,
  294. AMMO_GRENADE,
  295. AMMO_SHURIKEN,
  296. AMMO_KUNAI,
  297. AMMO_CANNONBALL,
  298. AMMO_THROWABLE_ITEM, ///Sling items
  299. };
  300. ///Item combo struct
  301. struct item_combo {
  302. struct script_code *script;
  303. unsigned short *nameid;/* nameid array */
  304. unsigned char count;
  305. unsigned short id;/* id of this combo */
  306. bool isRef;/* whether this struct is a reference or the master */
  307. };
  308. /// Struct of item group entry
  309. struct s_item_group_entry {
  310. uint16 nameid, /// Item ID
  311. duration; /// Duration if item as rental item (in minutes)
  312. uint16 amount; /// Amount of item will be obtained
  313. bool isAnnounced, /// Broadcast if player get this item
  314. isNamed; /// Named the item (if possible)
  315. char bound; /// Makes the item as bound item (according to bound type)
  316. };
  317. /// Struct of random group
  318. struct s_item_group_random {
  319. struct s_item_group_entry *data;
  320. uint16 data_qty;
  321. };
  322. /// Struct of item group that will be used for db
  323. struct s_item_group_db {
  324. uint16 id;
  325. struct s_item_group_entry *must;
  326. uint16 must_qty;
  327. struct s_item_group_random random[MAX_ITEMGROUP_RANDGROUP]; //! TODO: Move this fixed array to dynamic size if needed.
  328. };
  329. ///Main item data struct
  330. struct item_data {
  331. uint16 nameid;
  332. char name[ITEM_NAME_LENGTH],jname[ITEM_NAME_LENGTH];
  333. //Do not add stuff between value_buy and view_id (see how getiteminfo works)
  334. int value_buy;
  335. int value_sell;
  336. int type;
  337. 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]
  338. int sex;
  339. int equip;
  340. int weight;
  341. int atk;
  342. int def;
  343. int range;
  344. int slot;
  345. int look;
  346. int elv;
  347. int wlv;
  348. int view_id;
  349. #ifdef RENEWAL
  350. int matk;
  351. int elvmax;/* maximum level for this item */
  352. #endif
  353. int delay;
  354. //Lupus: I rearranged order of these fields due to compatibility with ITEMINFO script command
  355. // some script commands should be revised as well...
  356. unsigned int class_base[3]; //Specifies if the base can wear this item (split in 3 indexes per type: 1-1, 2-1, 2-2)
  357. unsigned class_upper : 6; //Specifies if the class-type can equip it (0x01: normal, 0x02: trans, 0x04: baby, 0x08:third, 0x10:trans-third, 0x20-third-baby)
  358. struct {
  359. unsigned short chance;
  360. int id;
  361. } mob[MAX_SEARCH]; //Holds the mobs that have the highest drop rate for this item. [Skotlex]
  362. struct script_code *script; //Default script for everything.
  363. struct script_code *equip_script; //Script executed once when equipping.
  364. struct script_code *unequip_script;//Script executed once when unequipping.
  365. struct {
  366. unsigned available : 1;
  367. uint32 no_equip;
  368. unsigned no_refine : 1; // [celest]
  369. unsigned delay_consume : 1; // Signifies items that are not consumed immediately upon double-click [Skotlex]
  370. unsigned trade_restriction : 9; //Item restrictions mask [Skotlex]
  371. unsigned autoequip: 1;
  372. unsigned buyingstore : 1;
  373. unsigned dead_branch : 1; // As dead branch item. Logged at `branchlog` table and cannot be used at 'nobranch' mapflag [Cydh]
  374. unsigned group : 1; // As item group container [Cydh]
  375. } flag;
  376. struct {// item stacking limitation
  377. unsigned short amount;
  378. unsigned int inventory:1;
  379. unsigned int cart:1;
  380. unsigned int storage:1;
  381. unsigned int guildstorage:1;
  382. } stack;
  383. struct {// used by item_nouse.txt
  384. unsigned int flag;
  385. unsigned short override;
  386. } item_usage;
  387. short gm_lv_trade_override; //GM-level to override trade_restriction
  388. /* bugreport:309 */
  389. struct item_combo **combos;
  390. unsigned char combos_count;
  391. };
  392. struct item_data* itemdb_searchname(const char *name);
  393. int itemdb_searchname_array(struct item_data** data, int size, const char *str);
  394. struct item_data* itemdb_load(int nameid);
  395. struct item_data* itemdb_search(int nameid);
  396. struct item_data* itemdb_exists(int nameid);
  397. #define itemdb_name(n) itemdb_search(n)->name
  398. #define itemdb_jname(n) itemdb_search(n)->jname
  399. #define itemdb_type(n) itemdb_search(n)->type
  400. #define itemdb_atk(n) itemdb_search(n)->atk
  401. #define itemdb_def(n) itemdb_search(n)->def
  402. #define itemdb_look(n) itemdb_search(n)->look
  403. #define itemdb_weight(n) itemdb_search(n)->weight
  404. #define itemdb_equip(n) itemdb_search(n)->equip
  405. #define itemdb_usescript(n) itemdb_search(n)->script
  406. #define itemdb_equipscript(n) itemdb_search(n)->script
  407. #define itemdb_wlv(n) itemdb_search(n)->wlv
  408. #define itemdb_range(n) itemdb_search(n)->range
  409. #define itemdb_slot(n) itemdb_search(n)->slot
  410. #define itemdb_available(n) (itemdb_search(n)->flag.available)
  411. #define itemdb_traderight(n) (itemdb_search(n)->flag.trade_restriction)
  412. #define itemdb_viewid(n) (itemdb_search(n)->view_id)
  413. #define itemdb_autoequip(n) (itemdb_search(n)->flag.autoequip)
  414. #define itemdb_is_rune(n) ((n >= ITEMID_NAUTHIZ && n <= ITEMID_HAGALAZ) || n == ITEMID_LUX_ANIMA)
  415. #define itemdb_is_element(n) (n >= ITEMID_SCARLET_PTS && n <= ITEMID_LIME_GREEN_PTS)
  416. #define itemdb_is_spellbook(n) (n >= ITEMID_MAGIC_BOOK_FB && n <= ITEMID_MAGIC_BOOK_DL)
  417. #define itemdb_is_poison(n) (n >= ITEMID_PARALYSE && n <= ITEMID_VENOMBLEED)
  418. #define itemid_isgemstone(id) ( (id) >= ITEMID_YELLOW_GEMSTONE && (id) <= ITEMID_BLUE_GEMSTONE )
  419. #define itemdb_iscashfood(id) ( (id) >= ITEMID_STR_DISH10_ && (id) <= ITEMID_VIT_DISH10_ )
  420. #define itemdb_is_GNbomb(n) (n >= ITEMID_APPLE_BOMB && n <= ITEMID_VERY_HARD_LUMP)
  421. #define itemdb_is_GNthrowable(n) (n >= ITEMID_MYSTERIOUS_POWDER && n <= ITEMID_BLACK_THING_TO_THROW)
  422. const char* itemdb_typename(enum item_types type);
  423. const char *itemdb_typename_ammo (enum e_item_ammo ammo);
  424. unsigned short itemdb_searchrandomid(uint16 group_id, uint8 sub_group);
  425. #define itemdb_value_buy(n) itemdb_search(n)->value_buy
  426. #define itemdb_value_sell(n) itemdb_search(n)->value_sell
  427. #define itemdb_canrefine(n) (!itemdb_search(n)->flag.no_refine)
  428. //Item trade restrictions [Skotlex]
  429. int itemdb_isdropable_sub(struct item_data *, int, int);
  430. int itemdb_cantrade_sub(struct item_data*, int, int);
  431. int itemdb_canpartnertrade_sub(struct item_data*, int, int);
  432. int itemdb_cansell_sub(struct item_data*,int, int);
  433. int itemdb_cancartstore_sub(struct item_data*, int, int);
  434. int itemdb_canstore_sub(struct item_data*, int, int);
  435. int itemdb_canguildstore_sub(struct item_data*, int, int);
  436. int itemdb_canmail_sub(struct item_data*, int, int);
  437. int itemdb_canauction_sub(struct item_data*, int, int);
  438. bool itemdb_isrestricted(struct item* item, int gmlv, int gmlv2, int (*func)(struct item_data*, int, int));
  439. #define itemdb_isdropable(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_isdropable_sub)
  440. #define itemdb_cantrade(item, gmlv, gmlv2) itemdb_isrestricted(item, gmlv, gmlv2, itemdb_cantrade_sub)
  441. #define itemdb_canpartnertrade(item, gmlv, gmlv2) itemdb_isrestricted(item, gmlv, gmlv2, itemdb_canpartnertrade_sub)
  442. #define itemdb_cansell(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_cansell_sub)
  443. #define itemdb_cancartstore(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_cancartstore_sub)
  444. #define itemdb_canstore(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_canstore_sub)
  445. #define itemdb_canguildstore(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canguildstore_sub)
  446. #define itemdb_canmail(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canmail_sub)
  447. #define itemdb_canauction(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canauction_sub)
  448. bool itemdb_isequip2(struct item_data *id);
  449. #define itemdb_isequip(nameid) itemdb_isequip2(itemdb_search(nameid))
  450. char itemdb_isidentified(int);
  451. bool itemdb_isstackable2(struct item_data *id);
  452. #define itemdb_isstackable(nameid) itemdb_isstackable2(itemdb_search(nameid))
  453. uint64 itemdb_unique_id(int8 flag, int64 value); // Unique Item ID
  454. bool itemdb_isNoEquip(struct item_data *id, uint16 m);
  455. char itemdb_pc_get_itemgroup(uint16 group_id, struct map_session_data *sd);
  456. uint16 itemdb_get_randgroupitem_count(uint16 group_id, uint8 sub_group, uint16 nameid);
  457. DBMap * itemdb_get_combodb();
  458. DBMap * itemdb_get_groupdb();
  459. void itemdb_reload(void);
  460. void do_final_itemdb(void);
  461. void do_init_itemdb(void);
  462. #endif /* _ITEMDB_H_ */