summaryrefslogtreecommitdiff
path: root/src/map/status.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/status.h')
-rw-r--r--src/map/status.h296
1 files changed, 156 insertions, 140 deletions
diff --git a/src/map/status.h b/src/map/status.h
index 380b49879..3c6365567 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -1,16 +1,13 @@
// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
// For more information, see LICENCE in the main folder
-
#ifndef _STATUS_H_
#define _STATUS_H_
-
struct block_list;
struct mob_data;
struct pet_data;
struct homun_data;
struct mercenary_data;
struct status_change;
-
/**
* Max Refine available to your server
* Changing this limit requires edits to refine_db.txt
@@ -20,17 +17,14 @@ struct status_change;
#else
#define MAX_REFINE 10
#endif
-
enum refine_type {
REFINE_TYPE_ARMOR = 0,
REFINE_TYPE_WEAPON1 = 1,
REFINE_TYPE_WEAPON2 = 2,
REFINE_TYPE_WEAPON3 = 3,
REFINE_TYPE_WEAPON4 = 4,
-
REFINE_TYPE_MAX = 5
};
-
typedef enum sc_conf_type {
SC_NO_REM_DEATH = 0x1,
SC_NO_SAVE = 0x2,
@@ -40,13 +34,9 @@ typedef enum sc_conf_type {
SC_DEBUFF = 0x20,
SC_MADO_NO_RESET = 0x40
} sc_conf_type;
-
-int status_get_refine_chance(enum refine_type wlv, int refine);
-
// Status changes listing. These code are for use by the server.
typedef enum sc_type {
SC_NONE = -1,
-
//First we enumerate common status ailments which are often used around.
SC_STONE = 0,
SC_COMMON_MIN = 0, // begin
@@ -323,7 +313,6 @@ typedef enum sc_type {
SC_PROTECT_DEF,
//SC_SPREGEN,
SC_WALKSPEED = 278,
-
// Mercenary Only Bonus Effects
SC_MER_FLEE,
SC_MER_ATK, //280
@@ -331,7 +320,6 @@ typedef enum sc_type {
SC_MER_SP,
SC_MER_HIT,
SC_MER_QUICKEN,
-
SC_REBIRTH,
//SC_SKILLCASTRATE, //286
//SC_DEFRATIOATK,
@@ -670,13 +658,10 @@ typedef enum sc_type {
SC_ALL_RIDING,
SC_HANBOK,
-
SC_MONSTER_TRANSFORM,
SC_ANGEL_PROTECT,
-
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
} sc_type;
-
// Official status change ids, used to display status icons on the client.
enum si_type {
SI_BLANK = -1,
@@ -1411,7 +1396,6 @@ enum si_type {
SI_BURNT = 737,
SI_MAX,
};
-
// JOINTBEAT stackable ailments
enum e_joint_break
{
@@ -1424,8 +1408,6 @@ enum e_joint_break
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;
//Mode definitions to clear up code reading. [Skotlex]
enum e_mode
@@ -1724,149 +1706,183 @@ struct status_change {
struct status_change_entry *data[SC_MAX];
};
-// for looking up associated data
-sc_type status_skill2sc(int skill);
-int status_sc2skill(sc_type sc);
-unsigned int status_sc2scb_flag(sc_type sc);
-int status_type2relevant_bl_types(int type);
-int status_get_sc_type(sc_type idx);
-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 status_fix_damage(src, target, hp, walkdelay) iStatus->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)
-int status_charge(struct block_list* bl, int hp, int sp);
-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), 0)
-#define status_percent_damage(src, target, hp_rate, sp_rate, kill) status_percent_change(src, target, hp_rate, sp_rate, (kill)?1:2)
+#define status_zap(bl, hp, sp) iStatus->damage(NULL, bl, hp, sp, 0, 1)
+//Easier handling of iStatus->percent_change
+#define status_percent_heal(bl, hp_rate, sp_rate) iStatus->percent_change(NULL, bl, -(hp_rate), -(sp_rate), 0)
+#define status_percent_damage(src, target, hp_rate, sp_rate, kill) iStatus->percent_change(src, target, hp_rate, sp_rate, (kill)?1:2)
//Instant kill with no drops/exp/etc
#define status_kill(bl) status_percent_damage(NULL, bl, 100, 0, true)
-//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);
-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
-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_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
-#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_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_emblem_id(struct block_list *bl);
-int status_get_mexp(struct block_list *bl);
-int status_get_race2(struct block_list *bl);
+#define status_get_range(bl) iStatus->get_status_data(bl)->rhw.range
+#define status_get_hp(bl) iStatus->get_status_data(bl)->hp
+#define status_get_max_hp(bl) iStatus->get_status_data(bl)->max_hp
+#define status_get_sp(bl) iStatus->get_status_data(bl)->sp
+#define status_get_max_sp(bl) iStatus->get_status_data(bl)->max_sp
+#define status_get_str(bl) iStatus->get_status_data(bl)->str
+#define status_get_agi(bl) iStatus->get_status_data(bl)->agi
+#define status_get_vit(bl) iStatus->get_status_data(bl)->vit
+#define status_get_int(bl) iStatus->get_status_data(bl)->int_
+#define status_get_dex(bl) iStatus->get_status_data(bl)->dex
+#define status_get_luk(bl) iStatus->get_status_data(bl)->luk
+#define status_get_hit(bl) iStatus->get_status_data(bl)->hit
+#define status_get_flee(bl) iStatus->get_status_data(bl)->flee
+#define status_get_mdef(bl) iStatus->get_status_data(bl)->mdef
+#define status_get_flee2(bl) iStatus->get_status_data(bl)->flee2
+#define status_get_def2(bl) iStatus->get_status_data(bl)->def2
+#define status_get_mdef2(bl) iStatus->get_status_data(bl)->mdef2
+#define status_get_critical(bl) iStatus->get_status_data(bl)->cri
+#define status_get_batk(bl) iStatus->get_status_data(bl)->batk
+#define status_get_watk(bl) iStatus->get_status_data(bl)->rhw.atk
+#define status_get_watk2(bl) iStatus->get_status_data(bl)->rhw.atk2
+#define status_get_matk_max(bl) iStatus->get_status_data(bl)->matk_max
+#define status_get_matk_min(bl) iStatus->get_status_data(bl)->matk_min
+#define status_get_lwatk(bl) iStatus->get_status_data(bl)->lhw.atk
+#define status_get_lwatk2(bl) iStatus->get_status_data(bl)->lhw.atk2
+#define status_get_adelay(bl) iStatus->get_status_data(bl)->adelay
+#define status_get_amotion(bl) iStatus->get_status_data(bl)->amotion
+#define status_get_dmotion(bl) iStatus->get_status_data(bl)->dmotion
+#define status_get_element(bl) iStatus->get_status_data(bl)->def_ele
+#define status_get_element_level(bl) iStatus->get_status_data(bl)->ele_lv
+#define status_get_attack_sc_element(bl, sc) iStatus->calc_attack_element(bl, sc, 0)
+#define status_get_attack_element(bl) iStatus->get_status_data(bl)->rhw.ele
+#define status_get_attack_lelement(bl) iStatus->get_status_data(bl)->lhw.ele
+#define status_get_race(bl) iStatus->get_status_data(bl)->race
+#define status_get_size(bl) iStatus->get_status_data(bl)->size
+#define status_get_mode(bl) iStatus->get_status_data(bl)->mode
-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, enum sc_type 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)
+#define sc_start(bl, type, rate, val1, tick) iStatus->change_start(bl,type,100*(rate),val1,0,0,0,tick,0)
+#define sc_start2(bl, type, rate, val1, val2, tick) iStatus->change_start(bl,type,100*(rate),val1,val2,0,0,tick,0)
+#define sc_start4(bl, type, rate, val1, val2, val3, val4, tick) iStatus->change_start(bl,type,100*(rate),val1,val2,val3,val4,tick,0)
-int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val1,int val2,int val3,int val4,int tick,int flag);
-int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const char* file, int line);
-#define status_change_end(bl,type,tid) status_change_end_(bl,type,tid,__FILE__,__LINE__)
-int kaahi_heal_timer(int tid, unsigned int tick, int id, intptr_t data);
-int status_change_timer(int tid, unsigned int tick, int id, intptr_t 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);
+#define status_change_end(bl,type,tid) iStatus->change_end_(bl,type,tid,__FILE__,__LINE__)
-#define status_calc_bl(bl, flag) status_calc_bl_(bl, (enum scb_flag)(flag), false)
-#define status_calc_mob(md, first) status_calc_bl_(&(md)->bl, SCB_ALL, first)
-#define status_calc_pet(pd, first) status_calc_bl_(&(pd)->bl, SCB_ALL, first)
-#define status_calc_pc(sd, first) status_calc_bl_(&(sd)->bl, SCB_ALL, first)
-#define status_calc_homunculus(hd, first) status_calc_bl_(&(hd)->bl, SCB_ALL, first)
-#define status_calc_mercenary(md, first) status_calc_bl_(&(md)->bl, SCB_ALL, first)
-#define status_calc_elemental(ed, first) status_calc_bl_(&(ed)->bl, SCB_ALL, first)
-#define status_calc_npc(nd, first) status_calc_bl_(&(nd)->bl, SCB_ALL, first)
+#define status_calc_bl(bl, flag) iStatus->calc_bl_(bl, (enum scb_flag)(flag), false)
+#define status_calc_mob(md, first) iStatus->calc_bl_(&(md)->bl, SCB_ALL, first)
+#define status_calc_pet(pd, first) iStatus->calc_bl_(&(pd)->bl, SCB_ALL, first)
+#define status_calc_pc(sd, first) iStatus->calc_bl_(&(sd)->bl, SCB_ALL, first)
+#define status_calc_homunculus(hd, first) iStatus->calc_bl_(&(hd)->bl, SCB_ALL, first)
+#define status_calc_mercenary(md, first) iStatus->calc_bl_(&(md)->bl, SCB_ALL, first)
+#define status_calc_elemental(ed, first) iStatus->calc_bl_(&(ed)->bl, SCB_ALL, first)
+#define status_calc_npc(nd, first) iStatus->calc_bl_(&(nd)->bl, SCB_ALL, first)
-void status_calc_bl_(struct block_list *bl, enum scb_flag flag, bool first);
-int status_calc_mob_(struct mob_data* md, bool first);
-int status_calc_pet_(struct pet_data* pd, bool first);
-int status_calc_pc_(struct map_session_data* sd, bool first);
-int status_calc_homunculus_(struct homun_data *hd, bool first);
-int status_calc_mercenary_(struct mercenary_data *md, bool first);
-int status_calc_elemental_(struct elemental_data *ed, bool 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);
-int status_check_skilluse(struct block_list *src, struct block_list *target, uint16 skill_id, int flag); // [Skotlex]
-int status_check_visibility(struct block_list *src, struct block_list *target); //[Skotlex]
-int status_change_spread( struct block_list *src, struct block_list *bl );
-defType status_calc_def(struct block_list *bl, struct status_change *sc, int, bool);
-signed short status_calc_def2(struct block_list *, struct status_change *, int, bool);
-defType status_calc_mdef(struct block_list *bl, struct status_change *sc, int, bool);
-signed short status_calc_mdef2(struct block_list *, struct status_change *, int, bool);
#ifdef RENEWAL
-unsigned short status_calc_batk(struct block_list *, struct status_change *, int, bool);
-unsigned short status_base_matk(const struct status_data* status, int level);
-int status_get_weapon_atk(struct block_list *src, struct weapon_atk *watk, int flag);
-int status_get_total_mdef(struct block_list *src);
-int status_get_total_def(struct block_list *src);
#endif
-int status_get_matk(struct block_list *src, int flag);
-int status_readdb(void);
-int do_init_status(void);
-void do_final_status(void);
+
+/*=====================================
+* Interface : status.h
+* Generated by HerculesInterfaceMaker
+* created by Susu
+*-------------------------------------*/
+struct status_interface {
+
+ /* vars */
+
+ int current_equip_item_index;
+ int current_equip_card_id;
+
+ /* funcs */
+
+ int (*get_refine_chance) (enum refine_type wlv, int refine);
+ // for looking up associated data
+ sc_type (*skill2sc) (int skill);
+ int (*sc2skill) (sc_type sc);
+ unsigned int (*sc2scb_flag) (sc_type sc);
+ int (*type2relevant_bl_types) (int type);
+ int (*get_sc_type) (sc_type idx);
+
+ int (*damage) (struct block_list *src,struct block_list *target,int hp,int sp, int walkdelay, int flag);
+ //Define for standard HP/SP skill-related cost triggers (mobs require no HP/SP to use skills)
+ int (*charge) (struct block_list* bl, int hp, int sp);
+ int (*percent_change) (struct block_list *src,struct block_list *target,signed char hp_rate, signed char sp_rate, int flag);
+ //Used to set the hp/sp of an object to an absolute value (can't kill)
+ int (*set_hp) (struct block_list *bl, unsigned int hp, int flag);
+ int (*set_sp) (struct block_list *bl, unsigned int sp, int flag);
+ int (*heal) (struct block_list *bl,int hp,int sp, int flag);
+ int (*revive) (struct block_list *bl, unsigned char per_hp, unsigned char per_sp);
+
+ struct regen_data * (*get_regen_data) (struct block_list *bl);
+ struct status_data * (*get_status_data) (struct block_list *bl);
+ struct status_data * (*get_base_status) (struct block_list *bl);
+ const char * (*get_name) (struct block_list *bl);
+ int (*get_class) (struct block_list *bl);
+ int (*get_lv) (struct block_list *bl);
+ defType (*get_def) (struct block_list *bl);
+ unsigned short (*get_speed) (struct block_list *bl);
+ unsigned char (*calc_attack_element) (struct block_list *bl, struct status_change *sc, int element);
+ int (*get_party_id) (struct block_list *bl);
+ int (*get_guild_id) (struct block_list *bl);
+ int (*get_emblem_id) (struct block_list *bl);
+ int (*get_mexp) (struct block_list *bl);
+ int (*get_race2) (struct block_list *bl);
+
+ struct view_data * (*get_viewdata) (struct block_list *bl);
+ void (*set_viewdata) (struct block_list *bl, int class_);
+ void (*change_init) (struct block_list *bl);
+ struct status_change * (*get_sc) (struct block_list *bl);
+
+ int (*isdead) (struct block_list *bl);
+ int (*isimmune) (struct block_list *bl);
+
+ int (*get_sc_def) (struct block_list *bl, enum sc_type type, int rate, int tick, int flag);
+
+ int (*change_start) (struct block_list* bl,enum sc_type type,int rate,int val1,int val2,int val3,int val4,int tick,int flag);
+ int (*change_end_) (struct block_list* bl, enum sc_type type, int tid, const char* file, int line);
+ int (*kaahi_heal_timer) (int tid, unsigned int tick, int id, intptr_t data);
+ int (*change_timer) (int tid, unsigned int tick, int id, intptr_t data);
+ int (*change_timer_sub) (struct block_list* bl, va_list ap);
+ int (*change_clear) (struct block_list* bl, int type);
+ int (*change_clear_buffs) (struct block_list* bl, int type);
+
+ void (*calc_bl_) (struct block_list *bl, enum scb_flag flag, bool first);
+ int (*calc_mob_) (struct mob_data* md, bool first);
+ int (*calc_pet_) (struct pet_data* pd, bool first);
+ int (*calc_pc_) (struct map_session_data* sd, bool first);
+ int (*calc_homunculus_) (struct homun_data *hd, bool first);
+ int (*calc_mercenary_) (struct mercenary_data *md, bool first);
+ int (*calc_elemental_) (struct elemental_data *ed, bool first);
+
+ void (*calc_misc) (struct block_list *bl, struct status_data *status, int level);
+ void (*calc_regen) (struct block_list *bl, struct status_data *status, struct regen_data *regen);
+ void (*calc_regen_rate) (struct block_list *bl, struct regen_data *regen, struct status_change *sc);
+
+ int (*check_skilluse) (struct block_list *src, struct block_list *target, uint16 skill_id, int flag); // [Skotlex]
+ int (*check_visibility) (struct block_list *src, struct block_list *target); //[Skotlex]
+
+ int (*change_spread) (struct block_list *src, struct block_list *bl);
+
+ defType (*calc_def) (struct block_list *bl, struct status_change *sc, int, bool);
+ short (*calc_def2) (struct block_list *, struct status_change *, int, bool);
+ defType (*calc_mdef) (struct block_list *bl, struct status_change *sc, int, bool);
+ short (*calc_mdef2) (struct block_list *, struct status_change *, int, bool);
+ unsigned short (*calc_batk) (struct block_list *, struct status_change *, int, bool);
+ unsigned short (*base_matk) (const struct status_data* status, int level);
+ int (*get_weapon_atk) (struct block_list *src, struct weapon_atk *watk, int flag);
+ int (*get_total_mdef) (struct block_list *src);
+ int (*get_total_def) (struct block_list *src);
+
+ int (*get_matk) (struct block_list *src, int flag);
+
+ int (*readdb) (void);
+ int (*do_init_status) (void);
+ void (*do_final_status) (void);
+} iStatus_s;
+
+struct status_interface *iStatus;
+
+void status_defaults(void);
#endif /* _STATUS_H_ */