Browse Source

Fixed bugreport:5842 RK_DRAGONBREATH damage should now be reducible by defender and energy coat and be blocked by anti long ranged skills.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16157 54d463be-8e91-2dee-dedb-b68131a5f0ec
rud0lp20 13 years ago
parent
commit
5fe0431d57
3 changed files with 10 additions and 2 deletions
  1. 1 1
      db/re/skill_unit_db.txt
  2. 8 1
      src/map/battle.c
  3. 1 0
      src/map/skill.c

+ 1 - 1
db/re/skill_unit_db.txt

@@ -156,7 +156,7 @@
 
 8403,0xed,    , -1, 1,1000,enemy, 0x018 //EL_FIRE_MANTLE
 8406,0xee,    ,  0, 1,  -1,friend,0x018	//EL_WATER_BARRIER
-8409,0xef,    ,  0, 1,  -1,friend,0x018	//EL_ZEPHYR
+8409,0xef,    ,  0, 1,1000,friend,0x018	//EL_ZEPHYR
 8412,0xf0,    ,  0, 1,  -1,friend,0x018	//EL_POWER_OF_GAIA
 
 10006,0xc1,   ,  2, 0,  -1,guild, 0x040	//GD_LEADERSHIP 

+ 8 - 1
src/map/battle.c

@@ -413,6 +413,12 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
 			}
 		}
 
+		if(sc->data[SC_ZEPHYR] &&
+			flag&(BF_LONG|BF_SHORT)){
+				d->dmg_lv = ATK_BLOCK;
+				return 0;
+		}
+
 		if( sc->data[SC_SAFETYWALL] && (flag&(BF_SHORT|BF_MAGIC))==BF_SHORT )
 		{
 			struct skill_unit_group* group = skill_id2group(sc->data[SC_SAFETYWALL]->val3);
@@ -594,7 +600,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
 			(flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON))
 			damage -= 20*damage/100;
 
-		if(sc->data[SC_FOGWALL]) {
+		if(sc->data[SC_FOGWALL] && skill_num != RK_DRAGONBREATH) {
 			if(flag&BF_SKILL) //25% reduction
 				damage -= 25*damage/100;
 			else if ((flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON))
@@ -3923,6 +3929,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 		md.damage = ((status_get_hp(src) / 50) + (status_get_max_sp(src) / 4)) * skill_lv;
 		RE_LVL_MDMOD();
 		if (sd) md.damage = md.damage * (100 + 5 * (pc_checkskill(sd,RK_DRAGONTRAINING) - 1)) / 100;
+		md.flag |= BF_LONG|BF_WEAPON;
 		break;
 	/**
 	 * Ranger

+ 1 - 0
src/map/skill.c

@@ -11212,6 +11212,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 		case UNT_WATER_INSIGNIA:
 		case UNT_WIND_INSIGNIA:
 		case UNT_EARTH_INSIGNIA:
+		case UNT_ZEPHYR:
 			sc_start(bl,type, 100, sg->skill_lv, sg->interval);
 			break;