summaryrefslogtreecommitdiff
path: root/src/map/script.c
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2020-05-31 23:33:55 +0200
committerGitHub <noreply@github.com>2020-05-31 23:33:55 +0200
commitb3189b88eafd5a159780000845bacef79310a22c (patch)
tree6abf9ca36ce7c703c2735589e7f89cef6e5f698a /src/map/script.c
parent1cccfca3dd708354bf808068c1210ce353957f2e (diff)
parent468c81a5367c444e2e678148d556df94eaa623af (diff)
downloadhercules-b3189b88eafd5a159780000845bacef79310a22c.tar.gz
hercules-b3189b88eafd5a159780000845bacef79310a22c.tar.bz2
hercules-b3189b88eafd5a159780000845bacef79310a22c.tar.xz
hercules-b3189b88eafd5a159780000845bacef79310a22c.zip
Merge pull request #2699 from Kenpachi2k13/multi_itemskill
Enable multiple itemskill() calls per item
Diffstat (limited to 'src/map/script.c')
-rw-r--r--src/map/script.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/src/map/script.c b/src/map/script.c
index e4a57194d..069b98eef 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -11287,32 +11287,33 @@ static BUILDIN(itemskill)
{
struct map_session_data *sd = script->rid2sd(st);
- if (sd == NULL || sd->ud.skilltimer != INVALID_TIMER)
+ if (sd == NULL)
return true;
- pc->autocast_clear(sd);
- sd->autocast.type = AUTOCAST_ITEM;
- sd->autocast.skill_id = script_isstringtype(st, 2) ? skill->name2id(script_getstr(st, 2)) : script_getnum(st, 2);
- sd->autocast.skill_lv = script_getnum(st, 3);
+ sd->auto_cast_current.type = AUTOCAST_ITEM;
+ sd->auto_cast_current.skill_id = script_isstringtype(st, 2) ? skill->name2id(script_getstr(st, 2)) : script_getnum(st, 2);
+ sd->auto_cast_current.skill_lv = script_getnum(st, 3);
int flag = script_hasdata(st, 4) ? script_getnum(st, 4) : ISF_NONE;
- sd->autocast.itemskill_check_conditions = ((flag & ISF_CHECKCONDITIONS) == ISF_CHECKCONDITIONS);
+ sd->auto_cast_current.itemskill_check_conditions = ((flag & ISF_CHECKCONDITIONS) == ISF_CHECKCONDITIONS);
- if (sd->autocast.itemskill_check_conditions) {
- if (skill->check_condition_castbegin(sd, sd->autocast.skill_id, sd->autocast.skill_lv) == 0
- || skill->check_condition_castend(sd, sd->autocast.skill_id, sd->autocast.skill_lv) == 0) {
- pc->autocast_clear(sd);
+ if (sd->auto_cast_current.itemskill_check_conditions) {
+ if (skill->check_condition_castbegin(sd, sd->auto_cast_current.skill_id, sd->auto_cast_current.skill_lv) == 0
+ || skill->check_condition_castend(sd, sd->auto_cast_current.skill_id, sd->auto_cast_current.skill_lv) == 0) {
return true;
}
- sd->autocast.itemskill_conditions_checked = true;
+ sd->auto_cast_current.itemskill_conditions_checked = true;
}
- sd->autocast.itemskill_instant_cast = ((flag & ISF_INSTANTCAST) == ISF_INSTANTCAST);
- sd->autocast.itemskill_cast_on_self = ((flag & ISF_CASTONSELF) == ISF_CASTONSELF);
+ sd->auto_cast_current.itemskill_instant_cast = ((flag & ISF_INSTANTCAST) == ISF_INSTANTCAST);
+ sd->auto_cast_current.itemskill_cast_on_self = ((flag & ISF_CASTONSELF) == ISF_CASTONSELF);
+
+ VECTOR_ENSURE(sd->auto_cast, 1, 1);
+ VECTOR_PUSH(sd->auto_cast, sd->auto_cast_current);
- clif->item_skill(sd, sd->autocast.skill_id, sd->autocast.skill_lv);
+ clif->item_skill(sd, sd->auto_cast_current.skill_id, sd->auto_cast_current.skill_lv);
return true;
}