Combo activation and targeting (fixes #1100)

* You no longer need to use combo skills on the enemy that triggered the combo except for Flying Side Kick
* Taekwon stances can now activate even when another stance is still active
This commit is contained in:
Playtester
2016-03-26 12:18:23 +01:00
parent a2941b7c4d
commit 7ccca9ddbb

View File

@@ -959,35 +959,33 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
tstatus = status_get_status_data(bl);
// Taekwon combos activate on traps, so we need to check them even for targets that don't have status
if (sd && skill_id == 0 && !(attack_type&BF_SKILL)) {
// Chance to trigger Taekwon kicks [Dralnu]
if (sc && !sc->data[SC_COMBO]) {
if (sc->data[SC_READYSTORM] &&
sc_start4(src, src, SC_COMBO, 15, TK_STORMKICK,
bl->id, 2, 0,
(2000 - 4 * sstatus->agi - 2 * sstatus->dex)))
; //Stance triggered
else if (sc->data[SC_READYDOWN] &&
sc_start4(src, src, SC_COMBO, 15, TK_DOWNKICK,
bl->id, 2, 0,
(2000 - 4 * sstatus->agi - 2 * sstatus->dex)))
; //Stance triggered
else if (sc->data[SC_READYTURN] &&
sc_start4(src, src, SC_COMBO, 15, TK_TURNKICK,
bl->id, 2, 0,
(2000 - 4 * sstatus->agi - 2 * sstatus->dex)))
; //Stance triggered
else if (sc->data[SC_READYCOUNTER]) { //additional chance from SG_FRIEND [Komurka]
rate = 20;
if (sc->data[SC_SKILLRATE_UP] && sc->data[SC_SKILLRATE_UP]->val1 == TK_COUNTER) {
rate += rate*sc->data[SC_SKILLRATE_UP]->val2 / 100;
status_change_end(src, SC_SKILLRATE_UP, INVALID_TIMER);
}
sc_start4(src, src, SC_COMBO, rate, TK_COUNTER,
bl->id, 2, 0,
(2000 - 4 * sstatus->agi - 2 * sstatus->dex))
; //Stance triggered
if (sd && skill_id == 0 && !(attack_type&BF_SKILL) && sc) {
// Chance to trigger Taekwon kicks
if (sc->data[SC_READYSTORM] &&
sc_start4(src, src, SC_COMBO, 15, TK_STORMKICK,
0, 2, 0,
(2000 - 4 * sstatus->agi - 2 * sstatus->dex)))
; //Stance triggered
else if (sc->data[SC_READYDOWN] &&
sc_start4(src, src, SC_COMBO, 15, TK_DOWNKICK,
0, 2, 0,
(2000 - 4 * sstatus->agi - 2 * sstatus->dex)))
; //Stance triggered
else if (sc->data[SC_READYTURN] &&
sc_start4(src, src, SC_COMBO, 15, TK_TURNKICK,
0, 2, 0,
(2000 - 4 * sstatus->agi - 2 * sstatus->dex)))
; //Stance triggered
else if (sc->data[SC_READYCOUNTER]) { //additional chance from SG_FRIEND [Komurka]
rate = 20;
if (sc->data[SC_SKILLRATE_UP] && sc->data[SC_SKILLRATE_UP]->val1 == TK_COUNTER) {
rate += rate*sc->data[SC_SKILLRATE_UP]->val2 / 100;
status_change_end(src, SC_SKILLRATE_UP, INVALID_TIMER);
}
sc_start4(src, src, SC_COMBO, rate, TK_COUNTER,
0, 2, 0,
(2000 - 4 * sstatus->agi - 2 * sstatus->dex))
; //Stance triggered
}
}
@@ -2747,6 +2745,7 @@ void skill_combo(struct block_list* src,struct block_list *dsrc, struct block_li
//start new combo
if(sd){ //player only
target_id = 0; // Players can always switch targets on combo
switch(skill_id) {
case MO_TRIPLEATTACK:
if (pc_checkskill(sd, MO_CHAINCOMBO) > 0 || pc_checkskill(sd, SR_DRAGONCOMBO) > 0)
@@ -2772,7 +2771,6 @@ void skill_combo(struct block_list* src,struct block_list *dsrc, struct block_li
if( pc_checkskill(sd, HT_POWER)) {
duration = 2000;
nodelay = 1; //Neither gives walk nor attack delay
target_id = 0; //Does not need to be used on previous target
}
break;
case SR_DRAGONCOMBO: