Core/Spells: Include more than first 2 spell effects when determining if a spell is negative
Port From (https://github.com/TrinityCore/TrinityCore/commit/176c75e8dbad95bfdcd88034f75e1452997ddb07)
This commit is contained in:
@@ -1865,9 +1865,9 @@ namespace Framework.Constants
|
||||
DirectDamage = 0x100,
|
||||
Charge = 0x200,
|
||||
PickPocket = 0x400,
|
||||
NegativeEff0 = 0x1000,
|
||||
NegativeEff1 = 0x2000,
|
||||
NegativeEff2 = 0x4000,
|
||||
DeprecatedNegativeEff0 = 0x1000, // DO NOT REUSE
|
||||
DeprecatedNegativeEff1 = 0x2000, // DO NOT REUSE
|
||||
DeprecatedNegativeEff2 = 0x4000, // DO NOT REUSE
|
||||
IgnoreArmor = 0x8000,
|
||||
ReqTargetFacingCaster = 0x10000,
|
||||
ReqCasterBehindTarget = 0x20000,
|
||||
@@ -1876,9 +1876,7 @@ namespace Framework.Constants
|
||||
BinarySpell = 0x00100000,
|
||||
SchoolmaskNormalWithMagic = 0x00200000,
|
||||
LiquidAura = 0x00400000,
|
||||
IsTalent = 0x00800000,
|
||||
|
||||
Negative = NegativeEff0 | NegativeEff1 | NegativeEff2
|
||||
IsTalent = 0x00800000
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ using Game.DataStorage;
|
||||
using Game.Entities;
|
||||
using Game.Maps;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
@@ -510,21 +511,16 @@ namespace Game.Spells
|
||||
|
||||
public bool IsPositive()
|
||||
{
|
||||
return !HasAttribute(SpellCustomAttributes.Negative);
|
||||
for (var index = 0; index < NegativeEffects.Length; ++index)
|
||||
if (NegativeEffects.Get(index))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool IsPositiveEffect(uint effIndex)
|
||||
{
|
||||
switch (effIndex)
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
return !HasAttribute(SpellCustomAttributes.NegativeEff0);
|
||||
case 1:
|
||||
return !HasAttribute(SpellCustomAttributes.NegativeEff1);
|
||||
case 2:
|
||||
return !HasAttribute(SpellCustomAttributes.NegativeEff2);
|
||||
}
|
||||
return NegativeEffects.Get((int)effIndex);
|
||||
}
|
||||
|
||||
public bool IsChanneled()
|
||||
@@ -3528,6 +3524,7 @@ namespace Game.Spells
|
||||
public SpellAttr12 AttributesEx12 { get; set; }
|
||||
public SpellAttr13 AttributesEx13 { get; set; }
|
||||
public SpellCustomAttributes AttributesCu { get; set; }
|
||||
public BitSet NegativeEffects { get; set; } = new BitSet(SpellConst.MaxEffects);
|
||||
public ulong Stances { get; set; }
|
||||
public ulong StancesNot { get; set; }
|
||||
public SpellCastTargetFlags targets { get; set; }
|
||||
|
||||
@@ -2499,6 +2499,9 @@ namespace Game.Entities
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!spellInfo._IsPositiveEffect(effect.EffectIndex, false))
|
||||
spellInfo.NegativeEffects[(int)effect.EffectIndex] = true;
|
||||
}
|
||||
|
||||
// spells ignoring hit result should not be binary
|
||||
@@ -2587,15 +2590,6 @@ namespace Game.Entities
|
||||
spellInfo.AttributesCu |= SpellCustomAttributes.SchoolmaskNormalWithMagic;
|
||||
}
|
||||
|
||||
if (!spellInfo._IsPositiveEffect(0, false))
|
||||
spellInfo.AttributesCu |= SpellCustomAttributes.NegativeEff0;
|
||||
|
||||
if (!spellInfo._IsPositiveEffect(1, false))
|
||||
spellInfo.AttributesCu |= SpellCustomAttributes.NegativeEff1;
|
||||
|
||||
if (!spellInfo._IsPositiveEffect(2, false))
|
||||
spellInfo.AttributesCu |= SpellCustomAttributes.NegativeEff2;
|
||||
|
||||
if (talentSpells.Contains(spellInfo.Id))
|
||||
spellInfo.AttributesCu |= SpellCustomAttributes.IsTalent;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user