diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 2 | ||||
| -rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellInfo.h | 4 |
5 files changed, 11 insertions, 2 deletions
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index a7c4e2fbd37..e2e34fc2415 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -2890,6 +2890,8 @@ struct SpellEffectEntry flag128 EffectSpellClassMask; int16 ImplicitTarget[2]; uint32 SpellID; + + SpellEffectAttributes GetEffectAttributes() const { return static_cast<SpellEffectAttributes>(EffectAttributes); } }; struct SpellEquippedItemsEntry diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 663b9dacb03..e5232b14ce9 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -1298,6 +1298,8 @@ enum class SpellEffectAttributes IgnoreDuringCooldownTimeRateCalculation = 0x800000 }; +DEFINE_ENUM_FLAG(SpellEffectAttributes); + #define MAX_SPELL_EFFECTS 32 #define MAX_EFFECT_MASK 0xFFFFFFFF diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 57d92da81dd..169ab8f6238 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -667,7 +667,8 @@ int32 AuraEffect::CalculateAmount(Unit* caster) } GetBase()->CallScriptEffectCalcAmountHandlers(this, amount, m_canBeRecalculated); - amount *= GetBase()->GetStackAmount(); + if (!GetSpellEffectInfo()->EffectAttributes.HasFlag(SpellEffectAttributes::NoScaleWithStack)) + amount *= GetBase()->GetStackAmount(); return amount; } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 81a71a8df8c..c005bfab5bd 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -372,6 +372,7 @@ SpellImplicitTargetInfo::StaticData SpellImplicitTargetInfo::_data[TOTAL_SPELL_ }; SpellEffectInfo::SpellEffectInfo(SpellInfo const* spellInfo, SpellEffectEntry const* _effect) + : EffectAttributes(SpellEffectAttributes::None) { ASSERT(spellInfo); ASSERT(_effect); @@ -404,6 +405,7 @@ SpellEffectInfo::SpellEffectInfo(SpellInfo const* spellInfo, SpellEffectEntry co Scaling.Variance = _effect->Variance; Scaling.ResourceCoefficient = _effect->ResourceCoefficient; ImplicitTargetConditions = nullptr; + EffectAttributes = _effect->GetEffectAttributes(); } bool SpellEffectInfo::IsEffect() const diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index b208ffdbc94..aa5c6400a3f 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -353,6 +353,7 @@ public: flag128 SpellClassMask; float BonusCoefficientFromAP; std::vector<Condition*>* ImplicitTargetConditions; + EnumFlag<SpellEffectAttributes> EffectAttributes; // SpellScalingEntry struct ScalingInfo { @@ -364,7 +365,8 @@ public: SpellEffectInfo() : _spellInfo(nullptr), EffectIndex(0), Effect(0), ApplyAuraName(0), ApplyAuraPeriod(0), RealPointsPerLevel(0), BasePoints(0), PointsPerResource(0), Amplitude(0), ChainAmplitude(0), BonusCoefficient(0), MiscValue(0), MiscValueB(0), Mechanic(MECHANIC_NONE), PositionFacing(0), - RadiusEntry(nullptr), ChainTargets(0), ItemType(0), TriggerSpell(0), BonusCoefficientFromAP(0.0f), ImplicitTargetConditions(nullptr) { } + RadiusEntry(nullptr), ChainTargets(0), ItemType(0), TriggerSpell(0), BonusCoefficientFromAP(0.0f), + ImplicitTargetConditions(nullptr), EffectAttributes(SpellEffectAttributes::None) { } SpellEffectInfo(SpellInfo const* spellInfo, SpellEffectEntry const* effect); bool IsEffect() const; |
