// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder #ifndef STATUS_HPP #define STATUS_HPP #include #include #include #include #include #include #include #include #include "map.hpp" #include "script.hpp" enum e_race2 : uint8; struct block_list; struct mob_data; struct pet_data; struct homun_data; struct s_mercenary_data; struct s_elemental_data; struct npc_data; class status_change; /** * Max Refine available to your server **/ #ifdef RENEWAL # define MAX_REFINE 20 #else # define MAX_REFINE 10 #endif /// Refine type enum e_refine_type : uint16{ REFINE_TYPE_ARMOR = 0, REFINE_TYPE_WEAPON, REFINE_TYPE_SHADOW_ARMOR, REFINE_TYPE_SHADOW_WEAPON, REFINE_TYPE_MAX }; /// Refine cost type enum e_refine_cost_type : uint16{ REFINE_COST_NORMAL = 0, REFINE_COST_HD, REFINE_COST_ENRICHED, REFINE_COST_MAX }; /// Refine script parameters enum e_refine_parameter{ REFINE_MATERIAL_ID = 0, REFINE_ZENY_COST }; struct s_refine_cost{ uint16 index; t_itemid nameid; uint16 chance; uint32 zeny; uint16 breaking_rate; uint16 downgrade_amount; }; struct s_refine_level_info{ uint16 level; uint32 bonus; uint32 randombonus_max; uint16 blessing_amount; bool broadcast_success; bool broadcast_failure; std::unordered_map> costs; }; struct s_refine_levels_info{ uint16 level; std::unordered_map> levels; }; struct s_refine_info{ uint16 groupId; std::unordered_map> levels; }; class RefineDatabase : public TypesafeYamlDatabase{ private: bool calculate_refine_info( const struct item_data& data, e_refine_type& refine_type, uint16& level ); std::shared_ptr findLevelInfoSub( const struct item_data& data, struct item& item, uint16 refine ); public: RefineDatabase() : TypesafeYamlDatabase( "REFINE_DB", 2, 1 ){ } const std::string getDefaultLocation() override; uint64 parseBodyNode( const ryml::NodeRef& node ) override; // Additional std::shared_ptr findLevelInfo( const struct item_data& data, struct item& item ); std::shared_ptr findCurrentLevelInfo( const struct item_data& data, struct item& item ); }; extern RefineDatabase refine_db; /// Weapon attack modification for size struct s_sizefix_db { uint16 small, medium, large; }; class SizeFixDatabase : public TypesafeYamlDatabase { public: SizeFixDatabase() : TypesafeYamlDatabase("SIZE_FIX_DB", 1) { } const std::string getDefaultLocation() override; uint64 parseBodyNode(const ryml::NodeRef& node) override; }; extern SizeFixDatabase size_fix_db; class AttributeDatabase : public YamlDatabase { private: int16 attr_fix_table[MAX_ELE_LEVEL][ELE_MAX][ELE_MAX]; public: AttributeDatabase() : YamlDatabase("ATTRIBUTE_DB", 1) { this->clear(); } void clear() override{ std::fill_n(&attr_fix_table[0][0][0], MAX_ELE_LEVEL * ELE_MAX * ELE_MAX, 100); } const std::string getDefaultLocation() override; uint64 parseBodyNode(const ryml::NodeRef& node) override; // Additional int16 getAttribute(uint16 level, uint16 atk_ele, uint16 def_ele); }; extern AttributeDatabase elemental_attribute_db; enum e_enchantgrade_result{ ENCHANTGRADE_UPGRADE_SUCCESS, ENCHANTGRADE_UPGRADE_FAILED, ENCHANTGRADE_UPGRADE_DOWNGRADE, ENCHANTGRADE_UPGRADE_BREAK, ENCHANTGRADE_UPGRADE_PROTECTED, }; struct s_enchantgradeoption{ uint16 id; t_itemid item; uint16 amount; uint32 zeny; uint16 breaking_rate; uint16 downgrade_amount; }; struct s_enchantgradelevel{ e_enchantgrade grade; uint16 chances[MAX_REFINE + 1]; uint16 bonus; bool announceSuccess; bool announceFail; struct{ t_itemid item; uint16 amountPerStep; uint16 maximumSteps; uint16 chanceIncrease; }catalyst; std::map> options; }; struct s_enchantgrade{ uint16 itemtype; std::map>> levels; }; class EnchantgradeDatabase : public TypesafeYamlDatabase{ public: EnchantgradeDatabase() : TypesafeYamlDatabase( "ENCHANTGRADE_DB", 3 ){ } const std::string getDefaultLocation() override; uint64 parseBodyNode( const ryml::NodeRef& node ) override; void loadingFinished() override; // Additional std::shared_ptr findCurrentLevelInfo( const struct item_data& data, struct item& item ); }; extern EnchantgradeDatabase enchantgrade_db; /// Status changes listing. These code are for use by the server. enum sc_type : int16 { SC_NONE = -1, //First we enumerate common status ailments which are often used around. SC_STONE = 0, SC_COMMON_MIN = SC_STONE, // begin SC_FREEZE, SC_STUN, SC_SLEEP, SC_POISON, SC_CURSE, SC_SILENCE, SC_CONFUSION, SC_BLIND, SC_BLEEDING, SC_DPOISON, //10 SC_STONEWAIT, SC_COMMON_MAX = SC_STONEWAIT, // end //Next up, we continue on 20, to leave enough room for additional "common" ailments in the future. SC_PROVOKE = 20, SC_ENDURE, SC_TWOHANDQUICKEN, SC_CONCENTRATE, SC_HIDING, SC_CLOAKING, SC_ENCPOISON, SC_POISONREACT, SC_QUAGMIRE, SC_ANGELUS, SC_BLESSING, //30 SC_SIGNUMCRUCIS, SC_INCREASEAGI, SC_DECREASEAGI, SC_SLOWPOISON, SC_IMPOSITIO , SC_SUFFRAGIUM, SC_ASPERSIO, SC_BENEDICTIO, SC_KYRIE, SC_MAGNIFICAT, //40 SC_GLORIA, SC_AETERNA, SC_ADRENALINE, SC_WEAPONPERFECTION, SC_OVERTHRUST, SC_MAXIMIZEPOWER, SC_TRICKDEAD, SC_LOUD, SC_ENERGYCOAT, SC_BROKENARMOR, //50 - NOTE: These two aren't used anywhere, and they have an icon... SC_BROKENWEAPON, SC_HALLUCINATION, SC_WEIGHT50, SC_WEIGHT90, SC_ASPDPOTION0, SC_ASPDPOTION1, SC_ASPDPOTION2, SC_ASPDPOTION3, SC_SPEEDUP0, SC_SPEEDUP1, //60 SC_ATKPOTION, SC_MATKPOTION, SC_WEDDING, SC_SLOWDOWN, SC_ANKLE, SC_KEEPING, SC_BARRIER, SC_STRIPWEAPON, SC_STRIPSHIELD, SC_STRIPARMOR, //70 SC_STRIPHELM, SC_CP_WEAPON, SC_CP_SHIELD, SC_CP_ARMOR, SC_CP_HELM, SC_AUTOGUARD, SC_REFLECTSHIELD, SC_SPLASHER, SC_PROVIDENCE, SC_DEFENDER, //80 SC_MAGICROD, SC_SPELLBREAKER, SC_AUTOSPELL, SC_SIGHTTRASHER, SC_AUTOBERSERK, SC_SPEARQUICKEN, SC_AUTOCOUNTER, SC_SIGHT, SC_SAFETYWALL, SC_RUWACH, //90 SC_EXTREMITYFIST, SC_EXPLOSIONSPIRITS, SC_COMBO, SC_BLADESTOP_WAIT, SC_BLADESTOP, SC_FIREWEAPON, SC_WATERWEAPON, SC_WINDWEAPON, SC_EARTHWEAPON, SC_VOLCANO, //100, SC_DELUGE, SC_VIOLENTGALE, SC_WATK_ELEMENT, SC_ARMOR, SC_ARMOR_ELEMENT_WATER, SC_NOCHAT, SC_PROTECTEXP, SC_AURABLADE, SC_PARRYING, SC_CONCENTRATION, //110 SC_TENSIONRELAX, SC_BERSERK, SC_FURY, SC_GOSPEL, SC_ASSUMPTIO, SC_BASILICA, SC_GUILDAURA, SC_MAGICPOWER, SC_EDP, SC_TRUESIGHT, //120 SC_WINDWALK, SC_MELTDOWN, SC_CARTBOOST, SC_CHASEWALK, SC_REJECTSWORD, SC_MARIONETTE, SC_MARIONETTE2, SC_CHANGEUNDEAD, SC_JOINTBEAT, SC_MINDBREAKER, //130 SC_MEMORIZE, SC_FOGWALL, SC_SPIDERWEB, SC_DEVOTION, SC_SACRIFICE, SC_STEELBODY, SC_ORCISH, SC_READYSTORM, SC_READYDOWN, SC_READYTURN, //140 SC_READYCOUNTER, SC_DODGE, SC_RUN, SC_SHADOWWEAPON, SC_ADRENALINE2, SC_GHOSTWEAPON, SC_KAIZEL, SC_KAAHI, SC_KAUPE, SC_ONEHAND, //150 SC_PRESERVE, SC_BATTLEORDERS, SC_REGENERATION, SC_DOUBLECAST, SC_GRAVITATION, SC_MAXOVERTHRUST, SC_LONGING, SC_HERMODE, SC_SHRINK, SC_SIGHTBLASTER, //160 SC_WINKCHARM, SC_CLOSECONFINE, SC_CLOSECONFINE2, SC_DANCING, SC_ELEMENTALCHANGE, SC_RICHMANKIM, SC_ETERNALCHAOS, SC_DRUMBATTLE, SC_NIBELUNGEN, SC_ROKISWEIL, //170 SC_INTOABYSS, SC_SIEGFRIED, SC_WHISTLE, SC_ASSNCROS, SC_POEMBRAGI, SC_APPLEIDUN, SC_MODECHANGE, SC_HUMMING, SC_DONTFORGETME, SC_FORTUNE, //180 SC_SERVICE4U, SC_STOP, //Prevents inflicted chars from walking. [Skotlex] SC_SPURT, SC_SPIRIT, SC_COMA, //Not a real SC_, it makes a char's HP/SP hit 1. SC_INTRAVISION, SC_INCALLSTATUS, SC_INCSTR, SC_INCAGI, SC_INCVIT, //190 SC_INCINT, SC_INCDEX, SC_INCLUK, SC_INCHIT, SC_INCHITRATE, SC_INCFLEE, SC_INCFLEERATE, SC_INCMHPRATE, SC_INCMSPRATE, SC_INCATKRATE, //200 SC_INCMATKRATE, SC_INCDEFRATE, SC_STRFOOD, SC_AGIFOOD, SC_VITFOOD, SC_INTFOOD, SC_DEXFOOD, SC_LUKFOOD, SC_HITFOOD, SC_FLEEFOOD, //210 SC_BATKFOOD, SC_WATKFOOD, SC_MATKFOOD, SC_SCRESIST, //Increases resistance to status changes. SC_XMAS, // Xmas Suit [Valaris] SC_WARM, //SG skills [Komurka] SC_SUN_COMFORT, SC_MOON_COMFORT, SC_STAR_COMFORT, SC_FUSION, //220 SC_SKILLRATE_UP, SC_SKE, SC_KAITE, SC_SWOO, // [marquis007] SC_SKA, // [marquis007] SC_EARTHSCROLL, SC_MIRACLE, //SG 'hidden' skill [Komurka] SC_MADNESSCANCEL, SC_ADJUSTMENT, SC_INCREASING, //230 SC_GATLINGFEVER, SC_TATAMIGAESHI, SC_UTSUSEMI, SC_BUNSINJYUTSU, SC_KAENSIN, SC_SUITON, SC_NEN, SC_KNOWLEDGE, SC_SMA, SC_FLING, //240 SC_AVOID, SC_CHANGE, SC_BLOODLUST, SC_FLEET, SC_SPEED, SC_DEFENCE, SC_INCASPDRATE, SC_INCFLEE2 = 248, SC_JAILED, SC_ENCHANTARMS, //250 SC_MAGICALATTACK, SC_ARMORCHANGE, SC_CRITICALWOUND, SC_MAGICMIRROR, SC_SLOWCAST, SC_SUMMER, SC_EXPBOOST, SC_ITEMBOOST, SC_BOSSMAPINFO, SC_LIFEINSURANCE, //260 SC_INCCRI, //SC_INCDEF, //SC_INCBASEATK = 263, //SC_FASTCAST, SC_MDEF_RATE = 265, //SC_HPREGEN, SC_INCHEALRATE = 267, SC_PNEUMA, SC_AUTOTRADE, SC_KSPROTECTED, //270 SC_ARMOR_RESIST = 271, SC_SPCOST_RATE, SC_COMMONSC_RESIST, SC_SEVENWIND, SC_DEF_RATE, //SC_SPREGEN, SC_WALKSPEED = 277, // Mercenary Only Bonus Effects SC_MERC_FLEEUP, SC_MERC_ATKUP, SC_MERC_HPUP, //280 SC_MERC_SPUP, SC_MERC_HITUP, SC_MERC_QUICKEN, SC_REBIRTH, //SC_SKILLCASTRATE, //285 //SC_DEFRATIOATK, //SC_HPDRAIN, //SC_SKILLATKBONUS, SC_ITEMSCRIPT = 289, SC_S_LIFEPOTION, //290 SC_L_LIFEPOTION, SC_JEXPBOOST, //SC_IGNOREDEF, SC_HELLPOWER = 294, SC_INVINCIBLE, //295 //SC_INVINCIBLEOFF, SC_MANU_ATK = 297, SC_MANU_DEF, SC_SPL_ATK, SC_SPL_DEF, //300 SC_MANU_MATK, SC_SPL_MATK, SC_FOOD_STR_CASH, SC_FOOD_AGI_CASH, SC_FOOD_VIT_CASH, SC_FOOD_DEX_CASH, SC_FOOD_INT_CASH, SC_FOOD_LUK_CASH,//308 /** * 3rd **/ SC_FEAR,//309 SC_BURNING,//310 SC_FREEZING,//311 /** * Rune Knight **/ SC_ENCHANTBLADE,//312 SC_DEATHBOUND,//313 SC_MILLENNIUMSHIELD, SC_CRUSHSTRIKE,//315 SC_REFRESH, SC_REUSE_REFRESH, SC_GIANTGROWTH, SC_STONEHARDSKIN, SC_VITALITYACTIVATION,//320 SC_STORMBLAST, SC_FIGHTINGSPIRIT, SC_ABUNDANCE, /** * Arch Bishop **/ SC_ADORAMUS, SC_EPICLESIS,//325 SC_ORATIO, SC_LAUDAAGNUS, SC_LAUDARAMUS, SC_RENOVATIO, SC_EXPIATIO,//330 SC_DUPLELIGHT, SC_SECRAMENT, /** * Warlock **/ SC_WHITEIMPRISON, SC_MARSHOFABYSS, SC_RECOGNIZEDSPELL,//335 SC_STASIS, SC_SPHERE_1, SC_SPHERE_2, SC_SPHERE_3, SC_SPHERE_4,//340 SC_SPHERE_5, SC_READING_SB, SC_FREEZE_SP, /** * Ranger **/ SC_FEARBREEZE, SC_ELECTRICSHOCKER,//345 SC_WUGDASH, SC_BITE, SC_CAMOUFLAGE, /** * Mechanic **/ SC_ACCELERATION, SC_HOVERING,//350 SC_SHAPESHIFT, SC_INFRAREDSCAN, SC_ANALYZE, SC_MAGNETICFIELD, SC_NEUTRALBARRIER,//355 SC_NEUTRALBARRIER_MASTER, SC_STEALTHFIELD, SC_STEALTHFIELD_MASTER, SC_OVERHEAT, SC_OVERHEAT_LIMITPOINT,//360 /** * Guillotine Cross **/ SC_VENOMIMPRESS, SC_POISONINGWEAPON, SC_WEAPONBLOCKING, SC_CLOAKINGEXCEED, SC_HALLUCINATIONWALK,//365 SC_HALLUCINATIONWALK_POSTDELAY, SC_ROLLINGCUTTER, SC_TOXIN, SC_PARALYSE, SC_VENOMBLEED,//370 SC_MAGICMUSHROOM, SC_DEATHHURT, SC_PYREXIA, SC_OBLIVIONCURSE, SC_LEECHESEND,//375 /** * Royal Guard **/ SC_REFLECTDAMAGE, SC_FORCEOFVANGUARD, SC_SHIELDSPELL_HP, SC_SHIELDSPELL_SP, SC_SHIELDSPELL_ATK,//380 SC_EXEEDBREAK, SC_PRESTIGE, SC_BANDING, SC_BANDING_DEFENCE, SC_EARTHDRIVE,//385 SC_INSPIRATION, /** * Sorcerer **/ SC_SPELLFIST, SC_CRYSTALIZE, SC_STRIKING, SC_WARMER,//390 SC_VACUUM_EXTREME, SC_PROPERTYWALK, /** * Minstrel / Wanderer **/ SC_SWINGDANCE, SC_SYMPHONYOFLOVER, SC_MOONLITSERENADE,//395 SC_RUSHWINDMILL, SC_ECHOSONG, SC_HARMONIZE, SC_VOICEOFSIREN, SC_DEEPSLEEP,//400 SC_SIRCLEOFNATURE, SC_GLOOMYDAY, SC_GLOOMYDAY_SK, SC_SONGOFMANA, SC_DANCEWITHWUG,//405 SC_SATURDAYNIGHTFEVER, SC_LERADSDEW, SC_MELODYOFSINK, SC_BEYONDOFWARCRY, SC_UNLIMITEDHUMMINGVOICE,//410 SC_SITDOWN_FORCE, SC_NETHERWORLD, /** * Sura **/ SC_CRESCENTELBOW, SC_CURSEDCIRCLE_ATKER, SC_CURSEDCIRCLE_TARGET, SC_LIGHTNINGWALK,//416 SC_RAISINGDRAGON, SC_GT_ENERGYGAIN, SC_GT_CHANGE, SC_GT_REVITALIZE, /** * Genetic **/ SC_GN_CARTBOOST,//421 SC_THORNSTRAP, SC_BLOODSUCKER, SC_SMOKEPOWDER, SC_TEARGAS, SC_MANDRAGORA,//426 SC_STOMACHACHE, SC_MYSTERIOUS_POWDER, SC_MELON_BOMB, SC_BANANA_BOMB, SC_BANANA_BOMB_SITDOWN,//431 SC_SAVAGE_STEAK, SC_COCKTAIL_WARG_BLOOD, SC_MINOR_BBQ, SC_SIROMA_ICE_TEA, SC_DROCERA_HERB_STEAMED,//436 SC_PUTTI_TAILS_NOODLES, SC_BOOST500, SC_FULL_SWING_K, SC_MANA_PLUS, SC_MUSTLE_M,//441 SC_LIFE_FORCE_F, SC_EXTRACT_WHITE_POTION_Z, SC_VITATA_500, SC_EXTRACT_SALAMINE_JUICE, /** * Shadow Chaser **/ SC__REPRODUCE,//446 SC__AUTOSHADOWSPELL, SC__SHADOWFORM, SC__BODYPAINT, SC__INVISIBILITY, SC__DEADLYINFECT,//451 SC__ENERVATION, SC__GROOMY, SC__IGNORANCE, SC__LAZINESS, SC__UNLUCKY,//456 SC__WEAKNESS, SC__STRIPACCESSORY, SC__MANHOLE, SC__BLOODYLUST,//460 /** * Elemental Spirits **/ SC_CIRCLE_OF_FIRE, SC_CIRCLE_OF_FIRE_OPTION, SC_FIRE_CLOAK, SC_FIRE_CLOAK_OPTION, SC_WATER_SCREEN,//465 SC_WATER_SCREEN_OPTION, SC_WATER_DROP, SC_WATER_DROP_OPTION, SC_WATER_BARRIER, SC_WIND_STEP,//470 SC_WIND_STEP_OPTION, SC_WIND_CURTAIN, SC_WIND_CURTAIN_OPTION, SC_ZEPHYR, SC_SOLID_SKIN,//475 SC_SOLID_SKIN_OPTION, SC_STONE_SHIELD, SC_STONE_SHIELD_OPTION, SC_POWER_OF_GAIA, SC_PYROTECHNIC,//480 SC_PYROTECHNIC_OPTION, SC_HEATER, SC_HEATER_OPTION, SC_TROPIC, SC_TROPIC_OPTION,//485 SC_AQUAPLAY, SC_AQUAPLAY_OPTION, SC_COOLER, SC_COOLER_OPTION, SC_CHILLY_AIR,//490 SC_CHILLY_AIR_OPTION, SC_GUST, SC_GUST_OPTION, SC_BLAST, SC_BLAST_OPTION,//495 SC_WILD_STORM, SC_WILD_STORM_OPTION, SC_PETROLOGY, SC_PETROLOGY_OPTION, SC_CURSED_SOIL,//500 SC_CURSED_SOIL_OPTION, SC_UPHEAVAL, SC_UPHEAVAL_OPTION, SC_TIDAL_WEAPON, SC_TIDAL_WEAPON_OPTION,//505 SC_ROCK_CRUSHER, SC_ROCK_CRUSHER_ATK, /* Guild Aura */ SC_LEADERSHIP, SC_GLORYWOUNDS, SC_SOULCOLD, SC_HAWKEYES, /* ... */ SC_ODINS_POWER, SC_RAID, /* Sorcerer .extra */ SC_FIRE_INSIGNIA, SC_WATER_INSIGNIA, SC_WIND_INSIGNIA, //516 SC_EARTH_INSIGNIA, /* new pushcart */ SC_PUSH_CART, /* Warlock Spell books */ SC_SPELLBOOK1, SC_SPELLBOOK2, SC_SPELLBOOK3, SC_SPELLBOOK4, SC_SPELLBOOK5, SC_SPELLBOOK6, SC_MAXSPELLBOOK, // SC_SPELLBOOK7 /* Max HP & SP */ SC_INCMHP, SC_INCMSP, SC_PARTYFLEE, /** * Kagerou & Oboro [malufett] **/ SC_MEIKYOUSISUI, SC_JYUMONJIKIRI, SC_KYOUGAKU, SC_IZAYOI, SC_ZENKAI, SC_KAGEHUMI, SC_KYOMU, SC_KAGEMUSYA, SC_ZANGETSU, SC_GENSOU, SC_AKAITSUKI, //homon S SC_STYLE_CHANGE, SC_TINDER_BREAKER, SC_TINDER_BREAKER2, SC_CBC, SC_EQC, SC_GOLDENE_FERSE, SC_ANGRIFFS_MODUS, SC_OVERED_BOOST, SC_LIGHT_OF_REGENE, SC_ASH, SC_GRANITIC_ARMOR, SC_MAGMA_FLOW, SC_PYROCLASTIC, SC_PARALYSIS, SC_PAIN_KILLER, SC_HANBOK, //Vellum Weapon reductions SC_DEFSET, SC_MDEFSET, SC_DARKCROW, SC_FULL_THROTTLE, SC_REBOUND, SC_UNLIMIT, SC_KINGS_GRACE, SC_TELEKINESIS_INTENSE, SC_OFFERTORIUM, SC_FRIGG_SONG, SC_MONSTER_TRANSFORM, SC_ANGEL_PROTECT, SC_ILLUSIONDOPING, SC_FLASHCOMBO, SC_MOONSTAR, SC_SUPER_STAR, /** * Rebellion [Cydh] **/ SC_HEAT_BARREL, SC_MAGICALBULLET, SC_P_ALTER, SC_E_CHAIN, SC_C_MARKER, SC_ANTI_M_BLAST, SC_B_TRAP, SC_H_MINE, SC_QD_SHOT_READY, SC_MTF_ASPD, SC_MTF_RANGEATK, SC_MTF_MATK, SC_MTF_MLEATKED, SC_MTF_CRIDAMAGE, SC_OKTOBERFEST, SC_STRANGELIGHTS, SC_DECORATION_OF_MUSIC, SC_QUEST_BUFF1, SC_QUEST_BUFF2, SC_QUEST_BUFF3, SC_ALL_RIDING, SC_TEARGAS_SOB, SC__FEINTBOMB, SC__CHAOS, SC_CHASEWALK2, SC_VACUUM_EXTREME_POSTDELAY, SC_MTF_ASPD2, SC_MTF_RANGEATK2, SC_MTF_MATK2, SC_2011RWC_SCROLL, SC_JP_EVENT04, // 2014 Halloween Event SC_MTF_MHP, SC_MTF_MSP, SC_MTF_PUMPKIN, SC_MTF_HITFLEE, SC_CRIFOOD, SC_ATTHASTE_CASH, // Item Reuse Limits SC_REUSE_LIMIT_A, SC_REUSE_LIMIT_B, SC_REUSE_LIMIT_C, SC_REUSE_LIMIT_D, SC_REUSE_LIMIT_E, SC_REUSE_LIMIT_F, SC_REUSE_LIMIT_G, SC_REUSE_LIMIT_H, SC_REUSE_LIMIT_MTF, SC_REUSE_LIMIT_ASPD_POTION, SC_REUSE_MILLENNIUMSHIELD, SC_REUSE_CRUSHSTRIKE, SC_REUSE_STORMBLAST, SC_ALL_RIDING_REUSE_LIMIT, SC_REUSE_LIMIT_ECL, SC_REUSE_LIMIT_RECALL, SC_PROMOTE_HEALTH_RESERCH, SC_ENERGY_DRINK_RESERCH, SC_NORECOVER_STATE, /** * Summoner */ SC_SUHIDE, SC_SU_STOOP, SC_SPRITEMABLE, SC_CATNIPPOWDER, SC_SV_ROOTTWIST, SC_BITESCAR, SC_ARCLOUSEDASH, SC_TUNAPARTY, SC_SHRIMP, SC_FRESHSHRIMP, SC_ACTIVE_MONSTER_TRANSFORM, SC_CLOUD_KILL, // Deprecated SC_LJOSALFAR, SC_MERMAID_LONGING, SC_HAT_EFFECT, SC_FLOWERSMOKE, SC_FSTONE, SC_HAPPINESS_STAR, SC_MAPLE_FALLS, SC_TIME_ACCESSORY, SC_MAGICAL_FEATHER, SC_GVG_GIANT, SC_GVG_GOLEM, SC_GVG_STUN, SC_GVG_STONE, SC_GVG_FREEZ, SC_GVG_SLEEP, SC_GVG_CURSE, SC_GVG_SILENCE, SC_GVG_BLIND, SC_CLAN_INFO, SC_SWORDCLAN, SC_ARCWANDCLAN, SC_GOLDENMACECLAN, SC_CROSSBOWCLAN, SC_JUMPINGCLAN, SC_TAROTCARD, // Geffen Magic Tournament Buffs SC_GEFFEN_MAGIC1, SC_GEFFEN_MAGIC2, SC_GEFFEN_MAGIC3, SC_MAXPAIN, SC_ARMOR_ELEMENT_EARTH, SC_ARMOR_ELEMENT_FIRE, SC_ARMOR_ELEMENT_WIND, SC_DAILYSENDMAILCNT, SC_DORAM_BUF_01, SC_DORAM_BUF_02, /** * Summoner - Extended */ SC_HISS, SC_NYANGGRASS, SC_GROOMING, SC_SHRIMPBLESSING, SC_CHATTERING, SC_DORAM_WALKSPEED, SC_DORAM_MATK, SC_DORAM_FLEE2, SC_DORAM_SVSP, SC_FALLEN_ANGEL, SC_CHEERUP, SC_DRESSUP, // Old Glast Heim Buffs SC_GLASTHEIM_ATK, SC_GLASTHEIM_DEF, SC_GLASTHEIM_HEAL, SC_GLASTHEIM_HIDDEN, SC_GLASTHEIM_STATE, SC_GLASTHEIM_ITEMDEF, SC_GLASTHEIM_HPSP, // Nightmare Biolab Buffs SC_LHZ_DUN_N1, SC_LHZ_DUN_N2, SC_LHZ_DUN_N3, SC_LHZ_DUN_N4, SC_ANCILLA, SC_EARTHSHAKER, SC_WEAPONBLOCK_ON, SC_SPORE_EXPLOSION, SC_ADAPTATION, SC_BASILICA_CELL, // Used in renewal mode for cell_basilica only SC_ENTRY_QUEUE_APPLY_DELAY, SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT, // Star Emperor SC_LIGHTOFMOON, SC_LIGHTOFSUN, SC_LIGHTOFSTAR, SC_LUNARSTANCE, SC_UNIVERSESTANCE, SC_SUNSTANCE, SC_FLASHKICK, SC_NEWMOON, SC_STARSTANCE, SC_DIMENSION, SC_DIMENSION1, SC_DIMENSION2, SC_CREATINGSTAR, SC_FALLINGSTAR, SC_NOVAEXPLOSING, SC_GRAVITYCONTROL, // Soul Reaper SC_SOULCOLLECT, SC_SOULREAPER, SC_SOULUNITY, SC_SOULSHADOW, SC_SOULFAIRY, SC_SOULFALCON, SC_SOULGOLEM, SC_SOULDIVISION, SC_SOULENERGY, SC_USE_SKILL_SP_SPA, SC_USE_SKILL_SP_SHA, SC_SP_SHA, SC_SOULCURSE, SC_HELLS_PLANT, SC_INCREASE_MAXHP, // EFST_ATKER_ASPD SC_INCREASE_MAXSP, // EFST_ATKER_MOVESPEED SC_REF_T_POTION, SC_ADD_ATK_DAMAGE, SC_ADD_MATK_DAMAGE, SC_HELPANGEL, SC_SOUNDOFDESTRUCTION, SC_LUXANIMA, SC_REUSE_LIMIT_LUXANIMA, SC_ENSEMBLEFATIGUE, SC_MISTY_FROST, SC_MAGIC_POISON, // ep16.2 SC_EP16_2_BUFF_SS, SC_EP16_2_BUFF_SC, SC_EP16_2_BUFF_AC, // Job Improvement Bundle SC_OVERBRANDREADY, SC_POISON_MIST, SC_STONE_WALL, SC_CLOUD_POISON, SC_HOMUN_TIME, SC_EMERGENCY_MOVE, SC_MADOGEAR, SC_NPC_HALLUCINATIONWALK, SC_PACKING_ENVELOPE1, SC_PACKING_ENVELOPE2, SC_PACKING_ENVELOPE3, SC_PACKING_ENVELOPE4, SC_PACKING_ENVELOPE5, SC_PACKING_ENVELOPE6, SC_PACKING_ENVELOPE7, SC_PACKING_ENVELOPE8, SC_PACKING_ENVELOPE9, SC_PACKING_ENVELOPE10, SC_SOULATTACK, SC_WIDEWEB, SC_BURNT, SC_CHILL, // 4th Job Common Status SC_HANDICAPSTATE_DEEPBLIND, SC_HANDICAPSTATE_DEEPSILENCE, SC_HANDICAPSTATE_LASSITUDE, SC_HANDICAPSTATE_FROSTBITE, SC_HANDICAPSTATE_SWOONING, SC_HANDICAPSTATE_LIGHTNINGSTRIKE, SC_HANDICAPSTATE_CRYSTALLIZATION, SC_HANDICAPSTATE_CONFLAGRATION, SC_HANDICAPSTATE_MISFORTUNE, SC_HANDICAPSTATE_DEADLYPOISON, SC_HANDICAPSTATE_DEPRESSION, SC_HANDICAPSTATE_HOLYFLAME, // Dragon Knight SC_SERVANTWEAPON, SC_SERVANT_SIGN, SC_CHARGINGPIERCE, SC_CHARGINGPIERCE_COUNT, SC_DRAGONIC_AURA, SC_VIGOR, // Arch Mage SC_DEADLY_DEFEASANCE, SC_CLIMAX_DES_HU, SC_CLIMAX, SC_CLIMAX_EARTH, SC_CLIMAX_BLOOM, SC_CLIMAX_CRYIMP, // Windhawk SC_WINDSIGN, SC_CRESCIVEBOLT, SC_CALAMITYGALE, // Cardinal SC_MEDIALE, SC_A_VITA, SC_A_TELUM, SC_PRE_ACIES, SC_COMPETENTIA, SC_RELIGIO, SC_BENEDICTUM, // Meister SC_AXE_STOMP, SC_A_MACHINE, SC_D_MACHINE, SC_ABR_BATTLE_WARIOR, SC_ABR_DUAL_CANNON, SC_ABR_MOTHER_NET, SC_ABR_INFINITY, // Shadow Cross SC_SHADOW_EXCEED, SC_DANCING_KNIFE, SC_POTENT_VENOM, SC_SHADOW_SCAR, SC_E_SLASH_COUNT, SC_SHADOW_WEAPON, // Imperial Guard SC_GUARD_STANCE, SC_ATTACK_STANCE, SC_GUARDIAN_S, SC_REBOUND_S, SC_HOLY_S, SC_ULTIMATE_S, SC_SPEAR_SCAR, SC_SHIELD_POWER, // Elemental Master SC_SPELL_ENCHANTING, SC_SUMMON_ELEMENTAL_ARDOR, SC_SUMMON_ELEMENTAL_DILUVIO, SC_SUMMON_ELEMENTAL_PROCELLA, SC_SUMMON_ELEMENTAL_TERREMOTUS, SC_SUMMON_ELEMENTAL_SERPENS, SC_ELEMENTAL_VEIL, // Troubadour/Trouvere SC_MYSTIC_SYMPHONY, SC_KVASIR_SONATA, SC_SOUNDBLEND, SC_GEF_NOCTURN, SC_AIN_RHAPSODY, SC_MUSICAL_INTERLUDE, SC_JAWAII_SERENADE, SC_PRON_MARCH, SC_ROSEBLOSSOM, // Inquisitor SC_POWERFUL_FAITH, SC_SINCERE_FAITH, SC_FIRM_FAITH, SC_HOLY_OIL, SC_FIRST_BRAND, SC_SECOND_BRAND, SC_SECOND_JUDGE, SC_THIRD_EXOR_FLAME, SC_FIRST_FAITH_POWER, SC_MASSIVE_F_BLASTER, // Biolo SC_PROTECTSHADOWEQUIP, SC_RESEARCHREPORT, SC_BO_HELL_DUSTY, SC_BIONIC_WOODENWARRIOR, SC_BIONIC_WOODEN_FAIRY, SC_BIONIC_CREEPER, SC_BIONIC_HELLTREE, // Abyss Chaser SC_SHADOW_STRIP, SC_ABYSS_DAGGER, SC_ABYSSFORCEWEAPON, SC_ABYSS_SLAYER, // Super Elementals SC_FLAMETECHNIC, SC_FLAMETECHNIC_OPTION, SC_FLAMEARMOR, SC_FLAMEARMOR_OPTION, SC_COLD_FORCE, SC_COLD_FORCE_OPTION, SC_CRYSTAL_ARMOR, SC_CRYSTAL_ARMOR_OPTION, SC_GRACE_BREEZE, SC_GRACE_BREEZE_OPTION, SC_EYES_OF_STORM, SC_EYES_OF_STORM_OPTION, SC_EARTH_CARE, SC_EARTH_CARE_OPTION, SC_STRONG_PROTECTION, SC_STRONG_PROTECTION_OPTION, SC_DEEP_POISONING, SC_DEEP_POISONING_OPTION, SC_POISON_SHIELD, SC_POISON_SHIELD_OPTION, SC_SUB_WEAPONPROPERTY, SC_M_LIFEPOTION, SC_S_MANAPOTION, SC_ALMIGHTY, SC_ULTIMATECOOK, SC_M_DEFSCROLL, SC_INFINITY_DRINK, SC_MENTAL_POTION, SC_LIMIT_POWER_BOOSTER, SC_COMBAT_PILL, SC_COMBAT_PILL2, SC_MYSTICPOWDER, SC_SPARKCANDY, SC_MAGICCANDY, SC_ACARAJE, SC_POPECOOKIE, SC_VITALIZE_POTION, SC_CUP_OF_BOZA, SC_SKF_MATK, SC_SKF_ATK, SC_SKF_ASPD, SC_SKF_CAST, SC_BEEF_RIB_STEW, SC_PORK_RIB_STEW, SC_WEAPONBREAKER, // 2021 Mutated Homunculus Skills SC_TOXIN_OF_MANDARA, SC_GOLDENE_TONE, SC_TEMPERING, SC_GRADUAL_GRAVITY, SC_ALL_STAT_DOWN, SC_KILLING_AURA, SC_DAMAGE_HEAL, SC_IMMUNE_PROPERTY_NOTHING, SC_IMMUNE_PROPERTY_WATER, SC_IMMUNE_PROPERTY_GROUND, SC_IMMUNE_PROPERTY_FIRE, SC_IMMUNE_PROPERTY_WIND, SC_IMMUNE_PROPERTY_POISON, SC_IMMUNE_PROPERTY_SAINT, SC_IMMUNE_PROPERTY_DARKNESS, SC_IMMUNE_PROPERTY_TELEKINESIS, SC_IMMUNE_PROPERTY_UNDEAD, SC_RELIEVE_ON, SC_RELIEVE_OFF, SC_RUSH_QUAKE1, SC_RUSH_QUAKE2, SC_G_LIFEPOTION, // Hyper Novice SC_HNNOWEAPON, SC_SHIELDCHAINRUSH, SC_MISTYFROST, SC_GROUNDGRAVITY, SC_BREAKINGLIMIT, SC_RULEBREAK, // Night Watch SC_INTENSIVE_AIM, SC_INTENSIVE_AIM_COUNT, SC_GRENADE_FRAGMENT_1, SC_GRENADE_FRAGMENT_2, SC_GRENADE_FRAGMENT_3, SC_GRENADE_FRAGMENT_4, SC_GRENADE_FRAGMENT_5, SC_GRENADE_FRAGMENT_6, SC_AUTO_FIRING_LAUNCHER, SC_HIDDEN_CARD, SC_PERIOD_RECEIVEITEM_2ND, SC_PERIOD_PLUSEXP_2ND, //SC_EXTREMITYFIST2, SC_POWERUP = 951, SC_AGIUP, SC_PROTECTION, SC_BATH_FOAM_A, SC_BATH_FOAM_B, SC_BATH_FOAM_C, SC_BUCHEDENOEL, SC_EP16_DEF, SC_STR_SCROLL, SC_INT_SCROLL, SC_CONTENTS_1, SC_CONTENTS_2, SC_CONTENTS_3, SC_CONTENTS_4, SC_CONTENTS_5, SC_CONTENTS_6, SC_CONTENTS_7, SC_CONTENTS_8, SC_CONTENTS_9, SC_CONTENTS_10, SC_MAX, //Automatically updated max, used in for's to check we are within bounds. }; /// Official status change ids, used to display status icons on the client. enum efst_type : short{ /// Do not modify code below this, until the end of the API hook, since it will be automatically generated again /// @APIHOOK_START(EFST_ENUM) EFST_BLANK = -1, EFST_PROVOKE, EFST_ENDURE, EFST_TWOHANDQUICKEN, EFST_CONCENTRATION, EFST_HIDING, EFST_CLOAKING, EFST_ENCHANTPOISON, EFST_POISONREACT, EFST_QUAGMIRE, EFST_ANGELUS, EFST_BLESSING, EFST_CRUCIS, EFST_INC_AGI, EFST_DEC_AGI, EFST_SLOWPOISON, EFST_IMPOSITIO, EFST_SUFFRAGIUM, EFST_ASPERSIO, EFST_BENEDICTIO, EFST_KYRIE, EFST_MAGNIFICAT, EFST_GLORIA, EFST_LEXAETERNA, EFST_ADRENALINE, EFST_WEAPONPERFECT, EFST_OVERTHRUST, EFST_MAXIMIZE, EFST_RIDING, EFST_FALCON, EFST_TRICKDEAD, EFST_SHOUT, EFST_ENERGYCOAT, EFST_BROKENARMOR, EFST_BROKENWEAPON, EFST_ILLUSION, EFST_WEIGHTOVER50, EFST_WEIGHTOVER90, EFST_ATTHASTE_POTION1, EFST_ATTHASTE_POTION2, EFST_ATTHASTE_POTION3, EFST_ATTHASTE_INFINITY, EFST_MOVHASTE_POTION, EFST_MOVHASTE_INFINITY, EFST_AUTOCOUNTER, EFST_SPLASHER, EFST_ANKLESNARE, EFST_POSTDELAY, EFST_NOACTION, EFST_IMPOSSIBLEPICKUP, EFST_BARRIER, EFST_NOEQUIPWEAPON, EFST_NOEQUIPSHIELD, EFST_NOEQUIPARMOR, EFST_NOEQUIPHELM, EFST_PROTECTWEAPON, EFST_PROTECTSHIELD, EFST_PROTECTARMOR, EFST_PROTECTHELM, EFST_AUTOGUARD, EFST_REFLECTSHIELD, EFST_DEVOTION, EFST_PROVIDENCE, EFST_DEFENDER, EFST_MAGICROD, EFST_WEAPONPROPERTY, EFST_AUTOSPELL, EFST_SPECIALZONE, EFST_MASK, EFST_SPEARQUICKEN, EFST_BDPLAYING, EFST_WHISTLE, EFST_ASSASSINCROSS, EFST_POEMBRAGI, EFST_APPLEIDUN, EFST_HUMMING, EFST_DONTFORGETME, EFST_FORTUNEKISS, EFST_SERVICEFORYOU, EFST_RICHMANKIM, EFST_ETERNALCHAOS, EFST_DRUMBATTLEFIELD, EFST_RINGNIBELUNGEN, EFST_ROKISWEIL, EFST_INTOABYSS, EFST_SIEGFRIED, EFST_BLADESTOP, EFST_EXPLOSIONSPIRITS, EFST_STEELBODY, EFST_EXTREMITYFIST, EFST_COMBOATTACK, EFST_PROPERTYFIRE, EFST_PROPERTYWATER, EFST_PROPERTYWIND, EFST_PROPERTYGROUND, EFST_MAGICATTACK, EFST_STOP, EFST_WEAPONBRAKER, EFST_PROPERTYUNDEAD, EFST_POWERUP, EFST_AGIUP, EFST_SIEGEMODE, EFST_INVISIBLE, EFST_STATUSONE, EFST_AURABLADE, EFST_PARRYING, EFST_LKCONCENTRATION, EFST_TENSIONRELAX, EFST_BERSERK, EFST_SACRIFICE, EFST_GOSPEL, EFST_ASSUMPTIO, EFST_BASILICA, EFST_GROUNDMAGIC, EFST_MAGICPOWER, EFST_EDP, EFST_TRUESIGHT, EFST_WINDWALK, EFST_MELTDOWN, EFST_CARTBOOST, EFST_CHASEWALK, EFST_SWORDREJECT, EFST_MARIONETTE_MASTER, EFST_MARIONETTE, EFST_MOON, EFST_BLOODING, EFST_JOINTBEAT, EFST_MINDBREAKER, EFST_MEMORIZE, EFST_FOGWALL, EFST_SPIDERWEB, EFST_PROTECTEXP, EFST_SUB_WEAPONPROPERTY, EFST_AUTOBERSERK, EFST_RUN, EFST_TING, EFST_STORMKICK_ON, EFST_STORMKICK_READY, EFST_DOWNKICK_ON, EFST_DOWNKICK_READY, EFST_TURNKICK_ON, EFST_TURNKICK_READY, EFST_COUNTER_ON, EFST_COUNTER_READY, EFST_DODGE_ON, EFST_DODGE_READY, EFST_STRUP, EFST_PROPERTYDARK, EFST_ADRENALINE2, EFST_PROPERTYTELEKINESIS, EFST_SOULLINK, EFST_PLUSATTACKPOWER, EFST_PLUSMAGICPOWER, EFST_DEVIL1, EFST_KAITE, EFST_SWOO, EFST_STAR2, EFST_KAIZEL, EFST_KAAHI, EFST_KAUPE, EFST_SMA_READY, EFST_SKE, EFST_ONEHANDQUICKEN, EFST_FRIEND, EFST_FRIENDUP, EFST_SG_WARM, EFST_SG_SUN_WARM, EFST_SG_MOON_WARM, EFST_SG_STAR_WARM, EFST_EMOTION, EFST_SUN_COMFORT, EFST_MOON_COMFORT, EFST_STAR_COMFORT, EFST_EXPUP, EFST_GDSKILL_BATTLEORDER, EFST_GDSKILL_REGENERATION, EFST_GDSKILL_POSTDELAY, EFST_RESISTHANDICAP, EFST_MAXHPPERCENT, EFST_MAXSPPERCENT, EFST_DEFENCE, EFST_SLOWDOWN, EFST_PRESERVE, EFST_CHASEWALK2, EFST_NOT_EXTREMITYFIST, EFST_CLAIRVOYANCE, EFST_MOVESLOW_POTION, EFST_DOUBLECASTING, EFST_GRAVITATION, EFST_OVERTHRUSTMAX, EFST_LONGING, EFST_HERMODE, EFST_TAROTCARD, EFST_HLIF_AVOID, EFST_HFLI_FLEET, EFST_HFLI_SPEED, EFST_HLIF_CHANGE, EFST_HAMI_BLOODLUST, EFST_CR_SHRINK, EFST_WZ_SIGHTBLASTER, EFST_DC_WINKCHARM, EFST_RG_CCONFINE_M, EFST_RG_CCONFINE_S, EFST_DISABLEMOVE, EFST_GS_MADNESSCANCEL, EFST_GS_GATLINGFEVER, EFST_EARTHSCROLL, EFST_NJ_UTSUSEMI, EFST_NJ_BUNSINJYUTSU, EFST_NJ_NEN, EFST_GS_ADJUSTMENT, EFST_GS_ACCURACY, EFST_NJ_SUITON, EFST_PET, EFST_MENTAL, EFST_EXPMEMORY, EFST_PERFORMANCE, EFST_GAIN, EFST_GRIFFON, EFST_DRIFT, EFST_WALLSHIFT, EFST_REINCARNATION, EFST_PATTACK, EFST_PSPEED, EFST_PDEFENSE, EFST_PCRITICAL, EFST_RANKING, EFST_PTRIPLE, EFST_DENERGY, EFST_WAVE1, EFST_WAVE2, EFST_WAVE3, EFST_WAVE4, EFST_DAURA, EFST_DFREEZER, EFST_DPUNISH, EFST_DBARRIER, EFST_DWARNING, EFST_MOUSEWHEEL, EFST_DGAUGE, EFST_DACCEL, EFST_DBLOCK, EFST_FOOD_STR, EFST_FOOD_AGI, EFST_FOOD_VIT, EFST_FOOD_DEX, EFST_FOOD_INT, EFST_FOOD_LUK, EFST_FOOD_BASICAVOIDANCE, EFST_FOOD_BASICHIT, EFST_FOOD_CRITICALSUCCESSVALUE, EFST_CASH_PLUSEXP, EFST_CASH_DEATHPENALTY, EFST_CASH_RECEIVEITEM, EFST_CASH_BOSS_ALARM, EFST_DA_ENERGY, EFST_DA_FIRSTSLOT, EFST_DA_HEADDEF, EFST_DA_SPACE, EFST_DA_TRANSFORM, EFST_DA_ITEMREBUILD, EFST_DA_ILLUSION, EFST_DA_DARKPOWER, EFST_DA_EARPLUG, EFST_DA_CONTRACT, EFST_DA_BLACK, EFST_DA_MAGICCART, EFST_CRYSTAL, EFST_DA_REBUILD, EFST_DA_EDARKNESS, EFST_DA_EGUARDIAN, EFST_DA_TIMEOUT, EFST_FOOD_STR_CASH, EFST_FOOD_AGI_CASH, EFST_FOOD_VIT_CASH, EFST_FOOD_DEX_CASH, EFST_FOOD_INT_CASH, EFST_FOOD_LUK_CASH, EFST_MER_FLEE, EFST_MER_ATK, EFST_MER_HP, EFST_MER_SP, EFST_MER_HIT, EFST_SLOWCAST, EFST_MAGICMIRROR, EFST_STONESKIN, EFST_ANTIMAGIC, EFST_CRITICALWOUND, EFST_NPC_DEFENDER, EFST_NOACTION_WAIT, EFST_MOVHASTE_HORSE, EFST_PROTECT_DEF, EFST_PROTECT_MDEF, EFST_HEALPLUS, EFST_S_LIFEPOTION, EFST_L_LIFEPOTION, EFST_CRITICALPERCENT, EFST_PLUSAVOIDVALUE, EFST_ATKER_ASPD, EFST_TARGET_ASPD, EFST_ATKER_MOVESPEED, EFST_ATKER_BLOOD, EFST_TARGET_BLOOD, EFST_ARMOR_PROPERTY, EFST_REUSE_LIMIT_A, EFST_HELLPOWER, EFST_STEAMPACK, EFST_REUSE_LIMIT_B, EFST_REUSE_LIMIT_C, EFST_REUSE_LIMIT_D, EFST_REUSE_LIMIT_E, EFST_REUSE_LIMIT_F, EFST_INVINCIBLE, EFST_CASH_PLUSONLYJOBEXP, EFST_PARTYFLEE, EFST_ANGEL_PROTECT, EFST_ENDURE_MDEF, EFST_ENCHANTBLADE, EFST_DEATHBOUND, EFST_REFRESH, EFST_GIANTGROWTH, EFST_STONEHARDSKIN, EFST_VITALITYACTIVATION, EFST_FIGHTINGSPIRIT, EFST_ABUNDANCE, EFST_REUSE_MILLENNIUMSHIELD, EFST_REUSE_CRUSHSTRIKE, EFST_REUSE_REFRESH, EFST_REUSE_STORMBLAST, EFST_VENOMIMPRESS, EFST_EPICLESIS, EFST_ORATIO, EFST_LAUDAAGNUS, EFST_LAUDARAMUS, EFST_CLOAKINGEXCEED, EFST_HALLUCINATIONWALK, EFST_HALLUCINATIONWALK_POSTDELAY, EFST_RENOVATIO, EFST_WEAPONBLOCKING, EFST_WEAPONBLOCKING_POSTDELAY, EFST_ROLLINGCUTTER, EFST_EXPIATIO, EFST_POISONINGWEAPON, EFST_TOXIN, EFST_PARALYSE, EFST_VENOMBLEED, EFST_MAGICMUSHROOM, EFST_DEATHHURT, EFST_PYREXIA, EFST_OBLIVIONCURSE, EFST_LEECHESEND, EFST_DUPLELIGHT, EFST_FROSTMISTY, EFST_FEARBREEZE, EFST_ELECTRICSHOCKER, EFST_MARSHOFABYSS, EFST_RECOGNIZEDSPELL, EFST_STASIS, EFST_WUGRIDER, EFST_WUGDASH, EFST_WUGBITE, EFST_CAMOUFLAGE, EFST_ACCELERATION, EFST_HOVERING, EFST_SUMMON1, EFST_SUMMON2, EFST_SUMMON3, EFST_SUMMON4, EFST_SUMMON5, EFST_MVPCARD_TAOGUNKA, EFST_MVPCARD_MISTRESS, EFST_MVPCARD_ORCHERO, EFST_MVPCARD_ORCLORD, EFST_OVERHEAT_LIMITPOINT, EFST_OVERHEAT, EFST_SHAPESHIFT, EFST_INFRAREDSCAN, EFST_MAGNETICFIELD, EFST_NEUTRALBARRIER, EFST_NEUTRALBARRIER_MASTER, EFST_STEALTHFIELD, EFST_STEALTHFIELD_MASTER, EFST_MANU_ATK, EFST_MANU_DEF, EFST_SPL_ATK, EFST_SPL_DEF, EFST_REPRODUCE, EFST_MANU_MATK, EFST_SPL_MATK, EFST_STR_SCROLL, EFST_INT_SCROLL, EFST_LG_REFLECTDAMAGE, EFST_FORCEOFVANGUARD, EFST_BUCHEDENOEL, EFST_AUTOSHADOWSPELL, EFST_SHADOWFORM, EFST_RAID, EFST_SHIELDSPELL_DEF, EFST_SHIELDSPELL_MDEF, EFST_SHIELDSPELL_REF, EFST_BODYPAINT, EFST_EXEEDBREAK, EFST_ADORAMUS, EFST_PRESTIGE, EFST_INVISIBILITY, EFST_DEADLYINFECT, EFST_BANDING, EFST_EARTHDRIVE, EFST_INSPIRATION, EFST_ENERVATION, EFST_GROOMY, EFST_RAISINGDRAGON, EFST_IGNORANCE, EFST_LAZINESS, EFST_LIGHTNINGWALK, EFST_ACARAJE, EFST_UNLUCKY, EFST_CURSEDCIRCLE_ATKER, EFST_CURSEDCIRCLE_TARGET, EFST_WEAKNESS, EFST_CRESCENTELBOW, EFST_NOEQUIPACCESSARY, EFST_STRIPACCESSARY, EFST_MANHOLE, EFST_POPECOOKIE, EFST_FALLENEMPIRE, EFST_GENTLETOUCH_ENERGYGAIN, EFST_GENTLETOUCH_CHANGE, EFST_GENTLETOUCH_REVITALIZE, EFST_BLOODYLUST, EFST_SWING, EFST_SYMPHONY_LOVE, EFST_PROPERTYWALK, EFST_SPELLFIST, EFST_NETHERWORLD, EFST_SIREN, EFST_DEEP_SLEEP, EFST_SIRCLEOFNATURE, EFST_COLD, EFST_GLOOMYDAY, EFST_SONG_OF_MANA, EFST_CLOUD_KILL, EFST_DANCE_WITH_WUG, EFST_RUSH_WINDMILL, EFST_ECHOSONG, EFST_HARMONIZE, EFST_STRIKING, EFST_WARMER, EFST_MOONLIT_SERENADE, EFST_SATURDAY_NIGHT_FEVER, EFST_SITDOWN_FORCE, EFST_ANALYZE, EFST_LERADS_DEW, EFST_MELODYOFSINK, EFST_BEYOND_OF_WARCRY, EFST_UNLIMITED_HUMMING_VOICE, EFST_SPELLBOOK1, EFST_SPELLBOOK2, EFST_SPELLBOOK3, EFST_FREEZE_SP, EFST_GN_TRAINING_SWORD, EFST_GN_REMODELING_CART, EFST_GN_CARTBOOST, EFST_FIXEDCASTINGTM_REDUCE, EFST_THORNS_TRAP, EFST_BLOOD_SUCKER, EFST_SPORE_EXPLOSION, EFST_DEMONIC_FIRE, EFST_FIRE_EXPANSION_SMOKE_POWDER, EFST_FIRE_EXPANSION_TEAR_GAS, EFST_BLOCKING_PLAY, EFST_MANDRAGORA, EFST_ACTIVATE, EFST_AB_SECRAMENT, EFST_ASSUMPTIO2, EFST_TK_SEVENWIND, EFST_LIMIT_ODINS_RECALL, EFST_STOMACHACHE, EFST_MYSTERIOUS_POWDER, EFST_MELON_BOMB, EFST_BANANA_BOMB_SITDOWN_POSTDELAY, EFST_PROMOTE_HEALTH_RESERCH, EFST_ENERGY_DRINK_RESERCH, EFST_EXTRACT_WHITE_POTION_Z, EFST_VITATA_500, EFST_EXTRACT_SALAMINE_JUICE, EFST_BOOST500, EFST_FULL_SWING_K, EFST_MANA_PLUS, EFST_MUSTLE_M, EFST_LIFE_FORCE_F, EFST_VACUUM_EXTREME, EFST_SAVAGE_STEAK, EFST_COCKTAIL_WARG_BLOOD, EFST_MINOR_BBQ, EFST_SIROMA_ICE_TEA, EFST_DROCERA_HERB_STEAMED, EFST_PUTTI_TAILS_NOODLES, EFST_BANANA_BOMB, EFST_SUMMON_AGNI, EFST_SPELLBOOK4, EFST_SPELLBOOK5, EFST_SPELLBOOK6, EFST_SPELLBOOK7, EFST_ELEMENTAL_AGGRESSIVE, EFST_RETURN_TO_ELDICASTES, EFST_BANDING_DEFENCE, EFST_SKELSCROLL, EFST_DISTRUCTIONSCROLL, EFST_ROYALSCROLL, EFST_IMMUNITYSCROLL, EFST_MYSTICSCROLL, EFST_BATTLESCROLL, EFST_ARMORSCROLL, EFST_FREYJASCROLL, EFST_SOULSCROLL, EFST_CIRCLE_OF_FIRE, EFST_CIRCLE_OF_FIRE_OPTION, EFST_FIRE_CLOAK, EFST_FIRE_CLOAK_OPTION, EFST_WATER_SCREEN, EFST_WATER_SCREEN_OPTION, EFST_WATER_DROP, EFST_WATER_DROP_OPTION, EFST_WIND_STEP, EFST_WIND_STEP_OPTION, EFST_WIND_CURTAIN, EFST_WIND_CURTAIN_OPTION, EFST_WATER_BARRIER, EFST_ZEPHYR, EFST_SOLID_SKIN, EFST_SOLID_SKIN_OPTION, EFST_STONE_SHIELD, EFST_STONE_SHIELD_OPTION, EFST_POWER_OF_GAIA, EFST_EL_WAIT, EFST_EL_PASSIVE, EFST_EL_DEFENSIVE, EFST_EL_OFFENSIVE, EFST_EL_COST, EFST_PYROTECHNIC, EFST_PYROTECHNIC_OPTION, EFST_HEATER, EFST_HEATER_OPTION, EFST_TROPIC, EFST_TROPIC_OPTION, EFST_AQUAPLAY, EFST_AQUAPLAY_OPTION, EFST_COOLER, EFST_COOLER_OPTION, EFST_CHILLY_AIR, EFST_CHILLY_AIR_OPTION, EFST_GUST, EFST_GUST_OPTION, EFST_BLAST, EFST_BLAST_OPTION, EFST_WILD_STORM, EFST_WILD_STORM_OPTION, EFST_PETROLOGY, EFST_PETROLOGY_OPTION, EFST_CURSED_SOIL, EFST_CURSED_SOIL_OPTION, EFST_UPHEAVAL, EFST_UPHEAVAL_OPTION, EFST_TIDAL_WEAPON, EFST_TIDAL_WEAPON_OPTION, EFST_ROCK_CRUSHER, EFST_ROCK_CRUSHER_ATK, EFST_FIRE_INSIGNIA, EFST_WATER_INSIGNIA, EFST_WIND_INSIGNIA, EFST_EARTH_INSIGNIA, EFST_EQUIPED_FLOOR, EFST_GUARDIAN_RECALL, EFST_MORA_BUFF, EFST_REUSE_LIMIT_G, EFST_REUSE_LIMIT_H, EFST_NEEDLE_OF_PARALYZE, EFST_PAIN_KILLER, EFST_G_LIFEPOTION, EFST_VITALIZE_POTION, EFST_LIGHT_OF_REGENE, EFST_OVERED_BOOST, EFST_SILENT_BREEZE, EFST_ODINS_POWER, EFST_STYLE_CHANGE, EFST_SONIC_CLAW_POSTDELAY, EFST_SILVERVEIN_RUSH_POSTDELAY = 596, EFST_MIDNIGHT_FRENZY_POSTDELAY, EFST_GOLDENE_FERSE, EFST_ANGRIFFS_MODUS, EFST_TINDER_BREAKER, EFST_TINDER_BREAKER_POSTDELAY, EFST_CBC, EFST_CBC_POSTDELAY, EFST_EQC, EFST_MAGMA_FLOW, EFST_GRANITIC_ARMOR, EFST_PYROCLASTIC, EFST_VOLCANIC_ASH, EFST_SPIRITS_SAVEINFO1, EFST_SPIRITS_SAVEINFO2, EFST_MAGIC_CANDY, EFST_SEARCH_STORE_INFO, EFST_ALL_RIDING, EFST_ALL_RIDING_REUSE_LIMIT, EFST_MACRO, EFST_MACRO_POSTDELAY, EFST_BEER_BOTTLE_CAP, EFST_OVERLAPEXPUP, EFST_PC_IZ_DUN05, EFST_CRUSHSTRIKE, EFST_MONSTER_TRANSFORM, EFST_SIT, EFST_ONAIR, EFST_MTF_ASPD, EFST_MTF_RANGEATK, EFST_MTF_MATK, EFST_MTF_MLEATKED, EFST_MTF_CRIDAMAGE, EFST_REUSE_LIMIT_MTF, EFST_MACRO_PERMIT, EFST_MACRO_PLAY, EFST_SKF_CAST, EFST_SKF_ASPD, EFST_SKF_ATK, EFST_SKF_MATK, EFST_REWARD_PLUSONLYJOBEXP, EFST_HANDICAPSTATE_NORECOVER, EFST_SET_NUM_DEF, EFST_SET_NUM_MDEF, EFST_SET_PER_DEF, EFST_SET_PER_MDEF, EFST_PARTYBOOKING_SEARCH_DEALY, EFST_PARTYBOOKING_REGISTER_DEALY, EFST_PERIOD_TIME_CHECK_DETECT_SKILL, EFST_KO_JYUMONJIKIRI, EFST_MEIKYOUSISUI, EFST_ATTHASTE_CASH, EFST_EQUIPPED_DIVINE_ARMOR, EFST_EQUIPPED_HOLY_ARMOR, EFST_2011RWC, EFST_KYOUGAKU, EFST_IZAYOI, EFST_ZENKAI, EFST_KG_KAGEHUMI, EFST_KYOMU, EFST_KAGEMUSYA, EFST_ZANGETSU, EFST_PHI_DEMON, EFST_GENSOU, EFST_AKAITSUKI, EFST_TETANY, EFST_GM_BATTLE, EFST_GM_BATTLE2, EFST_2011RWC_SCROLL, EFST_ACTIVE_MONSTER_TRANSFORM, EFST_MYSTICPOWDER, EFST_ECLAGE_RECALL, EFST_ENTRY_QUEUE_APPLY_DELAY, EFST_REUSE_LIMIT_ECL, EFST_M_LIFEPOTION, EFST_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT, EFST_UNKNOWN_NAME, EFST_ON_PUSH_CART, EFST_HAT_EFFECT, EFST_FLOWER_LEAF, EFST_RAY_OF_PROTECTION, EFST_GLASTHEIM_ATK, EFST_GLASTHEIM_DEF, EFST_GLASTHEIM_HEAL, EFST_GLASTHEIM_HIDDEN, EFST_GLASTHEIM_STATE, EFST_GLASTHEIM_ITEMDEF, EFST_GLASTHEIM_HPSP, EFST_HOMUN_SKILL_POSTDELAY, EFST_ALMIGHTY, EFST_GVG_GIANT, EFST_GVG_GOLEM, EFST_GVG_STUN, EFST_GVG_STONE, EFST_GVG_FREEZ, EFST_GVG_SLEEP, EFST_GVG_CURSE, EFST_GVG_SILENCE, EFST_GVG_BLIND, EFST_CLIENT_ONLY_EQUIP_ARROW, EFST_CLAN_INFO, EFST_JP_EVENT01, EFST_JP_EVENT02, EFST_JP_EVENT03, EFST_JP_EVENT04, EFST_TELEPORT_FIXEDCASTINGDELAY, EFST_GEFFEN_MAGIC1, EFST_GEFFEN_MAGIC2, EFST_GEFFEN_MAGIC3, EFST_QUEST_BUFF1, EFST_QUEST_BUFF2, EFST_QUEST_BUFF3, EFST_REUSE_LIMIT_RECALL, EFST_SAVEPOSITION, EFST_HANDICAPSTATE_ICEEXPLO, EFST_FENRIR_CARD, EFST_REUSE_LIMIT_ASPD_POTION, EFST_MAXPAIN, EFST_PC_STOP, EFST_FRIGG_SONG, EFST_OFFERTORIUM, EFST_TELEKINESIS_INTENSE, EFST_MOONSTAR, EFST_STRANGELIGHTS, EFST_FULL_THROTTLE, EFST_REBOUND, EFST_UNLIMIT, EFST_KINGS_GRACE, EFST_ITEM_ATKMAX, EFST_ITEM_ATKMIN, EFST_ITEM_MATKMAX, EFST_ITEM_MATKMIN, EFST_SUPER_STAR, EFST_HIGH_RANKER, EFST_DARKCROW, EFST_2013_VALENTINE1, EFST_2013_VALENTINE2, EFST_2013_VALENTINE3, EFST_ILLUSIONDOPING, EFST_WIDEWEB, EFST_CHILL, EFST_BURNT, EFST_PCCAFE_PLAY_TIME, EFST_TWISTED_TIME, EFST_FLASHCOMBO, EFST_JITTER_BUFF1, EFST_JITTER_BUFF2, EFST_JITTER_BUFF3, EFST_JITTER_BUFF4, EFST_JITTER_BUFF5, EFST_JITTER_BUFF6, EFST_JITTER_BUFF7, EFST_JITTER_BUFF8, EFST_JITTER_BUFF9, EFST_JITTER_BUFF10, EFST_CUP_OF_BOZA, EFST_B_TRAP, EFST_E_CHAIN, EFST_E_QD_SHOT_READY, EFST_C_MARKER, EFST_H_MINE, EFST_H_MINE_SPLASH, EFST_P_ALTER, EFST_HEAT_BARREL, EFST_ANTI_M_BLAST, EFST_SLUGSHOT, EFST_SWORDCLAN, EFST_ARCWANDCLAN, EFST_GOLDENMACECLAN, EFST_CROSSBOWCLAN, EFST_PACKING_ENVELOPE1, EFST_PACKING_ENVELOPE2, EFST_PACKING_ENVELOPE3, EFST_PACKING_ENVELOPE4, EFST_PACKING_ENVELOPE5, EFST_PACKING_ENVELOPE6, EFST_PACKING_ENVELOPE7, EFST_PACKING_ENVELOPE8, EFST_PACKING_ENVELOPE9, EFST_PACKING_ENVELOPE10, EFST_GLASTHEIM_TRANS, EFST_ZONGZI_POUCH_TRANS, EFST_HEAT_BARREL_AFTER, EFST_DECORATION_OF_MUSIC, EFST_OVERSEAEXPUP, EFST_CLOWN_N_GYPSY_CARD, EFST_OPEN_NPC_MARKET, EFST_BEEF_RIB_STEW, EFST_PORK_RIB_STEW, EFST_CHUSEOK_MONDAY, EFST_CHUSEOK_TUESDAY, EFST_CHUSEOK_WEDNESDAY, EFST_CHUSEOK_THURSDAY, EFST_CHUSEOK_FRIDAY, EFST_CHUSEOK_WEEKEND, EFST_ALL_LIGHTGUARD, EFST_ALL_LIGHTGUARD_COOL_TIME, EFST_MTF_MHP, EFST_MTF_MSP, EFST_MTF_PUMPKIN, EFST_MTF_HITFLEE, EFST_MTF_CRIDAMAGE2, EFST_MTF_SPDRAIN, EFST_ACUO_MINT_GUM, EFST_S_HEALPOTION, EFST_REUSE_LIMIT_S_HEAL_POTION, EFST_PLAYTIME_STATISTICS, EFST_GN_CHANGEMATERIAL_OPERATOR, EFST_GN_MIX_COOKING_OPERATOR, EFST_GN_MAKEBOMB_OPERATOR, EFST_GN_S_PHARMACY_OPERATOR, EFST_SO_EL_ANALYSIS_DISASSEMBLY_OPERATOR, EFST_SO_EL_ANALYSIS_COMBINATION_OPERATOR, EFST_NC_MAGICDECOY_OPERATOR, EFST_GUILD_STORAGE, EFST_GC_POISONINGWEAPON_OPERATOR, EFST_WS_WEAPONREFINE_OPERATOR, EFST_BS_REPAIRWEAPON_OPERATOR, EFST_GET_MAILBOX, EFST_JUMPINGCLAN, EFST_JP_OTP, EFST_HANDICAPTOLERANCE_LEVELGAP, EFST_MTF_RANGEATK2, EFST_MTF_ASPD2, EFST_MTF_MATK2, EFST_SHOW_NPCHPBAR, EFST_FLOWERSMOKE, EFST_FSTONE, EFST_DAILYSENDMAILCNT, EFST_QSCARABA, EFST_LJOSALFAR, EFST_PAD_READER_KNIGHT, EFST_PAD_READER_CRUSADER, EFST_PAD_READER_BLACKSMITH, EFST_PAD_READER_ALCHEMIST, EFST_PAD_READER_ASSASSIN, EFST_PAD_READER_ROGUE, EFST_PAD_READER_WIZARD, EFST_PAD_READER_SAGE, EFST_PAD_READER_PRIEST, EFST_PAD_READER_MONK, EFST_PAD_READER_HUNTER, EFST_PAD_READER_BARD, EFST_PAD_READER_DANCER, EFST_PAD_READER_TAEKWON, EFST_PAD_READER_NINJA, EFST_PAD_READER_GUNSLINGER, EFST_PAD_READER_SUPERNOVICE, EFST_ESSENCE_OF_TIME, EFST_MINIGAME_ROULETTE, EFST_MINIGAME_GOLD_POINT, EFST_MINIGAME_SILVER_POINT, EFST_MINIGAME_BRONZE_POINT, EFST_HAPPINESS_STAR, EFST_SUMMEREVENT01, EFST_SUMMEREVENT02, EFST_SUMMEREVENT03, EFST_SUMMEREVENT04, EFST_SUMMEREVENT05, EFST_MINIGAME_ROULETTE_BONUS_ITEM, EFST_DRESS_UP, EFST_MAPLE_FALLS, EFST_ALL_NIFLHEIM_RECALL, EFST_MARKING_USE_CHANGEMONSTER, EFST_MTF_MARIONETTE, EFST_MTF_LUDE, EFST_MTF_CRUISER, EFST_MERMAID_LONGING, EFST_MAGICAL_FEATHER, EFST_DRACULA_CARD, EFST_ALL_PRONTERA_RECALL, EFST_LIMIT_POWER_BOOSTER, EFST_GIFT_OF_SNOW, EFST_NPC_HALLUCINATIONWALK, EFST_NPC_HALLUCINATIONWALK_POSTDELAY, EFST_NPC_XXXWALK, EFST_TIME_ACCESSORY, EFST_EP16_DEF, EFST_NORMAL_ATKED_SP, EFST_BODYSTATE_STONECURSE, EFST_BODYSTATE_FREEZING, EFST_BODYSTATE_STUN, EFST_BODYSTATE_SLEEP, EFST_BODYSTATE_UNDEAD, EFST_BODYSTATE_STONECURSE_ING, EFST_BODYSTATE_BURNNING, EFST_BODYSTATE_IMPRISON, EFST_HEALTHSTATE_POISON, EFST_HEALTHSTATE_CURSE, EFST_HEALTHSTATE_SILENCE, EFST_HEALTHSTATE_CONFUSION, EFST_HEALTHSTATE_BLIND, EFST_HEALTHSTATE_ANGELUS, EFST_HEALTHSTATE_BLOODING, EFST_HEALTHSTATE_HEAVYPOISON, EFST_HEALTHSTATE_FEAR, EFST_CHERRY_BLOSSOM_CAKE, EFST_SU_STOOP, EFST_CATNIPPOWDER, EFST_HEAD_EQUIPMENT_EFFECT, EFST_SV_ROOTTWIST, EFST_ATTACK_PROPERTY_NOTHING, EFST_ATTACK_PROPERTY_WATER, EFST_ATTACK_PROPERTY_GROUND, EFST_ATTACK_PROPERTY_FIRE, EFST_ATTACK_PROPERTY_WIND, EFST_ATTACK_PROPERTY_POISON, EFST_ATTACK_PROPERTY_SAINT, EFST_ATTACK_PROPERTY_DARKNESS, EFST_ATTACK_PROPERTY_TELEKINESIS, EFST_ATTACK_PROPERTY_UNDEAD, EFST_RESIST_PROPERTY_NOTHING, EFST_RESIST_PROPERTY_WATER, EFST_RESIST_PROPERTY_GROUND, EFST_RESIST_PROPERTY_FIRE, EFST_RESIST_PROPERTY_WIND, EFST_RESIST_PROPERTY_POISON, EFST_RESIST_PROPERTY_SAINT, EFST_RESIST_PROPERTY_DARKNESS, EFST_RESIST_PROPERTY_TELEKINESIS, EFST_RESIST_PROPERTY_UNDEAD, EFST_BITESCAR, EFST_ARCLOUSEDASH, EFST_TUNAPARTY, EFST_SHRIMP, EFST_FRESHSHRIMP, EFST_PERIOD_RECEIVEITEM, EFST_PERIOD_PLUSEXP, EFST_PERIOD_PLUSJOBEXP, EFST_RUNEHELM, EFST_HELM_VERKANA, EFST_HELM_RHYDO, EFST_HELM_TURISUS, EFST_HELM_HAGALAS, EFST_HELM_ISIA, EFST_HELM_ASIR, EFST_HELM_URJ, EFST_SUHIDE, EFST_REUSE_LIMIT_MG, EFST_DORAM_BUF_01, EFST_DORAM_BUF_02, EFST_SPRITEMABLE, EFST_AID_PERIOD_RECEIVEITEM, EFST_AID_PERIOD_PLUSEXP, EFST_AID_PERIOD_PLUSJOBEXP, EFST_AID_PERIOD_DEADPENALTY, EFST_AID_PERIOD_ADDSTOREITEMCOUNT, EFST_ALL_GLASTHEIM_RECALL, EFST_REUSE_LIMIT_PEPO_MD, EFST_ALL_THANATOS_RECALL, EFST_KAFRA_STORE, EFST_REUSE_ABBYS, EFST_MAGICSTONE_OF_GRACE_SET, EFST_PRIVATE_AIRPLANE, EFST_HISS, EFST_HISS_AVOID, EFST_NYANGGRASS, EFST_CHATTERING, EFST_CHATTERING_OPT_ATK_MATK, EFST_CHATTERING_OPT_HASTE, EFST_SPIRITOFLAND_STEMSPEAR, EFST_SPIRITOFLAND_ROOTTWIST, EFST_SPIRITOFLAND_POWDERING, EFST_SPIRITOFLAND_METEOR, EFST_SPIRITOFLAND_NYANGGRASS, EFST_GROOMING, EFST_PROTECTIONOFSHRIMP, EFST_EP16_2_BUFF_SS, EFST_EP16_2_BUFF_SC, EFST_EP16_2_BUFF_AC, EFST_GS_MAGICAL_BULLET, EFST_FALLEN_ANGEL = 976, EFST_REUSE_LIMIT_MOVEPOINT, EFST_MACRO_DETECTOR_ANSWER_WAITING, EFST_BLAZE_BEAD, EFST_FROZEN_BEAD, EFST_BREEZE_BEAD, EFST_SOULATTACK, EFST_AID_PERIOD_RECEIVEITEM_2ND, EFST_AID_PERIOD_PLUSEXP_2ND, EFST_AID_PERIOD_PLUSJOBEXP_2ND, EFST_PRONTERA_JP, EFST_ASSISTANT_VENDING, EFST_GLOOM_CARD, EFST_PHARAOH_CARD, EFST_KIEL_CARD, EFST_ASSISTANT_BUYING, EFST_CHEERUP, EFST_GET_CNT_UNREAD_RODEX_CHARDB, EFST_GET_CNT_UNREAD_RODEX_GLOBALDB, EFST_S_MANAPOTION, EFST_M_DEFSCROLL, EFST_OPEN_REFINING_UI, EFST_ALL_LIGHTHALZEN_RECALL, EFST_SWAP_EQUIPITEM, EFST_AS_RAGGED_GOLEM_CARD, EFST_LHZ_DUN_N1, EFST_LHZ_DUN_N2, EFST_LHZ_DUN_N3, EFST_LHZ_DUN_N4, EFST_TAEKWON_MISSION, EFST_SUN_PLACE, EFST_MOON_PLACE, EFST_STAR_PLACE, EFST_SUN_MONSTER, EFST_MOON_MONSTER, EFST_STAR_MONSTER, EFST_AL_WARP_ADDSLOT, EFST_ALL_STAT_DOWN, EFST_GRADUAL_GRAVITY, EFST_DAMAGE_HEAL, EFST_IMMUNE_PROPERTY_NOTHING, EFST_IMMUNE_PROPERTY_WATER, EFST_IMMUNE_PROPERTY_GROUND, EFST_IMMUNE_PROPERTY_FIRE, EFST_IMMUNE_PROPERTY_WIND, EFST_IMMUNE_PROPERTY_POISON, EFST_IMMUNE_PROPERTY_SAINT, EFST_IMMUNE_PROPERTY_DARKNESS, EFST_IMMUNE_PROPERTY_TELEKINESIS, EFST_IMMUNE_PROPERTY_UNDEAD, EFST_REUSE_LIMIT_NP, EFST_SPECIALCOOKIE, EFST_DAMAGE_HEAL2, EFST_DAMAGE_HEAL3, EFST_GLORY_OF_RETURN, EFST_ATK_POPCORN, EFST_MATK_POPCORN, EFST_ASPD_POPCORN, EFST_ULTIMATECOOK, EFST_LIGHTOFMOON, EFST_LIGHTOFSUN, EFST_LIGHTOFSTAR, EFST_LUNARSTANCE, EFST_UNIVERSESTANCE, EFST_SUNSTANCE, EFST_FLASHKICK, EFST_NEWMOON, EFST_STARSTANCE, EFST_DIMENSION, EFST_DIMENSION1, EFST_DIMENSION2, EFST_CREATINGSTAR, EFST_FALLINGSTAR, EFST_NOVAEXPLOSING, EFST_GRAVITYCONTROL, XXX_EFST_WORLDSTORE_ACTIVE, EFST_WORLDSTORE_ITEMMOVEINFO_SENDCOMPLETE, EFST_SOULCOLLECT, EFST_SOULREAPER, EFST_SOULUNITY, EFST_SOULSHADOW, EFST_SOULFAIRY, EFST_SOULFALCON, EFST_SOULGOLEM, EFST_SOULDIVISION, EFST_SOULENERGY, EFST_USE_SKILL_SP_SPA, EFST_USE_SKILL_SP_SHA, EFST_SP_SHA, EFST_INFINITY_DRINK, EFST_ABYSS_001, EFST_ABYSS_002, EFST_ABYSS_003, EFST_ABYSS_004, EFST_ABYSS_005, EFST_ABYSS_006, EFST_ABYSS_007, EFST_ABYSS_008, EFST_REUSE_LIMIT_THM = 1075, EFST_REUSE_LIMIT_TLI, EFST_REUSE_LIMIT_TKC, EFST_REUSE_LIMIT_TRP, EFST_REUSE_LIMIT_TBG, EFST_REUSE_LIMIT_TBM, EFST_YGGDRASIL_BLESS, EFST_USE_SKILL_SP_SWHOO, EFST_HUNTING_EVENT, EFST_PERIOD_RECEIVEITEM_2ND, EFST_PERIOD_PLUSEXP_2ND, EFST_EXPDROPUP, EFST_TW_NEWYEAR_EVENT, EFST_ENSEMBLEFATIGUE, EFST_ADAPTATION, EFST_DANCINGLESSON, EFST_MUSICALLESSON, EFST_REUSE_LIMIT_RC, EFST_DANCINGLESSON_EQUIPPED, EFST_MUSICALLESSON_EQUIPPED, EFST_ANCILLA, EFST_REUSE_LIMIT_POTION_A, EFST_REUSE_LIMIT_POTION_B, EFST_REUSE_LIMIT_POTION_C, EFST_REUSE_LIMIT_POTION_D, EFST_REUSE_LIMIT_POTION_E, EFST_REUSE_LIMIT_POTION_F, EFST_BRAVESET, EFST_MACEMASTERY_EQUIPPED, EFST_FESTIVE_ENERGY, EFST_TEST_KR01, EFST_STARFISH_JP, EFST_WEAPONBLOCK_ON, EFST_CRI_DAMAGE, EFST_DEF_POWER, EFST_DEF_IGNORE, EFST_BOW_ATK_POWER, EFST_RED_ORG_POTION, EFST_CAST_TIME, EFST_BLADESTOPREADY, EFST_TELEPORT_BR, EFST_SA_WEAPON_PROPERTY, EFST_LEAPIMPAIRED, EFST_SENDING_ITEMLIST, EFST_EXCLUSIVE_RECEIVEITEM, EFST_EXCLUSIVE_PLUSEXP, EFST_ASSUMPTIO_BUFF, EFST_BASILICA_BUFF, EFST_OVERLAPEXPUP2, EFST_STOPMOVE_IMMEDIATELY, EFST_SOULCURSE, EFST_SOUND_OF_DESTRUCTION, EFST_DF_MANAPLUS, EFST_DF_FULLSWINGK, EFST_NV_BREAKTHROUGH, EFST_HELPANGEL, EFST_NV_TRANSCENDENCE, EFST_SWEETSFAIR_ATK, EFST_SWEETSFAIR_MATK, EFST_REUSE_SKILL, EFST_FLOWER_LEAF2, EFST_FLOWER_LEAF3, EFST_FLOWER_LEAF4, EFST_CHARM_BOOST, EFST_EARTHSHAKER, EFST_PERIOD_USE_WORLDMAP, EFST_MISTY_FROST, EFST_MAGIC_POISON, EFST_MOVE_AGIT, EFST_REUSE_JPNONLY_LIMIT_I, EFST_REUSE_JPNONLY_LIMIT_J, EFST_REUSE_JPNONLY_LIMIT_K, EFST_JPNONLY_TACTICS, EFST_PRISON, EFST_MADOGEAR_TYPE, EFST_DEADLY_DEFEASANCE, EFST_CLIMAX_DES_HU, EFST_CLIMAX, EFST_FEINTBOMB, EFST_LUXANIMA, EFST_BATH_FOAM_A, EFST_BATH_FOAM_B, EFST_BATH_FOAM_C, EFST_AROMA_OIL, EFST_REUSE_LIMIT_LUXANIMA, EFST_POWERFUL_FAITH, EFST_SINCERE_FAITH, EFST_FIRM_FAITH, EFST_AIRSHIP_PIPE, EFST_PIECES_OF_SHADOW, EFST_HELLS_PLANT_ARMOR, EFST_RELIEVE_DAMAGE, EFST_LOCKON_LASER, EFST_GRADE_ENCHANT_UI_OPEN, EFST_REF_T_POTION, EFST_ADD_ATK_DAMAGE, EFST_ADD_MATK_DAMAGE, EFST_SERVANTWEAPON, EFST_SERVANT_SIGN, EFST_CHARGINGPIERCE, EFST_CHARGINGPIERCE_COUNT, EFST_DRAGONIC_AURA, EFST_BIG_SCAR, EFST_VIGOR, EFST_WILL_OF_FAITH, EFST_PRESSURE, EFST_SA_DRAGONOLOGY, EFST_CLIMAX_EARTH, EFST_CLIMAX_BLOOM, EFST_CLIMAX_CRYIMP, EFST_MD_ME_POTION, EFST_MD_MA_POTION, EFST_MD_TA_POTION, EFST_MD_RA_POTION, EFST_REUSE_MEGAPHONE, EFST_HOLY_OIL, EFST_CRYSTAL_IMPACT, EFST_SHADOW_EXCEED, EFST_DANCING_KNIFE, EFST_POTENT_VENOM, EFST_SHADOW_SCAR, EFST_E_SLASH_COUNT, EFST_MEDIALE, EFST_A_VITA, EFST_A_TELUM, EFST_PRE_ACIES, EFST_COMPETENTIA, EFST_GUARD_STANCE, EFST_ATTACK_STANCE, EFST_GUARDIAN_S, EFST_HANDICAPSTATE_DEEPBLIND, EFST_HANDICAPSTATE_DEEPSILENCE, EFST_HANDICAPSTATE_LASSITUDE, EFST_HANDICAPSTATE_FROSTBITE, EFST_HANDICAPSTATE_SWOONING, EFST_HANDICAPSTATE_LIGHTNINGSTRIKE, EFST_HANDICAPSTATE_CRYSTALLIZATION, EFST_HANDICAPSTATE_CONFLAGRATION, EFST_HANDICAPSTATE_MISFORTUNE, EFST_HANDICAPSTATE_DEADLYPOISON, EFST_HANDICAPSTATE_DEPRESSION, EFST_HANDICAPSTATE_HOLYFLAME, EFST_REBOUND_S, EFST_SHIELD_MASTERY, EFST_SPEAR_SWORD_M, EFST_HOLY_S, EFST_ULTIMATE_S, EFST_SPEAR_SCAR, EFST_SHIELD_POWER, EFST_FIDUS_ANIMUS, EFST_MACE_BOOK_M, EFST_SHADOW_WEAPON, EFST_RELIGIO, EFST_BENEDICTUM, EFST_MVPCARD_KIEL, EFST_FIRST_BRAND, EFST_SECOND_BRAND, EFST_SECOND_JUDGE, EFST_THIRD_EXOR_FLAME, EFST_FIRST_FAITH_POWER, EFST_AXE_STOMP, EFST_A_MACHINE, EFST_D_MACHINE, EFST_MT_M_MACHINE_OPERATOR, EFST_TWOAXEDEF, EFST_DAGGER_AND_BOW_M, EFST_MAGIC_SWORD_M, EFST_SHADOW_STRIP, EFST_ABYSS_DAGGER, EFST_ABYSSFORCEWEAPON, EFST_ABYSS_SLAYER, EFST_TWOHANDDEF, EFST_PROTECTSHADOWEQUIP, EFST_RESEARCHREPORT, EFST_BO_HELL_DUSTY, EFST_WINDSIGN, EFST_CRESCIVEBOLT, EFST_CALAMITYGALE, EFST_CRESCIVEBOLT3, EFST_STAGE_MANNER, EFST_RETROSPECTION, EFST_MYSTIC_SYMPHONY, EFST_KVASIR_SONATA, EFST_SOUNDBLEND, EFST_GEF_NOCTURN, EFST_AIN_RHAPSODY, EFST_MUSICAL_INTERLUDE, EFST_JAWAII_SERENADE, EFST_PRON_MARCH, EFST_ROSEBLOSSOM, EFST_BO_BIONIC_PHARMACY_OPERATOR, EFST_ACIDIFIED_ZONE_WATER, EFST_ACIDIFIED_ZONE_GROUND, EFST_ACIDIFIED_ZONE_WIND, EFST_ACIDIFIED_ZONE_FIRE, EFST_MAGIC_BOOK_M, EFST_SPELL_ENCHANTING, EFST_SUMMON_ELEMENTAL_ARDOR, EFST_SUMMON_ELEMENTAL_DILUVIO, EFST_SUMMON_ELEMENTAL_PROCELLA, EFST_SUMMON_ELEMENTAL_TERREMOTUS, EFST_SUMMON_ELEMENTAL_SERPENS, EFST_FLAMETECHNIC, EFST_FLAMETECHNIC_OPTION, EFST_FLAMEARMOR, EFST_FLAMEARMOR_OPTION, EFST_COLD_FORCE, EFST_COLD_FORCE_OPTION, EFST_CRYSTAL_ARMOR, EFST_CRYSTAL_ARMOR_OPTION, EFST_GRACE_BREEZE, EFST_GRACE_BREEZE_OPTION, EFST_EYES_OF_STORM, EFST_EYES_OF_STORM_OPTION, EFST_EARTH_CARE, EFST_EARTH_CARE_OPTION, EFST_STRONG_PROTECTION, EFST_STRONG_PROTECTION_OPTION, EFST_DEEP_POISONING, EFST_DEEP_POISONING_OPTION, EFST_POISON_SHIELD, EFST_POISON_SHIELD_OPTION, EFST_ABR_BATTLE_WARIOR, EFST_ABR_DUAL_CANNON, EFST_ABR_MOTHER_NET, EFST_ABR_INFINITY, EFST_ELEMENTAL_VEIL, EFST_RENOVATIO_EXT, EFST_HOMUN_TIME, EFST_POWER_ACCELERATION, EFST_MAX_HP_SP_AVOID, EFST_ADD_ALL_STATE, EFST_AID_PERIOD_POWER_ACCELERATION, EFST_AID_PERIOD_MAX_HP_SP_AVOID, EFST_AID_PERIOD_ADD_ALL_STATE, EFST_POISON_MIST, EFST_HACKANDSLASHER, EFST_GET_CNT_UNREAD_RETURN_RODEX_CHARDB, EFST_STONE_WALL, EFST_REUSE_LIMIT_I, EFST_OVERBRANDREADY, EFST_SHIELDSPELL, EFST_AUTOSHADOWSPELL_CHECK2, EFST_CLOUD_POISON, EFST_SPORE_EXPLOSION_DEBUFF, EFST_DEFSCROLL = 1321, EFST_MASSIVE_F_BLASTER = 1326, EFST_NOEQUIPWEAPON2 = 1330, EFST_NOEQUIPARMOR2, EFST_NOEQUIPSHIELD2, EFST_NOEQUIPSHOES2, EFST_NOEQUIPPENDANT2, EFST_NOEQUIPEARING2, EFST_NOEQUIPFULL2, EFST_CURSE_R_CUBE, EFST_CURSE_B_CUBE, EFST_KILLING_AURA, EFST_TOXIN_OF_MANDARA = 1341, EFST_GOLDENE_TONE, EFST_TEMPERING, EFST_NW_P_F_I, EFST_INTENSIVE_AIM, EFST_INTENSIVE_AIM_COUNT, EFST_GRENADE_FRAGMENT_1, EFST_GRENADE_FRAGMENT_2, EFST_GRENADE_FRAGMENT_3, EFST_GRENADE_FRAGMENT_4, EFST_GRENADE_FRAGMENT_5, EFST_GRENADE_FRAGMENT_6, EFST_AUTO_FIRING_LAUNCHEREFST, EFST_HIDDEN_CARD, EFST_NW_GRENADE_MASTERY, EFST_TALISMAN_OF_PROTECTION, EFST_TALISMAN_OF_WARRIOR, EFST_TALISMAN_OF_MAGICIAN, EFST_TALISMAN_OF_FIVE_ELEMENTS, EFST_T_FIRST_GOD, EFST_T_SECOND_GOD, EFST_T_THIRD_GOD, EFST_T_FOURTH_GOD, EFST_T_FIVETH_GOD, EFST_HEAVEN_AND_EARTH, EFST_HOGOGONG, EFST_MARINE_FESTIVAL, EFST_SANDY_FESTIVAL, EFST_KI_SUL_RAMPAGE, EFST_COLORS_OF_HYUN_ROK_1, EFST_COLORS_OF_HYUN_ROK_2, EFST_COLORS_OF_HYUN_ROK_3, EFST_COLORS_OF_HYUN_ROK_4, EFST_COLORS_OF_HYUN_ROK_5, EFST_COLORS_OF_HYUN_ROK_6, EFST_COLORS_OF_HYUN_ROK_BUFF, EFST_TEMPORARY_COMMUNION, EFST_BLESSING_OF_M_CREATURES, EFST_BLESSING_OF_M_C_DEBUFF, EFST_SHIELDCHAINRUSH, EFST_MISTYFROST, EFST_GROUNDGRAVITY, EFST_BREAKINGLIMIT, EFST_RULEBREAK, EFST_RISING_SUN, EFST_NOON_SUN, EFST_SUNSET_SUN, EFST_RISING_MOON, EFST_MIDNIGHT_MOON, EFST_DAWN_MOON, EFST_STAR_BURST, EFST_SKY_ENCHANT, EFST_SHADOW_CLOCK, EFST_SHINKIROU_CALL, EFST_NIGHTMARE, EFST_NOODLE_FES_1, EFST_NOODLE_FES_2, EFST_NOODLE_FES_3, EFST_NOODLE_FES_4, EFST_NOODLE_FES_5, EFST_RUSH_QUAKE1 = 1402, EFST_RUSH_QUAKE2, EFST_SBUNSHIN = 1415, EFST_MTP_W_POTION_100 = 1418, EFST_CHANGE_SIZE = 1420, EFST_CHANGE_SIZE_MONSTER, EFST_SHOW_EFFECT1, EFST_SHOW_EFFECT2, EFST_SHOW_EFFECT3, EFST_VR_SPEED, EFST_VR_ASPD, EFST_VR_MHP, EFST_VR_MSP, EFST_VR_HIT, EFST_VR_DEF, EFST_VR_MDEF, EFST_VR_BOOK001, EFST_VR_BOOK002, EFST_VR_BOOK003, EFST_VR_BOOK004, EFST_REUSE_LIMIT_VR_BOOK, EFST_VR_BOOK005 = 1439, EFST_VR_BOOK006, EFST_VR_BOOK007, EFST_VR_BOOK008, EFST_VR_BOOK009, EFST_ALL_T_STAT, EFST_P_ATK_PLUS, EFST_S_MATK_PLUS, EFST_C_RATE_PLUS, EFST_RESIST_PLUS, EFST_PVP_DUN_BUFF, EFST_TARGET_MARKER = 1453, EFST_BLOCK_SEAL, EFST_FROST_STORM, EFST_GROGGY, EFST_WARM_SHIELD, //1457 EFST_CONTENTS_1 = 1459, EFST_CONTENTS_2, EFST_CONTENTS_3, EFST_CONTENTS_4, EFST_CONTENTS_5, EFST_CONTENTS_6, EFST_CONTENTS_7, EFST_CONTENTS_8, EFST_CONTENTS_9, EFST_CONTENTS_10, EFST_CONTENTS_11, EFST_CONTENTS_12, EFST_CONTENTS_13, EFST_CONTENTS_14, EFST_CONTENTS_15, EFST_CONTENTS_16, EFST_CONTENTS_17, EFST_CONTENTS_18, EFST_CONTENTS_19, EFST_CONTENTS_20, EFST_CONTENTS_21, EFST_CONTENTS_22, EFST_CONTENTS_23, EFST_CONTENTS_24, EFST_CONTENTS_25, //1483 EFST_C_BUFF_1 = 1509, EFST_C_BUFF_2, EFST_CHASING = 1560, EFST_MYSTERY_POWDER = 1665, EFST_FIRE_CHARM_POWER = 1667, EFST_WATER_CHARM_POWER, EFST_WIND_CHARM_POWER, EFST_GROUND_CHARM_POWER, /// @APIHOOK_END /// Do not modify code above this, since it will be automatically generated by the API again EFST_MAX, }; /// JOINTBEAT stackable ailments enum e_joint_break : uint8 { BREAK_ANKLE = 0x01, ///< MoveSpeed reduced by 50% BREAK_WRIST = 0x02, ///< ASPD reduced by 25% BREAK_KNEE = 0x04, ///< MoveSpeed reduced by 30%, ASPD reduced by 10% BREAK_SHOULDER = 0x08, ///< DEF reduced by 50% BREAK_WAIST = 0x10, ///< DEF reduced by 25%, ATK reduced by 25% BREAK_NECK = 0x20, ///< Current attack does 2x damage, inflicts 'bleeding' for 30 seconds BREAK_FLAGS = BREAK_ANKLE | BREAK_WRIST | BREAK_KNEE | BREAK_SHOULDER | BREAK_WAIST | BREAK_NECK, }; extern short current_equip_item_index; extern uint32 current_equip_combo_pos; extern int current_equip_card_id; extern short current_equip_opt_index; //Status change option definitions (options are what makes status changes visible to chars //who were not on your field of sight when it happened) ///opt1: (BODYSTATE_*) Non stackable status changes. enum e_sc_opt1 : uint16 { OPT1_NONE = 0, OPT1_STONE = 1, //Petrified OPT1_FREEZE, OPT1_STUN, OPT1_SLEEP, //Aegis uses OPT1 = 5 to identify undead enemies (which also grants them immunity to the other opt1 changes) OPT1_STONEWAIT = 6, //Petrifying OPT1_BURNING, OPT1_IMPRISON, OPT1_MAX }; ///opt2: (HEALTHSTATE_*) Stackable status changes. enum e_sc_opt2 : uint16 { OPT2_NONE = 0x0, OPT2_POISON = 0x0001, OPT2_CURSE = 0x0002, OPT2_SILENCE = 0x0004, OPT2_SIGNUMCRUCIS = 0x0008, //Confusion OPT2_BLIND = 0x0010, OPT2_ANGELUS = 0x0020, OPT2_BLEEDING = 0x0040, OPT2_DPOISON = 0x0080, OPT2_FEAR = 0x0100, OPT2_MAX }; ///opt3: (SHOW_EFST_*) enum e_sc_opt3 : uint32 { OPT3_NORMAL = 0x0, OPT3_QUICKEN = 0x00000001, OPT3_OVERTHRUST = 0x00000002, OPT3_ENERGYCOAT = 0x00000004, OPT3_EXPLOSIONSPIRITS = 0x00000008, OPT3_STEELBODY = 0x00000010, OPT3_BLADESTOP = 0x00000020, OPT3_AURABLADE = 0x00000040, OPT3_BERSERK = 0x00000080, OPT3_LIGHTBLADE = 0x00000100, OPT3_MOONLIT = 0x00000200, OPT3_MARIONETTE = 0x00000400, OPT3_ASSUMPTIO = 0x00000800, OPT3_WARM = 0x00001000, OPT3_KAITE = 0x00002000, OPT3_BUNSIN = 0x00004000, OPT3_SOULLINK = 0x00008000, OPT3_UNDEAD = 0x00010000, OPT3_CONTRACT = 0x00020000, OPT3_MAX }; ///Option (EFFECTSTATE_*) enum e_option : uint32 { OPTION_NOTHING = 0x0, OPTION_SIGHT = 0x00000001, OPTION_HIDE = 0x00000002, OPTION_CLOAK = 0x00000004, OPTION_CART1 = 0x00000008, OPTION_FALCON = 0x00000010, OPTION_RIDING = 0x00000020, OPTION_INVISIBLE = 0x00000040, OPTION_CART2 = 0x00000080, OPTION_CART3 = 0x00000100, OPTION_CART4 = 0x00000200, OPTION_CART5 = 0x00000400, OPTION_ORCISH = 0x00000800, OPTION_WEDDING = 0x00001000, OPTION_RUWACH = 0x00002000, OPTION_CHASEWALK = 0x00004000, OPTION_FLYING = 0x00008000, //! NOTE: That clientside Flying and Xmas are 0x8000 for clients prior to 2007. OPTION_XMAS = 0x00010000, OPTION_TRANSFORM = 0x00020000, OPTION_SUMMER = 0x00040000, OPTION_DRAGON1 = 0x00080000, OPTION_WUG = 0x00100000, OPTION_WUGRIDER = 0x00200000, OPTION_MADOGEAR = 0x00400000, OPTION_DRAGON2 = 0x00800000, OPTION_DRAGON3 = 0x01000000, OPTION_DRAGON4 = 0x02000000, OPTION_DRAGON5 = 0x04000000, OPTION_HANBOK = 0x08000000, OPTION_OKTOBERFEST = 0x10000000, OPTION_SUMMER2 = 0x20000000, OPTION_MAX, // compound constant for older carts OPTION_CART = OPTION_CART1|OPTION_CART2|OPTION_CART3|OPTION_CART4|OPTION_CART5, // compound constants OPTION_DRAGON = OPTION_DRAGON1|OPTION_DRAGON2|OPTION_DRAGON3|OPTION_DRAGON4|OPTION_DRAGON5, OPTION_COSTUME = OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK|OPTION_OKTOBERFEST|OPTION_SUMMER2, }; ///Defines for the manner system [Skotlex] enum manner_flags { MANNER_NOCHAT = 0x01, MANNER_NOSKILL = 0x02, MANNER_NOCOMMAND = 0x04, MANNER_NOITEM = 0x08, MANNER_NOROOM = 0x10, }; /// Status Change State Flags enum e_scs_flag : uint8 { SCS_NONE = 0, SCS_NOMOVECOND, ///< cond flag for SCS_NOMOVE SCS_NOMOVE, ///< unit unable to move SCS_NOPICKITEMCOND, ///< cond flag for SCS_NOPICKITEM SCS_NOPICKITEM, ///< player unable to pick up items SCS_NODROPITEMCOND, ///< cond flag for SCS_NODROPITEM SCS_NODROPITEM, ///< player unable to drop items SCS_NOCASTCOND, ///< cond flag for SCS_NOCAST SCS_NOCAST, ///< unit unable to cast skills SCS_NOCHAT, ///< unit can't talk SCS_NOCHATCOND, ///< cond flag for SCS_NOCHAT SCS_NOEQUIPITEM, ///< player can't puts on equip SCS_NOEQUIPITEMCOND, ///< cond flag for SCS_NOEQUIPITEM SCS_NOUNEQUIPITEM, ///< player can't puts off equip SCS_NOUNEQUIPITEMCOND, ///< cond flag for SCS_NOUNEQUIPITEM SCS_NOCONSUMEITEM, ///< player can't consumes equip SCS_NOCONSUMEITEMCOND, ///< cond flag for SCS_NOCONSUMEITEM SCS_NOATTACK, ///< unit can't attack SCS_NOATTACKCOND, ///< cond flag for SCS_NOATTACK SCS_NOWARP, ///< unit can't warp SCS_NOWARPCOND, ///< cond flag for SCS_NOWARP SCS_NODEATHPENALTY, ///< player doesn't experience EXP loss SCS_NODEATHPENALTYCOND, ///< cond flag for SCS_NODEATHPENALTYCOND SCS_NOINTERACT, ///< player can't sit/stand/talk to NPC SCS_NOINTERACTCOND, ///< cond flag for SCS_NOINTERACT SCS_MAX }; ///Define flags for the status_calc_bl function. [Skotlex] enum e_scb_flag : uint8 { SCB_NONE = 0, SCB_BASE, SCB_MAXHP, SCB_MAXSP, SCB_STR, SCB_AGI, SCB_VIT, SCB_INT, SCB_DEX, SCB_LUK, SCB_BATK, SCB_WATK, SCB_MATK, SCB_HIT, SCB_FLEE, SCB_DEF, SCB_DEF2, SCB_MDEF, SCB_MDEF2, SCB_SPEED, SCB_ASPD, SCB_DSPD, SCB_CRI, SCB_FLEE2, SCB_ATK_ELE, SCB_DEF_ELE, SCB_MODE, SCB_SIZE, SCB_RACE, SCB_RANGE, SCB_REGEN, // 4th Job T.Stat/T.Sub-Stat Flags SCB_MAXAP, SCB_POW, SCB_STA, SCB_WIS, SCB_SPL, SCB_CON, SCB_CRT, SCB_PATK, SCB_SMATK, SCB_RES, SCB_MRES, SCB_HPLUS, SCB_CRATE, // Extra Flags SCB_DYE, // force cloth-dye change to 0 to avoid client crashes. SCB_MAX, }; enum e_status_calc_opt : uint8 { SCO_NONE = 0x0, SCO_FIRST = 0x1, ///< Trigger the calculations that should take place only onspawn/once, process base status initialization code SCO_FORCE = 0x2, ///< Only relevant to BL_PC types, ensures call bypasses the queue caused by delayed damage }; /// Flags for status_change_start and status_get_sc_def enum e_status_change_start_flags : int64 { SCSTART_NONE = 0x0, SCSTART_NOAVOID = 0x01, /// Cannot be avoided (it has to start) SCSTART_NOTICKDEF = 0x02, /// Tick should not be reduced (by statuses or bonuses) SCSTART_LOADED = 0x04, /// When sc_data loaded (fetched from table), no values (val1 ~ val4) have to be altered/recalculate SCSTART_NORATEDEF = 0x08, /// Rate should not be reduced (by statuses or bonuses) SCSTART_NOICON = 0x10, /// Status icon won't be sent to client }; /// Enum for status_change_clear_buffs enum e_status_change_clear_buffs_flags : int64 { SCCB_BUFFS = 0x01, SCCB_DEBUFFS = 0x02, SCCB_REFRESH = 0x04, SCCB_CHEM_PROTECT = 0x08, SCCB_LUXANIMA = 0x10, SCCB_HERMODE = 0x20, }; ///Enum for bonus_script's flag [Cydh] enum e_bonus_script_flags : uint32 { BSF_REM_ON_DEAD = 0x001, ///< Removed when dead BSF_REM_ON_DISPELL = 0x002, ///< Removed by Dispell BSF_REM_ON_CLEARANCE = 0x004, ///< Removed by Clearance BSF_REM_ON_LOGOUT = 0x008, ///< Removed when player logged out BSF_REM_ON_BANISHING_BUSTER = 0x010, ///< Removed by Banishing Buster BSF_REM_ON_REFRESH = 0x020, ///< Removed by Refresh BSF_REM_ON_LUXANIMA = 0x040, ///< Removed by Luxanima BSF_REM_ON_MADOGEAR = 0x080, ///< Removed when Madogear is activated or deactivated BSF_REM_ON_DAMAGED = 0x100, ///< Removed when receive damage BSF_PERMANENT = 0x200, ///< Cannot be removed by sc_end SC_ALL // These flags cannot be stacked, BSF_FORCE_REPLACE has highest priority to check if YOU force to add both BSF_FORCE_REPLACE = 0x400, ///< Force to replace duplicated script by expanding the duration BSF_FORCE_DUPLICATE = 0x800, ///< Force to add duplicated script // These flags aren't part of 'bonus_script' scripting flags BSF_REM_ALL = 0x0, ///< Remove all bonus script BSF_REM_BUFF = 0x4000, ///< Remove positive buff if battle_config.debuff_on_logout&1 BSF_REM_DEBUFF = 0x8000, ///< Remove negative buff if battle_config.debuff_on_logout&2 }; ///Enum for status_get_hpbonus and status_get_spbonus enum e_status_bonus { STATUS_BONUS_FIX = 0, STATUS_BONUS_RATE = 1, }; ///Enum of Status Change Flags [Cydh] enum e_status_change_flag : uint16 { SCF_NONE = 0, SCF_BLEFFECT, SCF_DISPLAYPC, SCF_NOCLEARBUFF, SCF_NOREMOVEONDEAD, SCF_NODISPELL, SCF_NOCLEARANCE, SCF_NOBANISHINGBUSTER, SCF_NOSAVE, SCF_NOSAVEINFINITE, SCF_REMOVEONDAMAGED, SCF_REMOVEONREFRESH, SCF_REMOVEONLUXANIMA, SCF_STOPATTACKING, SCF_STOPCASTING, SCF_STOPWALKING, SCF_BOSSRESIST, SCF_MVPRESIST, SCF_SETSTAND, SCF_FAILEDMADO, SCF_DEBUFF, SCF_REMOVEONCHANGEMAP, SCF_REMOVEONMAPWARP, SCF_REMOVECHEMICALPROTECT, SCF_OVERLAPIGNORELEVEL, SCF_SENDOPTION, SCF_ONTOUCH, SCF_UNITMOVE, SCF_NONPLAYER, SCF_SENDLOOK, SCF_DISPLAYNPC, SCF_REQUIREWEAPON, SCF_REQUIRESHIELD, SCF_MOBLOSETARGET, SCF_REMOVEELEMENTALOPTION, SCF_SUPERNOVICEANGEL, SCF_TAEKWONANGEL, SCF_MADOCANCEL, SCF_MADOENDCANCEL, SCF_RESTARTONMAPWARP, SCF_SPREADEFFECT, SCF_SENDVAL1, SCF_SENDVAL2, SCF_SENDVAL3, SCF_NOFORCEDEND, SCF_NOWARNING, SCF_REMOVEONUNEQUIP, SCF_REMOVEONUNEQUIPWEAPON, SCF_REMOVEONUNEQUIPARMOR, SCF_REMOVEONHERMODE, SCF_REQUIRENOWEAPON, SCF_REMOVEFROMHOMONWARP, SCF_REMOVEFROMHOMONMAPWARP, SCF_MAX }; /// Struct of SC configs [Cydh] struct s_status_change_db { sc_type type; ///< SC_ efst_type icon; ///< EFST_ std::bitset state; ///< SCS_ std::bitset calc_flag; ///< SCB_ flags uint16 opt1; ///< OPT1_ uint16 opt2; ///< OPT2_ uint32 opt3; ///< OPT3_ uint32 look; ///< OPTION_ Changelook std::bitset flag; ///< SCF_ Flags, enum e_status_change_flag uint16 skill_id; ///< Associated skill for (addeff) duration lookups std::vector endonstart; ///< List of SC that will be ended when this SC is activated std::vector fail; ///< List of SC that causing this SC cannot be activated std::vector endreturn; ///< List of SC that will be ended when this SC is activated and then immediately return std::vector endonend; ///< List of SC that will be ended when this SC ends t_tick min_duration; ///< Minimum duration effect (after all status reduction) uint16 min_rate; ///< Minimum rate to be applied (after all status reduction) struct script_code* script; ///< Script to execute, when starting the status change. s_status_change_db(); ~s_status_change_db(); }; class StatusDatabase : public TypesafeCachedYamlDatabase { public: StatusDatabase() : TypesafeCachedYamlDatabase("STATUS_DB", 4, 3) { // All except BASE and extra flags. SCB_BATTLE.set(); SCB_BATTLE.reset(SCB_BASE); SCB_BATTLE.reset(SCB_DYE); // All except extra flags. SCB_ALL.set(); SCB_ALL.reset(SCB_DYE); } const std::string getDefaultLocation() override; uint64 parseBodyNode(const ryml::NodeRef& node) override; void loadingFinished() override; // Determine who will receive a clif_status_change packet for effects that require one to display correctly uint16 StatusRelevantBLTypes[EFST_MAX]; // Extras efst_type getIcon(sc_type type); std::bitset getCalcFlag(sc_type type); std::vector getEndOnStart(sc_type type); uint16 getSkill(sc_type type); bool hasSCF(status_change *sc, e_status_change_flag flag); void removeByStatusFlag(block_list *bl, std::vector flag); void changeSkillTree(map_session_data *sd, int32 class_ = 0); bool validateStatus(sc_type type); std::bitset getSCB_BATTLE(); std::bitset getSCB_ALL(); private: std::bitset SCB_BATTLE, SCB_ALL; }; extern StatusDatabase status_db; /// Enum for status_calc_weight and status_calc_cart_weight enum e_status_calc_weight_opt { CALCWT_NONE = 0x0, CALCWT_ITEM = 0x1, ///< Recalculate item weight CALCWT_MAXBONUS = 0x2, ///< Recalculate max weight based on skill/status/configuration bonuses CALCWT_CARTSTATE = 0x4, ///< Whether to check for cart state }; // Enum for refine chance types enum e_refine_chance_type { REFINE_CHANCE_NORMAL = 0, REFINE_CHANCE_ENRICHED, REFINE_CHANCE_EVENT_NORMAL, REFINE_CHANCE_EVENT_ENRICHED, REFINE_CHANCE_TYPE_MAX }; ///Define to determine who gets HP/SP consumed on doing skills/etc. [Skotlex] #define BL_CONSUME (BL_PC|BL_HOM|BL_MER|BL_ELEM) ///Define to determine who has regen #define BL_REGEN (BL_PC|BL_HOM|BL_MER|BL_ELEM) ///Define to determine who will receive a clif_status_change packet for effects that require one to display correctly #define BL_SCEFFECT (BL_PC|BL_HOM|BL_MER|BL_MOB|BL_ELEM) /** Basic damage info of a weapon * Required because players have two of these, one in status_data * and another for their left hand weapon. */ struct weapon_atk { unsigned short atk, atk2; unsigned short range; unsigned char ele; #ifdef RENEWAL unsigned short matk; unsigned char wlv; #endif }; ///For holding basic status (which can be modified by status changes) struct status_data { // see status_cpy before adding members before hp and sp uint32 hp; uint32 sp; uint32 ap; uint32 max_hp; uint32 max_sp; uint32 max_ap; short str, agi, vit, int_, dex, luk, pow, sta, wis, spl, con, crt, eatk; unsigned short batk, #ifdef RENEWAL watk, watk2, #endif matk_min, matk_max, speed, amotion, clientamotion, adelay, dmotion; int mode; short hit, flee, cri, flee2, def2, mdef2, #ifdef RENEWAL_ASPD aspd_rate2, #endif aspd_rate, patk, smatk, res, mres, hplus, crate; /** * defType is RENEWAL dependent and defined in src/config/const.hpp **/ defType def,mdef; unsigned char def_ele, ele_lv, size, race, /// see enum e_race class_; /// see enum e_classAE struct weapon_atk rhw, lhw; //Right Hand/Left Hand Weapon. }; ///Additional regen data that only players have. struct regen_data_sub { unsigned short hp,sp; //tick accumulation before healing. struct { uint32 hp; uint32 sp; } tick; //Regen rates. n/100 struct { unsigned short hp,sp; } rate; }; ///Regen data struct regen_data { unsigned char flag; //Marks what stuff you may heal or not. unsigned short hp,sp,shp,ssp; //tick accumulation before healing. struct { t_tick hp, sp; //time of last natural recovery uint32 shp; uint32 ssp; } tick; //Regen rates. n/100 struct { unsigned short hp, sp, shp, ssp; } rate; struct { unsigned walk:1; //Can you regen even when walking? unsigned gc:1; //Tags when you should have double regen due to GVG castle unsigned overweight :2; //overweight state (1: 50%, 2: 90%) unsigned block :2; //Block regen flag (1: Hp, 2: Sp) } state; //skill-regen, sitting-skill-regen (since not all chars with regen need it) struct regen_data_sub *sregen, *ssregen; }; ///Status display entry struct sc_display_entry { enum sc_type type; int val1, val2, val3; }; ///Status change entry struct status_change_entry { int timer; int val1,val2,val3,val4; }; ///Status change class status_change { public: uint32 option;// effect state (bitfield) uint32 opt3;// skill state (bitfield) unsigned short opt1;// body state unsigned short opt2;// health state (bitfield) unsigned char count; sc_type lastEffect; // Used to check for stacking damageable SC on the same attack int32 lastEffectTimer; // Timer for lastEffect //! TODO: See if it is possible to implement the following SC's without requiring extra parameters while the SC is inactive. struct { uint8 move; uint8 pickup; uint8 drop; uint8 cast; uint8 chat; uint8 equip; uint8 unequip; uint8 consume; uint8 attack; uint8 warp; uint8 deathpenalty; uint8 interact; } cant;/* status change state flags */ //int sg_id; //ID of the previous Storm gust that hit you short comet_x, comet_y; // Point where src casted Comet - required to calculate damage from this point /** * The Storm Gust counter was dropped in renewal **/ #ifndef RENEWAL unsigned char sg_counter; //Storm gust counter (previous hits from storm gust) #endif private: struct status_change_entry *data[SC_MAX]; std::pair lastStatus; // last-fetched status public: status_change(); status_change_entry * getSCE(enum sc_type type); status_change_entry * getSCE(uint32 type); status_change_entry * createSCE(enum sc_type type); void deleteSCE(enum sc_type type); void clearSCE(enum sc_type type); }; #ifndef ONLY_CONSTANTS int status_damage( struct block_list *src, struct block_list *target, int64 dhp, int64 dsp, int64 dap, t_tick walkdelay, int flag, uint16 skill_id ); static int status_damage( struct block_list *src, struct block_list *target, int64 dhp, int64 dsp, t_tick walkdelay, int flag, uint16 skill_id ){ return status_damage( src, target, dhp, dsp, 0, walkdelay, flag, skill_id ); } //Define for standard HP damage attacks. static int status_fix_damage( struct block_list *src, struct block_list *target, int64 hp, t_tick walkdelay, uint16 skill_id ){ return status_damage( src, target, hp, 0, walkdelay, 0, skill_id ); } //Define for standard SP damage attacks. static int status_fix_spdamage( struct block_list *src, struct block_list *target, int64 sp, t_tick walkdelay, uint16 skill_id ){ return status_damage( src, target, 0, sp, walkdelay, 0, skill_id ); } //Define for standard AP damage attacks. static int status_fix_apdamage( struct block_list *src, struct block_list *target, int64 ap, t_tick walkdelay, uint16 skill_id ){ return status_damage( src, target, 0, 0, ap, walkdelay, 0, skill_id ); } //Define for standard HP/SP/AP damage triggers. static int status_zap( struct block_list* bl, int64 hp, int64 sp, int64 ap = 0 ){ return status_damage( nullptr, bl, hp, sp, ap, 0, 1, 0 ); } //Define for standard HP/SP skill-related cost triggers (mobs require no HP/SP/AP to use skills) int64 status_charge(struct block_list* bl, int64 hp, int64 sp); int status_percent_change(struct block_list *src, struct block_list *target, int8 hp_rate, int8 sp_rate, int8 ap_rate, uint8 flag); //Easier handling of status_percent_change static int status_percent_heal( struct block_list* bl, int8 hp_rate, int8 sp_rate, int8 ap_rate = 0 ){ return status_percent_change( nullptr, bl, -(hp_rate), -(sp_rate), -(ap_rate), 0 ); } /// Deals % damage from 'src' to 'target'. If rate is > 0 is % of current HP/SP/AP, < 0 % of MaxHP/MaxSP/MaxAP static int status_percent_damage( struct block_list* src, struct block_list* target, int8 hp_rate, int8 sp_rate, bool kill ){ return status_percent_change( src, target, hp_rate, sp_rate, 0, kill ? 1 : 2 ); } static int status_percent_damage( struct block_list* src, struct block_list* target, int8 hp_rate, int8 sp_rate, int8 ap_rate, bool kill ){ return status_percent_change( src, target, hp_rate, sp_rate, ap_rate, kill ? 1 : 2 ); } //Instant kill with no drops/exp/etc static int status_kill( struct block_list* bl ){ return status_percent_damage( nullptr, bl, 100, 0, 0, true ); } //Used to set the hp/sp/ap of an object to an absolute value (can't kill) int status_set_hp(struct block_list *bl, uint32 hp, int flag); int status_set_maxhp(struct block_list *bl, uint32 hp, int flag); int status_set_sp(struct block_list *bl, uint32 sp, int flag); int status_set_maxsp(struct block_list *bl, uint32 hp, int flag); int status_set_ap(struct block_list *bl, uint32 ap, int flag); int status_set_maxap(struct block_list *bl, uint32 ap, int flag); int status_heal( struct block_list *bl,int64 hhp,int64 hsp, int64 hap, int flag ); static int status_heal( struct block_list *bl,int64 hhp,int64 hsp, int flag ){ return status_heal( bl, hhp, hsp, 0, flag ); } int status_revive(struct block_list *bl, unsigned char per_hp, unsigned char per_sp, unsigned char per_ap = 0); struct regen_data *status_get_regen_data(struct block_list *bl); status_data* status_get_status_data(block_list& bl); struct status_data *status_get_base_status(struct block_list *bl); const char * status_get_name(struct block_list *bl); int status_get_class(struct block_list *bl); int status_get_lv(struct block_list *bl); #define status_get_range(bl) status_get_status_data(*bl)->rhw.range #define status_get_hp(bl) status_get_status_data(*bl)->hp #define status_get_max_hp(bl) status_get_status_data(*bl)->max_hp #define status_get_sp(bl) status_get_status_data(*bl)->sp #define status_get_max_sp(bl) status_get_status_data(*bl)->max_sp #define status_get_ap(bl) status_get_status_data(*bl)->ap #define status_get_max_ap(bl) status_get_status_data(*bl)->max_ap #define status_get_str(bl) status_get_status_data(*bl)->str #define status_get_agi(bl) status_get_status_data(*bl)->agi #define status_get_vit(bl) status_get_status_data(*bl)->vit #define status_get_int(bl) status_get_status_data(*bl)->int_ #define status_get_dex(bl) status_get_status_data(*bl)->dex #define status_get_luk(bl) status_get_status_data(*bl)->luk #define status_get_pow(bl) status_get_status_data(*bl)->pow #define status_get_sta(bl) status_get_status_data(*bl)->sta #define status_get_wis(bl) status_get_status_data(*bl)->wis #define status_get_spl(bl) status_get_status_data(*bl)->spl #define status_get_con(bl) status_get_status_data(*bl)->con #define status_get_crt(bl) status_get_status_data(*bl)->crt #define status_get_hit(bl) status_get_status_data(*bl)->hit #define status_get_flee(bl) status_get_status_data(*bl)->flee defType status_get_def(struct block_list *bl); #define status_get_mdef(bl) status_get_status_data(*bl)->mdef #define status_get_flee2(bl) status_get_status_data(*bl)->flee2 #define status_get_def2(bl) status_get_status_data(*bl)->def2 #define status_get_mdef2(bl) status_get_status_data(*bl)->mdef2 #define status_get_critical(bl) status_get_status_data(*bl)->cri #define status_get_batk(bl) status_get_status_data(*bl)->batk #define status_get_watk(bl) status_get_status_data(*bl)->rhw.atk #define status_get_watk2(bl) status_get_status_data(*bl)->rhw.atk2 #define status_get_matk_max(bl) status_get_status_data(*bl)->matk_max #define status_get_matk_min(bl) status_get_status_data(*bl)->matk_min #define status_get_lwatk(bl) status_get_status_data(*bl)->lhw.atk #define status_get_lwatk2(bl) status_get_status_data(*bl)->lhw.atk2 unsigned short status_get_speed(struct block_list *bl); #define status_get_adelay(bl) status_get_status_data(*bl)->adelay #define status_get_amotion(bl) status_get_status_data(*bl)->amotion #define status_get_clientamotion(bl) status_get_status_data(*bl)->clientamotion #define status_get_dmotion(bl) status_get_status_data(*bl)->dmotion #define status_get_patk(bl) status_get_status_data(*bl)->patk #define status_get_smatk(bl) status_get_status_data(*bl)->smatk #define status_get_res(bl) status_get_status_data(*bl)->res #define status_get_mres(bl) status_get_status_data(*bl)->mres #define status_get_hplus(bl) status_get_status_data(*bl)->hplus #define status_get_crate(bl) status_get_status_data(*bl)->crate #define status_get_element(bl) status_get_status_data(*bl)->def_ele #define status_get_element_level(bl) status_get_status_data(*bl)->ele_lv unsigned char status_calc_attack_element(struct block_list *bl, status_change *sc, int element); #define status_get_attack_sc_element(bl, sc) status_calc_attack_element(bl, sc, 0) #define status_get_attack_element(bl) status_get_status_data(*bl)->rhw.ele #define status_get_attack_lelement(bl) status_get_status_data(*bl)->lhw.ele #define status_get_race(bl) status_get_status_data(*bl)->race #define status_get_class_(bl) status_get_status_data(*bl)->class_ #define status_get_size(bl) status_get_status_data(*bl)->size #define status_get_mode(bl) status_get_status_data(*bl)->mode #define status_has_mode(status,md) (((status)->mode&(md)) == (md)) #define status_bl_has_mode(bl,md) status_has_mode(status_get_status_data(*(bl)),(md)) #define status_get_homstr(bl) (status->str + ((TBL_HOM*)bl)->homunculus.str_value) #define status_get_homagi(bl) (status->agi + ((TBL_HOM*)bl)->homunculus.agi_value) #define status_get_homvit(bl) (status->vit + ((TBL_HOM*)bl)->homunculus.vit_value) #define status_get_homint(bl) (status->int_ + ((TBL_HOM*)bl)->homunculus.int_value) #define status_get_homdex(bl) (status->dex + ((TBL_HOM*)bl)->homunculus.dex_value) #define status_get_homluk(bl) (status->luk + ((TBL_HOM*)bl)->homunculus.luk_value) int status_get_party_id(struct block_list *bl); int status_get_guild_id(struct block_list *bl); int status_get_emblem_id(struct block_list *bl); std::vector status_get_race2(struct block_list *bl); struct view_data *status_get_viewdata(struct block_list *bl); void status_set_viewdata(struct block_list *bl, int class_); void status_change_init(struct block_list *bl); status_change *status_get_sc(struct block_list *bl); bool status_isdead(block_list &bl); int status_isimmune(struct block_list *bl); t_tick status_get_sc_def(struct block_list *src,struct block_list *bl, enum sc_type type, int rate, t_tick tick, unsigned char flag); int status_change_start(struct block_list* src, struct block_list* bl,enum sc_type type,int rate,int val1,int val2,int val3,int val4,t_tick duration,unsigned char flag, int32 delay = 0); //Short version, receives rate in 1->100 range, and does not uses a flag setting. static int sc_start(block_list *src, block_list *bl, sc_type type, int32 rate, int32 val1, t_tick duration, int32 delay = 0) { return status_change_start(src, bl, type, 100 * rate, val1, 0, 0, 0, duration, SCSTART_NONE, delay); } static int sc_start2(block_list *src, block_list *bl, sc_type type, int32 rate, int32 val1, int32 val2, t_tick duration, int32 delay = 0) { return status_change_start(src, bl, type, 100 * rate, val1, val2, 0, 0, duration, SCSTART_NONE, delay); } static int sc_start4(block_list *src, block_list *bl, sc_type type, int32 rate, int32 val1, int32 val2, int32 val3, int32 val4, t_tick duration, int32 delay = 0) { return status_change_start(src, bl, type, 100 * rate, val1, val2, val3, val4, duration, SCSTART_NONE, delay); } int status_change_end(struct block_list* bl, enum sc_type type, int tid = INVALID_TIMER); TIMER_FUNC(status_change_timer); int status_change_timer_sub(struct block_list* bl, va_list ap); int status_change_clear(struct block_list* bl, int type); void status_change_clear_buffs(struct block_list* bl, uint8 type); void status_change_clear_onChangeMap(struct block_list *bl, status_change *sc); TIMER_FUNC(status_clear_lastEffect_timer); #define status_calc_mob(md, opt) status_calc_bl_(&(md)->bl, status_db.getSCB_ALL(), opt) #define status_calc_pet(pd, opt) status_calc_bl_(&(pd)->bl, status_db.getSCB_ALL(), opt) #define status_calc_pc(sd, opt) status_calc_bl_(&(sd)->bl, status_db.getSCB_ALL(), opt) #define status_calc_homunculus(hd, opt) status_calc_bl_(&(hd)->bl, status_db.getSCB_ALL(), opt) #define status_calc_mercenary(md, opt) status_calc_bl_(&(md)->bl, status_db.getSCB_ALL(), opt) #define status_calc_elemental(ed, opt) status_calc_bl_(&(ed)->bl, status_db.getSCB_ALL(), opt) #define status_calc_npc(nd, opt) status_calc_bl_(&(nd)->bl, status_db.getSCB_ALL(), opt) bool status_calc_weight(map_session_data *sd, enum e_status_calc_weight_opt flag); bool status_calc_cart_weight(map_session_data *sd, enum e_status_calc_weight_opt flag); void status_calc_bl_(struct block_list *bl, std::bitset flag, uint8 opt = SCO_NONE); int status_calc_mob_(struct mob_data* md, uint8 opt); void status_calc_pet_(struct pet_data* pd, uint8 opt); int status_calc_pc_(map_session_data* sd, uint8 opt); int status_calc_homunculus_(struct homun_data *hd, uint8 opt); int status_calc_mercenary_(s_mercenary_data *md, uint8 opt); int status_calc_elemental_(s_elemental_data *ed, uint8 opt); int status_calc_npc_(struct npc_data *nd, uint8 opt); static void status_calc_bl(block_list *bl, std::vector flags) { static std::bitset temp; temp.reset(); for (const auto &scb : flags) { temp.set(scb); } status_calc_bl_(bl, temp); } void status_calc_misc(struct block_list *bl, struct status_data *status, int level); void status_calc_regen(struct block_list *bl, struct status_data *status, struct regen_data *regen); void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, status_change *sc); void status_calc_state(struct block_list *bl, status_change *sc, std::bitset flag, bool start); void status_calc_slave_mode(mob_data& md); bool status_check_skilluse(struct block_list *src, struct block_list *target, uint16 skill_id, int flag); int status_check_visibility(struct block_list *src, struct block_list *target); int status_change_spread(block_list *src, block_list *bl); #ifndef RENEWAL unsigned short status_base_matk_min(const struct status_data* status); unsigned short status_base_matk_max(const struct status_data* status); #else uint32 status_weapon_atk(struct weapon_atk wa, map_session_data *sd); unsigned short status_base_atk_min(struct block_list *bl, const struct status_data* status, int level); unsigned short status_base_atk_max(struct block_list *bl, const struct status_data* status, int level); unsigned short status_base_matk_min(struct block_list *bl, const struct status_data* status, int level); unsigned short status_base_matk_max(struct block_list *bl, const struct status_data* status, int level); #endif uint16 status_calc_consumablematk( status_change *sc, int32 matk ); uint16 status_calc_pseudobuff_matk( map_session_data *sd, status_change *sc, int32 matk ); unsigned short status_base_atk(const struct block_list *bl, const struct status_data *status, int level); // Status changes accessors for StatusChange database uint16 status_efst_get_bl_type(enum efst_type efst); void status_readdb( bool reload = false ); void do_init_status(void); void do_final_status(void); #endif /* ONLY_CONSTANTS */ #endif /* STATUS_HPP */