Browse Source

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

Playtester 9 years ago
parent
commit
7ccca9ddbb
1 changed files with 27 additions and 29 deletions
  1. 27 29
      src/map/skill.c

+ 27 - 29
src/map/skill.c

@@ -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)))
+	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
-			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
-			}
 		}
 	}
 
@@ -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: