Quellcode durchsuchen

- Simplified ASC_BREAKER by making it a BF_WEAPON attack with an additional int-based damage component (which is added right before elemental modifiers).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6760 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex vor 19 Jahren
Ursprung
Commit
7ff7ce4a39
3 geänderte Dateien mit 10 neuen und 28 gelöschten Zeilen
  1. 3 0
      Changelog-Trunk.txt
  2. 6 11
      src/map/battle.c
  3. 1 17
      src/map/skill.c

+ 3 - 0
Changelog-Trunk.txt

@@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/05/25
+	* Simplified ASC_BREAKER by making it a BF_WEAPON attack with an additional
+	  int-based damage component (which is added right before elemental
+	  modifiers) as described by AuronX. Pending further refining. [Skotlex]
 	* Resolved differences between Stable/Trunk msg_athena.conf. [Lupus]
 		Fixed atcommand @request MSG numbers accordinly.
 		On adding new MSG strings, plzm reserve them in STABLE msg_athena.conf, too

+ 6 - 11
src/map/battle.c

@@ -399,8 +399,8 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
 
 	if(flag&BF_LONG && map_getcell(bl->m, bl->x, bl->y, CELL_CHKPNEUMA) &&
 		((flag&BF_WEAPON && skill_num != NPC_GUIDEDATTACK) ||
-		(flag&BF_MISC && skill_num !=  PA_PRESSURE) ||
-		(flag&BF_MAGIC && skill_num == ASC_BREAKER))){ // It should block only physical part of Breaker! [Lupus], on the contrary, players all over the boards say it completely blocks Breaker x.x' [Skotlex]
+		(flag&BF_MISC && skill_num != PA_PRESSURE)
+		)){
 		return 0;
 	}
 	
@@ -474,8 +474,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
 		//Now damage increasing effects
 		if(sc->data[SC_AETERNA].timer!=-1 && skill_num != PA_PRESSURE && skill_num != PF_SOULBURN){
 			damage<<=1;
-			if (skill_num != ASC_BREAKER || flag & BF_MAGIC) //Only end it on the second attack of breaker. [Skotlex]
-				status_change_end( bl,SC_AETERNA,-1 );
+			status_change_end( bl,SC_AETERNA,-1 );
 		}
 
 		if(sc->data[SC_SPIDERWEB].timer!=-1)	// [Celest]
@@ -1985,6 +1984,9 @@ static struct Damage battle_calc_weapon_attack(
 	if(skill_num==TF_POISON)
 		ATK_ADD(15*skill_lv);
 
+	if(skill_num==ASC_BREAKER) //Breaker's int-based damage.
+		ATK_ADD(rand()%500 + 500 + skill_lv * status_get_int(src) * 5);
+
 	if ((sd && (skill_num || !battle_config.pc_attack_attr_none)) ||
 		(md && (skill_num || !battle_config.mob_attack_attr_none)) ||
 		(pd && (skill_num || !battle_config.pet_attack_attr_none)))
@@ -2373,9 +2375,6 @@ struct Damage battle_calc_magic_attack(
 	else if (s_ele == -2) //Use status element
 		s_ele = status_get_attack_sc_element(src);
 	
-	if (skill_num == ASC_BREAKER) // Soul Breaker's magical part is neutral, although pl=-1 for the physical part to take weapon element
-		s_ele = 0;
-
 	//Set miscellaneous data that needs be filled
 	if(sd) {
 		sd->state.arrow_atk = 0;
@@ -2422,7 +2421,6 @@ struct Damage battle_calc_magic_attack(
 			flag.elefix = 0;
 			break;
 		case PR_ASPERSIO:
-		case ASC_BREAKER:
 			flag.imdef = 1;
 		case PF_SOULBURN: //Does not ignores mdef
 			flag.elefix = 0;
@@ -2486,9 +2484,6 @@ struct Damage battle_calc_magic_attack(
 				} else
 					ad.damage = tsd->status.sp * 2;
 				break;
-			case ASC_BREAKER:
-				ad.damage = rand()%500 + 500 + skill_lv * status_get_int(src) * 5;
-				break;
 			case HW_GRAVITATION:
 				ad.damage = 200+200*skill_lv;
 				break;

+ 1 - 17
src/map/skill.c

@@ -1704,7 +1704,6 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds
 	struct status_change *sc;
 	struct map_session_data *sd=NULL, *tsd=NULL;
 	int type,lv,damage,rdamage=0;
-	static int tmpdmg = 0;
 
 	if(skillid > 0 && skilllv <= 0) return 0;
 
@@ -1944,17 +1943,6 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds
 		dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, CR_HOLYCROSS, -1, 5);
 		break;
 
-	case ASC_BREAKER:	// [celest]
-		if (attack_type&BF_WEAPON) { // the 1st attack won't really deal any damage
-			tmpdmg = damage;	// store the temporary weapon damage
-			return 0; //Wait for the second iteration to do all the work below.
-		} 
-		if (tmpdmg == 0 || damage == 0)	// if one or both attack(s) missed, display a 'miss'
-			clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, 0, dmg.div_, skillid, skilllv, type);
-		damage += tmpdmg;	// add weapon and magic damage
-		tmpdmg = 0;	// clear the temporary weapon damage
-		dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skillid, skilllv, type);
-		break;
 	case NPC_SELFDESTRUCTION:
 		if(src->type==BL_PC)
 			dmg.blewcount = 10;
@@ -2546,6 +2534,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
 	case HT_POWER:
 	case TK_DOWNKICK:
 	case TK_COUNTER:
+	case ASC_BREAKER:
 		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
 		break;
 
@@ -2574,11 +2563,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
 		if (unit_movepos(src, bl->x, bl->y, 0, 0))
 			clif_slide(src,bl->x,bl->y);
 		break;
-	case ASC_BREAKER:				/* ソウルブレ?カ? */	// [DracoRPG]
-		// Separate weapon and magic attacks
-		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-		skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
-		break;
 	
 	case SN_SHARPSHOOTING:			/* シャ?プシュ?ティング */
 		// Does it stop if touch an obstacle? it shouldn't shoot trough walls