Files
rathena/src/map/itemdb.hpp
idk-whoami c8980072a5 Corrected script for some item #26 (#8026)
Thanks to @Pokye, @Atemo
2023-12-15 15:59:55 +01:00

2637 lines
63 KiB
C++

// 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 <map>
#include <string>
#include <vector>
#include <common/database.hpp>
#include <common/db.hpp>
#include <common/malloc.hpp>
#include <common/mmo.hpp> // ITEM_NAME_LENGTH
#include "script.hpp"
#include "status.hpp"
enum e_ammo_type : uint8;
///Use apple for unknown items.
const t_itemid 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.
#ifndef MAX_SEARCH
#define MAX_SEARCH 10
#endif
#define MAX_ROULETTE_LEVEL 7 /** client-defined value **/
#define MAX_ROULETTE_COLUMNS 9 /** client-defined value **/
const t_itemid CARD0_FORGE = 0x00FF;
const t_itemid CARD0_CREATE = 0x00FE;
const t_itemid 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 : t_itemid
{
ITEMID_DUMMY = 499,
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_PET_FOOD = 537,
ITEMID_RED_SLIM_POTION = 545,
ITEMID_YELLOW_SLIM_POTION = 546,
ITEMID_WHITE_SLIM_POTION = 547,
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_NEW_INSURANCE = 6413,
ITEMID_STRANGE_EMBRYO = 6415,
ITEMID_BLACKSMITH_BLESSING = 6635,
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_TRAP_ALLOY = 7940,
ITEMID_COOKIE_BAT = 11605,
ITEMID_MERCENARY_RED_POTION = 12184,
ITEMID_MERCENARY_BLUE_POTION = 12185,
ITEMID_NEURALIZER = 12213,
ITEMID_M_CENTER_POTION = 12241,
ITEMID_M_AWAKENING_POTION = 12242,
ITEMID_M_BERSERK_POTION = 12243,
ITEMID_NOVICE_MAGNIFIER = 12325,
ITEMID_ANCILLA = 12333,
ITEMID_REINS_OF_MOUNT = 12622,
ITEMID_NOBLE_NAMEPLATE = 12705,
ITEMID_SILVER_BULLET = 13201,
ITEMID_PURIFICATION_BULLET = 13220,
ITEMID_SILVER_BULLET_ = 13221,
ITEMID_INVENTORY_EX_EVT = 25791,
ITEMID_INVENTORY_EX_DIS = 25792,
ITEMID_INVENTORY_EX = 25793,
ITEMID_WL_MB_SG = 100065,
ITEMID_HOMUNCULUS_SUPPLEMENT = 100371,
};
///Rune Knight
enum rune_item_list : t_itemid
{
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 : t_itemid
{
ITEMID_ACCELERATOR = 2800,
ITEMID_SUICIDAL_DEVICE = 2802,
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 : t_itemid
{
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 : t_itemid
{
ITEMID_PARALYSE = 12717,
ITEMID_LEECHESEND,
ITEMID_OBLIVIONCURSE,
ITEMID_DEATHHURT,
ITEMID_TOXIN,
ITEMID_PYREXIA,
ITEMID_MAGICMUSHROOM,
ITEMID_VENOMBLEED,
};
///Item job
enum e_item_job : uint16
{
ITEMJ_NONE = 0x00,
ITEMJ_NORMAL = 0x01,
ITEMJ_UPPER = 0x02,
ITEMJ_BABY = 0x04,
ITEMJ_THIRD = 0x08,
ITEMJ_THIRD_UPPER = 0x10,
ITEMJ_THIRD_BABY = 0x20,
ITEMJ_FOURTH = 0x40,
ITEMJ_MAX = 0xFF,
ITEMJ_ALL_UPPER = ITEMJ_UPPER | ITEMJ_THIRD_UPPER | ITEMJ_FOURTH,
ITEMJ_ALL_BABY = ITEMJ_BABY | ITEMJ_THIRD_BABY,
ITEMJ_ALL_THIRD = ITEMJ_THIRD | ITEMJ_THIRD_UPPER | ITEMJ_THIRD_BABY,
#ifdef RENEWAL
ITEMJ_ALL = ITEMJ_NORMAL | ITEMJ_UPPER | ITEMJ_BABY | ITEMJ_THIRD | ITEMJ_THIRD_UPPER | ITEMJ_THIRD_BABY | ITEMJ_FOURTH,
#else
ITEMJ_ALL = ITEMJ_NORMAL | ITEMJ_UPPER | ITEMJ_BABY,
#endif
};
#define AMMO_TYPE_ALL ((1<<MAX_AMMO_TYPE)-1)
enum e_random_item_group {
IG_BLUEBOX = 1,
IG_VIOLETBOX,
IG_CARDALBUM,
IG_GIFTBOX,
IG_SCROLLBOX,
IG_FINDINGORE,
IG_COOKIEBAG,
IG_FIRSTAID,
IG_HERB,
IG_FRUIT,
IG_MEAT,
IG_CANDY,
IG_JUICE,
IG_FISH,
IG_BOX,
IG_GEMSTONE,
IG_RESIST,
IG_ORE,
IG_FOOD,
IG_RECOVERY,
IG_MINERAL,
IG_TAMING,
IG_SCROLL,
IG_QUIVER,
IG_MASK,
IG_ACCESORY,
IG_JEWEL,
IG_GIFTBOX_1,
IG_GIFTBOX_2,
IG_GIFTBOX_3,
IG_GIFTBOX_4,
IG_EGGBOY,
IG_EGGGIRL,
IG_GIFTBOXCHINA,
IG_LOTTOBOX,
IG_FOODBAG,
IG_POTION,
IG_REDBOX_2,
IG_BLEUBOX,
IG_REDBOX,
IG_GREENBOX,
IG_YELLOWBOX,
IG_OLDGIFTBOX,
IG_MAGICCARDALBUM,
IG_HOMETOWNGIFT,
IG_MASQUERADE,
IG_TRESURE_BOX_WOE,
IG_MASQUERADE_2,
IG_EASTER_SCROLL,
IG_PIERRE_TREASUREBOX,
IG_CHERISH_BOX,
IG_CHERISH_BOX_ORI,
IG_LOUISE_COSTUME_BOX,
IG_XMAS_GIFT,
IG_FRUIT_BASKET,
IG_IMPROVED_COIN_BAG,
IG_INTERMEDIATE_COIN_BAG,
IG_MINOR_COIN_BAG,
IG_S_GRADE_COIN_BAG,
IG_A_GRADE_COIN_BAG,
IG_ADVANCED_WEAPONS_BOX,
IG_SPLENDID_BOX,
IG_SPLENDID_BOX2,
IG_CARDALBUM_ARMOR,
IG_CARDALBUM_HELM,
IG_CARDALBUM_ACC,
IG_CARDALBUM_SHOES,
IG_CARDALBUM_SHIELD,
IG_CARDALBUM_WEAPON,
IG_CARDALBUM_GARMENT,
IG_FLAMEL_CARD,
IG_SPECIAL_BOX,
IG_TRESURE_BOX_WOE_,
IG_RWC_PARTI_BOX,
IG_RWC_FINAL_COMP_BOX,
IG_GIFT_BUNDLE,
IG_CARACAS_RING_BOX,
IG_CRUMPLED_PAPER,
IG_SOLO_GIFT_BASKET,
IG_COUPLE_EVENT_BASKET,
IG_GM_WARP_BOX,
IG_FORTUNE_COOKIE1,
IG_FORTUNE_COOKIE2,
IG_FORTUNE_COOKIE3,
IG_NEW_GIFT_ENVELOPE,
IG_PASSION_FB_HAT_BOX,
IG_COOL_FB_HAT_BOX,
IG_VICTORY_FB_HAT_BOX,
IG_GLORY_FB_HAT_BOX,
IG_PASSION_HAT_BOX2,
IG_COOL_HAT_BOX2,
IG_VICTORY_HAT_BOX2,
IG_ASPERSIO_5_SCROLL_BOX,
IG_PET_EGG_SCROLL_BOX1,
IG_PET_EGG_SCROLL_BOX2,
IG_PET_EGG_SCROLL1,
IG_PET_EGG_SCROLL2,
IG_PET_EGG_SCROLL_BOX3,
IG_PET_EGG_SCROLL_BOX4,
IG_PET_EGG_SCROLL_BOX5,
IG_PET_EGG_SCROLL3,
IG_PET_EGG_SCROLL4,
IG_PET_EGG_SCROLL5,
IG_INFILTRATOR_BOX,
IG_MURAMASA_BOX,
IG_EXCALIBUR_BOX,
IG_COMBAT_KNIFE_BOX,
IG_COUNTER_DAGGER_BOX,
IG_KAISER_KNUCKLE_BOX,
IG_POLE_AXE_BOX,
IG_MIGHTY_STAFF_BOX,
IG_RIGHT_EPSILON_BOX,
IG_BALISTAR_BOX,
IG_DIARY_OF_GREAT_SAGE_BOX,
IG_ASURA_BOX,
IG_APPLE_OF_ARCHER_BOX,
IG_BUNNY_BAND_BOX,
IG_SAHKKAT_BOX,
IG_LORD_CIRCLET_BOX,
IG_ELVEN_EARS_BOX,
IG_STEEL_FLOWER_BOX,
IG_CRITICAL_RING_BOX,
IG_EARRING_BOX,
IG_RING_BOX,
IG_NECKLACE_BOX,
IG_GLOVE_BOX,
IG_BROOCH_BOX,
IG_ROSARY_BOX,
IG_SAFETY_RING_BOX,
IG_VESPER_CORE01_BOX,
IG_VESPER_CORE02_BOX,
IG_VESPER_CORE03_BOX,
IG_VESPER_CORE04_BOX,
IG_PET_EGG_SCROLL_BOX6,
IG_PET_EGG_SCROLL_BOX7,
IG_PET_EGG_SCROLL_BOX8,
IG_PET_EGG_SCROLL_BOX9,
IG_PET_EGG_SCROLL_BOX10,
IG_PET_EGG_SCROLL_BOX11,
IG_PET_EGG_SCROLL6,
IG_PET_EGG_SCROLL7,
IG_PET_EGG_SCROLL8,
IG_PET_EGG_SCROLL9,
IG_PET_EGG_SCROLL10,
IG_PET_EGG_SCROLL11,
IG_CP_HELM_SCROLL_BOX,
IG_CP_SHIELD_SCROLL_BOX,
IG_CP_ARMOR_SCROLL_BOX,
IG_CP_WEAPON_SCROLL_BOX,
IG_REPAIR_SCROLL_BOX,
IG_SUPER_PET_EGG1,
IG_SUPER_PET_EGG2,
IG_SUPER_PET_EGG3,
IG_SUPER_PET_EGG4,
IG_SUPER_CARD_PET_EGG1,
IG_SUPER_CARD_PET_EGG2,
IG_SUPER_CARD_PET_EGG3,
IG_SUPER_CARD_PET_EGG4,
IG_VIGORGRA_PACKAGE1,
IG_VIGORGRA_PACKAGE2,
IG_VIGORGRA_PACKAGE3,
IG_VIGORGRA_PACKAGE4,
IG_VIGORGRA_PACKAGE5,
IG_VIGORGRA_PACKAGE6,
IG_VIGORGRA_PACKAGE7,
IG_VIGORGRA_PACKAGE8,
IG_VIGORGRA_PACKAGE9,
IG_VIGORGRA_PACKAGE10,
IG_VIGORGRA_PACKAGE11,
IG_VIGORGRA_PACKAGE12,
IG_PET_EGG_SCROLL12,
IG_PET_EGG_SCROLL13,
IG_PET_EGG_SCROLL14,
IG_SUPER_PET_EGG5,
IG_SUPER_PET_EGG6,
IG_SUPER_PET_EGG7,
IG_SUPER_PET_EGG8,
IG_PET_EGG_SCROLL_E,
IG_RAMEN_HAT_BOX,
IG_MYSTERIOUS_TRAVEL_SACK1,
IG_MYSTERIOUS_TRAVEL_SACK2,
IG_MYSTERIOUS_TRAVEL_SACK3,
IG_MYSTERIOUS_TRAVEL_SACK4,
IG_MAGICIAN_CARD_BOX,
IG_ACOLYTE_CARD_BOX,
IG_ARCHER_CARD_BOX,
IG_SWORDMAN_CARD_BOX,
IG_THIEF_CARD_BOX,
IG_MERCHANT_CARD_BOX,
IG_HARD_CORE_SET_BOX,
IG_KITTY_SET_BOX,
IG_SOFT_CORE_SET_BOX,
IG_DEVIRUCHI_SET_BOX,
IG_MVP_HUNT_BOX,
IG_BREWING_BOX,
IG_XMAS_PET_SCROLL,
IG_LUCKY_SCROLL08,
IG_BR_SWORDPACKAGE,
IG_BR_MAGEPACKAGE,
IG_BR_ACOLPACKAGE,
IG_BR_ARCHERPACKAGE,
IG_BR_MERPACKAGE,
IG_BR_THIEFPACKAGE,
IG_ACIDBOMB_10_BOX,
IG_BASIC_SIEGE_SUPPLY_BOX,
IG_ADV_SIEGE_SUPPLY_BOX,
IG_ELITE_SIEGE_SUPPLY_BOX,
IG_SAKURA_SCROLL,
IG_BEHOLDER_RING_BOX,
IG_HALLOW_RING_BOX,
IG_CLAMOROUS_RING_BOX,
IG_CHEMICAL_RING_BOX,
IG_INSECTICIDE_RING_BOX,
IG_FISHER_RING_BOX,
IG_DECUSSATE_RING_BOX,
IG_BLOODY_RING_BOX,
IG_SATANIC_RING_BOX,
IG_DRAGOON_RING_BOX,
IG_ANGEL_SCROLL,
IG_DEVIL_SCROLL,
IG_SURPRISE_SCROLL,
IG_JULY7_SCROLL,
IG_BACSOJIN_SCROLL,
IG_ANIMAL_SCROLL,
IG_HEART_SCROLL,
IG_NEW_YEAR_SCROLL,
IG_VALENTINE_PLEDGE_BOX,
IG_OX_TAIL_SCROLL,
IG_BUDDAH_SCROLL,
IG_EVIL_INCARNATION,
IG_CLOVER_BOX_MOUTH,
IG_MOUTH_BUBBLE_GUM_BOX,
IG_CLOVER_BOX_MOUTH2,
IG_CLOVER_BOX_MOUTH4,
IG_BGUM_BOX_IN_MOUTH2,
IG_BGUM_BOX_IN_MOUTH4,
IG_TW_OCTOBER_SCROLL,
IG_MY_SCROLL1,
IG_TW_NOV_SCROLL,
IG_MY_SCROLL2,
IG_PR_RESET_STONE_BOX,
IG_FPR_RESET_STONE_BOX,
IG_MAJESTIC_DEVIL_SCROLL,
IG_LIFE_RIBBON_BOX,
IG_LIFE_RIBBON_BOX2,
IG_LIFE_RIBBON_BOX3,
IG_MAGIC_CANDY_BOX10,
IG_RWC2010_SUITCASEA,
IG_RWC2010_SUITCASEB,
IG_SAGITTARIUS_SCROLL,
IG_SAGITTARIUS_SCR_BOX,
IG_SAGITTAR_DIADEM_SCROLL,
IG_SAGITTAR_DI_SCROLL_BOX,
IG_CAPRI_CROWN_SCROLL,
IG_CAPRI_CROWN_SCROLL_BOX,
IG_CAPRICON_DI_SCROLL,
IG_CAPRICON_DI_SCROLL_BOX,
IG_AQUARIUS_DIADEM_SCROLL,
IG_AQUARIUS_DI_SCROLL_BOX,
IG_LOVELY_AQUARIUS_SCROLL,
IG_LOVELY_AQUARIUS_BOX,
IG_PISCES_DIADEM_SCROLL,
IG_PISCES_DIADEM_BOX,
IG_ENERGETIC_PISCES_SCROLL,
IG_ENERGETIC_PISCES_BOX,
IG_ARIES_SCROLL,
IG_ARIES_SCROLL_BOX,
IG_BOARDING_HALTER_BOX,
IG_TAURUS_DIADEM_SCROLL,
IG_TAURUS_DI_SCROLL_BOX,
IG_UMBALA_SPIRIT_BOX2,
IG_F_UMBALA_SPIRIT_BOX2,
IG_TAURUS_CROWN_SCROLL,
IG_TAURUS_CROWN_SCROLL_BOX,
IG_GEMI_DIADEM_SCROLL,
IG_GEMI_DIADEM_SCROLL_BOX,
IG_SUPER_PET_EGG1_2,
IG_SUPER_PET_EGG4_2,
IG_FIRE_BRAND_BOX,
IG_BR_INDEPENDENCE_SCROLL,
IG_ALL_IN_ONE_RING_BOX,
IG_GEMI_CROWN_SCROLL,
IG_GEMI_CROWN_SCROLL_BOX,
IG_RWC_SPECIAL_SCROLL,
IG_RWC_LIMITED_SCROLL,
IG_ASGARD_SCROLL,
IG_MS_CANCER_SCROLL,
IG_RWC_SUPER_SCROLL,
IG_LEO_SCROLL,
IG_MS_VIRGO_SCROLL,
IG_LUCKY_EGG_C6,
IG_LIBRA_SCROLL,
IG_HALLO_SCROLL,
IG_MS_SCORPIO_SCROLL,
IG_TCG_CARD_SCROLL,
IG_BOITATA_SCROLL,
IG_LUCKY_EGG_C2,
IG_LUCKY_EGG_C6_,
IG_LUCKY_EGG_C9,
IG_LUCKY_EGG_C7,
IG_LUCKY_EGG_C8,
IG_LUCKY_EGG_C10,
IG_WIND_TYPE_SCROLL,
IG_LUCKY_EGG_C3,
IG_LUCKY_EGG_C4,
IG_LUCKY_EGG_C5,
IG_WEATHER_REPORT_BOX,
IG_COMIN_ACTOR_BOX,
IG_HEN_SET_BOX,
IG_LUCKY_EGG_C,
IG_WATER_TYPE_SCROLL,
IG_EARTH_TYPE_SCROLL,
IG_EARTH_TYPE_SCROLL_,
IG_SPLASH_SCROLL,
IG_VOCATION_SCROLL,
IG_WISDOM_SCROLL,
IG_PATRON_SCROLL,
IG_HEAVEN_SCROLL,
IG_TW_AUG_SCROLL,
IG_TW_NOV_SCROLL2,
IG_ILLUSION_NOTHING,
IG_TW_SEP_SCROLL,
IG_FLAME_LIGHT,
IG_TW_RAINBOW_SCROLL,
IG_TW_RED_SCROLL,
IG_TW_ORANGE_SCROLL,
IG_TW_YELLOW_SCROLL,
IG_SCROLL_OF_DEATH,
IG_SCROLL_OF_LIFE,
IG_SCROLL_OF_MAGIC,
IG_SCROLL_OF_THEWS,
IG_SCROLL_OF_DARKNESS,
IG_SCROLL_OF_HOLINESS,
IG_HORNED_SCROLL,
IG_MERCURY_SCROLL,
IG_CHALLENGE_KIT,
IG_TW_APRIL_SCROLL,
IG_TW_OCTOBER_SCROLL_,
IG_SUMMER_SCROLL3,
IG_C_WING_OF_FLY_3DAY_BOX,
IG_RWC_2012_SET_BOX,
IG_EX_DEF_POTION_BOX,
IG_RWC_SCROLL_2012,
IG_OLD_COIN_POCKET,
IG_HIGH_COIN_POCKET,
IG_MID_COIN_POCKET,
IG_LOW_COIN_POCKET,
IG_SGRADE_POCKET,
IG_AGRADE_POCKET,
IG_BGRADE_POCKET,
IG_CGRADE_POCKET,
IG_DGRADE_POCKET,
IG_EGRADE_POCKET,
IG_PTOTECTION_SEAGOD_BOX,
IG_HAIRTAIL_BOX1,
IG_HAIRTAIL_BOX2,
IG_SPEARFISH_BOX1,
IG_SPEARFISH_BOX2,
IG_SAUREL_BOX1,
IG_SAUREL_BOX2,
IG_TUNA_BOX1,
IG_TUNA_BOX2,
IG_MALANG_CRAB_BOX1,
IG_MALANG_CRAB_BOX2,
IG_BRINDLE_EEL_BOX1,
IG_BRINDLE_EEL_BOX2,
IG_PTOTECTION_SEAGOD_BOX2,
IG_PTOTECTION_SEAGOD_BOX3,
IG_OCTO_HSTICK_BOX,
IG_OCTO_HSTICK_BOX2,
IG_OCTO_HSTICK_BOX3,
IG_SILVERVINE_FRUIT_BOX10,
IG_SILVERVINE_FRUIT_BOX40,
IG_SILVERVINE_FRUIT_BOX4,
IG_MALANG_WOE_ENCARD_BOX,
IG_XMAS_BLESS,
IG_FIRE_TYPE_SCROLL,
IG_BLUE_SCROLL,
IG_GOOD_STUDENT_GIFT_BOX,
IG_BAD_STUDENT_GIFT_BOX,
IG_INDIGO_SCROLL,
IG_VIOLET_SCROLL,
IG_BI_HWANG_SCROLL,
IG_JUNG_BI_SCROLL,
IG_JE_UN_SCROLL,
IG_YONG_KWANG_SCROLL,
IG_HALLOWEEN_G_BOX,
IG_SOLO_CHRISTMAS_GIFT,
IG_SG_WEAPON_SUPPLY_BOX,
IG_CANDY_HOLDER,
IG_LUCKY_BAG,
IG_HOLY_EGG_2,
IG_ADVENTURER_RETURNS_SUPPORT_BOX,
IG_SUPPORT_PACKAGE,
IG_SUPPORT_PACKAGE_10,
IG_EVENT_ALMIGHTY_BOX,
IG_EVENT_ALMIGHTY_BOX_100,
IG_LOTTOBOX1,
IG_LOTTOBOX2,
IG_LOTTOBOX3,
IG_LOTTOBOX4,
IG_LOTTOBOX5,
IG_SUPPORT_PACKAGE_III,
IG_SUPPORT_PACKAGE_III_10,
IG_UNLIMITED_BOX,
IG_UNLIMITED_BOX_10,
IG_UNLIMITED_BOX_II,
IG_UNLIMITED_BOX_II_10,
IG_THREE_MASTER_PACKAGE_III,
IG_THREE_MASTER_PACKAGE_III_10,
IG_2013_RWC_SCROLL,
IG_SUPPORT_PACKAGE_II,
IG_SUPPORT_PACKAGE_II_10,
IG_LEVEL_UP_BOX100,
IG_LEVEL_UP_BOX120,
IG_LEVEL_UP_BOX130,
IG_LEVEL_UP_BOX140,
IG_LEVEL_UP_BOX150,
IG_LEVEL_UP_BOX160,
IG_GIFT_BUFF_SET,
IG_LUCKY_SILVERVINE_FRUIT_BOX_III10,
IG_LUCKY_SILVERVINE_FRUIT_BOX_III110,
IG_OLD_ORE_BOX,
IG_BLESSING_LUCKY_SCROLL,
IG_SOGRAT_LUCKY_SCROLL,
IG_GARNET_LUCKY_SCROLL,
IG_AMORA_LUCKY_SCROLL,
IG_VENUS_LUCKY_SCROLL,
IG_ERZULIE_LUCKY_SCROLL,
IG_MAJESTIC_LUCKY_SCROLL,
IG_EPIC_HEROES_LUCKY_EGG,
IG_HERO_MIDGARD_EGG,
IG_IMORTAL_MIDGARD_SCROLL,
IG_TW_13Y_LUCKY_EGG_06,
IG_HAPPY_TIME_SCROLL,
IG_TIME_TRAVEL_SCROLL,
IG_SOLARIS_FESTIVAL_SCROLL,
IG_MIDGARD_FES_SCROLL,
IG_MIDGARD_SCROLL,
IG_SWEET_MIDGARD_SCROLL,
IG_WINTER_MIDGARD_SCROLL,
IG_SPRING_FESTIVAL_SCROLL,
IG_IDRO10TH_SCROLL,
IG_REQUIEM_SCROLL,
IG_HOLY_SPIRIT_SCROLL,
IG_GARUDA_SCROLL,
IG_THANKS_GIVING_SCROLL,
IG_IDN_LEGEND_HERO_SCROLL,
IG_BLESSING_MIDGARD_SCROLL,
IG_CHRONOSIAN_LUCKY_SCROLL,
IG_SANCTUARY_LUCKY_SCROLL,
IG_CYBORG_LUCKY_SCROLL,
IG_UNDINE_LUCKY_SCROLL,
IG_GOD_MATERIAL_BOX,
IG_COSTAMA_EGG18,
IG_COSTAMA_EGG19,
IG_FLOWER_BLOSSOM_SCROLL,
IG_COSTAMA_EGG24,
IG_SMITHY_LUCKY_SCROLL,
IG_GANYMEDE_LUCKY_SCROLL,
IG_LASTANGEL_LUCKYSCROLL,
IG_VALKYRIE_LUCKY_SCROLL,
IG_SPLASH_RAINBOW_LUCKY_SCROLL,
IG_SHAPESHIFTER_COSTUME,
IG_JULY_LUCKY_SCROLL,
IG_COSTAMA_EGG23,
IG_COSTAMA_EGG28,
IG_MIDGARD_LUCKY_SCROLL,
IG_BLESSING_SCARLET_SCROLL,
IG_COSTAMA_EGG29,
IG_INK_BALL,
IG_SOMETHING_CANDY_HOLDER,
IG_SHINING_EGG,
IG_AGUST_LUCKY_SCROLL,
IG_ELEMENT,
IG_POISON,
IG_CASH_FOOD,
IG_BOMB,
IG_THROWABLE,
IG_MERCENARY,
IG_NOIVE_BOX,
IG_VALERIAN_SCROLL,
IG_IMMORTAL_EGG,
IG_SAPPHIRE_EGG,
IG_IDN_HEART_SCROLL,
IG_IDN_WISDOM_EGG,
IG_CHRISTMAS_BOX,
IG_SPECIAL_CHRISTMAS_BOX,
IG_SANTA_GIFT,
IG_PRIZEOFHERO,
IG_PRIVATE_AIRSHIP,
IG_TOKEN_OF_SIEGFRIED,
IG_ENCHANT_STONE_BOX,
IG_ENCHANT_STONE_BOX2,
IG_ENCHANT_STONE_BOX3,
IG_ENCHANT_STONE_BOX4,
IG_ENCHANT_STONE_BOX5,
IG_ENCHANT_STONE_BOX6,
IG_ENCHANT_STONE_BOX7,
IG_ENCHANT_STONE_BOX8,
IG_ENCHANT_STONE_BOX9,
IG_ENCHANT_STONE_BOX10,
IG_ENCHANT_STONE_BOX11,
IG_ENCHANT_STONE_BOX12,
IG_ENCHANT_STONE_BOX13,
IG_ENCHANT_STONE_BOX14,
IG_ENCHANT_STONE_BOX15,
IG_ENCHANT_STONE_BOX16,
IG_ENCHANT_STONE_BOX17,
IG_ENCHANT_STONE_BOX18,
IG_ENCHANT_STONE_BOX19,
IG_ENCHANT_STONE_BOX20,
IG_ENCHANT_STONE_BOX21,
IG_XMAS_PACKAGE_14,
IG_EASTER_EGG,
IG_PITAPAT_BOX,
IG_HAPPY_BOX_J,
IG_CLASS_SHADOW_CUBE,
IG_SEALED_SCROLL,
IG_SQUAD_PRIZE1,
IG_SQUAD_PRIZE2,
IG_LI_NYANGVINE_BOX1_26,
IG_LI_NYANGVINE_BOX2_26,
IG_LI_NYANGVINE_BOX3_26,
IG_ENCHANT_STONE_BOX26,
IG_THIRD_JOB_STONE_GARMENT_BOX,
IG_THIRD_JOB_STONE_GARMENT_BOX2,
IG_THIRD_JOB_STONE_TOP_BOX,
IG_THIRD_JOB_STONE_TOP_BOX2,
IG_THIRD_JOB_STONE_MIDDLE_BOX,
IG_THIRD_JOB_STONE_MIDDLE_BOX2,
IG_THIRD_JOB_STONE_BOTTOM_BOX,
IG_THIRD_JOB_STONE_BOTTOM_BOX2,
IG_SHADOW_EXCHANGE_BOX,
IG_GUNSLINGER_ENCHANT,
IG_ENCHANTSTONE_RECIPE,
IG_PET_EGG_BOX,
IG_COSTUME_EXCHANGE_BOX,
IG_FAN_UPGRADE_KIT,
IG_SUIT_UPGRADE_KIT,
IG_SCROLL_OF_FALLEN_ANGEL_WINGS,
IG_CLASS_SHADOW_BOX_WEAPON,
IG_CLASS_SHADOW_BOX_ARMOR,
IG_CLASS_SHADOW_BOX_SHOES,
IG_CLASS_SHADOW_BOX_SHIELD,
IG_CLASS_SHADOW_BOX_PENDANT,
IG_CLASS_SHADOW_BOX_EARRING,
IG_STATUSSHADOW_MIX,
IG_GEMSTONESHADOW_MIX,
IG_BEARERSSHADOW_MIX,
IG_COMPOSESHADOW_MIX,
IG_RACESHADOW_MIX,
IG_CANDY_BAG_SCROLL_MELEE,
IG_CANDY_BAG_SCROLL_RANGE,
IG_CANDY_BAG_SCROLL_MAGIC,
IG_BOOSTER_AMPLIFIER,
IG_MAGICAL_CAT_HAND,
IG_INFINITYSHADOW_MIX,
IG_SILVER_STATUE,
IG_PHYSICALMAGICAL_MIX,
IG_IMMUNEDATHENA_MIX,
IG_HARDCHAMPTION_MIX,
IG_KINGBIRDANCIENT_MIX,
IG_CRITICALHIT_MIX,
IG_BS_ITEM_M_S_2,
IG_BS_ITEM_M_S_8,
IG_BS_ITEM_M_S_10,
IG_BS_ITEM_M_S_11,
IG_BS_ITEM_M_S_34,
IG_BS_ITEM_M_S_41,
IG_BS_ITEM_M_S_42,
IG_BS_ITEM_M_S_43,
IG_BS_ITEM_M_S_44,
IG_BS_SHA_M_S_1,
IG_BS_SHA_M_S_17,
IG_BS_SHA_M_S_18,
IG_BS_SHA_M_S_19,
IG_BS_SHA_M_S_20,
IG_BS_ITEM_M_S_4,
IG_BS_ITEM_M_S_6,
IG_BS_ITEM_M_S_7,
IG_BS_ITEM_M_S_12,
IG_BS_ITEM_M_S_13,
IG_BS_ITEM_M_S_15,
IG_BS_ITEM_M_S_28,
IG_BS_ITEM_M_S_29,
IG_BS_ITEM_M_S_31,
IG_BS_ITEM_M_S_32,
IG_BS_ITEM_M_S_33,
IG_BS_ITEM_M_S_36,
IG_BS_ITEM_M_S_37,
IG_BS_ITEM_M_S_38,
IG_BS_ITEM_M_S_39,
IG_BS_ITEM_M_S_40,
IG_BS_ITEM_M_S_45,
IG_BS_ITEM_M_S_46,
IG_BS_ITEM_M_S_47,
IG_BS_ITEM_M_S_48,
IG_BS_ITEM_M_S_49,
IG_BS_ITEM_M_S_50,
IG_BS_SHA_M_S_5,
IG_BS_SHA_M_S_6,
IG_BS_SHA_M_S_7,
IG_BS_SHA_M_S_8,
IG_BS_SHA_M_S_13,
IG_BS_SHA_M_S_15,
IG_BS_SHA_M_S_16,
IG_BS_SHA_M_S_23,
IG_BS_ITEM_M_S_5,
IG_BS_ITEM_M_S_9,
IG_BS_ITEM_M_S_14,
IG_BS_ITEM_M_S_16,
IG_BS_ITEM_M_S_17,
IG_BS_ITEM_M_S_19,
IG_BS_ITEM_M_S_27,
IG_BS_ITEM_M_S_35,
IG_BS_SHA_M_S_9,
IG_BS_SHA_M_S_10,
IG_BS_SHA_M_S_11,
IG_BS_SHA_M_S_21,
IG_BS_ITEM_M_S_1,
IG_BS_ITEM_M_S_3,
IG_BS_ITEM_M_S_18,
IG_BS_ITEM_M_S_20,
IG_BS_ITEM_M_S_21,
IG_BS_ITEM_M_S_22,
IG_BS_ITEM_M_S_23,
IG_BS_ITEM_M_S_24,
IG_BS_ITEM_M_S_25,
IG_BS_ITEM_M_S_26,
IG_BS_ITEM_M_S_30,
IG_BS_SHA_M_S_3,
IG_BS_SHA_M_S_4,
IG_BS_SHA_M_S_12,
IG_BS_SHA_M_S_14,
IG_BS_SHA_M_S_24,
IG_BS_SHA_M_S_25,
IG_BS_ITEM_M_S_51,
IG_ENCHANTSTONE_RECIPE_9M,
IG_IDTEST_SPECIAL,
IG_PERFECTSIZE_MIX,
IG_MAGICPIERCING_MIX,
IG_PIERCING_MIX,
IG_HASTY_MIX,
IG_ENCHANTSTONE_RECIPE_4M,
IG_SHADOW_CUBE,
IG_SHADOW_CUBE_PENDANT,
IG_SHADOW_CUBE_EARING,
IG_ANGELPORING_BOX,
IG_HELM_OF_FAITH_BOX,
IG_2022_LUNARNEWYEARS_BOX,
IG_2020_REWARD_BOX,
IG_COSTUME_MILE_PACK_26_1,
IG_COSTUME_MILE_PACK_26_2,
IG_COSTUME_MILE_PACK_26_3,
IG_EP17_1_SPC01,
IG_EP17_1_SPC02,
IG_EP17_1_SPC03,
IG_EP17_1_SPC04,
IG_STABILITYSHADOW_MIX,
IG_BS_SHA_M_S_2,
IG_BS_SHA_M_S_22,
IG_SLD_CARD_RECIPE,
IG_R_BEARERSSHADOW_MIX,
IG_M_BLITZSHADOW_MIX,
IG_RELOADSHADOW_MIX,
IG_SPELLCASTERSHADOW_MIX,
IG_MAGICALSHADOW_MIX,
IG_PHYSICALSHADOW_MIX,
IG_MAJORAUTOSPELL_MIX,
IG_ABSORBSHADOW_MIX,
IG_TRUE_GEMSHADOW_MIX,
IG_MAMMOTH_MIX,
IG_FULLTEMPSHADOW_MIX,
IG_FULLPENESHADOW_MIX,
IG_REMODEL_HERO_BOOTS,
IG_ORIENTAL_SWORD_CUBE,
IG_DRAGONIC_SLAYER_CUBE,
IG_SHIVER_KATAR_K_CUBE,
IG_BLADE_KATAR_CUBE,
IG_SWORD_OF_BLUEFIRE_CUBE,
IG_SLATE_SWORD_CUBE,
IG_NARCIS_BOW_CUBE,
IG_TRUMPET_SHELL_K_CUBE,
IG_BARB_WIRE_K_CUBE,
IG_AVENGER_CUBE,
IG_METEOR_STRIKER_CUBE,
IG_MAGIC_SWORD_CUBE,
IG_FATALIST_CUBE,
IG_ROYAL_BOW_K_CUBE,
IG_SCALET_DRAGON_L_CUBE,
IG_SHADOW_STAFF_K_CUBE,
IG_FREEZING_ROD_CUBE,
IG_IRON_NAIL_K_CUBE,
IG_RAY_KNUCKLE_CUBE,
IG_UNDINE_SPEAR_K_CUBE,
IG_LIGHT_BLADE_CUBE,
IG_IRON_STAFF_CUBE,
IG_BLUE_CRYSTAL_STAFF_CUBE,
IG_DEMON_HUNT_BIBLE_CUBE,
IG_SAINT_HALL_CUBE,
IG_MEAWFOXTAIL_CUBE,
IG_FOG_DEW_SWORD_CUBE,
IG_HUMMA_CLEAR_CUBE,
IG_THOUSAND_SUN_CUBE,
IG_SPIRIT_PENDULUM_CUBE,
IG_CRIMSON_ROSE_CUBE,
IG_MASTER_SOUL_RIFLE_CUBE,
IG_GOLDEN_LORD_LAUNCHER_CUBE,
IG_THE_BLACK_CUBE,
IG_DEMON_SLAYER_SHOT_CUBE,
IG_RUNE_CRAFT_MATERIALS,
IG_ELEMENTAL_CONVERTER,
IG_POISONS,
IG_BLACKSMITH,
IG_POTION_CRAFT_MATERIALS,
IG_KUNAI_BOX,
IG_BULLET_CASE,
IG_SOUL_LINKER,
IG_ELEMENTAL_STONES,
IG_SHADOW_CUBE_ARMOR,
IG_SHADOW_CUBE_SHIELD,
IG_SHADOW_CUBE_SHOES,
IG_SHADOW_CUBE_WEAPON,
IG_AUTOMATIC_MODULE_MIX,
IG_EPIC_MODULE_MIX,
IG_AUTO_M_I_BOX_A,
IG_AUTO_M_I_BOX_B,
IG_ILLUSION_MODULE_MIX,
IG_ENCHANT_STONE_BOX22,
IG_ENCHANT_STONE_BOX23,
IG_ENCHANT_STONE_BOX24,
IG_ENCHANT_STONE_BOX25,
IG_ENCHANT_STONE_BOX27,
IG_ANCIENT_HERO_BOX_1,
IG_3LV_9REFINE_WEAPON_7GU,
IG_3LV_10REFINE_WEAPON_8GU,
IG_3LV_11REFINE_WEAPON_9GU,
IG_3LV_12REFINE_WEAPON_10G,
IG_4LV_9REFINE_WEAPON_8GU,
IG_4LV_10REFINE_WEAPON_9GU,
IG_4LV_11REFINE_WEAPON_10G,
IG_BS_ITEM_M_S_52,
IG_BS_ITEM_M_S_53,
IG_BS_ITEM_M_S_54,
IG_BS_ITEM_M_S_55,
IG_BS_ITEM_M_S_56,
IG_ENCHANT_STONE_BOX28,
IG_S_FULLPENE_EARRING,
IG_S_FULLPENE_PENDANT,
IG_S_FULLPENE_ARMOR,
IG_S_FULLPENE_SHOES,
IG_S_FULLTEMP_EARRING,
IG_S_FULLTEMP_PENDANT,
IG_S_FULLTEMP_ARMOR,
IG_S_FULLTEMP_SHOES,
IG_S_DURABLE_WEAPON,
IG_S_DURABLE_SHIELD,
IG_S_CLEVER_WEAPON,
IG_S_CLEVER_SHIELD,
IG_S_ALLMIGHTY_EARRING,
IG_S_ALLMIGHTY_PENDANT,
IG_S_TRUEGEM_EARRING,
IG_S_TRUEGEM_PENDANT,
IG_S_TRUEGEM_SHOES,
IG_S_TRUEGEM_ARMOR,
IG_S_PERFECTSIZE_WEAPON,
IG_S_PERFECTSIZE_ARMOR,
IG_S_M_MAMMOTH_EARRING,
IG_S_M_MAMMOTH_PENDANT,
IG_S_M_MAMMOTH_ARMOR,
IG_S_M_MAMMOTH_SHOES,
IG_S_SPELLCASTER_EARRING,
IG_S_SPELLCASTER_PENDANT,
IG_S_SPELLCASTER_ARMOR,
IG_S_SPELLCASTER_SHOES,
IG_S_ABSORB_WEAPON,
IG_S_ABSORB_SHIELD,
IG_PORINGSPRECIOUSBOX,
IG_ENCHANT_STONE_BOX29,
IG_EIN_1HITEMBOX,
IG_EIN_UNDIUM,
IG_PC_COSTUME_BOX,
IG_WET_SEALED_CARD,
IG_2019_SSTARR_TBOX,
IG_E_LIFE_POTION_PACK,
IG_E_DEF_SCROLL_BOX,
IG_E_ALMIGHTY_BOX,
IG_E_LIMITPOWERBOOSTER,
IG_ROYAL_SECRET_BOX,
IG_SEASON_EVT_REWARD_2,
IG_HERO_HAMMER_PACKAGE_5,
IG_FLIPPACKAGE,
IG_POPE_SCROLL,
IG_MYSTERIOUS_EGG2,
IG_GUILDSMAN_RECRUITER_BOX,
IG_PARTY_RECRUITER_HAT_BOX,
IG_BF_RECRUITER_HAT_BOX,
IG_FRIEND_RECR_HAT_BOX,
IG_GF_RECRUITER_HAT_BOX,
IG_MARCHER_HAT_BOX,
IG_F_GUILDSMAN_RECR_BOX,
IG_F_PARTY_RECR_HAT_BOX,
IG_FBF_RECRUITER_HAT_BOX,
IG_F_FRIEND_RECR_HAT_BOX,
IG_FGF_RECRUITER_HAT_BOX,
IG_BONUS_BOX01,
IG_BONUS_BOX02,
IG_BONUS_BOX03,
IG_BONUS_BOX04,
IG_BONUS_BOX05,
IG_BONUS_BOX06,
IG_BONUS_BOX07,
IG_BONUS_BOX08,
IG_BONUS_BOX09,
IG_BONUS_BOX10,
IG_F_BONUS_BOX01,
IG_F_BONUS_BOX02,
IG_F_BONUS_BOX03,
IG_F_BONUS_BOX04,
IG_F_BONUS_BOX05,
IG_F_BONUS_BOX06,
IG_F_BONUS_BOX07,
IG_F_BONUS_BOX08,
IG_F_BONUS_BOX09,
IG_F_BONUS_BOX10,
IG_FUGIN_EGG01,
IG_FUGIN_EGG02,
IG_PUMP_OF_SPIRIT_SCROLL,
IG_HAPPY_BALLOON_SCROLL,
IG_ANGRY_MOUTH_C_BOX,
IG_KRO_LUCKY_BOX,
IG_CLAYMORE_C_BOX,
IG_JAMADHAR_C_BOX,
IG_TWO_HANDED_AXE_C_BOX,
IG_LANCE_C_BOX,
IG_HUUMA_GIANT_WHEEL_C_BOX,
IG_ORCISH_AXE_C_BOX,
IG_PIKE_C_BOX,
IG_ENCYCLOPEDIA_C_BOX,
IG_FIST_C_BOX,
IG_GUITAR_C_BOX,
IG_RANTE_C_BOX,
IG_DAMASCUS_C_BOX,
IG_FLAMBERGE_C_BOX,
IG_STUNNER_C_BOX,
IG_F_KRO_LUCKY_BOX,
IG_F_CLAYMORE_C_BOX,
IG_F_JAMADHAR_C_BOX,
IG_F_TWO_HANDED_AXE_C_BOX,
IG_F_LANCE_C_BOX,
IG_F_HUUMA_GIANT_C_BOX,
IG_F_ORCISH_AXE_C_BOX,
IG_F_PIKE_C_BOX,
IG_F_ENCYCLOPEDIA_C_BOX,
IG_F_FIST_C_BOX,
IG_F_GUITAR_C_BOX,
IG_F_RANTE_C_BOX,
IG_F_DAMASCUS_C_BOX,
IG_F_FLAMBERGE_C_BOX,
IG_F_STUNNER_C_BOX,
IG_F_ANGRY_MOUTH_C_BOX,
IG_MARIONETTE_C_BOX,
IG_WHISPER_C_BOX,
IG_INCUBUS_C_BOX,
IG_F_MARIONETTE_C_BOX,
IG_F_WHISPER_C_BOX,
IG_F_INCUBUS_C_BOX,
IG_F_ACTI_POTION_BOX,
IG_RO_DS_HEADGEAR_BOX,
IG_HOCKEY_MASK_BOX1,
IG_OBSERVER_BOX1,
IG_ALL_IN_ONE_RING_BOX1,
IG_SPRITUAL_TUNIC_BOX1,
IG_RECUPERATIVE_ARMOR_BOX1,
IG_SHELTER_RESIST_BOX1,
IG_SYLPHID_MANTEAU_BOX1,
IG_REFRESH_SHOES_BOX1,
IG_WELL_BAKED_TOAST_BOX1,
IG_WASTELAND_OUTLAW_BOX1,
IG_LEVER_ACT_RIFLE_BOX1,
IG_HEALING_STAFF_BOX1,
IG_PRAXINUS_BOX1,
IG_GUILD_RECRUIT_BOX1,
IG_PARTY_RECRUIT_HAT_BOX1,
IG_BF_RECRUIT_HAT_BOX1,
IG_GF_RECRUIT_HAT_BOX1,
IG_FRIEND_RECRUIT_HAT_BOX1,
IG_CLAYMORE_C_BOX1,
IG_TWO_HANDED_AXE_C_BOX1,
IG_LANCE_C_BOX1,
IG_JAMADHAR_C_BOX1,
IG_HUUMA_GIANT_C_BOX1,
IG_ORCISH_AXE_C_BOX1,
IG_PIKE_C_BOX1,
IG_ENCYCLOPEDIA_C_BOX1,
IG_FIST_C_BOX1,
IG_GUITAR_C_BOX1,
IG_RANTE_C_BOX1,
IG_DAMASCUS_C_BOX1,
IG_FLAMBERGE_C_BOX1,
IG_STUNNER_C_BOX1,
IG_ANGRY_MOUTH_C_BOX1,
IG_SHOOTING_STAR_C_BOX,
IG_BLOODY_FEAR_C_BOX,
IG_AHLSPIESS_C_BOX,
IG_STAFF_OF_HEALING_C_BOX,
IG_ANTI_DEMON_SHIELD_C_BOX,
IG_F_SHOOTING_STAR_C_BOX,
IG_F_BLOODY_FEAR_C_BOX,
IG_F_AHLSPIESS_C_BOX,
IG_F_S_HEALING_C_BOX,
IG_F_A_DEMON_SHIELD_C_BOX,
IG_MBL_PET_RANDOM_BOX,
IG_7TH_ANNI_RANDOM_BOX,
IG_FREYJA_RING_BOX,
IG_F_FREYJA_RING_BOX,
IG_F_CLOVER_BOX_MOUTH,
IG_F_BGUM_BOX_IN_MOUTH,
IG_F_CLOVER_BOX_MOUTH2,
IG_F_CLOVER_BOX_MOUTH4,
IG_F_BGUM_BOX_IN_MOUTH2,
IG_F_BGUM_BOX_IN_MOUTH4,
IG_FREYJA_RING_BOX2,
IG_F_FREYJA_RING_BOX2,
IG_BM_PACK_BOX_A,
IG_F_BM_PACK_BOX_A,
IG_BM_PACK_BOX_B,
IG_F_BM_PACK_BOX_B,
IG_XMAS_CARD_BOX,
IG_F_XMAS_CARD_BOX,
IG_XMAS_CARD_BOX2,
IG_F_XMAS_CARD_BOX2,
IG_E_BUNNY_BAND_BOX,
IG_SUMMER_SCROLL2,
IG_F_ACTI_POTION_BOX2,
IG_HALF_MEGIN_BOX,
IG_HALF_BRYSING_BOX,
IG_SPIKED_SCARF_BOX2,
IG_RAINBOW_SCARF_BOX2,
IG_SPIKED_SCARF_BOX3,
IG_RAINBOW_SCARF_BOX3,
IG_F_SPIKED_SCARF_BOX,
IG_F_RAINBOW_SCARF_BOX,
IG_F_SPIKED_SCARF_BOX2,
IG_F_RAINBOW_SCARF_BOX2,
IG_F_SPIKED_SCARF_BOX3,
IG_F_RAINBOW_SCARF_BOX3,
IG_F_RIBBON_OF_LIFE_BOX,
IG_F_RIBBON_OF_LIFE_BOX2,
IG_F_RIBBON_OF_LIFE_BOX3,
IG_F_RAPID_LIFE_WATER_BOX,
IG_F_MAGIC_CANDY_BOX10,
IG_UMBALA_SPIRIT_BOX,
IG_F_UMBALA_SPIRIT_BOX,
IG_UMBALA_SPIRIT_BOX_7DAY,
IG_C_REPAIR_SCROLL_BOX,
IG_C_REPAIR_SCROLL_BOX10,
IG_C_UMBALA_SPIRIT_BOX2,
IG_C_MURAMASA_BOX,
IG_C_EXCALIBUR_BOX,
IG_C_COMBAT_KNIFE_BOX,
IG_C_COUNTER_DAGGER_BOX,
IG_C_MIGHTY_STAFF_BOX,
IG_C_RIGHT_EPSILON_BOX,
IG_C_BALISTAR_BOX,
IG_C_D_GREAT_SAGE_BOX,
IG_C_ASURA_BOX,
IG_C_BROOCH_BOX,
IG_C_SAFETY_RING_BOX,
IG_C_PECOPECO_HAIRBAND_BOX,
IG_C_NAGAN_BOX,
IG_C_SKEWER_BOX,
IG_C_QUADRILLE_BOX,
IG_C_FIRE_BRAND_BOX,
IG_C_MASQUERADE_BOX,
IG_C_ORC_HERO_HELM_BOX,
IG_C_KRO_D_KITTY_BOX,
IG_C_BLOODY_IRON_BALL_BOX,
IG_C_HOCKEY_MASK_BOX,
IG_C_OBSERVER_BOX,
IG_C_ALL_IN_ONE_RING_BOX,
IG_C_SPIRITUAL_TUNIC_BOX,
IG_C_RECUP_ARMOR_BOX,
IG_C_SHELTER_RESIST_BOX,
IG_C_SYLPHID_MANTEAU_BOX,
IG_C_REFRESH_SHOES_BOX,
IG_C_WASTELAND_OUTLAW_BOX,
IG_C_LEVER_ACT_RIFLE_BOX,
IG_C_CLAYMORE_C_BOX,
IG_C_JAMADHAR_C_BOX,
IG_C_TWO_HANDED_AXE_C_BOX,
IG_C_LANCE_C_BOX,
IG_C_ORCISH_AXE_C_BOX,
IG_C_ENCYCLOPEDIA_C_BOX,
IG_C_PIKE_C_BOX,
IG_C_FIST_C_BOX,
IG_C_DAMASCUS_C_BOX,
IG_C_FLAMBERGE_C_BOX,
IG_C_STUNNER_C_BOX,
IG_C_SHOOTING_STAR_C_BOX,
IG_C_BLOODY_FEAR_C_BOX,
IG_C_STAFF_HEALING_C_BOX,
IG_C_CLOVER_BOX_MOUTH,
IG_C_CLOVER_BOX_MOUTH2,
IG_C_CLOVER_BOX_MOUTH4,
IG_C_BGUM_BOX_IN_MOUTH,
IG_C_BGUM_BOX_IN_MOUTH2,
IG_C_BGUM_BOX_IN_MOUTH4,
IG_C_SPIKED_SCARF_BOX,
IG_C_SPIKED_SCARF_BOX2,
IG_C_SPIKED_SCARF_BOX3,
IG_C_RAINBOW_SCARF_BOX,
IG_C_RAINBOW_SCARF_BOX2,
IG_C_RAINBOW_SCARF_BOX3,
IG_C_RIBBON_OF_LIFE_BOX,
IG_C_RIBBON_OF_LIFE_BOX2,
IG_C_RIBBON_OF_LIFE_BOX3,
IG_C_LOVE_ANGEL_BOX,
IG_C_LOVE_ANGEL_BOX_1M,
IG_C_SQUIRREL_BOX,
IG_C_SQUIRREL_BOX_1M,
IG_C_PICTURE_DIARY_BOX,
IG_C_PICTURE_DIARY_BOX_1M,
IG_C_MINI_HEART_BOX,
IG_C_MINI_HEART_BOX_1M,
IG_C_NEWCOMER_BOX,
IG_C_NEWCOMER_BOX_1M,
IG_C_KID_BOX,
IG_C_KID_BOX_1M,
IG_C_MAGIC_CASTLE_BOX,
IG_C_MAGIC_CASTLE_BOX_1M,
IG_C_BULGING_HEAD_BOX,
IG_C_BULGING_HEAD_BOX_1M,
IG_REFINE_ORE_BOX,
IG_ATTEND_C_BOX,
IG_TRANS_A_SET,
IG_TRANS_B_SET,
IG_TRANS_C_SET,
IG_MADE_DISH_SET,
IG_MADE_DISH_BOX,
IG_RED_BOOSTER_BOX20_2,
IG_MYSTIC_POWDER_BOX30_2,
IG_EC_BATTLE_MANUAL_BOX,
IG_EC_JOB_MANUAL25_BOX10,
IG_GLOBAL_HAT_FES_BOX,
IG_GLOBAL_HAT_FES_5_BOX,
IG_GLOBAL_HAT_FES_BOX2,
IG_MADE_DISH_BOX1,
IG_MYSTERIOUS_WATER_BOX50,
IG_MYSTERIOUS_WATER_BOX50_,
IG_REFINE_ORE_BOX2,
IG_RED_POTION_RG_BOX,
IG_BLUE_POTION_RG_BOX,
IG_GOLDENAPPLE_P_RG_BOX,
IG_GOLDENAPPLE_RG_BOX,
IG_GOLDEN_POTION_RG_BOX,
IG_SPECIAL_PO_BOX,
IG_BATTLE_MANUAL_LIMIT_BOX,
IG_UNLIMITED_20_BOX,
IG_CUSTOMIZING_BOX,
IG_NYANGVINE_BOX10_,
IG_NYANGVINE_BOX100,
IG_SERVICE30_M_01_BOX,
IG_SERVICE30_F_01_BOX,
IG_3_LIFE_POTION_PACK6,
IG_3_LIFE_POTION_10PACK6,
IG_REFINE_ORE_BOX10,
IG_REFINE_ORE_BOX10_SET10,
IG_SERVICE30P_M_01_BOX,
IG_SERVICE30P_F_01_BOX,
IG_VIGORGRA_PACKAGE_V5,
IG_VIGORGRA_PACKAGE_SET_V5,
IG_C_GREED_1HOUR_BOX,
IG_C_CATPAW_1DAY_BOX,
IG_UNLIMITED_BOX4,
IG_UNLIMITED_10_BOX4,
IG_C_GIANT_FLY_1DAY_BOX,
IG_REFINE_ORE_BOX11,
IG_REFINE_ORE_BOX11_SET10,
IG_3_LIFE_POTION_PACK7,
IG_3_LIFE_POTION_10PACK7,
IG_ALMIGHTY_PLUS_BOX,
IG_ALMIGHTY100_PLUSBOX,
IG_LIMIT_POWER_BOOSTER2,
IG_LIMITPOWERBOOSTER2_100,
IG_LC_BOARDING_HALTER_BOX,
IG_REFINE_ORE_BOX12,
IG_REFINE_ORE_BOX12_SET10,
IG_VIGORGRA_PLUS_PACKAGE,
IG_VIGORGRA_PLUS_SET,
IG_3_LIFE_POTION_PACK8,
IG_3_LIFE_POTION_10PACK8,
IG_UNLIMITED_BOX5,
IG_UNLIMITED_10_BOX5,
IG_REFINE_ORE_BOX13,
IG_REFINE_ORE_BOX13_SET10,
IG_HD_REFINE_ORE_BOX,
IG_NYANGVINE_BOX10_2,
IG_NYANGVINE_BOX100_2,
IG_VIGORGRA_PLUS_PACKAGE2,
IG_VIGORGRA_PLUS_SET2,
IG_3_LIFE_POTION_PACK9,
IG_3_LIFE_POTION_10PACK9,
IG_REFINE_ORE_BOX14,
IG_REFINE_ORE_BOX14_SET10,
IG_HD_REFINE_ORE_BOX2,
IG_ALMIGHTY_PLUS_BOX2,
IG_ALMIGHTY100_PLUSBOX2,
IG_DEF_SCROLL_BOX,
IG_DEF_SCROLL_BOX_SET,
IG_LIMIT_POWER_BOOSTER3,
IG_LIMITPOWERBOOSTER3_100,
IG_HD_HIGH_REFINE_BOX,
IG_REFINE_ORE_BOX15_SET10,
IG_REFINE_ORE_BOX15,
IG_HD_REFINE_ORE_BOX3,
IG_VIGORGRA_PLUS_PACKAGE3,
IG_VIGORGRA_PLUS_SET3,
IG_C_CATPAW_7DAY_BOX,
IG_ALMIGHTY_PLUS_BOX3,
IG_ALMIGHTY100_PLUSBOX3,
IG_3_LIFE_POTION_PACK10,
IG_3_LIFE_POTION_10PACK10,
IG_UNLIMITED_10_BOX6,
IG_UNLIMITED_BOX6,
IG_REFINE_ORE_BOX16,
IG_REFINE_ORE_BOX16_SET10,
IG_HD_REFINE_ORE_BOX4,
IG_HD_HIGH_REFINE_BOX2,
IG_DEF_SCROLL_BOX2,
IG_DEF_SCROLL_BOX_SET2,
IG_3_LIFE_POTION_PACK11,
IG_3_LIFE_POTION_10PACK11,
IG_RTC_ANNIV_BOX,
IG_REFINE_ORE_BOX17_SET10,
IG_REFINE_ORE_BOX17,
IG_HD_REFINE_ORE_BOX5,
IG_HD_HIGH_REFINE_BOX3,
IG_INFINITY_BOX,
IG_INFINITY_10_BOX,
IG_NEW_VIGORGRA_PACKAGE,
IG_NEW_VIGORGRA_SET,
IG_LIMITPOWERBOOSTER4_100,
IG_LIMIT_POWER_BOOSTER4,
IG_2017_GSTAR_COSTUMEBOX,
IG_ZERO_MERCHANT_BELL_BOX,
IG_ZERO_KAFRA_BELL_BOX,
IG_REFINE_ORE_BOX18,
IG_REFINE_ORE_BOX18_SET10,
IG_HD_REFINE_ORE_BOX6,
IG_HD_HIGH_REFINE_BOX4,
IG_NEW_3_POTION_PACK,
IG_NEW_3_POTION_10PACK,
IG_NYANGVINE_BOX10_3,
IG_NYANGVINE_BOX100_3,
IG_ALMIGHTY_PLUS_BOX4,
IG_ALMIGHTY100_PLUSBOX4,
IG_REFINE_ORE_BOX19_SET10,
IG_REFINE_ORE_BOX19,
IG_HD_REFINE_ORE_BOX7,
IG_HD_HIGH_REFINE_BOX5,
IG_DEF_SCROLL_BOX3,
IG_DEF_SCROLL_BOX_SET3,
IG_3_LIFE_POTION_PACK12,
IG_3_LIFE_POTION_10PACK12,
IG_INFINITY_BOX2,
IG_INFINITY_10_BOX2,
IG_A_VIGORGRA_SET,
IG_A_VIGORGRA_PACKAGE,
IG_A_ALMIGHTY100_BOX,
IG_A_ALMIGHTY_BOX,
IG_A_REFINE_ORE_BOX_SET,
IG_A_REFINE_ORE_BOX,
IG_A_HD_REFINE_ORE_BOX,
IG_A_HD_HIGH_REFINE_BOX,
IG_A_LIMITPOWERBOOSTER_100,
IG_A_LIMITPOWERBOOSTER,
IG_A_DEF_SCROLL_BOX_SET,
IG_A_DEF_SCROLL_BOX,
IG_A_UNLIMITED_10_BOX,
IG_A_UNLIMITED_BOX,
IG_MADE_DISH_BOX2,
IG_COSTUME_SET1_KR,
IG_SEALED_SCROLL3,
IG_STATUS_DECREASE_SCROLL,
IG_MAD_BUNNY_SCROLL,
IG_SEALED_HAT_BOX,
IG_SEALED_HAT_BOX2,
IG_IMPROVED_NOMALBOX,
IG_IMPROVED_WOODENBOX,
IG_IMPROVED_GOLDENBOX,
IG_IMPROVED_PLATINUMBOX,
IG_13THCELEBRATEBOX,
IG_CROSSEVENTBOX,
IG_PIAMETTE_SCROLL,
IG_COWLICK_BOX,
IG_STRAIGHT_PONY_BOX,
IG_LOOSE_WAVE_TWIN_BOX,
IG_INVISIBLE_SCROLL,
IG_NEW_HAT_SCROLL,
IG_NEW_HAT_BOX,
IG_COKINGOPENBOX,
IG_2015_SPECIAL_SCROLL,
IG_2015_SPECIAL_BOX,
IG_2015_ANGEL_SCROLL,
IG_DECEMBERGIFTBOX_2016,
IG_NOVEMBERGIFTBOX_2016,
IG_PORING_SCROLL,
IG_MOBI_SUPPORT_BOX,
IG_TIME_GUARDIAN_BOX2,
IG_ASSORTED_SHDOWBOX,
IG_AMISTR_SCROLL,
IG_AMISTR_BOX,
IG_SHADOW_SCROLL,
IG_SPIRIT_SCROLL,
IG_SEALED_HAT_BOX3,
IG_CACHUA_WEAPON,
IG_CACHUA_ROBE,
IG_CACHUA_MAIL,
IG_CACHUA_SHOES,
IG_CACHUA_SHIELD,
IG_CACHUA_HELM,
IG_BALLOON_SCROLL,
IG_PORING_BALLOON_BOX,
IG_RIBEL_JUMPING_BOX,
IG_GUNSLINGER_SCROLL,
IG_GREEN_SCROLL_K,
IG_KAFRA_SCROLL,
IG_SIGRUN_SCROLL,
IG_PREMIUMWOODENBOX,
IG_PREMIUMGOLDENBOX,
IG_PREMIUMPLATINUMBOX,
IG_PREMIUMNOMALBOX,
IG_NEW_HAT_SCROLL2,
IG_NEW_HAT_BOX2,
IG_2016_SPECIAL_SCROLL,
IG_2016_SPECIAL_BOX,
IG_BISCUIT_STICK_2SET,
IG_RACING_EXCHANGE,
IG_CANDLELIGHT_SCROLL,
IG_LAPINE_SCROLL,
IG_LI_LAPINE_DDUKDDAKBOX,
IG_HAIR_BUN_BOX,
IG_ROLL_TWIN_BOX,
IG_LONG_PONY_BOX,
IG_1LVUP,
IG_10LVUP,
IG_20LVUP,
IG_30LVUP,
IG_40LVUP,
IG_50LVUP,
IG_60LVUP,
IG_70LVUP,
IG_90LVUP,
IG_175LVUP,
IG_BISCUIT_STICK_2SET_,
IG_LOVE_SCROLL,
IG_LOVELY_EGG_BOX,
IG_C_CATPAW_1DAY_PARA,
IG_C_WING_OF_FLY_1DAY_PARA,
IG_CAT_SCROLL,
IG_MAGICAL_BOOSTER_BOX,
IG_CAT_HEAD_DRESS_BASKET,
IG_CHEMICALS_BAG,
IG_SHADOW_SCROLL2,
IG_C_WING_OF_FLY_3DAY_BOX_,
IG_MOBILE_NOVICE_BOX,
IG_C_WING_OF_FLY_5DAY_BOX_,
IG_C_GIANT_FLY_1DAY_BOX_,
IG_C_WING_OF_FLY_BOX_,
IG_MAY_GOLD_SCROLL,
IG_NEW_HAT_BOX3,
IG_EXSHADOW_DDUKDDAKBOX,
IG_MATERIAL_SHADOW_CUBE,
IG_MYSTERIOUS_MEDAL_BOX,
IG_VEND_ARBEIT1_1LV,
IG_VEND_ARBEIT1_2LV,
IG_VEND_ARBEIT1_3LV,
IG_BUY_ARBEIT1_1LV,
IG_BUY_ARBEIT1_2LV,
IG_BUY_ARBEIT1_3LV,
IG_VEND_ARBEIT3_1LV,
IG_VEND_ARBEIT3_2LV,
IG_VEND_ARBEIT3_3LV,
IG_BUY_ARBEIT3_1LV,
IG_BUY_ARBEIT3_2LV,
IG_BUY_ARBEIT3_3LV,
IG_CRYPTURA_GIFTBOX,
IG_GENERAL_SCROLL,
IG_GREEN_SCROLL_K2,
IG_NEW_SHADOW_CUBE,
IG_SENTIMENTAL_SCROLL,
IG_JULY_HAIR_BOX,
IG_INFINITY_SCROLL,
IG_BLOODY_SCROLL,
IG_SNOW_FESTA_BOX,
IG_SNOW_FESTA_CARDPACK,
IG_2017_SPECIAL_SCROLL,
IG_2017_SPECIAL_BOX,
IG_ICE_SCROLL,
IG_2018_NEW_YEAR_SCROLL,
IG_2018_YEAR_SHADOW_CUBE,
IG_2018_MATERIAL_CUBE,
IG_2018_LAPINE_DDUKDDAKBOX,
IG_SWEETS_EVT_BOX,
IG_EVT_JAN02KR,
IG_2018_VISIONARY_CARD,
IG_LUNAR_NEW_YEAR_SCROLL,
IG_FEBRUARY_HAIR_BOX,
IG_2018_SPRING_SCROLL,
IG_2018_SAKURA_SCROLL,
IG_SEALED_CARD2,
IG_CELEBRATE_EGG,
IG_NOODLE_FESTA_CAN,
IG_COMP_AID_BUFF_BOX,
IG_COMP_BOX,
IG_COMP_ALL_RING_BOX,
IG_MYSTERIOUS_EGG3,
IG_COMP_BOX2,
IG_MAY_RAINBOW_SCROLL,
IG_SWEET_CANDY_BOX,
IG_PUMP_OF_SPIRIT_SCROLL2,
IG_SPIRIT_HAT_BOX,
IG_HERO_WEAPON_BOX,
IG_STARSOUL_SCROLL,
IG_COMP_CONNECTERROR,
IG_2018_JUMP_THX_BOX,
IG_TIME_OVERLOAD_BOX,
IG_110LVUP,
IG_SEASON_EVT_REWARD_3,
IG_SEASON_EVT_REWARD_4,
IG_SEASON_EVT_REWARD_5,
IG_JOB_ENCHANT_STONE_BOX,
IG_MAIN_LUCKY_BOX,
IG_SEASON_EVT_REWARD,
IG_CANDY_BOX,
IG_PORING_SUNGLASSES_BOX,
IG_SIGRUN_SHADOW_BOX,
IG_MAD_BUNNY_BOX,
IG_LEVEL_ACHIEVEMENT_BOX,
IG_ABYSS_ITEMBOX,
IG_ODIN_ITEMBOX,
IG_BIO_W_BOX,
IG_BIO_DOCU_BOX,
IG_BIO_REACTANT_BOX,
IG_PAYPROMOTION_BOX,
IG_E_BCRYSTAL_BOX,
IG_E_MCRYSTAL_BOX,
IG_E_SCRYSTAL_BOX,
IG_BOOSTER_PACK_1,
IG_BOOSTER_PACK_15,
IG_BOOSTER_PACK_30,
IG_BOOSTER_PACK_45,
IG_BOOSTER_PACK_60,
IG_BOOSTER_PACK_75,
IG_BOOSTER_PACK_90,
IG_BOOSTER_PACK_100,
IG_BOOSTER_PACK_115,
IG_BOOSTER_PACK_130,
IG_BOOSTER_PACK_145,
IG_BOOSTER_PACK_160,
IG_BOOSTER_PACK_175,
IG_STATER_A_BOX,
IG_BOOST_ATK_BOX,
IG_BOOST_RAN_BOX,
IG_BOOST_ELE_BOX,
IG_BOOST_DEFN_BOX,
IG_GOAL_GIFT_BOX,
IG_BOOSTER_PACK_PREORDER,
IG_TIME_OVER_S_BOX,
IG_BOARDING_HALTER_BOX30_Z,
IG_TEMPORAL_MANTEAU_BOX,
IG_LAPINE_DDUKDDAKBOX2,
IG_KR_B_SPECIAL02,
IG_GOLDPCBANG_SHIELDBOX,
IG_SET_OF_TAIMING_ITEM2,
IG_GOLDPCBANG_MILEAGEBOX,
IG_SKILL_SHADOW_CUBE,
IG_SHADOWDECON_ORE_BOX,
IG_ZELUNIUM_ORE_BOX,
IG_GSTAR2019BOX,
IG_EXOTIC_BOB_BOX,
IG_RUNEKNIGHT_S_CUBE,
IG_GUILLOTINECROSS_S_CUBE,
IG_ARCHBISHOP_S_CUBE,
IG_SURA_S_CUBE,
IG_2019_CHRISMAS_PRESENT,
IG_BOOSTER_PACK_190,
IG_BOOSTER_PACK_200,
IG_2020_GOAL_GIFT_BOX,
IG_RANGER_S_CUBE,
IG_WARLOCK_S_CUBE,
IG_SORCERER_S_CUBE,
IG_WANDERMINS_S_CUBE,
IG_ROYALGUARD_S_CUBE,
IG_SHADOWCHASER_S_CUBE,
IG_MECHANIC_S_CUBE,
IG_GENETIC_S_CUBE,
IG_SIGNON_PRIN_WAVE_BOX,
IG_HERO_WEAPON_CUBE,
IG_NEW_S_WEAPON_CUBE,
IG_NEW_S_SHIELD_CUBE,
IG_NEW_S_ARMOR_CUBE,
IG_NEW_S_SHOES_CUBE,
IG_NEW_S_EARRING_CUBE,
IG_NEW_S_PENDANT_CUBE,
IG_MD_AIRBOAT_REWARD,
IG_OS_HELM_BOX,
IG_FAMOUS_HAT_BOX,
IG_POENETENTIA_BOX1,
IG_POENETENTIA_BOX2,
IG_EX_SKILL_SHADOW_CUBE,
IG_CACHUA_COSTUME_BOX,
IG_KR_B_SPECIAL03,
IG_BIOWEAPON_HELM_BOX,
IG_TREE_OF_SPROUT_BOX,
IG_SPECIAL_COSTUME_BOX,
IG_SPECIAL_COSTUME_BOX_,
IG_RAG_INVEN_BOX,
IG_THANATOS_PENDANT_BOX,
IG_LAPINE_DDUKDDAKBOX3,
IG_AUCTION_PROMOTION,
IG_BLUE_PRINTS_SCROLL,
IG_MATERIAL_SHADOW_CUBEII,
IG_ANCIENT_HERO_WILL,
IG_MAMMOTH_SHADOW_BOX,
IG_SHADOW_R_M_BOX,
IG_ALL_SHADOW_CUBE,
IG_FLUFFY_SEMI_LONG_BOX,
IG_BOOSTER_PACK_215,
IG_BOOSTER_PACK_230,
IG_ANGELPORINGJEWEL_BOX,
IG_UP_HERO_WEAPON_BOX,
IG_HIGH_REFINE_GUARANTEE,
IG_REFINE_GUARANTEE,
IG_SPECIAL_REFINE_CUBE,
IG_AUTOSPELL_SHADOW_BOX,
IG_BROADCASTBOX_,
IG_S_ENCHANT_STONE_BOX,
IG_C_GIANT_FLY_1DAY_BOX__,
IG_C_WING_OF_FLY_3DAY_B__,
IG_PHYMAG_SHADOW_BOX,
IG_S_DUAL_STONE_BOX,
IG_S_COSTUME_BOX,
IG_GM_LOST_BAGPACK,
IG_E_POTION_BOX,
IG_BUFF_SCROLL_BOX,
IG_SEASON_EVT_REWARD_9,
IG_S_IGNITION_CUBE,
IG_LI_HD_ORIDECON_BOX2,
IG_LI_HD_ELUNIUM_BOX2,
IG_LI_HD_BRADIUMBOX2,
IG_LI_HD_CARNIUMBOX2,
IG_LI_NYANGVINE_BOX100,
IG_LI_A_3_POTION_PACK,
IG_STONE_COIN_PACKAGEI,
IG_STONE_COIN_PACKAGEII,
IG_STONE_COIN_PACKAGEIII,
IG_A_HD_ELUNIUM_BOX,
IG_A_HD_ORIDECON_BOX,
IG_A_HD_CARNIUM_BOX,
IG_A_HD_BRADIUM_BOX,
IG_L_BATTLE_MANUAL_PACK,
IG_LI_MANA_POTION_BOX,
IG_LI_NYANGVINE_BOX_II,
IG_LI_NYANGVINE_BOX_III,
IG_LI_HD_ORIDECON_BOX3,
IG_LI_HD_ELUNIUM_BOX3,
IG_LI_NYANGVINE_STONE_BOX,
IG_LI_A_REFINE_ORE_BOX,
IG_LI_A_HD_ELUNIUM_BOX,
IG_LI_A_HD_ORIDECON_BOX,
IG_LI_A_HD_CARNIUM_BOX,
IG_LI_A_HD_BRADIUM_BOX,
IG_THANOS_UPGRADE_PACKAGE,
IG_HERO_UP_PACKAGE_1,
IG_HERO_UP_PACKAGE_2,
IG_HERO_HAMMER_PACKAGE_1,
IG_HERO_HAMMER_PACKAGE_2,
IG_HERO_UP_PACKAGE_3,
IG_HERO_HAMMER_PACKAGE_3,
IG_EXP_DROP_UP_BOX,
IG_HERO_HAMMER_PACKAGE_4,
IG_HERO_UP_PACKAGE_4,
IG_LI_NYANGVINE_STONE_BOX2,
IG_HERO_UP_PACKAGE_5,
IG_COSTUMEMILEAGE_PACKAGE1,
IG_COSTUMEMILEAGE_PACKAGE2,
IG_COSTUMEMILEAGE_PACKAGE3,
IG_COMP_TRANS_SCROLL,
IG_MINUS_STATUS_BOX,
IG_S_W_BREATH_CUBE,
IG_S_F_BREATH_CUBE,
IG_S_SONIC_CUBE,
IG_S_STRAIN_CUBE,
IG_S_JACK_CUBE,
IG_S_CHAIN_CUBE,
IG_S_CRIMSON_CUBE,
IG_S_VULCAN_CUBE,
IG_S_BOOMERANG_CUBE,
IG_S_ARMS_CUBE,
IG_S_TORNADO_CUBE,
IG_S_DUPLELIGHT_CUBE,
IG_S_MAGNUS_CUBE,
IG_S_ADORAMUS_CUBE,
IG_S_JUDEX_CUBE,
IG_S_ROLLING_CUBE,
IG_S_RIPPER_CUBE,
IG_S_SLASH_CUBE,
IG_S_KATAR_CUBE,
IG_S_SHOOTING_CUBE,
IG_S_ARROW_CUBE,
IG_S_AIMED_CUBE,
IG_S_CLUSTER_CUBE,
IG_S_BANISH_CANNON_CUBE,
IG_S_BRAND_CUBE,
IG_S_GENESIS_CUBE,
IG_S_CHAIN_PRESS_CUBE,
IG_S_GRAVE_CUBE,
IG_S_DUST_CUBE,
IG_S_VARETYR_CUBE,
IG_S_PSYCHIC_CUBE,
IG_S_SPORE_BOMB_CUBE,
IG_S_CANNON_CART_CUBE,
IG_S_CRAZY_CUBE,
IG_S_CART_TORNADO_CUBE,
IG_S_KNUCKLEARROW_CUBE,
IG_S_SKYNETBLOW_CUBE,
IG_S_RAMPAGE_CUBE,
IG_S_TIGERCANNON_CUBE,
IG_S_MENACE_CUBE,
IG_S_SHADOWSPELL_CUBE,
IG_S_TRIANGLE_CUBE,
IG_S_PAINT_CUBE,
IG_S_RAINSTORM_CUBE,
IG_S_METALIC_CUBE,
IG_S_ARROWVULCAN_CUBE,
IG_S_REVERBERATION_CUBE,
IG_S_MOONLIGHT_CUBE,
IG_S_SUNSHINE_CUBE,
IG_S_STARDUST_CUBE,
IG_S_S_CUBE,
IG_S_EVILCURSE_CUBE,
IG_S_SYURIKEN_CUBE,
IG_S_KUNAI_CUBE,
IG_S_HUUSOUKA_CUBE,
IG_S_KAMAENRAKU_CUBE,
IG_S_GOD_HAMMER_CUBE,
IG_S_SHATTER_BUSTER_CUBE,
IG_S_TAIL_DRAGON_CUBE,
IG_S_TRIP_CUBE,
IG_S_FLARE_DANCE_CUBE,
IG_S_SUPER_MAGIC_CUBE,
IG_S_SUPER_POWER_CUBE,
IG_S_SILVERVINE_CUBE,
IG_S_CATNIP_CUBE,
IG_S_SAVAGERABBIT_CUBE,
IG_S_PICKYRUSH_CUBE,
IG_S_RUNEKNIGHT_CUBE,
IG_S_ROYALGUARD_CUBE,
IG_S_WARLOCK_CUBE,
IG_S_SORCERER_CUBE,
IG_S_MECHANIC_CUBE,
IG_S_GENERIC_CUBE,
IG_S_ARCHBISHOP_CUBE,
IG_S_SURA_CUBE,
IG_S_GUILLOTINECROSS_CUBE,
IG_S_SHADOWCHASER_CUBE,
IG_S_RANGER_CUBE,
IG_S_WANDERER_CUBE,
IG_S_MINSTREL_CUBE,
IG_S_STAR_EMPEROR_CUBE,
IG_S_SOUL_REAPER_CUBE,
IG_S_KAGEROU_CUBE,
IG_S_OBORO_CUBE,
IG_S_REBELLION_CUBE,
IG_S_SUPERNOVICE_CUBE,
IG_S_DORAM_CUBE,
IG_S_MAMMOTH_CUBE,
IG_S_GEMSTONE_CUBE,
IG_S_PENE1_CUBE,
IG_S_PENE2_CUBE,
IG_S_TEMP1_CUBE,
IG_S_TEMP2_CUBE,
IG_BLACKSMITH_BLESS_BOX_3,
IG_SHADOW_HAMMER_BOX_3,
IG_EDP,
IG_MF_NOTELEPORT,
IG_MF_NORETURN,
IG_GIANT_FLY_WING,
IG_CLASS_SHADOW_WP_CUBE,
IG_CLASS_SHADOW_AM_CUBE,
IG_CLASS_SHADOW_SU_CUBE,
IG_CLASS_SHADOW_SD_CUBE,
IG_CLASS_SHADOW_PD_CUBE,
IG_CLASS_SHADOW_EA_CUBE,
IG_ENCHANT_STONE_BOX30,
IG_ENCHANT_STONE_BOX31,
IG_ENCHANT_STONE_BOX32,
IG_ANCIENT_HERO_BOX_2,
IG_ANCIENT_HERO_BOX_3,
IG_INTAKE_HAIR_BOX,
IG_PONYTAIL_HAIR_BOX,
IG_ALCHEMIST_BOX,
IG_GIANT_FLY_WING_2500,
IG_C_GIANT_FLY_WING_BOX,
IG_C_SIEGE_SCROLL_BOX1_10,
IG_C_SIEGE_SCROLL_BOX2_30,
IG_A_3_LIFE_POTION_10PACK,
IG_A_3_LIFE_POTION_PACK,
IG_A_INFINITY_10_BOX,
IG_A_INFINITY_BOX,
IG_C_ACID_B_50BOX,
IG_C_ACID_B_500_BOX,
IG_FIRST_AID_KIT_B,
IG_BOARDING_HALTER_BOX7,
IG_COSTAMA_EGG21,
IG_CRYSTAL_OF_GRUDGE,
IG_WING_OF_BAALZEBUB_BOX,
IG_POROROCA_SHOES_BUNDLE_A,
IG_LIAN_BUNDLE_B,
IG_SPRINT_BUNDLE_A,
IG_ETRAN_BUNDLE_A,
IG_ROSE_BUNDLE_A,
IG_ORLEANS_BUNDLE_A,
IG_BLACK_SHIBA_BUNDLE_A,
IG_VALKYRIE_BUNDLE_A,
IG_KARDUI_BUNDLE_A,
IG_CLOSEDMIND_BOX,
IG_COOKIE_BAG_B,
IG_SHADOW_BOX2,
IG_SHADOW_BOX,
IG_PHYSICAL_S_PACKAGE,
IG_MAGICAL_S_PACKAGE,
IG_POWER_BOX2,
IG_POWER_BOX1,
IG_MAIL_BREAKER_BOX1,
IG_HARDBACK_BOX1,
IG_SWORD_BREAKER_BOX1,
IG_BOW_OF_RUDRA_BOX1,
IG_BLOODY_ROAR_BOX1,
IG_BLOODY_IRON_BALL_BOX1,
IG_SIEGE_SUPPLY_BOX,
IG_PC_BANG_COIN_BOX1,
IG_ACIDBOMB_BOX50,
IG_PC_BANG_COIN_BOX2,
IG_PC_BANG_COIN_BOX4,
IG_FOOD_BOX_LV1,
IG_FOOD_BOX_LV2,
IG_FOOD_BOX_LV3,
IG_TRIAL_BOX,
IG_REPAIR_SCROLL_BOX10,
IG_HOCKEY_MASK_BOX,
IG_CLOCK_TOWER_CARD_BOX,
IG_GEFFENIA_CARD_BOX,
IG_OWL_CARD_BOX,
IG_GHOST_CARD_BOX,
IG_NIGHTMARE_CARD_BOX,
IG_STARTER_PACK,
IG_LOVE_ANGEL_BOX,
IG_SQUIRREL_BOX,
IG_GOGO_BOX,
IG_CRUSADER_CARD_BOX,
IG_ALCHEMIST_CARD_BOX,
IG_ROGUE_CARD_BOX,
IG_BARD_DANCER_CARD_BOX,
IG_SAGE_CARD_BOX,
IG_MONK_CARD_BOX,
IG_TW_VALENTINE_SCROLL,
IG_LOVE_ANGEL_BOX_1M,
IG_SQUIRREL_BOX_1M,
IG_GOGO_BOX_1M,
IG_WASTELAND_OUTLAW_BOX,
IG_LEVER_ACTION_RIFLE_BOX,
IG_SPIRITUAL_TUNIC_BOX,
IG_RECUPERATIVE_ARMOR_BOX,
IG_SHELTER_RESISTANCE_BOX,
IG_SYLPHID_MANTEAU_BOX,
IG_REFRESH_SHOES_BOX,
IG_TOAST_BOX,
IG_BUBBLEGUM_LOWER_BOX,
IG_TW_SCROLL01,
IG_PICTURE_DIARY_BOX,
IG_MINI_HEART_BOX,
IG_NEWCOMER_BOX,
IG_KID_BOX,
IG_MAGIC_CASTLE_BOX,
IG_BULGING_HEAD_BOX,
IG_PICTURE_DIARY_BOX_1M,
IG_MINI_HEART_BOX_1M,
IG_NEWCOMER_BOX_1M,
IG_KID_BOX_1M,
IG_MAGIC_CASTLE_BOX_1M,
IG_BULGING_HEAD_BOX_1M,
IG_F_LOVE_ANGEL_BOX,
IG_F_SQUIRREL_BOX,
IG_F_GOGO_BOX,
IG_F_LOVE_ANGEL_BOX_1M,
IG_F_SQUIRREL_BOX_1M,
IG_F_GOGO_BOX_1M,
IG_F_WASTELAND_OUTLAW_BOX,
IG_F_ALL_IN_ONE_RING_BOX,
IG_F_SPRITUAL_TUNIC_BOX,
IG_F_RECUPERATIVE_BOX,
IG_F_SHELTER_RESIST_BOX,
IG_F_SYLPHID_MANTEAU_BOX,
IG_F_TOAST_BOX,
IG_F_REPAIR_SCROLL_BOX,
IG_F_REPAIR_SCROLL_BOX10,
IG_F_HOCKEY_MASK_BOX,
IG_F_OBSERVER_BOX,
IG_F_NAGAN_BOX,
IG_F_SKEWER_BOX,
IG_F_SURVIVAL_ROD_BOX,
IG_F_QUADRILLE_BOX,
IG_F_GREAT_AXE_BOX,
IG_F_BLOODY_ROAR_BOX,
IG_F_HARDBACK_BOX,
IG_F_FIRE_BRAND_BOX,
IG_F_IMMATERIAL_SWORD_BOX,
IG_F_UNHOLY_TOUCH_BOX,
IG_F_CLACK_OF_SERVIVAL_BOX,
IG_F_MASQUERADE_BOX,
IG_F_ORC_HERO_HELM_BOX,
IG_F_EAR_OF_DEVIL_WING_BOX,
IG_F_DARK_BLINDFOLD_BOX,
IG_F_K_DROOPING_KITTY_BOX,
IG_F_CORSAIR_BOX,
IG_F_BLOODY_IRON_BALL_BOX,
IG_F_SPIRITUAL_RING_BOX,
IG_F_INFILTRATOR_BOX,
IG_F_MURAMASA_BOX,
IG_F_EXCALIBUR_BOX,
IG_F_COMBAT_KNIFE_BOX,
IG_F_COUNTER_DAGGER_BOX,
IG_F_KAISER_KNUCKLE_BOX,
IG_F_MIGHTY_STAFF_BOX,
IG_F_RIGHT_EPSILON_BOX,
IG_F_BALISTAR_BOX,
IG_F_DIARY_OF_GREAT_SAGE,
IG_F_ASURA_BOX,
IG_F_APPLE_OF_ARCHER_BOX,
IG_F_BUNNY_BAND_BOX,
IG_F_SAHKKAT_BOX,
IG_F_LORD_CIRCLET_BOX,
IG_F_ELVEN_EARS_BOX,
IG_F_STEEL_FLOWER_BOX,
IG_F_CRITICAL_RING_BOX,
IG_F_EARRING_BOX,
IG_F_RING_BOX,
IG_F_NECKLACE_BOX,
IG_F_GLOVE_BOX,
IG_F_BROOCH_BOX,
IG_F_ROSARY_BOX,
IG_F_SAFETY_RING_BOX,
IG_F_VESPER_CORE_BOX01,
IG_F_VESPER_CORE_BOX02,
IG_F_VESPER_CORE_BOX03,
IG_F_VESPER_CORE_BOX04,
IG_F_VIGORGRA_PACKAGE1,
IG_F_VIGORGRA_PACKAGE2,
IG_F_VIGORGRA_PACKAGE5,
IG_F_VIGORGRA_PACKAGE6,
IG_F_VIGORGRA_PACKAGE7,
IG_F_VIGORGRA_PACKAGE8,
IG_F_VIGORGRA_PACKAGE9,
IG_F_VIGORGRA_PACKAGE10,
IG_F_VIGORGRA_PACKAGE11,
IG_F_VIGORGRA_PACKAGE12,
IG_F_ASPERSIO_5_SCROLL_BOX,
IG_F_ASPERSIO_5_BOX30,
IG_F_ASPERSIO_5_BOX50,
IG_HEALING_STAFF_BOX,
IG_PRAXINUS_BOX,
IG_F_PET_EGG_SCROLL9,
IG_F_MAGESTIC_GOAT_BOX,
IG_F_PET_EGG_SCROLL3,
IG_F_EXECUTIONER_BOX,
IG_F_CUTLAS_BOX,
IG_F_MOONLIGHT_SWORD_BOX,
IG_F_SPANNER_BOX,
IG_F_SOLAR_SWORD_BOX,
IG_F_TOMAHAWK_BOX,
IG_F_BOW_OF_RUDRA_BOX,
IG_F_POLE_AXE_BOX,
IG_THOUGHTFUL_HAT_BOX,
IG_F_THOUGHTFUL_HAT_BOX,
IG_E_THOUGHTFUL_HAT_BOX,
IG_ZODIAC_DIADEM_PACK,
IG_ZODIAC_CROWN_PACK,
IG_DUN_VOUCHER_BOX1,
IG_DUN_VOUCHER_BOX2,
IG_BLUEBOXOFQUESTIONS,
IG_ENCHANT_STONE_BOX33,
IG_MAX,
};
/// Enum for bound/sell restricted selling
enum e_itemshop_restrictions {
ISR_NONE = 0x0,
ISR_BOUND = 0x1,
ISR_SELLABLE = 0x2,
ISR_BOUND_SELLABLE = 0x4,
ISR_BOUND_GUILDLEADER_ONLY = 0x8,
};
/// Enum for item drop effects
enum e_item_drop_effect : uint16 {
DROPEFFECT_NONE = 0,
DROPEFFECT_CLIENT,
#if PACKETVER < 20200304
DROPEFFECT_WHITE_PILLAR,
#endif
DROPEFFECT_BLUE_PILLAR,
DROPEFFECT_YELLOW_PILLAR,
DROPEFFECT_PURPLE_PILLAR,
#if PACKETVER < 20200304
DROPEFFECT_ORANGE_PILLAR,
#else
DROPEFFECT_GREEN_PILLAR,
#endif
#if PACKETVER >= 20200304
DROPEFFECT_RED_PILLAR,
#endif
DROPEFFECT_MAX,
#if PACKETVER >= 20200304
// White was removed in 2020-03-04
DROPEFFECT_WHITE_PILLAR,
// Orange was replaced by green in 2020-03-04
DROPEFFECT_ORANGE_PILLAR,
#else
// Not supported before 2020-03-04
DROPEFFECT_GREEN_PILLAR,
DROPEFFECT_RED_PILLAR,
#endif
};
/// Enum for items with delayed consumption
enum e_delay_consume : uint8 {
DELAYCONSUME_NONE = 0x0,
DELAYCONSUME_TEMP = 0x1, // Items that are not consumed immediately upon double-click
DELAYCONSUME_NOCONSUME = 0x2, // Items that are not removed upon double-click
};
/// Item combo struct
struct s_item_combo {
std::vector<t_itemid> nameid;
script_code *script;
uint16 id;
~s_item_combo() {
if (this->script) {
script_free_code(this->script);
this->script = nullptr;
}
this->nameid.clear();
}
};
class ComboDatabase : public TypesafeYamlDatabase<uint16, s_item_combo> {
private:
uint16 combo_num;
uint16 find_combo_id( const std::vector<t_itemid>& items );
public:
ComboDatabase() : TypesafeYamlDatabase("COMBO_DB", 1) {
}
void clear() override{
TypesafeYamlDatabase::clear();
this->combo_num = 0;
}
const std::string getDefaultLocation() override;
uint64 parseBodyNode(const ryml::NodeRef& node) override;
void loadingFinished() override;
};
extern ComboDatabase itemdb_combo;
// Struct for item random option [Secret]
struct s_random_opt_data
{
uint16 id;
std::string name;
script_code *script;
~s_random_opt_data() {
if (script)
script_free_code(script);
}
};
/// Struct for random option group entry
struct s_random_opt_group_entry {
uint16 id;
int16 min_value, max_value;
int8 param;
uint16 chance;
};
/// Struct for Random Option Group
struct s_random_opt_group {
uint16 id;
std::string name;
std::map<uint16, std::vector<std::shared_ptr<s_random_opt_group_entry>>> slots;
uint16 max_random;
std::vector<std::shared_ptr<s_random_opt_group_entry>> random_options;
public:
void apply( struct item& item );
};
class RandomOptionDatabase : public TypesafeYamlDatabase<uint16, s_random_opt_data> {
public:
RandomOptionDatabase() : TypesafeYamlDatabase("RANDOM_OPTION_DB", 1) {
}
const std::string getDefaultLocation() override;
uint64 parseBodyNode(const ryml::NodeRef& node) override;
void loadingFinished() override;
// Additional
bool option_exists(std::string name);
bool option_get_id(std::string name, uint16 &id);
};
extern RandomOptionDatabase random_option_db;
class RandomOptionGroupDatabase : public TypesafeYamlDatabase<uint16, s_random_opt_group> {
public:
RandomOptionGroupDatabase() : TypesafeYamlDatabase("RANDOM_OPTION_GROUP", 1) {
}
const std::string getDefaultLocation() override;
uint64 parseBodyNode(const ryml::NodeRef& node) override;
// Additional
bool add_option(const ryml::NodeRef& node, std::shared_ptr<s_random_opt_group_entry> &entry);
bool option_exists(std::string name);
bool option_get_id(std::string name, uint16 &id);
};
extern RandomOptionGroupDatabase random_option_group;
/// Struct of item group entry
struct s_item_group_entry
{
t_itemid nameid; /// Item ID
uint16 rate;
uint16 duration, /// Duration if item as rental item (in minutes)
amount; /// Amount of item will be obtained
bool isAnnounced, /// Broadcast if player get this item
GUID, /// Gives Unique ID for items in each box opened
isStacked, /// Whether stackable items are given stacked
isNamed; /// Named the item (if possible)
uint8 bound; /// Makes the item as bound item (according to bound type)
std::shared_ptr<s_random_opt_group> randomOptionGroup;
uint16 refineMinimum;
uint16 refineMaximum;
};
/// Struct of random group
struct s_item_group_random
{
uint32 total_rate;
std::unordered_map<uint32, std::shared_ptr<s_item_group_entry>> data; /// index, s_item_group_entry
std::shared_ptr<s_item_group_entry> get_random_itemsubgroup();
};
/// Struct of item group that will be used for db
struct s_item_group_db
{
uint16 id; /// Item Group ID
std::unordered_map<uint16, std::shared_ptr<s_item_group_random>> random; /// group ID, s_item_group_random
};
/// Struct of Roulette db
struct s_roulette_db {
t_itemid *nameid[MAX_ROULETTE_LEVEL]; /// Item ID
unsigned short *qty[MAX_ROULETTE_LEVEL]; /// Amount of Item ID
int *flag[MAX_ROULETTE_LEVEL]; /// Whether the item is for loss or win
int items[MAX_ROULETTE_LEVEL]; /// Number of items in the list for each
};
extern struct s_roulette_db rd;
///Main item data struct
struct item_data
{
t_itemid nameid;
std::string name, ename;
uint32 value_buy;
uint32 value_sell;
item_types type;
uint8 subtype;
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]
uint8 sex;
uint32 equip;
uint32 weight;
uint32 atk;
uint32 def;
uint16 range;
uint16 slots;
uint32 look;
uint16 elv;
uint16 weapon_level;
uint16 armor_level;
t_itemid view_id;
uint16 elvmax; ///< Maximum level for this item
#ifdef RENEWAL
uint32 matk;
#endif
//Lupus: I rearranged order of these fields due to compatibility with ITEMINFO script command
// some script commands should be revised as well...
uint64 class_base[3]; //Specifies if the base can wear this item (split in 3 indexes per type: 1-1, 2-1, 2-2)
uint16 class_upper; //Specifies if the class-type can equip it (See e_item_job)
struct {
int chance;
int id;
} mob[MAX_SEARCH]; //Holds the mobs that have the highest drop rate for this item. [Skotlex]
struct script_code *script; //Default script for everything.
struct script_code *equip_script; //Script executed once when equipping.
struct script_code *unequip_script;//Script executed once when unequipping.
struct {
unsigned available : 1;
uint32 no_equip;
unsigned no_refine : 1; // [celest]
unsigned delay_consume; // [Skotlex]
struct {
bool drop, trade, trade_partner, sell, cart, storage, guild_storage, mail, auction;
} trade_restriction; //Item restrictions mask [Skotlex]
unsigned autoequip: 1;
bool buyingstore;
bool dead_branch; // As dead branch item. Logged at `branchlog` table and cannot be used at 'nobranch' mapflag [Cydh]
bool group; // As item group container [Cydh]
unsigned guid : 1; // This item always be attached with GUID and make it as bound item! [Cydh]
bool broadcast; ///< Will be broadcasted if someone obtain the item [Cydh]
bool bindOnEquip; ///< Set item as bound when equipped
e_item_drop_effect dropEffect; ///< Drop Effect Mode
unsigned gradable : 1;
} flag;
struct {// item stacking limitation
uint16 amount;
bool inventory, cart, storage, guild_storage;
} stack;
struct {
uint16 override;
bool sitting;
} item_usage;
short gm_lv_trade_override; //GM-level to override trade_restriction
std::vector<std::shared_ptr<s_item_combo>> combos;
struct {
uint32 duration;
sc_type sc; ///< Use delay group if any instead using player's item_delay data [Cydh]
} delay;
~item_data() {
if (this->script){
script_free_code(this->script);
this->script = nullptr;
}
if (this->equip_script){
script_free_code(this->equip_script);
this->equip_script = nullptr;
}
if (this->unequip_script){
script_free_code(this->unequip_script);
this->unequip_script = nullptr;
}
this->combos.clear();
}
bool isStackable();
int inventorySlotNeeded(int quantity);
};
class ItemDatabase : public TypesafeCachedYamlDatabase<t_itemid, item_data> {
private:
std::unordered_map<std::string, std::shared_ptr<item_data>> nameToItemDataMap;
std::unordered_map<std::string, std::shared_ptr<item_data>> aegisNameToItemDataMap;
e_sex defaultGender( const ryml::NodeRef& node, std::shared_ptr<item_data> id );
std::string create_item_link(struct item& item, std::shared_ptr<item_data>& data);
struct s_pricevalue {
bool has_buy;
bool has_sell;
};
std::unordered_map<t_itemid, s_pricevalue> hasPriceValue;
public:
ItemDatabase() : TypesafeCachedYamlDatabase("ITEM_DB", 3, 1) {
}
const std::string getDefaultLocation() override;
uint64 parseBodyNode(const ryml::NodeRef& node) override;
void loadingFinished() override;
void clear() override{
TypesafeCachedYamlDatabase::clear();
this->nameToItemDataMap.clear();
this->aegisNameToItemDataMap.clear();
}
// Additional
std::shared_ptr<item_data> searchname( const char* name );
std::shared_ptr<item_data> search_aegisname( const char *name );
std::string create_item_link(struct item& item);
std::string create_item_link( std::shared_ptr<item_data>& data );
std::string create_item_link_for_mes( std::shared_ptr<item_data>& data, bool use_brackets, const char* name );
};
extern ItemDatabase item_db;
class ItemGroupDatabase : public TypesafeCachedYamlDatabase<uint16, s_item_group_db> {
public:
ItemGroupDatabase() : TypesafeCachedYamlDatabase("ITEM_GROUP_DB", 3, 1) {
}
const std::string getDefaultLocation() override;
uint64 parseBodyNode(const ryml::NodeRef& node) override;
void loadingFinished() override;
// Additional
bool item_exists(uint16 group_id, t_itemid nameid);
int16 item_exists_pc(map_session_data *sd, uint16 group_id);
t_itemid get_random_item_id(uint16 group_id, uint8 sub_group);
std::shared_ptr<s_item_group_entry> get_random_entry(uint16 group_id, uint8 sub_group);
uint8 pc_get_itemgroup(uint16 group_id, bool identify, map_session_data *sd);
};
extern ItemGroupDatabase itemdb_group;
struct s_laphine_synthesis_requirement{
t_itemid item_id;
uint16 amount;
};
struct s_laphine_synthesis{
t_itemid item_id;
uint16 minimumRefine;
uint16 maximumRefine;
uint16 requiredRequirements;
std::unordered_map<t_itemid, std::shared_ptr<s_laphine_synthesis_requirement>> requirements;
uint16 rewardGroupId;
};
class LaphineSynthesisDatabase : public TypesafeYamlDatabase<t_itemid, s_laphine_synthesis>{
public:
LaphineSynthesisDatabase() : TypesafeYamlDatabase( "LAPHINE_SYNTHESIS_DB", 1 ){
}
const std::string getDefaultLocation();
uint64 parseBodyNode( const ryml::NodeRef& node );
};
extern LaphineSynthesisDatabase laphine_synthesis_db;
struct s_laphine_upgrade{
t_itemid item_id;
std::vector<t_itemid> target_item_ids;
uint16 minimumRefine;
uint16 maximumRefine;
uint16 requiredRandomOptions;
bool cardsAllowed;
std::shared_ptr<s_random_opt_group> randomOptionGroup;
uint16 resultRefine;
uint16 resultRefineMinimum;
uint16 resultRefineMaximum;
};
class LaphineUpgradeDatabase : public TypesafeYamlDatabase<t_itemid, s_laphine_upgrade>{
public:
LaphineUpgradeDatabase() : TypesafeYamlDatabase( "LAPHINE_UPGRADE_DB", 1 ){
}
const std::string getDefaultLocation();
uint64 parseBodyNode( const ryml::NodeRef& node );
};
extern LaphineUpgradeDatabase laphine_upgrade_db;
struct s_item_reform_base{
t_itemid item_id;
uint16 minimumRefine;
uint16 maximumRefine;
uint16 requiredRandomOptions;
bool cardsAllowed;
std::unordered_map<t_itemid, uint16> materials;
t_itemid resultItemId;
int16 refineChange;
std::shared_ptr<s_random_opt_group> randomOptionGroup;
bool clearSlots;
bool removeEnchantgrade;
};
struct s_item_reform{
t_itemid item_id;
std::unordered_map<t_itemid, std::shared_ptr<s_item_reform_base>> base_items;
};
class ItemReformDatabase : public TypesafeYamlDatabase<t_itemid, s_item_reform>{
public:
ItemReformDatabase() : TypesafeYamlDatabase( "ITEM_REFORM_DB", 1 ){
}
const std::string getDefaultLocation();
uint64 parseBodyNode( const ryml::NodeRef& node );
};
extern ItemReformDatabase item_reform_db;
struct s_item_enchant_normal_sub{
t_itemid item_id;
uint32 chance;
};
struct s_item_enchant_normal{
uint16 enchantgrade;
std::unordered_map<t_itemid, std::shared_ptr<s_item_enchant_normal_sub>> enchants;
};
struct s_item_enchant_perfect{
t_itemid item_id;
uint32 zeny;
std::unordered_map<t_itemid, uint16> materials;
};
struct s_item_enchant_upgrade{
t_itemid enchant_item_id;
t_itemid upgrade_item_id;
uint32 zeny;
std::unordered_map<t_itemid, uint16> materials;
};
struct s_item_enchant_slot{
uint16 slot;
struct{
uint32 zeny;
std::unordered_map<t_itemid, uint16> materials;
uint32 chance;
std::unordered_map<uint16, uint32> enchantgradeChanceIncrease;
std::unordered_map<uint16, std::shared_ptr<s_item_enchant_normal>> enchants;
} normal;
struct{
std::unordered_map<t_itemid, std::shared_ptr<s_item_enchant_perfect>> enchants;
} perfect;
struct{
std::unordered_map<t_itemid, std::shared_ptr<s_item_enchant_upgrade>> enchants;
} upgrade;
};
struct s_item_enchant{
uint64 id;
std::vector<t_itemid> target_item_ids;
uint16 minimumRefine;
uint16 minimumEnchantgrade;
bool allowRandomOptions;
struct {
uint32 zeny;
std::unordered_map<t_itemid, uint16> materials;
uint32 chance;
} reset;
std::vector<uint16> order;
std::unordered_map<uint16, std::shared_ptr<s_item_enchant_slot>> slots;
};
class ItemEnchantDatabase : public TypesafeYamlDatabase<uint64, s_item_enchant>{
private:
bool parseMaterials( const ryml::NodeRef& node, std::unordered_map<t_itemid, uint16>& materials );
public:
ItemEnchantDatabase() : TypesafeYamlDatabase( "ITEM_ENCHANT_DB", 1 ){
}
const std::string getDefaultLocation();
uint64 parseBodyNode( const ryml::NodeRef& node );
};
extern ItemEnchantDatabase item_enchant_db;
struct s_item_package_item{
t_itemid item_id;
uint16 amount;
uint16 rentalhours;
uint16 refine;
std::shared_ptr<s_random_opt_group> randomOptionGroup;
};
struct s_item_package_group{
uint32 groupIndex;
std::unordered_map<t_itemid, std::shared_ptr<s_item_package_item>> items;
};
struct s_item_package{
t_itemid item_id;
std::unordered_map<uint32, std::shared_ptr<s_item_package_group>> groups;
};
class ItemPackageDatabase : public TypesafeYamlDatabase<t_itemid, s_item_package>{
public:
ItemPackageDatabase() : TypesafeYamlDatabase( "ITEM_PACKAGE_DB", 1 ){
}
const std::string getDefaultLocation();
uint64 parseBodyNode( const ryml::NodeRef& node );
};
extern ItemPackageDatabase item_package_db;
uint16 itemdb_searchname_array(std::map<t_itemid, std::shared_ptr<item_data>> &data, uint16 size, const char *str);
struct item_data* itemdb_search(t_itemid nameid);
[[deprecated("Please upgrade your code to item_db.exists() or item_db.find()! This function will be dropped soon!")]]
std::shared_ptr<item_data> itemdb_exists(t_itemid nameid);
#define itemdb_name(n) itemdb_search(n)->name.c_str()
#define itemdb_ename(n) itemdb_search(n)->ename.c_str()
#define itemdb_type(n) itemdb_search(n)->type
#define itemdb_subtype(n) itemdb_search(n)->subtype
#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)->weapon_level
#define itemdb_range(n) itemdb_search(n)->range
#define itemdb_slots(n) itemdb_search(n)->slots
#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 (e_ammo_type ammo);
#define itemdb_value_buy(n) itemdb_search(n)->value_buy
#define itemdb_value_sell(n) itemdb_search(n)->value_sell
//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));
bool itemdb_ishatched_egg(struct item* item);
#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(t_itemid 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);
bool itemdb_parse_roulette_db(void);
void itemdb_gen_itemmoveinfo();
void itemdb_reload(void);
void do_final_itemdb(void);
void do_init_itemdb(void);
#endif /* ITEMDB_HPP */