// Copyright (c) Athena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder #ifndef _STATUS_H_ #define _STATUS_H_ // forward declarations from map.h struct block_list; struct mob_data; struct pet_data; struct homun_data; struct status_change; //Use this to refer the max refinery level [Skotlex] #define MAX_REFINE 10 #define MAX_REFINE_BONUS 5 extern unsigned long StatusChangeFlagTable[]; // Status changes listing. These code are for use by the server. enum { //First we enumerate common status ailments which are often used around. SC_STONE = 0, SC_FREEZE, SC_STUN, SC_SLEEP, SC_POISON, SC_CURSE, SC_SILENCE, SC_CONFUSION, SC_BLIND, SC_BLEEDING, SC_DPOISON, //10 //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, SC_NOCHAT, SC_BABY, 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_TKREST, // [marquis007] 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, //[orn] SC_DEFENCE, //[orn] SC_INCAGIRATE, SC_INCDEXRATE, SC_JAILED, SC_ENCHANTARMS, //250 SC_MAGICALATTACK, SC_MAX, //Automatically updated max, used in for's and at startup to check we are within bounds. [Skotlex] }; int SkillStatusChangeTable(int skill); extern int StatusSkillChangeTable[SC_MAX]; //Numerates the Number for the status changes (client-dependent), imported from jA enum { SI_BLANK = -1, SI_PROVOKE = 0, SI_ENDURE = 1, SI_TWOHANDQUICKEN = 2, SI_CONCENTRATE = 3, SI_HIDING = 4, SI_CLOAKING = 5, SI_ENCPOISON = 6, SI_POISONREACT = 7, SI_QUAGMIRE = 8, SI_ANGELUS = 9, SI_BLESSING = 10, SI_SIGNUMCRUCIS = 11, SI_INCREASEAGI = 12, SI_DECREASEAGI = 13, SI_SLOWPOISON = 14, SI_IMPOSITIO = 15, SI_SUFFRAGIUM = 16, SI_ASPERSIO = 17, SI_BENEDICTIO = 18, SI_KYRIE = 19, SI_MAGNIFICAT = 20, SI_GLORIA = 21, SI_AETERNA = 22, SI_ADRENALINE = 23, SI_WEAPONPERFECTION = 24, SI_OVERTHRUST = 25, SI_MAXIMIZEPOWER = 26, SI_RIDING = 27, SI_FALCON = 28, SI_TRICKDEAD = 29, SI_LOUD = 30, SI_ENERGYCOAT = 31, SI_BROKENARMOR = 32, SI_BROKENWEAPON = 33, SI_HALLUCINATION = 34, SI_WEIGHT50 = 35, SI_WEIGHT90 = 36, SI_ASPDPOTION = 37, //38: Again Aspd Potion //39: Again Aspd Potion //40: Again Aspd Potion SI_SPEEDPOTION1 = 41, SI_SPEEDPOTION2 = 42, SI_STRIPWEAPON = 50, SI_STRIPSHIELD = 51, SI_STRIPARMOR = 52, SI_STRIPHELM = 53, SI_CP_WEAPON = 54, SI_CP_SHIELD = 55, SI_CP_ARMOR = 56, SI_CP_HELM = 57, SI_AUTOGUARD = 58, SI_REFLECTSHIELD = 59, SI_PROVIDENCE = 61, SI_DEFENDER = 62, SI_AUTOSPELL = 65, SI_SPEARQUICKEN = 68, SI_EXPLOSIONSPIRITS = 86, SI_FURY = 87, SI_FIREWEAPON = 90, SI_WATERWEAPON = 91, SI_WINDWEAPON = 92, SI_EARTHWEAPON = 93, SI_UNDEAD = 97, // 102 = again gloria - from what I saw on screenshots, I wonder if it isn't gospel... [DracoRPG] SI_AURABLADE = 103, SI_PARRYING = 104, SI_CONCENTRATION = 105, SI_TENSIONRELAX = 106, SI_BERSERK = 107, SI_ASSUMPTIO = 110, SI_LANDENDOW = 112, SI_MAGICPOWER = 113, SI_EDP = 114, SI_TRUESIGHT = 115, SI_WINDWALK = 116, SI_MELTDOWN = 117, SI_CARTBOOST = 118, //119, blank SI_REJECTSWORD = 120, SI_MARIONETTE = 121, SI_MARIONETTE2 = 122, SI_MOONLIT = 123, SI_BLEEDING = 124, SI_JOINTBEAT = 125, SI_BABY = 130, SI_AUTOBERSERK = 132, SI_RUN = 133, SI_BUMP = 134, SI_READYSTORM = 135, SI_READYDOWN = 137, SI_READYTURN = 139, SI_READYCOUNTER = 141, SI_DODGE = 143, //SI_RUN = 144, //is not RUN. need info on what this is. SI_SPURT = 145, SI_SHADOWWEAPON = 146, SI_ADRENALINE2 = 147, SI_GHOSTWEAPON = 148, SI_SPIRIT = 149, SI_DEVIL = 152, SI_KAITE = 153, SI_KAIZEL = 156, SI_KAAHI = 157, SI_KAUPE = 158, SI_SMA = 159, SI_NIGHT = 160, SI_ONEHAND = 161, SI_WARM = 165, // 166 | The three show the exact same display: ultra red character (165, 166, 167) // 167 | SI_SUN_COMFORT = 169, SI_MOON_COMFORT = 170, SI_STAR_COMFORT = 171, SI_PRESERVE = 181, SI_INCSTR = 182, SI_INTRAVISION = 184, SI_DOUBLECAST = 186, SI_MAXOVERTHRUST = 188, SI_TAROT = 191, // the icon allows no doubt... but what is it really used for ?? [DracoRPG] SI_SHRINK = 197, SI_SIGHTBLASTER = 198, SI_WINKCHARM = 199, SI_CLOSECONFINE = 200, SI_CLOSECONFINE2 = 201, SI_MADNESSCANCEL = 203, //[blackhole89] SI_GATLINGFEVER = 204, SI_TKREST = 205, // 205 = Gloria again (but TK- Happy State looks like it) SI_UTSUSEMI = 206, SI_BUNSINJYUTSU = 207, SI_NEN = 208, SI_ADJUSTMENT = 209, SI_ACCURACY = 210, SI_FOODSTR = 241, SI_FOODAGI = 242, SI_FOODVIT = 243, SI_FOODDEX = 244, SI_FOODINT = 245, SI_FOODLUK = 246, SI_FOODFLEE = 247, SI_FOODHIT = 248, SI_FOODCRI = 249, }; // JOINTBEAT stackable ailments #define BREAK_ANKLE 0x01 // MoveSpeed reduced by 50% #define BREAK_WRIST 0x02 // ASPD reduced by 25% #define BREAK_KNEE 0x04 // MoveSpeed reduced by 30%, ASPD reduced by 10% #define BREAK_SHOULDER 0x08 // DEF reduced by 50% #define BREAK_WAIST 0x10 // DEF reduced by 25%, ATK reduced by 25% #define BREAK_NECK 0x20 // current attack does 2x damage, inflicts 'bleeding' for 30 seconds #define BREAK_FLAGS ( BREAK_ANKLE | BREAK_WRIST | BREAK_KNEE | BREAK_SHOULDER | BREAK_WAIST | BREAK_NECK ) extern int current_equip_item_index; extern int current_equip_card_id; extern int percentrefinery[5][MAX_REFINE+1]; //The last slot always has a 0% success chance [Skotlex] //Mode definitions to clear up code reading. [Skotlex] #define MD_CANMOVE 0x0001 #define MD_LOOTER 0x0002 #define MD_AGGRESSIVE 0x0004 #define MD_ASSIST 0x0008 #define MD_CASTSENSOR_IDLE 0x0010 #define MD_BOSS 0x0020 #define MD_PLANT 0x0040 #define MD_CANATTACK 0x0080 #define MD_DETECTOR 0x0100 #define MD_CASTSENSOR_CHASE 0x0200 #define MD_CHANGECHASE 0x0400 #define MD_ANGRY 0x0800 #define MD_CHANGETARGET_MELEE 0x1000 #define MD_CHANGETARGET_CHASE 0x2000 #define MD_MASK 0xFFFF //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: Non stackable status changes. enum { OPT1_STONE = 1, //Petrified OPT1_FREEZE, OPT1_STUN, OPT1_SLEEP, //What is 5? OPT1_STONEWAIT=6 //Petrifying }; //opt2: Stackable status changes. #define OPT2_POISON 0x001 #define OPT2_CURSE 0x002 #define OPT2_SILENCE 0x004 #define OPT2_SIGNUMCRUCIS 0x008 #define OPT2_BLIND 0x010 //0x020 - nothing //0x040 - nothing #define OPT2_DPOISON 0x080 //0x100 #define OPTION_SIGHT 0x00000001 #define OPTION_HIDE 0x00000002 #define OPTION_CLOAK 0x00000004 #define OPTION_CART1 0x00000008 #define OPTION_FALCON 0x00000010 #define OPTION_RIDING 0x00000020 #define OPTION_INVISIBLE 0x00000040 #define OPTION_CART2 0x00000080 #define OPTION_CART3 0x00000100 #define OPTION_CART4 0x00000200 #define OPTION_CART5 0x00000400 #define OPTION_ORCISH 0x00000800 #define OPTION_WEDDING 0x00001000 #define OPTION_RUWACH 0x00002000 #define OPTION_CHASEWALK 0x00004000 //Note that clientside Flying and Xmas are 0x8000 for clients prior to 2007. #define OPTION_FLYING 0x0008000 #define OPTION_XMAS 0x00010000 #define OPTION_CART (OPTION_CART1|OPTION_CART2|OPTION_CART3|OPTION_CART4|OPTION_CART5) #define OPTION_MASK ~0x40 //Defines for the manner system [Skotlex] #define MANNER_NOCHAT 0x01 #define MANNER_NOSKILL 0x02 #define MANNER_NOCOMMAND 0x04 #define MANNER_NOITEM 0x08 #define MANNER_NOROOM 0x10 //Define flags for the status_calc_bl function. [Skotlex] #define SCB_NONE 0x00000000 #define SCB_BASE 0x00000001 #define SCB_MAXHP 0x00000002 #define SCB_MAXSP 0x00000004 #define SCB_STR 0x00000008 #define SCB_AGI 0x00000010 #define SCB_VIT 0x00000020 #define SCB_INT 0x00000040 #define SCB_DEX 0x00000080 #define SCB_LUK 0x00000100 #define SCB_BATK 0x00000200 #define SCB_WATK 0x00000400 #define SCB_MATK 0x00000800 #define SCB_HIT 0x00001000 #define SCB_FLEE 0x00002000 #define SCB_DEF 0x00004000 #define SCB_DEF2 0x00008000 #define SCB_MDEF 0x00010000 #define SCB_MDEF2 0x00020000 #define SCB_SPEED 0x00040000 #define SCB_ASPD 0x00080000 #define SCB_DSPD 0x00100000 #define SCB_CRI 0x00200000 #define SCB_FLEE2 0x00400000 #define SCB_ATK_ELE 0x00800000 #define SCB_DEF_ELE 0x01000000 #define SCB_MODE 0x02000000 #define SCB_SIZE 0x04000000 #define SCB_RACE 0x08000000 #define SCB_RANGE 0x10000000 #define SCB_REGEN 0x20000000 //SCB_DYE means the sc should force cloth-dye change to 0 to avoid client crashes. #define SCB_DYE 0x40000000 #define SCB_PC 0x80000000 #define SCB_ALL 0x3FFFFFFF //Define to determine who gets HP/SP consumed on doing skills/etc. [Skotlex] #define BL_CONSUME (BL_PC|BL_HOM) //Define to determine who has regen #define BL_REGEN (BL_PC|BL_HOM) int status_damage(struct block_list *src,struct block_list *target,int hp,int sp, int walkdelay, int flag); //Define for standard HP damage attacks. #define status_fix_damage(src, target, hp, walkdelay) status_damage(src, target, hp, 0, walkdelay, 0) //Define for standard HP/SP damage triggers. #define status_zap(bl, hp, sp) status_damage(NULL, bl, hp, sp, 0, 1) //Define for standard HP/SP skill-related cost triggers (mobs require no HP/SP to use skills) #define status_charge(bl, hp, sp) (!((bl)->type&BL_CONSUME) || status_damage(NULL, bl, hp, sp, 0, 3)) int status_percent_change(struct block_list *src,struct block_list *target,signed char hp_rate, signed char sp_rate, int flag); //Easier handling of status_percent_change #define status_percent_heal(bl, hp_rate, sp_rate) status_percent_change(NULL, bl, -(hp_rate), -(sp_rate), 1) #define status_percent_damage(src, target, hp_rate, sp_rate) status_percent_change(src, target, hp_rate, sp_rate, 0) //Instant kill with no drops/exp/etc // #define status_kill(bl) status_percent_damage(NULL, bl, 100, 0) //Used to set the hp/sp of an object to an absolute value (can't kill) int status_set_hp(struct block_list *bl, unsigned int hp, int flag); int status_set_sp(struct block_list *bl, unsigned int sp, int flag); int status_heal(struct block_list *bl,int hp,int sp, int flag); int status_revive(struct block_list *bl, unsigned char per_hp, unsigned char per_sp); //Define for copying a status_data structure from b to a, without overwriting current Hp and Sp, nor messing the lhw pointer. #define status_cpy(a, b) { memcpy(&((a)->max_hp), &((b)->max_hp), sizeof(struct status_data)-(sizeof((a)->hp)+sizeof((a)->sp)+sizeof((a)->lhw))); \ if ((a)->lhw && (b)->lhw) { memcpy((a)->lhw, (b)->lhw, sizeof(struct weapon_atk)); }} struct regen_data *status_get_regen_data(struct block_list *bl); struct status_data *status_get_status_data(struct 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_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_hit(bl) status_get_status_data(bl)->hit #define status_get_flee(bl) status_get_status_data(bl)->flee unsigned char 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 unsigned short status_get_lwatk(struct block_list *bl); unsigned short status_get_lwatk2(struct block_list *bl); 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_dmotion(bl) status_get_status_data(bl)->dmotion #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, struct 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 unsigned char status_get_attack_lelement(struct block_list *bl); #define status_get_race(bl) status_get_status_data(bl)->race #define status_get_size(bl) status_get_status_data(bl)->size #define status_get_mode(bl) status_get_status_data(bl)->mode int status_get_party_id(struct block_list *bl); int status_get_guild_id(struct block_list *bl); int status_get_mexp(struct block_list *bl); int 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); struct status_change *status_get_sc(struct block_list *bl); int status_isdead(struct block_list *bl); int status_isimmune(struct block_list *bl); int status_get_sc_def(struct block_list *bl, int type, int rate, int tick, int flag); //Short version, receives rate in 1->100 range, and does not uses a flag setting. #define sc_start(bl, type, rate, val1, tick) status_change_start(bl,type,100*(rate),val1,0,0,0,tick,0) #define sc_start2(bl, type, rate, val1, val2, tick) status_change_start(bl,type,100*(rate),val1,val2,0,0,tick,0) #define sc_start4(bl, type, rate, val1, val2, val3, val4, tick) status_change_start(bl,type,100*(rate),val1,val2,val3,val4,tick,0) int status_change_start(struct block_list *bl,int type,int rate,int val1,int val2,int val3,int val4,int tick,int flag); int status_change_end( struct block_list* bl , int type,int tid ); int kaahi_heal_timer(int tid, unsigned int tick, int id, int data); int status_change_timer(int tid, unsigned int tick, int id, int data); int status_change_timer_sub(struct block_list *bl, va_list ap ); int status_change_clear(struct block_list *bl,int type); int status_change_clear_buffs(struct block_list *bl, int type); void status_calc_bl(struct block_list *bl, unsigned long flag); int status_calc_pet(struct pet_data* pd, int first); // [Skotlex] int status_calc_pc(struct map_session_data* sd,int first); int status_calc_mob(struct mob_data* md, int first); //[Skotlex] int status_calc_homunculus(struct homun_data *hd, int first); 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, struct status_change *sc); void status_freecast_switch(struct map_session_data *sd); int status_getrefinebonus(int lv,int type); int status_check_skilluse(struct block_list *src, struct block_list *target, int skill_num, int flag); // [Skotlex] int status_check_visibility(struct block_list *src, struct block_list *target); //[Skotlex] int status_readdb(void); int do_init_status(void); #endif /* _STATUS_H_ */