aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/DataStores/DB2Structure.h2
-rw-r--r--src/server/game/DataStores/DBCEnums.h2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp3
-rw-r--r--src/server/game/Spells/SpellInfo.cpp2
-rw-r--r--src/server/game/Spells/SpellInfo.h4
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;