Core/Unit: damage immune improvements

This commit is contained in:
hondacrx
2017-12-30 17:53:28 -05:00
parent 0713188d5f
commit 01caaecf0f
6 changed files with 87 additions and 38 deletions
+12 -8
View File
@@ -2039,12 +2039,14 @@ namespace Game.Chat
string schoolStr = args.NextString();
Player attacker = handler.GetSession().GetPlayer();
// flat melee damage without resistence/etc reduction
if (string.IsNullOrEmpty(schoolStr))
{
handler.GetSession().GetPlayer().DealDamage(target, damage_, null, DamageEffectType.Direct, SpellSchoolMask.Normal, null, false);
if (target != handler.GetSession().GetPlayer())
handler.GetSession().GetPlayer().SendAttackStateUpdate(HitInfo.AffectsVictim, target, SpellSchoolMask.Normal, damage_, 0, 0, VictimState.Hit, 0);
attacker.DealDamage(target, damage_, null, DamageEffectType.Direct, SpellSchoolMask.Normal, null, false);
if (target != attacker)
attacker.SendAttackStateUpdate(HitInfo.AffectsVictim, target, SpellSchoolMask.Normal, damage_, 0, 0, VictimState.Hit, 0);
return true;
}
@@ -2053,15 +2055,14 @@ namespace Game.Chat
SpellSchoolMask schoolmask = (SpellSchoolMask)(1 << school);
if (handler.GetSession().GetPlayer().IsDamageReducedByArmor(schoolmask))
damage_ = handler.GetSession().GetPlayer().CalcArmorReducedDamage(handler.GetPlayer(), target, damage_, null, WeaponAttackType.BaseAttack);
if (attacker.IsDamageReducedByArmor(schoolmask))
damage_ = attacker.CalcArmorReducedDamage(handler.GetPlayer(), target, damage_, null, WeaponAttackType.BaseAttack);
string spellStr = args.NextString();
// melee damage by specific school
if (string.IsNullOrEmpty(spellStr))
{
Player attacker = handler.GetSession().GetPlayer();
DamageInfo dmgInfo = new DamageInfo(attacker, target, damage_, null, schoolmask, DamageEffectType.SpellDirect, WeaponAttackType.BaseAttack);
attacker.CalcAbsorbResist(dmgInfo);
@@ -2081,13 +2082,16 @@ namespace Game.Chat
// non-melee damage
// number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form
uint spellid = handler.extractSpellIdFromLink(args);
if (spellid == 0)
return false;
SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(spellid);
if (spellInfo == null)
return false;
SpellNonMeleeDamage damageInfo = new SpellNonMeleeDamage(handler.GetSession().GetPlayer(), target, spellid, spellInfo.GetSpellXSpellVisualId(handler.GetSession().GetPlayer()), spellInfo.SchoolMask);
SpellNonMeleeDamage damageInfo = new SpellNonMeleeDamage(attacker, target, spellid, spellInfo.GetSpellXSpellVisualId(attacker), spellInfo.SchoolMask);
damageInfo.damage = damage_;
handler.GetSession().GetPlayer().DealDamageMods(damageInfo.target, ref damageInfo.damage, ref damageInfo.absorb);
attacker.DealDamageMods(damageInfo.target, ref damageInfo.damage, ref damageInfo.absorb);
target.DealSpellDamage(damageInfo, true);
target.SendSpellNonMeleeDamageLog(damageInfo);
return true;