// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder #ifndef ITEMDB_HPP #define ITEMDB_HPP #include "../common/db.hpp" #include "../common/mmo.hpp" // ITEM_NAME_LENGTH ///Maximum allowed Item ID (range: 1 ~ 65,534) #define MAX_ITEMID USHRT_MAX ///Use apple for unknown items. #define UNKNOWN_ITEM_ID 512 /// The maximum number of item delays #define MAX_ITEMDELAYS 10 ///Designed for search functions, species max number of matches to display. #define MAX_SEARCH 5 ///Maximum amount of items a combo may require #define MAX_ITEMS_PER_COMBO 6 #define MAX_ITEMGROUP_RANDGROUP 4 ///Max group for random item (increase this when needed). TODO: Remove this limit and use dynamic size if needed #define MAX_ROULETTE_LEVEL 7 /** client-defined value **/ #define MAX_ROULETTE_COLUMNS 9 /** client-defined value **/ #define CARD0_FORGE 0x00FF #define CARD0_CREATE 0x00FE #define CARD0_PET 0x0100 ///Marks if the card0 given is "special" (non-item id used to mark pets/created items. [Skotlex] #define itemdb_isspecial(i) (i == CARD0_FORGE || i == CARD0_CREATE || i == CARD0_PET) ///Enum of item id (for hardcoded purpose) enum item_itemid { ITEMID_RED_POTION = 501, ITEMID_YELLOW_POTION = 503, ITEMID_WHITE_POTION = 504, ITEMID_BLUE_POTION = 505, ITEMID_APPLE = 512, ITEMID_HOLY_WATER = 523, ITEMID_PUMPKIN = 535, ITEMID_RED_SLIM_POTION = 545, ITEMID_YELLOW_SLIM_POTION = 546, ITEMID_WHITE_SLIM_POTION = 547, ITEMID_WING_OF_FLY = 601, ITEMID_WING_OF_BUTTERFLY = 602, ITEMID_ANODYNE = 605, ITEMID_ALOEBERA = 606, ITEMID_MAGNIFIER = 611, ITEMID_POISON_BOTTLE = 678, ITEMID_EMPTY_BOTTLE = 713, ITEMID_EMPERIUM = 714, ITEMID_RED_GEMSTONE = 716, ITEMID_BLUE_GEMSTONE = 717, ITEMID_ORIDECON_STONE = 756, ITEMID_ALCOHOL = 970, ITEMID_ORIDECON = 984, ITEMID_ANVIL = 986, ITEMID_ORIDECON_ANVIL = 987, ITEMID_GOLDEN_ANVIL = 988, ITEMID_EMPERIUM_ANVIL = 989, ITEMID_BLOODY_RED = 990, ITEMID_CRYSTAL_BLUE = 991, ITEMID_WIND_OF_VERDURE = 992, ITEMID_YELLOW_LIVE = 993, ITEMID_FLAME_HEART = 994, ITEMID_MISTIC_FROZEN = 995, ITEMID_ROUGH_WIND = 996, ITEMID_GREAT_NATURE = 997, ITEMID_IRON = 998, ITEMID_STEEL = 999, ITEMID_STAR_CRUMB = 1000, ITEMID_IRON_ORE = 1002, ITEMID_PHRACON = 1010, ITEMID_EMVERETARCON = 1011, ITEMID_TRAP = 1065, ITEMID_ANGRA_MANYU = 1599, ITEMID_PAINT_BRUSH = 6122, ITEMID_MAGIC_GEAR_FUEL = 6146, ITEMID_STRANGE_EMBRYO = 6415, ITEMID_STONE = 7049, ITEMID_FIRE_BOTTLE = 7135, ITEMID_ACID_BOTTLE = 7136, ITEMID_MAN_EATER_BOTTLE = 7137, ITEMID_MINI_BOTTLE = 7138, ITEMID_COATING_BOTTLE = 7139, ITEMID_FRAGMENT_OF_CRYSTAL = 7321, ITEMID_SKULL_ = 7420, ITEMID_TOKEN_OF_SIEGFRIED = 7621, ITEMID_TRAP_ALLOY = 7940, ITEMID_MERCENARY_RED_POTION = 12184, ITEMID_MERCENARY_BLUE_POTION = 12185, ITEMID_GIANT_FLY_WING = 12212, ITEMID_NEURALIZER = 12213, ITEMID_M_CENTER_POTION = 12241, ITEMID_M_AWAKENING_POTION = 12242, ITEMID_M_BERSERK_POTION = 12243, ITEMID_N_FLY_WING = 12323, ITEMID_N_BUTTERFLY_WING = 12324, ITEMID_NOVICE_MAGNIFIER = 12325, ITEMID_ANCILLA = 12333, ITEMID_DUN_TELE_SCROLL3 = 12352, ITEMID_REINS_OF_MOUNT = 12622, ITEMID_NOBLE_NAMEPLATE = 12705, ITEMID_SILVER_BULLET = 13201, ITEMID_PURIFICATION_BULLET = 13220, ITEMID_SILVER_BULLET_ = 13221, ITEMID_DUN_TELE_SCROLL1 = 14527, ITEMID_DUN_TELE_SCROLL2 = 14581, ITEMID_WOB_RUNE = 14582, ITEMID_WOB_SCHWALTZ = 14583, ITEMID_WOB_RACHEL = 14584, ITEMID_WOB_LOCAL = 14585, ITEMID_SIEGE_TELEPORT_SCROLL = 14591, }; ///Rune Knight enum rune_item_list { ITEMID_NAUTHIZ = 12725, ITEMID_RAIDO, ITEMID_BERKANA, ITEMID_ISA, ITEMID_OTHILA, ITEMID_URUZ, ITEMID_THURISAZ, ITEMID_WYRD, ITEMID_HAGALAZ, ITEMID_LUX_ANIMA = 22540, }; ///Mechanic enum mechanic_item_list { ITEMID_ACCELERATOR = 2800, ITEMID_HOVERING_BOOSTER, ITEMID_SUICIDAL_DEVICE, ITEMID_SHAPE_SHIFTER, ITEMID_COOLING_DEVICE, ITEMID_MAGNETIC_FIELD_GENERATOR, ITEMID_BARRIER_BUILDER, ITEMID_REPAIR_KIT, ITEMID_CAMOUFLAGE_GENERATOR, ITEMID_HIGH_QUALITY_COOLER, ITEMID_SPECIAL_COOLER, ITEMID_SCARLET_PTS = 6360, ITEMID_INDIGO_PTS, ITEMID_YELLOW_WISH_PTS, ITEMID_LIME_GREEN_PTS, ITEMID_REPAIR_A = 12392, ITEMID_REPAIR_B, ITEMID_REPAIR_C, }; ///Genetic enum genetic_item_list { ITEMID_SEED_OF_HORNY_PLANT = 6210, ITEMID_BLOODSUCK_PLANT_SEED, ITEMID_BOMB_MUSHROOM_SPORE, ITEMID_HP_INCREASE_POTION_SMALL = 12422, ITEMID_HP_INCREASE_POTION_MEDIUM, ITEMID_HP_INCREASE_POTION_LARGE, ITEMID_SP_INCREASE_POTION_SMALL, ITEMID_SP_INCREASE_POTION_MEDIUM, ITEMID_SP_INCREASE_POTION_LARGE, ITEMID_CONCENTRATED_WHITE_POTION_Z, ITEMID_SAVAGE_FULL_ROAST, ITEMID_COCKTAIL_WARG_BLOOD, ITEMID_MINOR_STEW, ITEMID_SIROMA_ICED_TEA, ITEMID_DROSERA_HERB_SALAD, ITEMID_PETITE_TAIL_NOODLES, ITEMID_BLACK_MASS, ITEMID_VITATA500, ITEMID_CONCENTRATED_CEROMAIN_SOUP, ITEMID_CURE_FREE = 12475, ITEMID_APPLE_BOMB = 13260, ITEMID_COCONUT_BOMB, ITEMID_MELON_BOMB, ITEMID_PINEAPPLE_BOMB, ITEMID_BANANA_BOMB, ITEMID_BLACK_LUMP, ITEMID_BLACK_HARD_LUMP, ITEMID_VERY_HARD_LUMP, ITEMID_MYSTERIOUS_POWDER, ITEMID_HP_INC_POTS_TO_THROW = 13275, ITEMID_HP_INC_POTM_TO_THROW, ITEMID_HP_INC_POTL_TO_THROW, ITEMID_SP_INC_POTS_TO_THROW, ITEMID_SP_INC_POTM_TO_THROW, ITEMID_SP_INC_POTL_TO_THROW, }; ///Guillotine Cross enum poison_item_list { ITEMID_PARALYSE = 12717, ITEMID_LEECHESEND, ITEMID_OBLIVIONCURSE, ITEMID_DEATHHURT, ITEMID_TOXIN, ITEMID_PYREXIA, ITEMID_MAGICMUSHROOM, ITEMID_VENOMBLEED, }; ///Item No Use List enum item_nouse_list { NOUSE_SITTING = 0x01, }; ///Item job enum e_item_job { ITEMJ_NORMAL = 0x01, ITEMJ_UPPER = 0x02, ITEMJ_BABY = 0x04, ITEMJ_THIRD = 0x08, ITEMJ_THIRD_TRANS = 0x10, ITEMJ_THIRD_BABY = 0x20, }; enum e_item_ammo { AMMO_ARROW = 1, AMMO_THROWABLE_DAGGER, AMMO_BULLET, AMMO_SHELL, AMMO_GRENADE, AMMO_SHURIKEN, AMMO_KUNAI, AMMO_CANNONBALL, AMMO_THROWABLE_ITEM, ///Sling items MAX_AMMO_TYPE, }; #define AMMO_TYPE_ALL ((1<name #define itemdb_jname(n) itemdb_search(n)->jname #define itemdb_type(n) itemdb_search(n)->type #define itemdb_atk(n) itemdb_search(n)->atk #define itemdb_def(n) itemdb_search(n)->def #define itemdb_look(n) itemdb_search(n)->look #define itemdb_weight(n) itemdb_search(n)->weight #define itemdb_equip(n) itemdb_search(n)->equip #define itemdb_usescript(n) itemdb_search(n)->script #define itemdb_equipscript(n) itemdb_search(n)->script #define itemdb_wlv(n) itemdb_search(n)->wlv #define itemdb_range(n) itemdb_search(n)->range #define itemdb_slot(n) itemdb_search(n)->slot #define itemdb_available(n) (itemdb_search(n)->flag.available) #define itemdb_traderight(n) (itemdb_search(n)->flag.trade_restriction) #define itemdb_viewid(n) (itemdb_search(n)->view_id) #define itemdb_autoequip(n) (itemdb_search(n)->flag.autoequip) #define itemdb_dropeffect(n) (itemdb_search(n)->flag.dropEffect) const char* itemdb_typename(enum item_types type); const char *itemdb_typename_ammo (enum e_item_ammo ammo); bool itemdb_is_spellbook2(unsigned short nameid); struct s_item_group_entry *itemdb_get_randgroupitem(uint16 group_id, uint8 sub_group); unsigned short itemdb_searchrandomid(uint16 group_id, uint8 sub_group); #define itemdb_value_buy(n) itemdb_search(n)->value_buy #define itemdb_value_sell(n) itemdb_search(n)->value_sell #define itemdb_canrefine(n) (!itemdb_search(n)->flag.no_refine) //Item trade restrictions [Skotlex] bool itemdb_isdropable_sub(struct item_data *itd, int gmlv, int unused); bool itemdb_cantrade_sub(struct item_data *itd, int gmlv, int gmlv2); bool itemdb_canpartnertrade_sub(struct item_data *itd, int gmlv, int gmlv2); bool itemdb_cansell_sub(struct item_data *itd, int gmlv, int unused); bool itemdb_cancartstore_sub(struct item_data *itd, int gmlv, int unused); bool itemdb_canstore_sub(struct item_data *itd, int gmlv, int unused); bool itemdb_canguildstore_sub(struct item_data *itd, int gmlv, int unused); bool itemdb_canmail_sub(struct item_data *itd, int gmlv, int unused); bool itemdb_canauction_sub(struct item_data *itd, int gmlv, int unused); bool itemdb_isrestricted(struct item* item, int gmlv, int gmlv2, bool (*func)(struct item_data*, int, int)); #define itemdb_isdropable(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_isdropable_sub) #define itemdb_cantrade(item, gmlv, gmlv2) itemdb_isrestricted(item, gmlv, gmlv2, itemdb_cantrade_sub) #define itemdb_canpartnertrade(item, gmlv, gmlv2) itemdb_isrestricted(item, gmlv, gmlv2, itemdb_canpartnertrade_sub) #define itemdb_cansell(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_cansell_sub) #define itemdb_cancartstore(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_cancartstore_sub) #define itemdb_canstore(item, gmlv) itemdb_isrestricted(item, gmlv, 0, itemdb_canstore_sub) #define itemdb_canguildstore(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canguildstore_sub) #define itemdb_canmail(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canmail_sub) #define itemdb_canauction(item, gmlv) itemdb_isrestricted(item , gmlv, 0, itemdb_canauction_sub) bool itemdb_isequip2(struct item_data *id); #define itemdb_isequip(nameid) itemdb_isequip2(itemdb_search(nameid)) char itemdb_isidentified(unsigned short nameid); bool itemdb_isstackable2(struct item_data *id); #define itemdb_isstackable(nameid) itemdb_isstackable2(itemdb_search(nameid)) bool itemdb_isNoEquip(struct item_data *id, uint16 m); struct item_combo *itemdb_combo_exists(unsigned short combo_id); struct s_item_group_db *itemdb_group_exists(unsigned short group_id); bool itemdb_group_item_exists(unsigned short group_id, unsigned short nameid); char itemdb_pc_get_itemgroup(uint16 group_id, bool identify, struct map_session_data *sd); bool itemdb_parse_roulette_db(void); struct s_random_opt_data *itemdb_randomopt_exists(short id); struct s_random_opt_group *itemdb_randomopt_group_exists(int id); void itemdb_reload(void); void do_final_itemdb(void); void do_init_itemdb(void); #endif /* ITEMDB_HPP */