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:
Aleos 2020-02-25 19:58:12 -05:00 committed by GitHub
parent 97372ff423
commit 836eda4879
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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 */