Browse Source

Fixed the damn broken combo code. Fixed Fallen Empire and Dragon Combo (part of bugreport:5358) and applied some more of my curly brace love.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@15758 54d463be-8e91-2dee-dedb-b68131a5f0ec
shennetsind 13 years ago
parent
commit
79d53f4fe9
3 changed files with 14 additions and 14 deletions
  1. 5 13
      src/map/skill.c
  2. 8 0
      src/map/status.c
  3. 1 1
      src/map/unit.c

+ 5 - 13
src/map/skill.c

@@ -2158,15 +2158,13 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
 	if(sd) {
 		int flag = 0; //Used to signal if this skill can be combo'ed later on.
 		struct status_change_entry *sce;
-		if ((sce = sd->sc.data[SC_COMBO]))
-		{	//End combo state after skill is invoked. [Skotlex]
+		if ((sce = sd->sc.data[SC_COMBO])) {//End combo state after skill is invoked. [Skotlex]
 			switch (skillid) {
 			case TK_TURNKICK:
 			case TK_STORMKICK:
 			case TK_DOWNKICK:
 			case TK_COUNTER:
-				if (pc_famerank(sd->status.char_id,MAPID_TAEKWON))
-			  	{	//Extend combo time.
+				if (pc_famerank(sd->status.char_id,MAPID_TAEKWON)) {//Extend combo time.
 					sce->val1 = skillid; //Update combo-skill
 					sce->val3 = skillid;
 					if( sce->timer != INVALID_TIMER )
@@ -2181,8 +2179,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
 					status_change_end(src, SC_COMBO, INVALID_TIMER);
 			}
 		}
-		switch(skillid)
-		{
+		switch(skillid) {
 			case MO_TRIPLEATTACK:
 				if (pc_checkskill(sd, MO_CHAINCOMBO) > 0 || pc_checkskill(sd, SR_DRAGONCOMBO) > 0)
 					flag=1;
@@ -2239,9 +2236,6 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
 		if (flag) { //Possible to chain
 			flag = DIFF_TICK(sd->ud.canact_tick, tick);
 			if (flag < 1) flag = 1;
-			// Dragon Combo must change into self skill and auto-select target when used as combo skill.
-			if( skillid == MO_TRIPLEATTACK && pc_checkskill(sd, SR_DRAGONCOMBO) > 0 )
-				clif_skillinfo(sd,SR_DRAGONCOMBO,INF_SELF_SKILL);
 			sc_start2(src,SC_COMBO,100,skillid,bl->id,flag);
 			clif_combo_delay(src, flag);
 		}
@@ -4170,8 +4164,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 		skill_addtimerskill(src, tick + status_get_amotion(src)*8/10, bl->id, 0, 0, skillid, skilllv, BF_WEAPON, flag|SD_LEVEL);
 		break;
 	case SR_DRAGONCOMBO:
-		if( sd ) // Dragon Combo must back to target-selectable skill after use it as combo.
-			clif_skillinfo(sd,SR_DRAGONCOMBO,0);
 		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
 		break;
 
@@ -8205,8 +8197,8 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
 			inf2 = skill_get_inf2(ud->skillid);
 
 			if(inf&INF_ATTACK_SKILL ||
-				(inf&INF_SELF_SKILL && inf2&INF2_NO_TARGET_SELF) || //Combo skills
-				(ud->skillid == SR_DRAGONCOMBO && src == target) ) // Casted through combo.
+				(inf&INF_SELF_SKILL && inf2&INF2_NO_TARGET_SELF) //Combo skills
+					) // Casted through combo.
 				inf = BCT_ENEMY; //Offensive skill.
 			else if(inf2&INF2_NO_ENEMY)
 				inf = BCT_NOENEMY;

+ 8 - 0
src/map/status.c

@@ -8058,6 +8058,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 					if (sd)
 						clif_skillinfo(sd,TK_JUMPKICK, INF_SELF_SKILL);
 					break;
+				case MO_TRIPLEATTACK:
+					if (sd && pc_checkskill(sd, SR_DRAGONCOMBO) > 0)
+						clif_skillinfo(sd,SR_DRAGONCOMBO, INF_SELF_SKILL);
+					break;
 			}
 			break;
 		case SC_RAISINGDRAGON:
@@ -8424,6 +8428,10 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
 				case TK_JUMPKICK:
 					clif_skillinfo(sd, TK_JUMPKICK, 0);
 					break;
+				case MO_TRIPLEATTACK:
+					if (pc_checkskill(sd, SR_DRAGONCOMBO) > 0)
+						clif_skillinfo(sd, SR_DRAGONCOMBO, 0);
+					break;
 			}
 			break;
 

+ 1 - 1
src/map/unit.c

@@ -1014,7 +1014,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh
 
 	//temp: used to signal combo-skills right now.
 	if (sc && sc->data[SC_COMBO] && (sc->data[SC_COMBO]->val1 == skill_num ||
-		skill_num == MO_EXTREMITYFIST || skill_num == SR_DRAGONCOMBO )) {
+		(sd?skill_check_condition_castbegin(sd,skill_num,skill_lv):0) )) {
 		if (sc->data[SC_COMBO]->val2)
 			target_id = sc->data[SC_COMBO]->val2;
 		else