From 848e73703eeb15c650aee38eef46714d3863474f Mon Sep 17 00:00:00 2001 From: Kenpachi Developer Date: Tue, 21 Apr 2020 02:30:39 +0200 Subject: Introduce auto-cast vector --- src/map/pc.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/map/pc.h') diff --git a/src/map/pc.h b/src/map/pc.h index e560df549..32b7197a8 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -193,6 +193,7 @@ struct map_session_data { struct regen_data regen; struct regen_data_sub sregen, ssregen; struct autocast_data autocast; + VECTOR_DECL(struct autocast_data) auto_cast; // Auto-cast vector. //NOTE: When deciding to add a flag to state or special_state, take into consideration that state is preserved in //status_calc_pc, while special_state is recalculated in each call. [Skotlex] struct { -- cgit v1.2.3-60-g2f50 From c7f34b53e5bd0da415daf7d08d9abc7fe5a68116 Mon Sep 17 00:00:00 2001 From: Kenpachi Developer Date: Tue, 21 Apr 2020 05:09:27 +0200 Subject: Add struct autocast_data auto_cast_current to struct map_session_data --- src/map/pc.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/map/pc.h') diff --git a/src/map/pc.h b/src/map/pc.h index 32b7197a8..d548339b2 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -193,6 +193,7 @@ struct map_session_data { struct regen_data regen; struct regen_data_sub sregen, ssregen; struct autocast_data autocast; + struct autocast_data auto_cast_current; // Currently processed auto-cast skill. VECTOR_DECL(struct autocast_data) auto_cast; // Auto-cast vector. //NOTE: When deciding to add a flag to state or special_state, take into consideration that state is preserved in //status_calc_pc, while special_state is recalculated in each call. [Skotlex] -- cgit v1.2.3-60-g2f50 From a31fa955dbc4f938f953555a50f2994f02aa14e6 Mon Sep 17 00:00:00 2001 From: Kenpachi Developer Date: Tue, 21 Apr 2020 05:23:53 +0200 Subject: Add pc_autocast_set_current() function --- src/map/pc.c | 28 ++++++++++++++++++++++++++++ src/map/pc.h | 1 + 2 files changed, 29 insertions(+) (limited to 'src/map/pc.h') diff --git a/src/map/pc.c b/src/map/pc.c index 411727c51..632b5693b 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -5356,6 +5356,33 @@ static int pc_autocast_clear(struct map_session_data *sd) return 1; } +/** + * Sets a character's currently processed auto-cast skill data by comparing the skill ID. + * + * @param sd The character. + * @param skill_id The skill ID to compare. + * + **/ +static void pc_autocast_set_current(struct map_session_data *sd, int skill_id) +{ + nullpo_retv(sd); + + sd->auto_cast_current.type = AUTOCAST_NONE; + sd->auto_cast_current.skill_id = 0; + sd->auto_cast_current.skill_lv = 0; + sd->auto_cast_current.itemskill_conditions_checked = false; + sd->auto_cast_current.itemskill_check_conditions = true; + sd->auto_cast_current.itemskill_instant_cast = false; + sd->auto_cast_current.itemskill_cast_on_self = false; + + for (int i = 0; i < VECTOR_LENGTH(sd->auto_cast); i++) { + if (VECTOR_INDEX(sd->auto_cast, i).skill_id == skill_id) { + sd->auto_cast_current = VECTOR_INDEX(sd->auto_cast, i); + break; + } + } +} + /*========================================== * Add item on cart for given index. * Return: @@ -12887,6 +12914,7 @@ void pc_defaults(void) pc->checkitem = pc_checkitem; pc->useitem = pc_useitem; pc->autocast_clear = pc_autocast_clear; + pc->autocast_set_current = pc_autocast_set_current; pc->skillatk_bonus = pc_skillatk_bonus; pc->skillheal_bonus = pc_skillheal_bonus; diff --git a/src/map/pc.h b/src/map/pc.h index d548339b2..40c32f594 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -1035,6 +1035,7 @@ END_ZEROED_BLOCK; /* End */ int (*checkitem) (struct map_session_data *sd); int (*useitem) (struct map_session_data *sd,int n); int (*autocast_clear) (struct map_session_data *sd); + void (*autocast_set_current) (struct map_session_data *sd, int skill_id); int (*skillatk_bonus) (struct map_session_data *sd, uint16 skill_id); int (*skillheal_bonus) (struct map_session_data *sd, uint16 skill_id); -- cgit v1.2.3-60-g2f50 From c5edda900937eb3156391dc8c2f726f34a34dba2 Mon Sep 17 00:00:00 2001 From: Kenpachi Developer Date: Tue, 21 Apr 2020 06:33:30 +0200 Subject: Remove struct autocast_data autocast from struct map_session_data --- src/map/pc.h | 1 - 1 file changed, 1 deletion(-) (limited to 'src/map/pc.h') diff --git a/src/map/pc.h b/src/map/pc.h index 40c32f594..010de1e9d 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -192,7 +192,6 @@ struct map_session_data { struct status_change sc; struct regen_data regen; struct regen_data_sub sregen, ssregen; - struct autocast_data autocast; struct autocast_data auto_cast_current; // Currently processed auto-cast skill. VECTOR_DECL(struct autocast_data) auto_cast; // Auto-cast vector. //NOTE: When deciding to add a flag to state or special_state, take into consideration that state is preserved in -- cgit v1.2.3-60-g2f50 From 77d59bad5d27a528fb503e19807bfc07cf2077b1 Mon Sep 17 00:00:00 2001 From: Kenpachi Developer Date: Tue, 21 Apr 2020 07:06:12 +0200 Subject: Add pc_autocast_remove() function --- src/map/pc.c | 23 +++++++++++++++++++++++ src/map/pc.h | 1 + 2 files changed, 24 insertions(+) (limited to 'src/map/pc.h') diff --git a/src/map/pc.c b/src/map/pc.c index 6985ecff8..9c1342836 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -5383,6 +5383,28 @@ static void pc_autocast_set_current(struct map_session_data *sd, int skill_id) } } +/** + * Removes a specific entry from a character's auto-cast vector. + * + * @param sd The character. + * @param type The entry's auto-cast type. + * @param skill_id The entry's skill ID. + * @param skill_lv The entry's skill level. + * + **/ +static void pc_autocast_remove(struct map_session_data *sd, enum autocast_type type, int skill_id, int skill_lv) +{ + nullpo_retv(sd); + + for (int i = 0; i < VECTOR_LENGTH(sd->auto_cast); i++) { + if (VECTOR_INDEX(sd->auto_cast, i).type == type && VECTOR_INDEX(sd->auto_cast, i).skill_id == skill_id + && VECTOR_INDEX(sd->auto_cast, i).skill_lv == skill_lv) { + VECTOR_ERASE(sd->auto_cast, i); + break; + } + } +} + /*========================================== * Add item on cart for given index. * Return: @@ -12915,6 +12937,7 @@ void pc_defaults(void) pc->useitem = pc_useitem; pc->autocast_clear = pc_autocast_clear; pc->autocast_set_current = pc_autocast_set_current; + pc->autocast_remove = pc_autocast_remove; pc->skillatk_bonus = pc_skillatk_bonus; pc->skillheal_bonus = pc_skillheal_bonus; diff --git a/src/map/pc.h b/src/map/pc.h index 010de1e9d..9012a67cb 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -1035,6 +1035,7 @@ END_ZEROED_BLOCK; /* End */ int (*useitem) (struct map_session_data *sd,int n); int (*autocast_clear) (struct map_session_data *sd); void (*autocast_set_current) (struct map_session_data *sd, int skill_id); + void (*autocast_remove) (struct map_session_data *sd, enum autocast_type type, int skill_id, int skill_lv); int (*skillatk_bonus) (struct map_session_data *sd, uint16 skill_id); int (*skillheal_bonus) (struct map_session_data *sd, uint16 skill_id); -- cgit v1.2.3-60-g2f50 From 134fc00a1906793184ede7ec4351afbf2d204569 Mon Sep 17 00:00:00 2001 From: Kenpachi Developer Date: Tue, 21 Apr 2020 07:42:04 +0200 Subject: Add pc_autocast_clear_current() function --- src/map/pc.c | 20 ++++++++++++++++++++ src/map/pc.h | 1 + 2 files changed, 21 insertions(+) (limited to 'src/map/pc.h') diff --git a/src/map/pc.c b/src/map/pc.c index 9c1342836..56a4b938d 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -5333,6 +5333,25 @@ static int pc_useitem(struct map_session_data *sd, int n) return 1; } +/** + * Unsets a character's currently processed auto-cast skill data. + * + * @param sd The character. + * + **/ +static void pc_autocast_clear_current(struct map_session_data *sd) +{ + nullpo_retv(sd); + + sd->auto_cast_current.type = AUTOCAST_NONE; + sd->auto_cast_current.skill_id = 0; + sd->auto_cast_current.skill_lv = 0; + sd->auto_cast_current.itemskill_conditions_checked = false; + sd->auto_cast_current.itemskill_check_conditions = true; + sd->auto_cast_current.itemskill_instant_cast = false; + sd->auto_cast_current.itemskill_cast_on_self = false; +} + /** * Unsets a character's auto-cast related data. * @@ -12935,6 +12954,7 @@ void pc_defaults(void) pc->unequipitem_pos = pc_unequipitem_pos; pc->checkitem = pc_checkitem; pc->useitem = pc_useitem; + pc->autocast_clear_current = pc_autocast_clear_current; pc->autocast_clear = pc_autocast_clear; pc->autocast_set_current = pc_autocast_set_current; pc->autocast_remove = pc_autocast_remove; diff --git a/src/map/pc.h b/src/map/pc.h index 9012a67cb..eff317847 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -1033,6 +1033,7 @@ END_ZEROED_BLOCK; /* End */ void (*unequipitem_pos) (struct map_session_data *sd, int n, int pos); int (*checkitem) (struct map_session_data *sd); int (*useitem) (struct map_session_data *sd,int n); + void (*autocast_clear_current) (struct map_session_data *sd); int (*autocast_clear) (struct map_session_data *sd); void (*autocast_set_current) (struct map_session_data *sd, int skill_id); void (*autocast_remove) (struct map_session_data *sd, enum autocast_type type, int skill_id, int skill_lv); -- cgit v1.2.3-60-g2f50 From 9bc5fadd7e57e71d861259c828c39cac5d0545a3 Mon Sep 17 00:00:00 2001 From: Kenpachi Developer Date: Tue, 21 Apr 2020 07:53:57 +0200 Subject: Change pc_autocast_clear() function to void --- src/map/pc.c | 12 +++++------- src/map/pc.h | 2 +- src/plugins/HPMHooking/HPMHooking.Defs.inc | 4 ++-- src/plugins/HPMHooking/HPMHooking_map.Hooks.inc | 17 ++++++++--------- 4 files changed, 16 insertions(+), 19 deletions(-) (limited to 'src/map/pc.h') diff --git a/src/map/pc.c b/src/map/pc.c index d1d224aa7..4497ef54f 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -5355,17 +5355,15 @@ static void pc_autocast_clear_current(struct map_session_data *sd) /** * Unsets a character's auto-cast related data. * - * @param sd The character's session data. - * @return 0 if parameter sd is NULL, otherwise 1. - */ -static int pc_autocast_clear(struct map_session_data *sd) + * @param sd The character. + * + **/ +static void pc_autocast_clear(struct map_session_data *sd) { - nullpo_ret(sd); + nullpo_retv(sd); pc->autocast_clear_current(sd); VECTOR_TRUNCATE(sd->auto_cast); // Truncate auto-cast vector. - - return 1; } /** diff --git a/src/map/pc.h b/src/map/pc.h index eff317847..f2eca0b89 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -1034,7 +1034,7 @@ END_ZEROED_BLOCK; /* End */ int (*checkitem) (struct map_session_data *sd); int (*useitem) (struct map_session_data *sd,int n); void (*autocast_clear_current) (struct map_session_data *sd); - int (*autocast_clear) (struct map_session_data *sd); + void (*autocast_clear) (struct map_session_data *sd); void (*autocast_set_current) (struct map_session_data *sd, int skill_id); void (*autocast_remove) (struct map_session_data *sd, enum autocast_type type, int skill_id, int skill_lv); diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc index ef71f1967..54e5c2da3 100644 --- a/src/plugins/HPMHooking/HPMHooking.Defs.inc +++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc @@ -6200,8 +6200,8 @@ typedef int (*HPMHOOK_pre_pc_checkitem) (struct map_session_data **sd); typedef int (*HPMHOOK_post_pc_checkitem) (int retVal___, struct map_session_data *sd); typedef int (*HPMHOOK_pre_pc_useitem) (struct map_session_data **sd, int *n); typedef int (*HPMHOOK_post_pc_useitem) (int retVal___, struct map_session_data *sd, int n); -typedef int (*HPMHOOK_pre_pc_autocast_clear) (struct map_session_data **sd); -typedef int (*HPMHOOK_post_pc_autocast_clear) (int retVal___, struct map_session_data *sd); +typedef void (*HPMHOOK_pre_pc_autocast_clear) (struct map_session_data **sd); +typedef void (*HPMHOOK_post_pc_autocast_clear) (struct map_session_data *sd); typedef int (*HPMHOOK_pre_pc_skillatk_bonus) (struct map_session_data **sd, uint16 *skill_id); typedef int (*HPMHOOK_post_pc_skillatk_bonus) (int retVal___, struct map_session_data *sd, uint16 skill_id); typedef int (*HPMHOOK_pre_pc_skillheal_bonus) (struct map_session_data **sd, uint16 *skill_id); diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc index 02d55228e..c5be1529e 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc @@ -63569,32 +63569,31 @@ int HP_pc_useitem(struct map_session_data *sd, int n) { } return retVal___; } -int HP_pc_autocast_clear(struct map_session_data *sd) { +void HP_pc_autocast_clear(struct map_session_data *sd) { int hIndex = 0; - int retVal___ = 0; if (HPMHooks.count.HP_pc_autocast_clear_pre > 0) { - int (*preHookFunc) (struct map_session_data **sd); + void (*preHookFunc) (struct map_session_data **sd); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_autocast_clear_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_pc_autocast_clear_pre[hIndex].func; - retVal___ = preHookFunc(&sd); + preHookFunc(&sd); } if (*HPMforce_return) { *HPMforce_return = false; - return retVal___; + return; } } { - retVal___ = HPMHooks.source.pc.autocast_clear(sd); + HPMHooks.source.pc.autocast_clear(sd); } if (HPMHooks.count.HP_pc_autocast_clear_post > 0) { - int (*postHookFunc) (int retVal___, struct map_session_data *sd); + void (*postHookFunc) (struct map_session_data *sd); for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_autocast_clear_post; hIndex++) { postHookFunc = HPMHooks.list.HP_pc_autocast_clear_post[hIndex].func; - retVal___ = postHookFunc(retVal___, sd); + postHookFunc(sd); } } - return retVal___; + return; } int HP_pc_skillatk_bonus(struct map_session_data *sd, uint16 skill_id) { int hIndex = 0; -- cgit v1.2.3-60-g2f50