diff options
Diffstat (limited to 'src/map/skill.h')
-rw-r--r-- | src/map/skill.h | 1863 |
1 files changed, 1863 insertions, 0 deletions
diff --git a/src/map/skill.h b/src/map/skill.h new file mode 100644 index 000000000..dc7499857 --- /dev/null +++ b/src/map/skill.h @@ -0,0 +1,1863 @@ +// Copyright (c) Athena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#ifndef _SKILL_H_ +#define _SKILL_H_ + +#include "../common/mmo.h" // MAX_SKILL, struct square +#include "map.h" // struct block_list +struct map_session_data; +struct homun_data; +struct skill_unit; +struct skill_unit_group; +struct status_change_entry; + +#define MAX_SKILL_DB MAX_SKILL +#define MAX_SKILL_PRODUCE_DB 270 +#define MAX_PRODUCE_RESOURCE 12 +#define MAX_SKILL_ARROW_DB 150 +#define MAX_ARROW_RESOURCE 5 +#define MAX_SKILL_ABRA_DB 350 +#define MAX_SKILL_IMPROVISE_DB 50 + +#define MAX_SKILL_LEVEL 100 + +//Constants to identify the skill's inf value: +enum e_skill_inf +{ + INF_ATTACK_SKILL = 0x01, + INF_GROUND_SKILL = 0x02, + INF_SELF_SKILL = 0x04, // Skills casted on self where target is automatically chosen + // 0x08 not assigned + INF_SUPPORT_SKILL = 0x10, + INF_TARGET_TRAP = 0x20, +}; + +//Constants to identify a skill's nk value (damage properties) +//The NK value applies only to non INF_GROUND_SKILL skills +//when determining skill castend function to invoke. +enum e_skill_nk +{ + NK_NO_DAMAGE = 0x01, + NK_SPLASH = 0x02|0x04, // 0x4 = splash & split + NK_SPLASHSPLIT = 0x04, + NK_NO_CARDFIX_ATK = 0x08, + NK_NO_ELEFIX = 0x10, + NK_IGNORE_DEF = 0x20, + NK_IGNORE_FLEE = 0x40, + NK_NO_CARDFIX_DEF = 0x80, +}; + +//A skill with 3 would be no damage + splash: area of effect. +//Constants to identify a skill's inf2 value. +enum e_skill_inf2 +{ + INF2_QUEST_SKILL = 0x0001, + INF2_NPC_SKILL = 0x0002, //NPC skills are those that players can't have in their skill tree. + INF2_WEDDING_SKILL = 0x0004, + INF2_SPIRIT_SKILL = 0x0008, + INF2_GUILD_SKILL = 0x0010, + INF2_SONG_DANCE = 0x0020, + INF2_ENSEMBLE_SKILL = 0x0040, + INF2_TRAP = 0x0080, + INF2_TARGET_SELF = 0x0100, //Refers to ground placed skills that will target the caster as well (like Grandcross) + INF2_NO_TARGET_SELF = 0x0200, + INF2_PARTY_ONLY = 0x0400, + INF2_GUILD_ONLY = 0x0800, + INF2_NO_ENEMY = 0x1000, + INF2_NOLP = 0x2000, // Spells that can ignore Land Protector + INF2_CHORUS_SKILL = 0x4000, // Chorus skill +}; + +//Walk intervals at which chase-skills are attempted to be triggered. +#define WALK_SKILL_INTERVAL 5 + +// Flags passed to skill_attack/skill_area_sub +enum e_skill_display +{ + SD_LEVEL = 0x1000, // skill_attack will send -1 instead of skill level (affects display of some skills) + SD_ANIMATION = 0x2000, // skill_attack will use '5' instead of the skill's 'type' (this makes skills show an animation) + SD_SPLASH = 0x4000, // skill_area_sub will count targets in skill_area_temp[2] + SD_PREAMBLE = 0x8000, // skill_area_sub will transmit a 'magic' damage packet (-30000 dmg) for the first target selected +}; + +#define MAX_SKILL_ITEM_REQUIRE 10 +struct skill_condition { + int weapon,ammo,ammo_qty,hp,sp,zeny,spiritball,mhp,state; + int itemid[MAX_SKILL_ITEM_REQUIRE],amount[MAX_SKILL_ITEM_REQUIRE]; +}; + +// Database skills + +struct s_skill_db { + char name[NAME_LENGTH]; + char desc[40]; + int range[MAX_SKILL_LEVEL],hit,inf,element[MAX_SKILL_LEVEL],nk,splash[MAX_SKILL_LEVEL],max; + int num[MAX_SKILL_LEVEL]; + int cast[MAX_SKILL_LEVEL],walkdelay[MAX_SKILL_LEVEL],delay[MAX_SKILL_LEVEL]; +#ifdef RENEWAL_CAST + int fixed_cast[MAX_SKILL_LEVEL]; +#endif + int upkeep_time[MAX_SKILL_LEVEL],upkeep_time2[MAX_SKILL_LEVEL],cooldown[MAX_SKILL_LEVEL]; + int castcancel,cast_def_rate; + int inf2,maxcount[MAX_SKILL_LEVEL],skill_type; + int blewcount[MAX_SKILL_LEVEL]; + int hp[MAX_SKILL_LEVEL],sp[MAX_SKILL_LEVEL],mhp[MAX_SKILL_LEVEL],hp_rate[MAX_SKILL_LEVEL],sp_rate[MAX_SKILL_LEVEL],zeny[MAX_SKILL_LEVEL]; + int weapon,ammo,ammo_qty[MAX_SKILL_LEVEL],state,spiritball[MAX_SKILL_LEVEL]; + int itemid[MAX_SKILL_ITEM_REQUIRE],amount[MAX_SKILL_ITEM_REQUIRE]; + int castnodex[MAX_SKILL_LEVEL], delaynodex[MAX_SKILL_LEVEL]; + int nocast; + int unit_id[2]; + int unit_layout_type[MAX_SKILL_LEVEL]; + int unit_range[MAX_SKILL_LEVEL]; + int unit_interval; + int unit_target; + int unit_flag; +}; +extern struct s_skill_db skill_db[MAX_SKILL_DB]; + +#define MAX_SKILL_UNIT_LAYOUT 50 +#define MAX_SQUARE_LAYOUT 5 // 11*11 Placement of a maximum unit +#define MAX_SKILL_UNIT_COUNT ((MAX_SQUARE_LAYOUT*2+1)*(MAX_SQUARE_LAYOUT*2+1)) +struct s_skill_unit_layout { + int count; + int dx[MAX_SKILL_UNIT_COUNT]; + int dy[MAX_SKILL_UNIT_COUNT]; +}; + +#define MAX_SKILLTIMERSKILL 15 +struct skill_timerskill { + int timer; + int src_id; + int target_id; + int map; + short x,y; + uint16 skill_id,skill_lv; + int type; // a BF_ type (NOTE: some places use this as general-purpose storage...) + int flag; +}; + +#define MAX_SKILLUNITGROUP 25 +struct skill_unit_group { + int src_id; + int party_id; + int guild_id; + int bg_id; + int map; + int target_flag; //Holds BCT_* flag for battle_check_target + int bl_flag; //Holds BL_* flag for map_foreachin* functions + unsigned int tick; + int limit,interval; + + uint16 skill_id,skill_lv; + int val1,val2,val3; + char *valstr; + int unit_id; + int group_id; + int unit_count,alive_count; + int item_id; //store item used. + struct skill_unit *unit; + struct { + unsigned ammo_consume : 1; + unsigned song_dance : 2; //0x1 Song/Dance, 0x2 Ensemble + unsigned guildaura : 1; + } state; +}; + +struct skill_unit { + struct block_list bl; + + struct skill_unit_group *group; + + int limit; + int val1,val2; + short alive,range; +}; + +#define MAX_SKILLUNITGROUPTICKSET 25 +struct skill_unit_group_tickset { + unsigned int tick; + int id; +}; + + +enum { + UF_DEFNOTENEMY = 0x0001, // If 'defunit_not_enemy' is set, the target is changed to 'friend' + UF_NOREITERATION = 0x0002, // Spell cannot be stacked + UF_NOFOOTSET = 0x0004, // Spell cannot be cast near/on targets + UF_NOOVERLAP = 0x0008, // Spell effects do not overlap + UF_PATHCHECK = 0x0010, // Only cells with a shootable path will be placed + UF_NOPC = 0x0020, // May not target players + UF_NOMOB = 0x0040, // May not target mobs + UF_SKILL = 0x0080, // May target skills + UF_DANCE = 0x0100, // Dance + UF_ENSEMBLE = 0x0200, // Duet + UF_SONG = 0x0400, // Song + UF_DUALMODE = 0x0800, // Spells should trigger both ontimer and onplace/onout/onleft effects. + UF_RANGEDSINGLEUNIT = 0x2000 // hack for ranged layout, only display center +}; + +// Create Database item + +struct s_skill_produce_db { + int nameid, trigger; + int req_skill,req_skill_lv,itemlv; + int mat_id[MAX_PRODUCE_RESOURCE],mat_amount[MAX_PRODUCE_RESOURCE]; +}; +extern struct s_skill_produce_db skill_produce_db[MAX_SKILL_PRODUCE_DB]; + +// Creating database arrow + +struct s_skill_arrow_db { + int nameid, trigger; + int cre_id[MAX_ARROW_RESOURCE],cre_amount[MAX_ARROW_RESOURCE]; +}; +extern struct s_skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB]; + +// Abracadabra database + +struct s_skill_abra_db { + uint16 skill_id; + int req_lv; + int per; +}; +extern struct s_skill_abra_db skill_abra_db[MAX_SKILL_ABRA_DB]; + +extern int enchant_eff[5]; +extern int deluge_eff[5]; + +int do_init_skill(void); +int do_final_skill(void); + +//Returns the cast type of the skill: ground cast, castend damage, castend no damage +enum { CAST_GROUND, CAST_DAMAGE, CAST_NODAMAGE }; +int skill_get_casttype(uint16 skill_id); //[Skotlex] + +// Accessor to the skills database +// +int skill_get_index( uint16 skill_id ); +int skill_get_type( uint16 skill_id ); +int skill_get_hit( uint16 skill_id ); +int skill_get_inf( uint16 skill_id ); +int skill_get_ele( uint16 skill_id , uint16 skill_lv ); +int skill_get_nk( uint16 skill_id ); +int skill_get_max( uint16 skill_id ); +int skill_get_range( uint16 skill_id , uint16 skill_lv ); +int skill_get_range2(struct block_list *bl, uint16 skill_id, uint16 skill_lv); +int skill_get_splash( uint16 skill_id , uint16 skill_lv ); +int skill_get_hp( uint16 skill_id ,uint16 skill_lv ); +int skill_get_mhp( uint16 skill_id ,uint16 skill_lv ); +int skill_get_sp( uint16 skill_id ,uint16 skill_lv ); +int skill_get_state(uint16 skill_id); +int skill_get_zeny( uint16 skill_id ,uint16 skill_lv ); +int skill_get_num( uint16 skill_id ,uint16 skill_lv ); +int skill_get_cast( uint16 skill_id ,uint16 skill_lv ); +int skill_get_delay( uint16 skill_id ,uint16 skill_lv ); +int skill_get_walkdelay( uint16 skill_id ,uint16 skill_lv ); +int skill_get_time( uint16 skill_id ,uint16 skill_lv ); +int skill_get_time2( uint16 skill_id ,uint16 skill_lv ); +int skill_get_castnodex( uint16 skill_id ,uint16 skill_lv ); +int skill_get_castdef( uint16 skill_id ); +int skill_get_weapontype( uint16 skill_id ); +int skill_get_ammotype( uint16 skill_id ); +int skill_get_ammo_qty( uint16 skill_id, uint16 skill_lv ); +int skill_get_nocast( uint16 skill_id ); +int skill_get_unit_id(uint16 skill_id,int flag); +int skill_get_inf2( uint16 skill_id ); +int skill_get_castcancel( uint16 skill_id ); +int skill_get_maxcount( uint16 skill_id ,uint16 skill_lv ); +int skill_get_blewcount( uint16 skill_id ,uint16 skill_lv ); +int skill_get_unit_flag( uint16 skill_id ); +int skill_get_unit_target( uint16 skill_id ); +int skill_tree_get_max( uint16 skill_id, int b_class ); // Celest +const char* skill_get_name( uint16 skill_id ); // [Skotlex] +const char* skill_get_desc( uint16 skill_id ); // [Skotlex] + +int skill_name2id(const char* name); + +int skill_isammotype(struct map_session_data *sd, int skill); +int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data); +int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data); +int skill_castend_map( struct map_session_data *sd,uint16 skill_id, const char *map); + +int skill_cleartimerskill(struct block_list *src); +int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int x,int y,uint16 skill_id,uint16 skill_lv,int type,int flag); + +// Results? Added +int skill_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,int dmg_lv,unsigned int tick); +int skill_counter_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,unsigned int tick); +int skill_blown(struct block_list* src, struct block_list* target, int count, int8 dir, int flag); +int skill_break_equip(struct block_list *bl, unsigned short where, int rate, int flag); +int skill_strip_equip(struct block_list *bl, unsigned short where, int rate, int lv, int time); +// Skills unit +struct skill_unit_group* skill_id2group(int group_id); +struct skill_unit_group *skill_unitsetting(struct block_list* src, uint16 skill_id, uint16 skill_lv, short x, short y, int flag); +struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, int x, int y, int val1, int val2); +int skill_delunit(struct skill_unit *unit); +struct skill_unit_group *skill_initunitgroup(struct block_list* src, int count, uint16 skill_id, uint16 skill_lv, int unit_id, int limit, int interval); +int skill_delunitgroup_(struct skill_unit_group *group, const char* file, int line, const char* func); +#define skill_delunitgroup(group) skill_delunitgroup_(group,__FILE__,__LINE__,__func__) +int skill_clear_unitgroup(struct block_list *src); +int skill_clear_group(struct block_list *bl, int flag); +void ext_skill_unit_onplace(struct skill_unit *src, struct block_list *bl, unsigned int tick); + +int skill_unit_ondamaged(struct skill_unit *src,struct block_list *bl,int damage,unsigned int tick); + +int skill_castfix( struct block_list *bl, uint16 skill_id, uint16 skill_lv); +int skill_castfix_sc( struct block_list *bl, int time); +#ifdef RENEWAL_CAST +int skill_vfcastfix( struct block_list *bl, double time, uint16 skill_id, uint16 skill_lv); +#endif +int skill_delayfix( struct block_list *bl, uint16 skill_id, uint16 skill_lv); + +// Skill conditions check and remove [Inkfish] +int skill_check_condition_castbegin(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv); +int skill_check_condition_castend(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv); +int skill_consume_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type); +struct skill_condition skill_get_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv); + +int skill_check_pc_partner(struct map_session_data *sd, uint16 skill_id, short* skill_lv, int range, int cast_flag); +// -- moonsoul (added skill_check_unit_cell) +int skill_check_unit_cell(uint16 skill_id,int16 m,int16 x,int16 y,int unit_id); +int skill_unit_out_all( struct block_list *bl,unsigned int tick,int range); +int skill_unit_move(struct block_list *bl,unsigned int tick,int flag); +int skill_unit_move_unit_group( struct skill_unit_group *group, int16 m,int16 dx,int16 dy); + +struct skill_unit_group *skill_check_dancing( struct block_list *src ); + +// Guild skills [celest] +int skill_guildaura_sub (struct map_session_data* sd, int id, int strvit, int agidex); + +// Chant canceled +int skill_castcancel(struct block_list *bl,int type); + +int skill_sit (struct map_session_data *sd, int type); +void skill_brandishspear(struct block_list* src, struct block_list* bl, uint16 skill_id, uint16 skill_lv, unsigned int tick, int flag); +void skill_repairweapon(struct map_session_data *sd, int idx); +void skill_identify(struct map_session_data *sd,int idx); +void skill_weaponrefine(struct map_session_data *sd,int idx); // [Celest] +int skill_autospell(struct map_session_data *md,uint16 skill_id); + +int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 skill_id, uint16 skill_lv, bool heal); + +bool skill_check_cloaking(struct block_list *bl, struct status_change_entry *sce); + +// Abnormal status +int skill_enchant_elemental_end(struct block_list *bl, int type); +int skillnotok(uint16 skill_id, struct map_session_data *sd); +int skillnotok_hom(uint16 skill_id, struct homun_data *hd); +int skillnotok_mercenary(uint16 skill_id, struct mercenary_data *md); + +int skill_chastle_mob_changetarget(struct block_list *bl,va_list ap); + +// Item creation +int skill_can_produce_mix( struct map_session_data *sd, int nameid, int trigger, int qty); +int skill_produce_mix( struct map_session_data *sd, uint16 skill_id, int nameid, int slot1, int slot2, int slot3, int qty ); + +int skill_arrow_create( struct map_session_data *sd,int nameid); + +// skills for the mob +int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag ); +int skill_castend_damage_id( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag ); +int skill_castend_pos2( struct block_list *src, int x,int y,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag); + +int skill_blockpc_start_(struct map_session_data*, uint16 skill_id, int, bool); +int skill_blockhomun_start (struct homun_data*,uint16 skill_id,int); +int skill_blockmerc_start (struct mercenary_data*,uint16 skill_id,int); + +#define skill_blockpc_start(sd, skill_id, tick) skill_blockpc_start_( sd, skill_id, tick, false ) + +// (Epoque:) To-do: replace this macro with some sort of skill tree check (rather than hard-coded skill names) +#define skill_ischangesex(id) ( \ + ((id) >= BD_ADAPTATION && (id) <= DC_SERVICEFORYOU) || ((id) >= CG_ARROWVULCAN && (id) <= CG_MARIONETTE) || \ + ((id) >= CG_LONGINGFREEDOM && (id) <= CG_TAROTCARD) || ((id) >= WA_SWING_DANCE && (id) <= WM_UNLIMITED_HUMMING_VOICE)) + +// Skill action, (return dmg,heal) +int skill_attack( int attack_type, struct block_list* src, struct block_list *dsrc,struct block_list *bl,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag ); + +void skill_reload(void); + +enum { + ST_NONE, + ST_HIDING, + ST_CLOAKING, + ST_HIDDEN, + ST_RIDING, + ST_FALCON, + ST_CART, + ST_SHIELD, + ST_SIGHT, + ST_EXPLOSIONSPIRITS, + ST_CARTBOOST, + ST_RECOV_WEIGHT_RATE, + ST_MOVE_ENABLE, + ST_WATER, + /** + * 3rd States + **/ + ST_RIDINGDRAGON, + ST_WUG, + ST_RIDINGWUG, + ST_MADO, + ST_ELEMENTALSPIRIT, + ST_POISONINGWEAPON, + ST_ROLLINGCUTTER, + ST_MH_FIGHTING, + ST_MH_GRAPPLING, +}; + +enum e_skill { + NV_BASIC = 1, + + SM_SWORD, + SM_TWOHAND, + SM_RECOVERY, + SM_BASH, + SM_PROVOKE, + SM_MAGNUM, + SM_ENDURE, + + MG_SRECOVERY, + MG_SIGHT, + MG_NAPALMBEAT, + MG_SAFETYWALL, + MG_SOULSTRIKE, + MG_COLDBOLT, + MG_FROSTDIVER, + MG_STONECURSE, + MG_FIREBALL, + MG_FIREWALL, + MG_FIREBOLT, + MG_LIGHTNINGBOLT, + MG_THUNDERSTORM, + + AL_DP, + AL_DEMONBANE, + AL_RUWACH, + AL_PNEUMA, + AL_TELEPORT, + AL_WARP, + AL_HEAL, + AL_INCAGI, + AL_DECAGI, + AL_HOLYWATER, + AL_CRUCIS, + AL_ANGELUS, + AL_BLESSING, + AL_CURE, + + MC_INCCARRY, + MC_DISCOUNT, + MC_OVERCHARGE, + MC_PUSHCART, + MC_IDENTIFY, + MC_VENDING, + MC_MAMMONITE, + + AC_OWL, + AC_VULTURE, + AC_CONCENTRATION, + AC_DOUBLE, + AC_SHOWER, + + TF_DOUBLE, + TF_MISS, + TF_STEAL, + TF_HIDING, + TF_POISON, + TF_DETOXIFY, + + ALL_RESURRECTION, + + KN_SPEARMASTERY, + KN_PIERCE, + KN_BRANDISHSPEAR, + KN_SPEARSTAB, + KN_SPEARBOOMERANG, + KN_TWOHANDQUICKEN, + KN_AUTOCOUNTER, + KN_BOWLINGBASH, + KN_RIDING, + KN_CAVALIERMASTERY, + + PR_MACEMASTERY, + PR_IMPOSITIO, + PR_SUFFRAGIUM, + PR_ASPERSIO, + PR_BENEDICTIO, + PR_SANCTUARY, + PR_SLOWPOISON, + PR_STRECOVERY, + PR_KYRIE, + PR_MAGNIFICAT, + PR_GLORIA, + PR_LEXDIVINA, + PR_TURNUNDEAD, + PR_LEXAETERNA, + PR_MAGNUS, + + WZ_FIREPILLAR, + WZ_SIGHTRASHER, + WZ_FIREIVY, + WZ_METEOR, + WZ_JUPITEL, + WZ_VERMILION, + WZ_WATERBALL, + WZ_ICEWALL, + WZ_FROSTNOVA, + WZ_STORMGUST, + WZ_EARTHSPIKE, + WZ_HEAVENDRIVE, + WZ_QUAGMIRE, + WZ_ESTIMATION, + + BS_IRON, + BS_STEEL, + BS_ENCHANTEDSTONE, + BS_ORIDEOCON, + BS_DAGGER, + BS_SWORD, + BS_TWOHANDSWORD, + BS_AXE, + BS_MACE, + BS_KNUCKLE, + BS_SPEAR, + BS_HILTBINDING, + BS_FINDINGORE, + BS_WEAPONRESEARCH, + BS_REPAIRWEAPON, + BS_SKINTEMPER, + BS_HAMMERFALL, + BS_ADRENALINE, + BS_WEAPONPERFECT, + BS_OVERTHRUST, + BS_MAXIMIZE, + + HT_SKIDTRAP, + HT_LANDMINE, + HT_ANKLESNARE, + HT_SHOCKWAVE, + HT_SANDMAN, + HT_FLASHER, + HT_FREEZINGTRAP, + HT_BLASTMINE, + HT_CLAYMORETRAP, + HT_REMOVETRAP, + HT_TALKIEBOX, + HT_BEASTBANE, + HT_FALCON, + HT_STEELCROW, + HT_BLITZBEAT, + HT_DETECTING, + HT_SPRINGTRAP, + + AS_RIGHT, + AS_LEFT, + AS_KATAR, + AS_CLOAKING, + AS_SONICBLOW, + AS_GRIMTOOTH, + AS_ENCHANTPOISON, + AS_POISONREACT, + AS_VENOMDUST, + AS_SPLASHER, + + NV_FIRSTAID, + NV_TRICKDEAD, + SM_MOVINGRECOVERY, + SM_FATALBLOW, + SM_AUTOBERSERK, + AC_MAKINGARROW, + AC_CHARGEARROW, + TF_SPRINKLESAND, + TF_BACKSLIDING, + TF_PICKSTONE, + TF_THROWSTONE, + MC_CARTREVOLUTION, + MC_CHANGECART, + MC_LOUD, + AL_HOLYLIGHT, + MG_ENERGYCOAT, + + NPC_PIERCINGATT, + NPC_MENTALBREAKER, + NPC_RANGEATTACK, + NPC_ATTRICHANGE, + NPC_CHANGEWATER, + NPC_CHANGEGROUND, + NPC_CHANGEFIRE, + NPC_CHANGEWIND, + NPC_CHANGEPOISON, + NPC_CHANGEHOLY, + NPC_CHANGEDARKNESS, + NPC_CHANGETELEKINESIS, + NPC_CRITICALSLASH, + NPC_COMBOATTACK, + NPC_GUIDEDATTACK, + NPC_SELFDESTRUCTION, + NPC_SPLASHATTACK, + NPC_SUICIDE, + NPC_POISON, + NPC_BLINDATTACK, + NPC_SILENCEATTACK, + NPC_STUNATTACK, + NPC_PETRIFYATTACK, + NPC_CURSEATTACK, + NPC_SLEEPATTACK, + NPC_RANDOMATTACK, + NPC_WATERATTACK, + NPC_GROUNDATTACK, + NPC_FIREATTACK, + NPC_WINDATTACK, + NPC_POISONATTACK, + NPC_HOLYATTACK, + NPC_DARKNESSATTACK, + NPC_TELEKINESISATTACK, + NPC_MAGICALATTACK, + NPC_METAMORPHOSIS, + NPC_PROVOCATION, + NPC_SMOKING, + NPC_SUMMONSLAVE, + NPC_EMOTION, + NPC_TRANSFORMATION, + NPC_BLOODDRAIN, + NPC_ENERGYDRAIN, + NPC_KEEPING, + NPC_DARKBREATH, + NPC_DARKBLESSING, + NPC_BARRIER, + NPC_DEFENDER, + NPC_LICK, + NPC_HALLUCINATION, + NPC_REBIRTH, + NPC_SUMMONMONSTER, + + RG_SNATCHER, + RG_STEALCOIN, + RG_BACKSTAP, + RG_TUNNELDRIVE, + RG_RAID, + RG_STRIPWEAPON, + RG_STRIPSHIELD, + RG_STRIPARMOR, + RG_STRIPHELM, + RG_INTIMIDATE, + RG_GRAFFITI, + RG_FLAGGRAFFITI, + RG_CLEANER, + RG_GANGSTER, + RG_COMPULSION, + RG_PLAGIARISM, + + AM_AXEMASTERY, + AM_LEARNINGPOTION, + AM_PHARMACY, + AM_DEMONSTRATION, + AM_ACIDTERROR, + AM_POTIONPITCHER, + AM_CANNIBALIZE, + AM_SPHEREMINE, + AM_CP_WEAPON, + AM_CP_SHIELD, + AM_CP_ARMOR, + AM_CP_HELM, + AM_BIOETHICS, + AM_BIOTECHNOLOGY, + AM_CREATECREATURE, + AM_CULTIVATION, + AM_FLAMECONTROL, + AM_CALLHOMUN, + AM_REST, + AM_DRILLMASTER, + AM_HEALHOMUN, + AM_RESURRECTHOMUN, + + CR_TRUST, + CR_AUTOGUARD, + CR_SHIELDCHARGE, + CR_SHIELDBOOMERANG, + CR_REFLECTSHIELD, + CR_HOLYCROSS, + CR_GRANDCROSS, + CR_DEVOTION, + CR_PROVIDENCE, + CR_DEFENDER, + CR_SPEARQUICKEN, + + MO_IRONHAND, + MO_SPIRITSRECOVERY, + MO_CALLSPIRITS, + MO_ABSORBSPIRITS, + MO_TRIPLEATTACK, + MO_BODYRELOCATION, + MO_DODGE, + MO_INVESTIGATE, + MO_FINGEROFFENSIVE, + MO_STEELBODY, + MO_BLADESTOP, + MO_EXPLOSIONSPIRITS, + MO_EXTREMITYFIST, + MO_CHAINCOMBO, + MO_COMBOFINISH, + + SA_ADVANCEDBOOK, + SA_CASTCANCEL, + SA_MAGICROD, + SA_SPELLBREAKER, + SA_FREECAST, + SA_AUTOSPELL, + SA_FLAMELAUNCHER, + SA_FROSTWEAPON, + SA_LIGHTNINGLOADER, + SA_SEISMICWEAPON, + SA_DRAGONOLOGY, + SA_VOLCANO, + SA_DELUGE, + SA_VIOLENTGALE, + SA_LANDPROTECTOR, + SA_DISPELL, + SA_ABRACADABRA, + SA_MONOCELL, + SA_CLASSCHANGE, + SA_SUMMONMONSTER, + SA_REVERSEORCISH, + SA_DEATH, + SA_FORTUNE, + SA_TAMINGMONSTER, + SA_QUESTION, + SA_GRAVITY, + SA_LEVELUP, + SA_INSTANTDEATH, + SA_FULLRECOVERY, + SA_COMA, + + BD_ADAPTATION, + BD_ENCORE, + BD_LULLABY, + BD_RICHMANKIM, + BD_ETERNALCHAOS, + BD_DRUMBATTLEFIELD, + BD_RINGNIBELUNGEN, + BD_ROKISWEIL, + BD_INTOABYSS, + BD_SIEGFRIED, + BD_RAGNAROK, + + BA_MUSICALLESSON, + BA_MUSICALSTRIKE, + BA_DISSONANCE, + BA_FROSTJOKER, + BA_WHISTLE, + BA_ASSASSINCROSS, + BA_POEMBRAGI, + BA_APPLEIDUN, + + DC_DANCINGLESSON, + DC_THROWARROW, + DC_UGLYDANCE, + DC_SCREAM, + DC_HUMMING, + DC_DONTFORGETME, + DC_FORTUNEKISS, + DC_SERVICEFORYOU, + + NPC_RANDOMMOVE, + NPC_SPEEDUP, + NPC_REVENGE, + + WE_MALE, + WE_FEMALE, + WE_CALLPARTNER, + + ITM_TOMAHAWK, + + NPC_DARKCROSS, + NPC_GRANDDARKNESS, + NPC_DARKSTRIKE, + NPC_DARKTHUNDER, + NPC_STOP, + NPC_WEAPONBRAKER, + NPC_ARMORBRAKE, + NPC_HELMBRAKE, + NPC_SHIELDBRAKE, + NPC_UNDEADATTACK, + NPC_CHANGEUNDEAD, + NPC_POWERUP, + NPC_AGIUP, + NPC_SIEGEMODE, + NPC_CALLSLAVE, + NPC_INVISIBLE, + NPC_RUN, + + LK_AURABLADE, + LK_PARRYING, + LK_CONCENTRATION, + LK_TENSIONRELAX, + LK_BERSERK, + LK_FURY, + HP_ASSUMPTIO, + HP_BASILICA, + HP_MEDITATIO, + HW_SOULDRAIN, + HW_MAGICCRASHER, + HW_MAGICPOWER, + PA_PRESSURE, + PA_SACRIFICE, + PA_GOSPEL, + CH_PALMSTRIKE, + CH_TIGERFIST, + CH_CHAINCRUSH, + PF_HPCONVERSION, + PF_SOULCHANGE, + PF_SOULBURN, + ASC_KATAR, + ASC_HALLUCINATION, + ASC_EDP, + ASC_BREAKER, + SN_SIGHT, + SN_FALCONASSAULT, + SN_SHARPSHOOTING, + SN_WINDWALK, + WS_MELTDOWN, + WS_CREATECOIN, + WS_CREATENUGGET, + WS_CARTBOOST, + WS_SYSTEMCREATE, + ST_CHASEWALK, + ST_REJECTSWORD, + ST_STEALBACKPACK, + CR_ALCHEMY, + CR_SYNTHESISPOTION, + CG_ARROWVULCAN, + CG_MOONLIT, + CG_MARIONETTE, + LK_SPIRALPIERCE, + LK_HEADCRUSH, + LK_JOINTBEAT, + HW_NAPALMVULCAN, + CH_SOULCOLLECT, + PF_MINDBREAKER, + PF_MEMORIZE, + PF_FOGWALL, + PF_SPIDERWEB, + ASC_METEORASSAULT, + ASC_CDP, + WE_BABY, + WE_CALLPARENT, + WE_CALLBABY, + + TK_RUN, + TK_READYSTORM, + TK_STORMKICK, + TK_READYDOWN, + TK_DOWNKICK, + TK_READYTURN, + TK_TURNKICK, + TK_READYCOUNTER, + TK_COUNTER, + TK_DODGE, + TK_JUMPKICK, + TK_HPTIME, + TK_SPTIME, + TK_POWER, + TK_SEVENWIND, + TK_HIGHJUMP, + + SG_FEEL, + SG_SUN_WARM, + SG_MOON_WARM, + SG_STAR_WARM, + SG_SUN_COMFORT, + SG_MOON_COMFORT, + SG_STAR_COMFORT, + SG_HATE, + SG_SUN_ANGER, + SG_MOON_ANGER, + SG_STAR_ANGER, + SG_SUN_BLESS, + SG_MOON_BLESS, + SG_STAR_BLESS, + SG_DEVIL, + SG_FRIEND, + SG_KNOWLEDGE, + SG_FUSION, + + SL_ALCHEMIST, + AM_BERSERKPITCHER, + SL_MONK, + SL_STAR, + SL_SAGE, + SL_CRUSADER, + SL_SUPERNOVICE, + SL_KNIGHT, + SL_WIZARD, + SL_PRIEST, + SL_BARDDANCER, + SL_ROGUE, + SL_ASSASIN, + SL_BLACKSMITH, + BS_ADRENALINE2, + SL_HUNTER, + SL_SOULLINKER, + SL_KAIZEL, + SL_KAAHI, + SL_KAUPE, + SL_KAITE, + SL_KAINA, + SL_STIN, + SL_STUN, + SL_SMA, + SL_SWOO, + SL_SKE, + SL_SKA, + + SM_SELFPROVOKE, + NPC_EMOTION_ON, + ST_PRESERVE, + ST_FULLSTRIP, + WS_WEAPONREFINE, + CR_SLIMPITCHER, + CR_FULLPROTECTION, + PA_SHIELDCHAIN, + HP_MANARECHARGE, + PF_DOUBLECASTING, + HW_GANBANTEIN, + HW_GRAVITATION, + WS_CARTTERMINATION, + WS_OVERTHRUSTMAX, + CG_LONGINGFREEDOM, + CG_HERMODE, + CG_TAROTCARD, + CR_ACIDDEMONSTRATION, + CR_CULTIVATION, + ITEM_ENCHANTARMS, + TK_MISSION, + SL_HIGH, + KN_ONEHAND, + AM_TWILIGHT1, + AM_TWILIGHT2, + AM_TWILIGHT3, + HT_POWER, + + GS_GLITTERING, + GS_FLING, + GS_TRIPLEACTION, + GS_BULLSEYE, + GS_MADNESSCANCEL, + GS_ADJUSTMENT, + GS_INCREASING, + GS_MAGICALBULLET, + GS_CRACKER, + GS_SINGLEACTION, + GS_SNAKEEYE, + GS_CHAINACTION, + GS_TRACKING, + GS_DISARM, + GS_PIERCINGSHOT, + GS_RAPIDSHOWER, + GS_DESPERADO, + GS_GATLINGFEVER, + GS_DUST, + GS_FULLBUSTER, + GS_SPREADATTACK, + GS_GROUNDDRIFT, + + NJ_TOBIDOUGU, + NJ_SYURIKEN, + NJ_KUNAI, + NJ_HUUMA, + NJ_ZENYNAGE, + NJ_TATAMIGAESHI, + NJ_KASUMIKIRI, + NJ_SHADOWJUMP, + NJ_KIRIKAGE, + NJ_UTSUSEMI, + NJ_BUNSINJYUTSU, + NJ_NINPOU, + NJ_KOUENKA, + NJ_KAENSIN, + NJ_BAKUENRYU, + NJ_HYOUSENSOU, + NJ_SUITON, + NJ_HYOUSYOURAKU, + NJ_HUUJIN, + NJ_RAIGEKISAI, + NJ_KAMAITACHI, + NJ_NEN, + NJ_ISSEN, + + MB_FIGHTING, + MB_NEUTRAL, + MB_TAIMING_PUTI, + MB_WHITEPOTION, + MB_MENTAL, + MB_CARDPITCHER, + MB_PETPITCHER, + MB_BODYSTUDY, + MB_BODYALTER, + MB_PETMEMORY, + MB_M_TELEPORT, + MB_B_GAIN, + MB_M_GAIN, + MB_MISSION, + MB_MUNAKKNOWLEDGE, + MB_MUNAKBALL, + MB_SCROLL, + MB_B_GATHERING, + MB_M_GATHERING, + MB_B_EXCLUDE, + MB_B_DRIFT, + MB_B_WALLRUSH, + MB_M_WALLRUSH, + MB_B_WALLSHIFT, + MB_M_WALLCRASH, + MB_M_REINCARNATION, + MB_B_EQUIP, + + SL_DEATHKNIGHT, + SL_COLLECTOR, + SL_NINJA, + SL_GUNNER, + AM_TWILIGHT4, + DA_RESET, + DE_BERSERKAIZER, + DA_DARKPOWER, + + DE_PASSIVE, + DE_PATTACK, + DE_PSPEED, + DE_PDEFENSE, + DE_PCRITICAL, + DE_PHP, + DE_PSP, + DE_RESET, + DE_RANKING, + DE_PTRIPLE, + DE_ENERGY, + DE_NIGHTMARE, + DE_SLASH, + DE_COIL, + DE_WAVE, + DE_REBIRTH, + DE_AURA, + DE_FREEZER, + DE_CHANGEATTACK, + DE_PUNISH, + DE_POISON, + DE_INSTANT, + DE_WARNING, + DE_RANKEDKNIFE, + DE_RANKEDGRADIUS, + DE_GAUGE, + DE_GTIME, + DE_GPAIN, + DE_GSKILL, + DE_GKILL, + DE_ACCEL, + DE_BLOCKDOUBLE, + DE_BLOCKMELEE, + DE_BLOCKFAR, + DE_FRONTATTACK, + DE_DANGERATTACK, + DE_TWINATTACK, + DE_WINDATTACK, + DE_WATERATTACK, + + DA_ENERGY, + DA_CLOUD, + DA_FIRSTSLOT, + DA_HEADDEF, + DA_SPACE, + DA_TRANSFORM, + DA_EXPLOSION, + DA_REWARD, + DA_CRUSH, + DA_ITEMREBUILD, + DA_ILLUSION, + DA_NUETRALIZE, + DA_RUNNER, + DA_TRANSFER, + DA_WALL, + DA_ZENY, + DA_REVENGE, + DA_EARPLUG, + DA_CONTRACT, + DA_BLACK, + DA_DREAM, + DA_MAGICCART, + DA_COPY, + DA_CRYSTAL, + DA_EXP, + DA_CARTSWING, + DA_REBUILD, + DA_JOBCHANGE, + DA_EDARKNESS, + DA_EGUARDIAN, + DA_TIMEOUT, + ALL_TIMEIN, + DA_ZENYRANK, + DA_ACCESSORYMIX, + + NPC_EARTHQUAKE, + NPC_FIREBREATH, + NPC_ICEBREATH, + NPC_THUNDERBREATH, + NPC_ACIDBREATH, + NPC_DARKNESSBREATH, + NPC_DRAGONFEAR, + NPC_BLEEDING, + NPC_PULSESTRIKE, + NPC_HELLJUDGEMENT, + NPC_WIDESILENCE, + NPC_WIDEFREEZE, + NPC_WIDEBLEEDING, + NPC_WIDESTONE, + NPC_WIDECONFUSE, + NPC_WIDESLEEP, + NPC_WIDESIGHT, + NPC_EVILLAND, + NPC_MAGICMIRROR, + NPC_SLOWCAST, + NPC_CRITICALWOUND, + NPC_EXPULSION, + NPC_STONESKIN, + NPC_ANTIMAGIC, + NPC_WIDECURSE, + NPC_WIDESTUN, + NPC_VAMPIRE_GIFT, + NPC_WIDESOULDRAIN, + + ALL_INCCARRY, + NPC_TALK, + NPC_HELLPOWER, + NPC_WIDEHELLDIGNITY, + NPC_INVINCIBLE, + NPC_INVINCIBLEOFF, + NPC_ALLHEAL, + GM_SANDMAN, + CASH_BLESSING, + CASH_INCAGI, + CASH_ASSUMPTIO, + ALL_CATCRY, + ALL_PARTYFLEE, + ALL_ANGEL_PROTECT, + ALL_DREAM_SUMMERNIGHT, + NPC_CHANGEUNDEAD2, + ALL_REVERSEORCISH, + ALL_WEWISH, + ALL_SONKRAN, + NPC_WIDEHEALTHFEAR, + NPC_WIDEBODYBURNNING, + NPC_WIDEFROSTMISTY, + NPC_WIDECOLD, + NPC_WIDE_DEEP_SLEEP, + NPC_WIDESIREN, + NPC_VENOMFOG, + NPC_MILLENNIUMSHIELD, + NPC_COMET, + + KN_CHARGEATK = 1001, + CR_SHRINK, + AS_SONICACCEL, + AS_VENOMKNIFE, + RG_CLOSECONFINE, + WZ_SIGHTBLASTER, + SA_CREATECON, + SA_ELEMENTWATER, + HT_PHANTASMIC, + BA_PANGVOICE, + DC_WINKCHARM, + BS_UNFAIRLYTRICK, + BS_GREED, + PR_REDEMPTIO, + MO_KITRANSLATION, + MO_BALKYOUNG, + SA_ELEMENTGROUND, + SA_ELEMENTFIRE, + SA_ELEMENTWIND, + + RK_ENCHANTBLADE = 2001, + RK_SONICWAVE, + RK_DEATHBOUND, + RK_HUNDREDSPEAR, + RK_WINDCUTTER, + RK_IGNITIONBREAK, + RK_DRAGONTRAINING, + RK_DRAGONBREATH, + RK_DRAGONHOWLING, + RK_RUNEMASTERY, + RK_MILLENNIUMSHIELD, + RK_CRUSHSTRIKE, + RK_REFRESH, + RK_GIANTGROWTH, + RK_STONEHARDSKIN, + RK_VITALITYACTIVATION, + RK_STORMBLAST, + RK_FIGHTINGSPIRIT, + RK_ABUNDANCE, + RK_PHANTOMTHRUST, + + GC_VENOMIMPRESS, + GC_CROSSIMPACT, + GC_DARKILLUSION, + GC_RESEARCHNEWPOISON, + GC_CREATENEWPOISON, + GC_ANTIDOTE, + GC_POISONINGWEAPON, + GC_WEAPONBLOCKING, + GC_COUNTERSLASH, + GC_WEAPONCRUSH, + GC_VENOMPRESSURE, + GC_POISONSMOKE, + GC_CLOAKINGEXCEED, + GC_PHANTOMMENACE, + GC_HALLUCINATIONWALK, + GC_ROLLINGCUTTER, + GC_CROSSRIPPERSLASHER, + + AB_JUDEX, + AB_ANCILLA, + AB_ADORAMUS, + AB_CLEMENTIA, + AB_CANTO, + AB_CHEAL, + AB_EPICLESIS, + AB_PRAEFATIO, + AB_ORATIO, + AB_LAUDAAGNUS, + AB_LAUDARAMUS, + AB_EUCHARISTICA, + AB_RENOVATIO, + AB_HIGHNESSHEAL, + AB_CLEARANCE, + AB_EXPIATIO, + AB_DUPLELIGHT, + AB_DUPLELIGHT_MELEE, + AB_DUPLELIGHT_MAGIC, + AB_SILENTIUM, + + WL_WHITEIMPRISON = 2201, + WL_SOULEXPANSION, + WL_FROSTMISTY, + WL_JACKFROST, + WL_MARSHOFABYSS, + WL_RECOGNIZEDSPELL, + WL_SIENNAEXECRATE, + WL_RADIUS, + WL_STASIS, + WL_DRAINLIFE, + WL_CRIMSONROCK, + WL_HELLINFERNO, + WL_COMET, + WL_CHAINLIGHTNING, + WL_CHAINLIGHTNING_ATK, + WL_EARTHSTRAIN, + WL_TETRAVORTEX, + WL_TETRAVORTEX_FIRE, + WL_TETRAVORTEX_WATER, + WL_TETRAVORTEX_WIND, + WL_TETRAVORTEX_GROUND, + WL_SUMMONFB, + WL_SUMMONBL, + WL_SUMMONWB, + WL_SUMMON_ATK_FIRE, + WL_SUMMON_ATK_WIND, + WL_SUMMON_ATK_WATER, + WL_SUMMON_ATK_GROUND, + WL_SUMMONSTONE, + WL_RELEASE, + WL_READING_SB, + WL_FREEZE_SP, + + RA_ARROWSTORM, + RA_FEARBREEZE, + RA_RANGERMAIN, + RA_AIMEDBOLT, + RA_DETONATOR, + RA_ELECTRICSHOCKER, + RA_CLUSTERBOMB, + RA_WUGMASTERY, + RA_WUGRIDER, + RA_WUGDASH, + RA_WUGSTRIKE, + RA_WUGBITE, + RA_TOOTHOFWUG, + RA_SENSITIVEKEEN, + RA_CAMOUFLAGE, + RA_RESEARCHTRAP, + RA_MAGENTATRAP, + RA_COBALTTRAP, + RA_MAIZETRAP, + RA_VERDURETRAP, + RA_FIRINGTRAP, + RA_ICEBOUNDTRAP, + + NC_MADOLICENCE, + NC_BOOSTKNUCKLE, + NC_PILEBUNKER, + NC_VULCANARM, + NC_FLAMELAUNCHER, + NC_COLDSLOWER, + NC_ARMSCANNON, + NC_ACCELERATION, + NC_HOVERING, + NC_F_SIDESLIDE, + NC_B_SIDESLIDE, + NC_MAINFRAME, + NC_SELFDESTRUCTION, + NC_SHAPESHIFT, + NC_EMERGENCYCOOL, + NC_INFRAREDSCAN, + NC_ANALYZE, + NC_MAGNETICFIELD, + NC_NEUTRALBARRIER, + NC_STEALTHFIELD, + NC_REPAIR, + NC_TRAININGAXE, + NC_RESEARCHFE, + NC_AXEBOOMERANG, + NC_POWERSWING, + NC_AXETORNADO, + NC_SILVERSNIPER, + NC_MAGICDECOY, + NC_DISJOINT, + + SC_FATALMENACE, + SC_REPRODUCE, + SC_AUTOSHADOWSPELL, + SC_SHADOWFORM, + SC_TRIANGLESHOT, + SC_BODYPAINT, + SC_INVISIBILITY, + SC_DEADLYINFECT, + SC_ENERVATION, + SC_GROOMY, + SC_IGNORANCE, + SC_LAZINESS, + SC_UNLUCKY, + SC_WEAKNESS, + SC_STRIPACCESSARY, + SC_MANHOLE, + SC_DIMENSIONDOOR, + SC_CHAOSPANIC, + SC_MAELSTROM, + SC_BLOODYLUST, + SC_FEINTBOMB, + + LG_CANNONSPEAR = 2307, + LG_BANISHINGPOINT, + LG_TRAMPLE, + LG_SHIELDPRESS, + LG_REFLECTDAMAGE, + LG_PINPOINTATTACK, + LG_FORCEOFVANGUARD, + LG_RAGEBURST, + LG_SHIELDSPELL, + LG_EXEEDBREAK, + LG_OVERBRAND, + LG_PRESTIGE, + LG_BANDING, + LG_MOONSLASHER, + LG_RAYOFGENESIS, + LG_PIETY, + LG_EARTHDRIVE, + LG_HESPERUSLIT, + LG_INSPIRATION, + + SR_DRAGONCOMBO, + SR_SKYNETBLOW, + SR_EARTHSHAKER, + SR_FALLENEMPIRE, + SR_TIGERCANNON, + SR_HELLGATE, + SR_RAMPAGEBLASTER, + SR_CRESCENTELBOW, + SR_CURSEDCIRCLE, + SR_LIGHTNINGWALK, + SR_KNUCKLEARROW, + SR_WINDMILL, + SR_RAISINGDRAGON, + SR_GENTLETOUCH, + SR_ASSIMILATEPOWER, + SR_POWERVELOCITY, + SR_CRESCENTELBOW_AUTOSPELL, + SR_GATEOFHELL, + SR_GENTLETOUCH_QUIET, + SR_GENTLETOUCH_CURE, + SR_GENTLETOUCH_ENERGYGAIN, + SR_GENTLETOUCH_CHANGE, + SR_GENTLETOUCH_REVITALIZE, + + WA_SWING_DANCE = 2350, + WA_SYMPHONY_OF_LOVER, + WA_MOONLIT_SERENADE, + + MI_RUSH_WINDMILL = 2381, + MI_ECHOSONG, + MI_HARMONIZE, + + WM_LESSON = 2412, + WM_METALICSOUND, + WM_REVERBERATION, + WM_REVERBERATION_MELEE, + WM_REVERBERATION_MAGIC, + WM_DOMINION_IMPULSE, + WM_SEVERE_RAINSTORM, + WM_POEMOFNETHERWORLD, + WM_VOICEOFSIREN, + WM_DEADHILLHERE, + WM_LULLABY_DEEPSLEEP, + WM_SIRCLEOFNATURE, + WM_RANDOMIZESPELL, + WM_GLOOMYDAY, + WM_GREAT_ECHO, + WM_SONG_OF_MANA, + WM_DANCE_WITH_WUG, + WM_SOUND_OF_DESTRUCTION, + WM_SATURDAY_NIGHT_FEVER, + WM_LERADS_DEW, + WM_MELODYOFSINK, + WM_BEYOND_OF_WARCRY, + WM_UNLIMITED_HUMMING_VOICE, + + SO_FIREWALK = 2443, + SO_ELECTRICWALK, + SO_SPELLFIST, + SO_EARTHGRAVE, + SO_DIAMONDDUST, + SO_POISON_BUSTER, + SO_PSYCHIC_WAVE, + SO_CLOUD_KILL, + SO_STRIKING, + SO_WARMER, + SO_VACUUM_EXTREME, + SO_VARETYR_SPEAR, + SO_ARRULLO, + SO_EL_CONTROL, + SO_SUMMON_AGNI, + SO_SUMMON_AQUA, + SO_SUMMON_VENTUS, + SO_SUMMON_TERA, + SO_EL_ACTION, + SO_EL_ANALYSIS, + SO_EL_SYMPATHY, + SO_EL_CURE, + SO_FIRE_INSIGNIA, + SO_WATER_INSIGNIA, + SO_WIND_INSIGNIA, + SO_EARTH_INSIGNIA, + + GN_TRAINING_SWORD = 2474, + GN_REMODELING_CART, + GN_CART_TORNADO, + GN_CARTCANNON, + GN_CARTBOOST, + GN_THORNS_TRAP, + GN_BLOOD_SUCKER, + GN_SPORE_EXPLOSION, + GN_WALLOFTHORN, + GN_CRAZYWEED, + GN_CRAZYWEED_ATK, + GN_DEMONIC_FIRE, + GN_FIRE_EXPANSION, + GN_FIRE_EXPANSION_SMOKE_POWDER, + GN_FIRE_EXPANSION_TEAR_GAS, + GN_FIRE_EXPANSION_ACID, + GN_HELLS_PLANT, + GN_HELLS_PLANT_ATK, + GN_MANDRAGORA, + GN_SLINGITEM, + GN_CHANGEMATERIAL, + GN_MIX_COOKING, + GN_MAKEBOMB, + GN_S_PHARMACY, + GN_SLINGITEM_RANGEMELEEATK, + + AB_SECRAMENT = 2515, + WM_SEVERE_RAINSTORM_MELEE, + SR_HOWLINGOFLION, + SR_RIDEINLIGHTNING, + LG_OVERBRAND_BRANDISH, + LG_OVERBRAND_PLUSATK, + + ALL_ODINS_RECALL = 2533, + RETURN_TO_ELDICASTES, + ALL_BUYING_STORE, + ALL_GUARDIAN_RECALL, + ALL_ODINS_POWER, + BEER_BOTTLE_CAP, + NPC_ASSASSINCROSS, + NPC_DISSONANCE, + NPC_UGLYDANCE, + ALL_TETANY, + ALL_RAY_OF_PROTECTION, + MC_CARTDECORATE, + + KO_YAMIKUMO = 3001, + KO_RIGHT, + KO_LEFT, + KO_JYUMONJIKIRI, + KO_SETSUDAN, + KO_BAKURETSU, + KO_HAPPOKUNAI, + KO_MUCHANAGE, + KO_HUUMARANKA, + KO_MAKIBISHI, + KO_MEIKYOUSISUI, + KO_ZANZOU, + KO_KYOUGAKU, + KO_JYUSATSU, + KO_KAHU_ENTEN, + KO_HYOUHU_HUBUKI, + KO_KAZEHU_SEIRAN, + KO_DOHU_KOUKAI, + KO_KAIHOU, + KO_ZENKAI, + KO_GENWAKU, + KO_IZAYOI, + KG_KAGEHUMI, + KG_KYOMU, + KG_KAGEMUSYA, + OB_ZANGETSU, + OB_OBOROGENSOU, + OB_OBOROGENSOU_TRANSITION_ATK, + OB_AKAITSUKI, + + ECL_SNOWFLIP = 3031, + ECL_PEONYMAMY, + ECL_SADAGUI, + ECL_SEQUOIADUST, + ECLAGE_RECALL, + + HLIF_HEAL = 8001, + HLIF_AVOID, + HLIF_BRAIN, + HLIF_CHANGE, + HAMI_CASTLE, + HAMI_DEFENCE, + HAMI_SKIN, + HAMI_BLOODLUST, + HFLI_MOON, + HFLI_FLEET, + HFLI_SPEED, + HFLI_SBR44, + HVAN_CAPRICE, + HVAN_CHAOTIC, + HVAN_INSTRUCT, + HVAN_EXPLOSION, + MUTATION_BASEJOB, + MH_SUMMON_LEGION, + MH_NEEDLE_OF_PARALYZE, + MH_POISON_MIST, + MH_PAIN_KILLER, + MH_LIGHT_OF_REGENE, + MH_OVERED_BOOST, + MH_ERASER_CUTTER, + MH_XENO_SLASHER, + MH_SILENT_BREEZE, + MH_STYLE_CHANGE, + MH_SONIC_CRAW, + MH_SILVERVEIN_RUSH, + MH_MIDNIGHT_FRENZY, + MH_STAHL_HORN, + MH_GOLDENE_FERSE, + MH_STEINWAND, + MH_HEILIGE_STANGE, + MH_ANGRIFFS_MODUS, + MH_TINDER_BREAKER, + MH_CBC, + MH_EQC, + MH_MAGMA_FLOW, + MH_GRANITIC_ARMOR, + MH_LAVA_SLIDE, + MH_PYROCLASTIC, + MH_VOLCANIC_ASH, + + MS_BASH = 8201, + MS_MAGNUM, + MS_BOWLINGBASH, + MS_PARRYING, + MS_REFLECTSHIELD, + MS_BERSERK, + MA_DOUBLE, + MA_SHOWER, + MA_SKIDTRAP, + MA_LANDMINE, + MA_SANDMAN, + MA_FREEZINGTRAP, + MA_REMOVETRAP, + MA_CHARGEARROW, + MA_SHARPSHOOTING, + ML_PIERCE, + ML_BRANDISH, + ML_SPIRALPIERCE, + ML_DEFENDER, + ML_AUTOGUARD, + ML_DEVOTION, + MER_MAGNIFICAT, + MER_QUICKEN, + MER_SIGHT, + MER_CRASH, + MER_REGAIN, + MER_TENDER, + MER_BENEDICTION, + MER_RECUPERATE, + MER_MENTALCURE, + MER_COMPRESS, + MER_PROVOKE, + MER_AUTOBERSERK, + MER_DECAGI, + MER_SCAPEGOAT, + MER_LEXDIVINA, + MER_ESTIMATION, + MER_KYRIE, + MER_BLESSING, + MER_INCAGI, + + EL_CIRCLE_OF_FIRE = 8401, + EL_FIRE_CLOAK, + EL_FIRE_MANTLE, + EL_WATER_SCREEN, + EL_WATER_DROP, + EL_WATER_BARRIER, + EL_WIND_STEP, + EL_WIND_CURTAIN, + EL_ZEPHYR, + EL_SOLID_SKIN, + EL_STONE_SHIELD, + EL_POWER_OF_GAIA, + EL_PYROTECHNIC, + EL_HEATER, + EL_TROPIC, + EL_AQUAPLAY, + EL_COOLER, + EL_CHILLY_AIR, + EL_GUST, + EL_BLAST, + EL_WILD_STORM, + EL_PETROLOGY, + EL_CURSED_SOIL, + EL_UPHEAVAL, + EL_FIRE_ARROW, + EL_FIRE_BOMB, + EL_FIRE_BOMB_ATK, + EL_FIRE_WAVE, + EL_FIRE_WAVE_ATK, + EL_ICE_NEEDLE, + EL_WATER_SCREW, + EL_WATER_SCREW_ATK, + EL_TIDAL_WEAPON, + EL_WIND_SLASH, + EL_HURRICANE, + EL_HURRICANE_ATK, + EL_TYPOON_MIS, + EL_TYPOON_MIS_ATK, + EL_STONE_HAMMER, + EL_ROCK_CRUSHER, + EL_ROCK_CRUSHER_ATK, + EL_STONE_RAIN, +}; + +/// The client view ids for land skills. +enum { + UNT_SAFETYWALL = 0x7e, + UNT_FIREWALL, + UNT_WARP_WAITING, + UNT_WARP_ACTIVE, + UNT_BENEDICTIO, //TODO + UNT_SANCTUARY, + UNT_MAGNUS, + UNT_PNEUMA, + UNT_DUMMYSKILL, //These show no effect on the client + UNT_FIREPILLAR_WAITING, + UNT_FIREPILLAR_ACTIVE, + UNT_HIDDEN_TRAP, //TODO + UNT_TRAP, //TODO + UNT_HIDDEN_WARP_NPC, //TODO + UNT_USED_TRAPS, + UNT_ICEWALL, + UNT_QUAGMIRE, + UNT_BLASTMINE, + UNT_SKIDTRAP, + UNT_ANKLESNARE, + UNT_VENOMDUST, + UNT_LANDMINE, + UNT_SHOCKWAVE, + UNT_SANDMAN, + UNT_FLASHER, + UNT_FREEZINGTRAP, + UNT_CLAYMORETRAP, + UNT_TALKIEBOX, + UNT_VOLCANO, + UNT_DELUGE, + UNT_VIOLENTGALE, + UNT_LANDPROTECTOR, + UNT_LULLABY, + UNT_RICHMANKIM, + UNT_ETERNALCHAOS, + UNT_DRUMBATTLEFIELD, + UNT_RINGNIBELUNGEN, + UNT_ROKISWEIL, + UNT_INTOABYSS, + UNT_SIEGFRIED, + UNT_DISSONANCE, + UNT_WHISTLE, + UNT_ASSASSINCROSS, + UNT_POEMBRAGI, + UNT_APPLEIDUN, + UNT_UGLYDANCE, + UNT_HUMMING, + UNT_DONTFORGETME, + UNT_FORTUNEKISS, + UNT_SERVICEFORYOU, + UNT_GRAFFITI, + UNT_DEMONSTRATION, + UNT_CALLFAMILY, + UNT_GOSPEL, + UNT_BASILICA, + UNT_MOONLIT, + UNT_FOGWALL, + UNT_SPIDERWEB, + UNT_GRAVITATION, + UNT_HERMODE, + UNT_KAENSIN, //TODO + UNT_SUITON, + UNT_TATAMIGAESHI, + UNT_KAEN, + UNT_GROUNDDRIFT_WIND, + UNT_GROUNDDRIFT_DARK, + UNT_GROUNDDRIFT_POISON, + UNT_GROUNDDRIFT_WATER, + UNT_GROUNDDRIFT_FIRE, + UNT_DEATHWAVE, //TODO + UNT_WATERATTACK, //TODO + UNT_WINDATTACK, //TODO + UNT_EARTHQUAKE, //TODO + UNT_EVILLAND, + UNT_DARK_RUNNER, //TODO + UNT_DARK_TRANSFER, //TODO + UNT_EPICLESIS, + UNT_EARTHSTRAIN, + UNT_MANHOLE, + UNT_DIMENSIONDOOR, + UNT_CHAOSPANIC, + UNT_MAELSTROM, + UNT_BLOODYLUST, + UNT_FEINTBOMB, + UNT_MAGENTATRAP, + UNT_COBALTTRAP, + UNT_MAIZETRAP, + UNT_VERDURETRAP, + UNT_FIRINGTRAP, + UNT_ICEBOUNDTRAP, + UNT_ELECTRICSHOCKER, + UNT_CLUSTERBOMB, + UNT_REVERBERATION, + UNT_SEVERE_RAINSTORM, + UNT_FIREWALK, + UNT_ELECTRICWALK, + UNT_NETHERWORLD, + UNT_PSYCHIC_WAVE, + UNT_CLOUD_KILL, + UNT_POISONSMOKE, + UNT_NEUTRALBARRIER, + UNT_STEALTHFIELD, + UNT_WARMER, + UNT_THORNS_TRAP, + UNT_WALLOFTHORN, + UNT_DEMONIC_FIRE, + UNT_FIRE_EXPANSION_SMOKE_POWDER, + UNT_FIRE_EXPANSION_TEAR_GAS, + UNT_HELLS_PLANT, + UNT_VACUUM_EXTREME, + UNT_BANDING, + UNT_FIRE_MANTLE, + UNT_WATER_BARRIER, + UNT_ZEPHYR, + UNT_POWER_OF_GAIA, + UNT_FIRE_INSIGNIA, + UNT_WATER_INSIGNIA, + UNT_WIND_INSIGNIA, + UNT_EARTH_INSIGNIA, + UNT_POISON_MIST, + UNT_LAVA_SLIDE, + UNT_VOLCANIC_ASH, + UNT_ZENKAI_WATER, + UNT_ZENKAI_LAND, + UNT_ZENKAI_FIRE, + UNT_ZENKAI_WIND, + UNT_MAKIBISHI, + UNT_VENOMFOG, + + /** + * Guild Auras + **/ + UNT_GD_LEADERSHIP = 0xc1, + UNT_GD_GLORYWOUNDS = 0xc2, + UNT_GD_SOULCOLD = 0xc3, + UNT_GD_HAWKEYES = 0xc4, + + UNT_MAX = 0x190 +}; +/** + * Skill Unit Save + **/ +void skill_usave_add(struct map_session_data * sd, uint16 skill_id, uint16 skill_lv); +void skill_usave_trigger(struct map_session_data *sd); +/** + * Skill Cool Downs - load from pc.c when the character logs in + **/ +void skill_cooldown_load(struct map_session_data * sd); +/** + * Warlock + **/ +#define MAX_SKILL_SPELLBOOK_DB 17 +enum wl_spheres { + WLS_FIRE = 0x44, + WLS_WIND, + WLS_WATER, + WLS_STONE, +}; +int skill_spellbook (struct map_session_data *sd, int nameid); +int skill_block_check(struct block_list *bl, enum sc_type type, uint16 skill_id); +/** + * Guilottine Cross + **/ +#define MAX_SKILL_MAGICMUSHROOM_DB 23 +struct s_skill_magicmushroom_db { + uint16 skill_id; +}; +extern struct s_skill_magicmushroom_db skill_magicmushroom_db[MAX_SKILL_MAGICMUSHROOM_DB]; +/** + * Ranger + **/ +int skill_detonator(struct block_list *bl, va_list ap); +bool skill_check_camouflage(struct block_list *bl, struct status_change_entry *sce); +/** + * Mechanic + **/ +int skill_magicdecoy(struct map_session_data *sd, int nameid); +/** + * Guiltoine Cross + **/ +int skill_poisoningweapon( struct map_session_data *sd, int nameid); +enum gx_poison { + PO_PARALYSE = 12717, + PO_LEECHESEND, + PO_OBLIVIONCURSE, + PO_DEATHHURT, + PO_TOXIN, + PO_PYREXIA, + PO_MAGICMUSHROOM, + PO_VENOMBLEED +}; +/** + * Auto Shadow Spell (Shadow Chaser) + **/ +int skill_select_menu(struct map_session_data *sd,uint16 skill_id); + +int skill_elementalanalysis(struct map_session_data *sd, int n, uint16 skill_lv, unsigned short *item_list); // Sorcerer Four Elemental Analisys. +int skill_changematerial(struct map_session_data *sd, int n, unsigned short *item_list); // Genetic Change Material. +int skill_get_elemental_type(uint16 skill_id, uint16 skill_lv); + +#endif /* _SKILL_H_ */ |