Browse Source

` Fixed Emperium's skill damage/heal and elemental resist (eg. Aspersio) - bugreport:5256
` Rebranded the Core.h file to rAthena

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@15507 54d463be-8e91-2dee-dedb-b68131a5f0ec

xantara 13 years ago
parent
commit
f7b45f9b48
3 changed files with 27 additions and 7 deletions
  1. 17 6
      src/map/battle.c
  2. 1 1
      src/map/map.h
  3. 9 0
      src/map/skill.c

+ 17 - 6
src/map/battle.c

@@ -722,20 +722,19 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama
 
 	if (!damage) //No reductions to make.
 		return 0;
-	
+
 	if(md && md->guardian_data) {
-		if(class_ == MOBID_EMPERIUM && flag&BF_SKILL)
+		if(class_ == MOBID_EMPERIUM && flag&BF_SKILL) {
 		//Skill immunity.
 			switch (skill_num) {
+#if REMODE == 0
 			case MO_TRIPLEATTACK:
+#endif
 			case HW_GRAVITATION:
-            case AL_HEAL:
-            case PR_SANCTUARY:
-            case BA_APPLEIDUN:
-            case AB_CHEAL:
 				break;
 			default:
 				return 0;
+			}
 		}
 		if(src->type != BL_MOB) {
 			struct guild *g=guild_search(status_get_guild_id(src));
@@ -2577,10 +2576,22 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 
 	if( flag.infdef )
 	{ //Plants receive 1 damage when hit
+		short class_ = status_get_class(target);
 		if( flag.hit || wd.damage > 0 )
 			wd.damage = wd.div_; // In some cases, right hand no need to have a weapon to increase damage
 		if( flag.lh && (flag.hit || wd.damage2 > 0) )
 			wd.damage2 = wd.div_;
+		if( flag.hit && class_ == MOBID_EMPERIUM ) {
+			if(wd.damage2 > 0) {
+				wd.damage2 = battle_attr_fix(src,target,wd.damage2,s_ele_,tstatus->def_ele, tstatus->ele_lv);
+				wd.damage2 = battle_calc_gvg_damage(src,target,wd.damage2,wd.div_,skill_num,skill_lv,wd.flag);
+			}
+			else if(wd.damage > 0) {
+				wd.damage = battle_attr_fix(src,target,wd.damage,s_ele_,tstatus->def_ele, tstatus->ele_lv);
+				wd.damage = battle_calc_gvg_damage(src,target,wd.damage,wd.div_,skill_num,skill_lv,wd.flag);
+			}
+			return wd;
+		}
 		if( !(battle_config.skill_min_damage&1) )
 			//Do not return if you are supposed to deal greater damage to plants than 1. [Skotlex]
 			return wd;

+ 1 - 1
src/map/map.h

@@ -11,7 +11,7 @@
 #include "../common/db.h"
 
 /**
- * [ro-resources.net]
+ * [rAthena.org]
  **/
 #include "./config/Core.h"
 

+ 9 - 0
src/map/skill.c

@@ -9474,6 +9474,10 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 			{
 				int heal = skill_calc_heal(ss,bl,sg->skill_id,sg->skill_lv,true);
 				struct mob_data *md = BL_CAST(BL_MOB, bl);
+#if REMODE
+				if( md && md->class_ == MOBID_EMPERIUM )
+					break;
+#endif
 				if( md && mob_is_battleground(md) )
 					break;
 				if( tstatus->hp >= tstatus->max_hp )
@@ -9663,6 +9667,11 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 		case UNT_APPLEIDUN: //Apple of Idun [Skotlex]
 		{
 			int heal;
+			struct mob_data *md = BL_CAST(BL_MOB, bl);
+#if REMODE
+			if( md && md->class_ == MOBID_EMPERIUM )
+				break;
+#endif
 			if( sg->src_id == bl->id && !(tsc && tsc->data[SC_SPIRIT] && tsc->data[SC_SPIRIT]->val2 == SL_BARDDANCER) )
 				break; // affects self only when soullinked
 			heal = skill_calc_heal(ss,bl,sg->skill_id, sg->skill_lv, true);