|
@@ -1513,7 +1513,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
|
|
//Set canact delay. [Skotlex]
|
|
//Set canact delay. [Skotlex]
|
|
ud = unit_bl2ud(src);
|
|
ud = unit_bl2ud(src);
|
|
if (ud) {
|
|
if (ud) {
|
|
- rate = skill_delayfix(src, skill, skilllv);
|
|
|
|
|
|
+ rate = skill_delayfix(src, skill, skilllv, true);
|
|
if (DIFF_TICK(ud->canact_tick, tick + rate) < 0)
|
|
if (DIFF_TICK(ud->canact_tick, tick + rate) < 0)
|
|
ud->canact_tick = tick+rate;
|
|
ud->canact_tick = tick+rate;
|
|
}
|
|
}
|
|
@@ -1689,7 +1689,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
|
|
//Set canact delay. [Skotlex]
|
|
//Set canact delay. [Skotlex]
|
|
ud = unit_bl2ud(bl);
|
|
ud = unit_bl2ud(bl);
|
|
if (ud) {
|
|
if (ud) {
|
|
- rate = skill_delayfix(bl, skillid, skilllv);
|
|
|
|
|
|
+ rate = skill_delayfix(bl, skillid, skilllv, true);
|
|
if (DIFF_TICK(ud->canact_tick, tick + rate) < 0)
|
|
if (DIFF_TICK(ud->canact_tick, tick + rate) < 0)
|
|
ud->canact_tick = tick+rate;
|
|
ud->canact_tick = tick+rate;
|
|
}
|
|
}
|
|
@@ -5910,7 +5910,7 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data)
|
|
if (ud->walktimer != -1 && ud->skillid != TK_RUN)
|
|
if (ud->walktimer != -1 && ud->skillid != TK_RUN)
|
|
unit_stop_walking(src,1);
|
|
unit_stop_walking(src,1);
|
|
|
|
|
|
- ud->canact_tick = tick + skill_delayfix(src, ud->skillid, ud->skilllv);
|
|
|
|
|
|
+ ud->canact_tick = tick + skill_delayfix(src, ud->skillid, ud->skilllv, tid == -1);
|
|
|
|
|
|
if (skill_get_state(ud->skillid) != ST_MOVE_ENABLE)
|
|
if (skill_get_state(ud->skillid) != ST_MOVE_ENABLE)
|
|
unit_set_walkdelay(src, tick, battle_config.default_skill_delay+skill_get_walkdelay(ud->skillid, ud->skilllv), 1);
|
|
unit_set_walkdelay(src, tick, battle_config.default_skill_delay+skill_get_walkdelay(ud->skillid, ud->skilllv), 1);
|
|
@@ -6079,7 +6079,7 @@ int skill_castend_pos (int tid, unsigned int tick, int id, int data)
|
|
ShowInfo("Type %d, ID %d skill castend pos [id =%d, lv=%d, (%d,%d)]\n",
|
|
ShowInfo("Type %d, ID %d skill castend pos [id =%d, lv=%d, (%d,%d)]\n",
|
|
src->type, src->id, ud->skillid, ud->skilllv, ud->skillx, ud->skilly);
|
|
src->type, src->id, ud->skillid, ud->skilllv, ud->skillx, ud->skilly);
|
|
unit_stop_walking(src,1);
|
|
unit_stop_walking(src,1);
|
|
- ud->canact_tick = tick + skill_delayfix(src, ud->skillid, ud->skilllv);
|
|
|
|
|
|
+ ud->canact_tick = tick + skill_delayfix(src, ud->skillid, ud->skilllv, tid == -1);
|
|
unit_set_walkdelay(src, tick, battle_config.default_skill_delay+skill_get_walkdelay(ud->skillid, ud->skilllv), 1);
|
|
unit_set_walkdelay(src, tick, battle_config.default_skill_delay+skill_get_walkdelay(ud->skillid, ud->skilllv), 1);
|
|
|
|
|
|
map_freeblock_lock();
|
|
map_freeblock_lock();
|
|
@@ -8855,7 +8855,7 @@ int skill_castfix_sc (struct block_list *bl, int time)
|
|
/*==========================================
|
|
/*==========================================
|
|
* Does delay reductions based on dex/agi, sc data, item bonuses, ...
|
|
* Does delay reductions based on dex/agi, sc data, item bonuses, ...
|
|
*------------------------------------------*/
|
|
*------------------------------------------*/
|
|
-int skill_delayfix (struct block_list *bl, int skill_id, int skill_lv)
|
|
|
|
|
|
+int skill_delayfix (struct block_list *bl, int skill_id, int skill_lv, bool instantcast)
|
|
{
|
|
{
|
|
int delaynodex = skill_get_delaynodex(skill_id, skill_lv);
|
|
int delaynodex = skill_get_delaynodex(skill_id, skill_lv);
|
|
int time = skill_get_delay(skill_id, skill_lv);
|
|
int time = skill_get_delay(skill_id, skill_lv);
|
|
@@ -8865,14 +8865,14 @@ int skill_delayfix (struct block_list *bl, int skill_id, int skill_lv)
|
|
if (bl->type&battle_config.no_skill_delay)
|
|
if (bl->type&battle_config.no_skill_delay)
|
|
return battle_config.min_skill_delay_limit;
|
|
return battle_config.min_skill_delay_limit;
|
|
|
|
|
|
- // instant cast attack skills depend on aspd as delay [celest]
|
|
|
|
|
|
+ // instant delay skills have aspd delay IF they were also instant cast (reported by Tharis) [Skotlex]
|
|
if (time == 0) {
|
|
if (time == 0) {
|
|
- if (skill_get_type(skill_id)&(BF_WEAPON|BF_MISC) && !(skill_get_nk(skill_id)&NK_NO_DAMAGE))
|
|
|
|
- time = status_get_adelay(bl); //Use attack delay as default delay.
|
|
|
|
|
|
+ if (instantcast)
|
|
|
|
+ time = status_get_amotion(bl); //Use attack delay.
|
|
else
|
|
else
|
|
time = battle_config.default_skill_delay;
|
|
time = battle_config.default_skill_delay;
|
|
} else if (time < 0)
|
|
} else if (time < 0)
|
|
- time = -time + status_get_amotion(bl); // if set to <0, the attack motion is added.
|
|
|
|
|
|
+ time = -time + status_get_amotion(bl); // if set to <0, add to attack motion.
|
|
else //Agi reduction should apply only to non-zero delay skills.
|
|
else //Agi reduction should apply only to non-zero delay skills.
|
|
switch (skill_id)
|
|
switch (skill_id)
|
|
{ //Monk combo skills have their delay reduced by agi/dex.
|
|
{ //Monk combo skills have their delay reduced by agi/dex.
|