Core/Spells: Implemented NoImmunity spell effect attribute

Port From (https://github.com/TrinityCore/TrinityCore/commit/e883b61094c3a5d2e80d2165e53921631e72e33e)
This commit is contained in:
hondacrx
2024-01-30 10:45:14 -05:00
parent 54244bb6cc
commit 774f211f7a
3 changed files with 13 additions and 7 deletions
+1 -1
View File
@@ -1973,7 +1973,7 @@ namespace Framework.Constants
public enum SpellEffectAttributes public enum SpellEffectAttributes
{ {
None = 0, None = 0,
NoImmunity = 0x01, /*NYI*/ // not cancelled by immunities NoImmunity = 0x01, // not cancelled by immunities
PositionIsFacingRelative = 0x02, /*NYI*/ PositionIsFacingRelative = 0x02, /*NYI*/
JumpChargeUnitMeleeRange = 0x04, /*NYI*/ JumpChargeUnitMeleeRange = 0x04, /*NYI*/
JumpChargeUnitStrictPathCheck = 0x08, /*NYI*/ JumpChargeUnitStrictPathCheck = 0x08, /*NYI*/
+7 -1
View File
@@ -1373,6 +1373,9 @@ namespace Game.Entities
if (spellInfo.HasAttribute(SpellAttr0.NoImmunities)) if (spellInfo.HasAttribute(SpellAttr0.NoImmunities))
return false; return false;
if (spellEffectInfo.EffectAttributes.HasFlag(SpellEffectAttributes.NoImmunity))
return false;
bool hasImmunity(MultiMap<uint, uint> container, uint key) bool hasImmunity(MultiMap<uint, uint> container, uint key)
{ {
var range = container.LookupByKey(key); var range = container.LookupByKey(key);
@@ -1445,7 +1448,7 @@ namespace Game.Entities
return false; return false;
} }
public bool IsImmunedToDamage(SpellInfo spellInfo) public bool IsImmunedToDamage(SpellInfo spellInfo, SpellEffectInfo spellEffectInfo = null)
{ {
if (spellInfo == null) if (spellInfo == null)
return false; return false;
@@ -1457,6 +1460,9 @@ namespace Game.Entities
if (spellInfo.HasAttribute(SpellAttr1.ImmunityToHostileAndFriendlyEffects) || spellInfo.HasAttribute(SpellAttr2.NoSchoolImmunities)) if (spellInfo.HasAttribute(SpellAttr1.ImmunityToHostileAndFriendlyEffects) || spellInfo.HasAttribute(SpellAttr2.NoSchoolImmunities))
return false; return false;
if (spellEffectInfo != null && spellEffectInfo.EffectAttributes.HasFlag(SpellEffectAttributes.NoImmunity))
return false;
uint schoolMask = (uint)spellInfo.GetSchoolMask(); uint schoolMask = (uint)spellInfo.GetSchoolMask();
if (schoolMask != 0) if (schoolMask != 0)
{ {
+5 -5
View File
@@ -5043,7 +5043,7 @@ namespace Game.Spells
if (!target.IsAlive()) if (!target.IsAlive())
return; return;
if (target.HasUnitState(UnitState.Isolated) || target.IsImmunedToDamage(GetSpellInfo())) if (target.HasUnitState(UnitState.Isolated) || target.IsImmunedToDamage(GetSpellInfo(), GetSpellEffectInfo()))
{ {
SendTickImmune(target, caster); SendTickImmune(target, caster);
return; return;
@@ -5171,7 +5171,7 @@ namespace Game.Spells
if (!target.IsAlive()) if (!target.IsAlive())
return; return;
if (target.HasUnitState(UnitState.Isolated) || target.IsImmunedToDamage(GetSpellInfo())) if (target.HasUnitState(UnitState.Isolated) || target.IsImmunedToDamage(GetSpellInfo(), GetSpellEffectInfo()))
{ {
SendTickImmune(target, caster); SendTickImmune(target, caster);
return; return;
@@ -5361,7 +5361,7 @@ namespace Game.Spells
if (caster == null || !caster.IsAlive() || !target.IsAlive() || target.GetPowerType() != powerType) if (caster == null || !caster.IsAlive() || !target.IsAlive() || target.GetPowerType() != powerType)
return; return;
if (target.HasUnitState(UnitState.Isolated) || target.IsImmunedToDamage(GetSpellInfo())) if (target.HasUnitState(UnitState.Isolated) || target.IsImmunedToDamage(GetSpellInfo(), GetSpellEffectInfo()))
{ {
SendTickImmune(target, caster); SendTickImmune(target, caster);
return; return;
@@ -5479,7 +5479,7 @@ namespace Game.Spells
if (caster == null || !target.IsAlive() || target.GetPowerType() != powerType) if (caster == null || !target.IsAlive() || target.GetPowerType() != powerType)
return; return;
if (target.HasUnitState(UnitState.Isolated) || target.IsImmunedToDamage(GetSpellInfo())) if (target.HasUnitState(UnitState.Isolated) || target.IsImmunedToDamage(GetSpellInfo(), GetSpellEffectInfo()))
{ {
SendTickImmune(target, caster); SendTickImmune(target, caster);
return; return;
@@ -5605,7 +5605,7 @@ namespace Game.Spells
{ {
Unit target = aurApp.GetTarget(); Unit target = aurApp.GetTarget();
Unit triggerTarget = eventInfo.GetProcTarget(); Unit triggerTarget = eventInfo.GetProcTarget();
if (triggerTarget.HasUnitState(UnitState.Isolated) || triggerTarget.IsImmunedToDamage(GetSpellInfo())) if (triggerTarget.HasUnitState(UnitState.Isolated) || triggerTarget.IsImmunedToDamage(GetSpellInfo(), GetSpellEffectInfo()))
{ {
SendTickImmune(triggerTarget, target); SendTickImmune(triggerTarget, target);
return; return;