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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user