Cleans up Summoner dual-cast attacks (#4658)
* Cleans up Summoner dual-cast attacks Bite, Silvervine Stem Spear, Scar of Tarou, and Picky Peck so that they behave like Professor's Double Casting. * Adjusts success formula. Thanks to @Rytech2!
This commit is contained in:
parent
97372ff423
commit
836eda4879
@ -3758,16 +3758,24 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
|
||||
skill_onskillusage(sd, bl, skill_id, tick);
|
||||
}
|
||||
|
||||
if (!(flag&2) &&
|
||||
(
|
||||
skill_id == MG_COLDBOLT || skill_id == MG_FIREBOLT || skill_id == MG_LIGHTNINGBOLT
|
||||
) &&
|
||||
(tsc = status_get_sc(src)) &&
|
||||
tsc->data[SC_DOUBLECAST] &&
|
||||
rnd() % 100 < tsc->data[SC_DOUBLECAST]->val2)
|
||||
{
|
||||
// skill_addtimerskill(src, tick + dmg.div_*dmg.amotion, bl->id, 0, 0, skill_id, skill_lv, BF_MAGIC, flag|2);
|
||||
skill_addtimerskill(src, tick + dmg.amotion, bl->id, 0, 0, skill_id, skill_lv, BF_MAGIC, flag|2);
|
||||
if (!(flag&2)) {
|
||||
switch (skill_id) {
|
||||
case MG_COLDBOLT:
|
||||
case MG_FIREBOLT:
|
||||
case MG_LIGHTNINGBOLT:
|
||||
if (sc && sc->data[SC_DOUBLECAST] && rnd() % 100 < tsc->data[SC_DOUBLECAST]->val2)
|
||||
//skill_addtimerskill(src, tick + dmg.div_*dmg.amotion, bl->id, 0, 0, skill_id, skill_lv, BF_MAGIC, flag|2);
|
||||
skill_addtimerskill(src, tick + dmg.amotion, bl->id, 0, 0, skill_id, skill_lv, BF_MAGIC, flag|2);
|
||||
break;
|
||||
case SU_BITE:
|
||||
case SU_SCRATCH:
|
||||
case SU_SV_STEMSPEAR:
|
||||
case SU_SCAROFTAROU:
|
||||
case SU_PICKYPECK:
|
||||
if (status_get_lv(src) > 29 && rnd() % 100 < 10 * status_get_lv(src) / 30)
|
||||
skill_addtimerskill(src, tick + dmg.amotion + skill_get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, attack_type, flag|2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
map_freeblock_unlock();
|
||||
@ -5006,8 +5014,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
case SU_BITE:
|
||||
skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag);
|
||||
if (status_get_lv(src) > 29 && (rnd() % 100 < (int)((status_get_lv(src) / 30) * 10 + 10)))
|
||||
skill_addtimerskill(src, tick + skill_get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag);
|
||||
break;
|
||||
case SU_SVG_SPIRIT:
|
||||
skill_area_temp[1] = bl->id;
|
||||
@ -5100,8 +5106,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1);
|
||||
status_heal(src,heal,0,0);
|
||||
}
|
||||
if (skill_id == SU_SCRATCH && status_get_lv(src) > 29 && (rnd() % 100 < (int)((status_get_lv(src) / 30) * 10 + 10)))
|
||||
skill_addtimerskill(src, tick + skill_get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag);
|
||||
} else {
|
||||
int starget = BL_CHAR|BL_SKILL;
|
||||
|
||||
@ -6096,8 +6100,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
sc_start(src, src, SC_DORAM_WALKSPEED, 100, 50, skill_get_time(SU_SPIRITOFLAND, 1));
|
||||
}
|
||||
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
|
||||
if (status_get_lv(src) > 29 && (rnd() % 100 < (int)((status_get_lv(src) / 30) * 10 + 10)))
|
||||
skill_addtimerskill(src, tick + skill_get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, skill_get_type(skill_id), flag);
|
||||
break;
|
||||
|
||||
case 0:/* no skill - basic/normal attack */
|
||||
|
Loading…
x
Reference in New Issue
Block a user