aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/DataStores/DBCEnums.h45
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp11
2 files changed, 30 insertions, 26 deletions
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index 17d7ef9e7a0..1102e171e9d 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -2012,28 +2012,29 @@ enum SpellCategoryFlags
enum class SpellEffectAttributes
{
None = 0,
- NoImmunity = 0x000001, // not cancelled by immunities
- PositionIsFacingRelative = 0x000002, /*NYI*/
- JumpChargeUnitMeleeRange = 0x000004, /*NYI*/
- JumpChargeUnitStrictPathCheck = 0x000008, /*NYI*/
- ExcludeOwnParty = 0x000010, /*NYI*/
- AlwaysAoeLineOfSight = 0x000020,
- SuppressPointsStacking = 0x000040,
- ChainFromInitialTarget = 0x000080,
- UncontrolledNoBackwards = 0x000100, /*NYI*/
- AuraPointsStack = 0x000200, // refreshing auras with this attribute will add remaining amount to new aura
- NoCopyDamageInterruptsOrProcs = 0x000400, /*NYI*/
- AddTargetCombatReachToAOE = 0x000800, /*NYI*/
- IsHarmful = 0x001000,
- ForceScaleToOverrideCameraMinHeight = 0x002000, /*NYI*/
- PlayersOnly = 0x004000,
- ComputePointsOnlyAtCastTime = 0x008000, /*NYI*/
- EnforceLineOfSightToChainTargets = 0x010000,
- AreaEffectsUseTargetRadius = 0x020000, /*NYI*/
- TeleportWithVehicle = 0x040000, /*NYI*/
- ScalePointsByChallengeModeDamageScaler = 0x080000, /*NYI*/
- DontFailSpellOnTargetingFailure = 0x100000, /*NYI*/
- IgnoreDuringCooldownTimeRateCalculation = 0x800000, /*NYI*/
+ NoImmunity = 0x00000001, // not cancelled by immunities
+ PositionIsFacingRelative = 0x00000002, /*NYI*/
+ JumpChargeUnitMeleeRange = 0x00000004, /*NYI*/
+ JumpChargeUnitStrictPathCheck = 0x00000008, /*NYI*/
+ ExcludeOwnParty = 0x00000010, /*NYI*/
+ AlwaysAoeLineOfSight = 0x00000020,
+ SuppressPointsStacking = 0x00000040,
+ ChainFromInitialTarget = 0x00000080,
+ UncontrolledNoBackwards = 0x00000100, /*NYI*/
+ AuraPointsStack = 0x00000200, // refreshing auras with this attribute will add remaining amount to new aura
+ NoCopyDamageInterruptsOrProcs = 0x00000400, /*NYI*/
+ AddTargetCombatReachToAOE = 0x00000800, /*NYI*/
+ IsHarmful = 0x00001000,
+ ForceScaleToOverrideCameraMinHeight = 0x00002000, /*NYI*/
+ PlayersOnly = 0x00004000,
+ ComputePointsOnlyAtCastTime = 0x00008000, /*NYI*/
+ EnforceLineOfSightToChainTargets = 0x00010000,
+ AreaEffectsUseTargetRadius = 0x00020000, /*NYI*/
+ TeleportWithVehicle = 0x00040000, /*NYI*/
+ ScalePointsByChallengeModeDamageScaler = 0x00080000, /*NYI*/
+ DontFailSpellOnTargetingFailure = 0x00100000, /*NYI*/
+ IgnoreDuringCooldownTimeRateCalculation = 0x00800000, /*NYI*/
+ DamageOnlyAbsorbShields = 0x04000000, /*NYI*/ // Effects with this attribute only reduce absorbs on targets hit without actually dealing damage
};
DEFINE_ENUM_FLAG(SpellEffectAttributes);
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index b8dbcf13aed..ad4fccf6699 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -3088,13 +3088,16 @@ class spell_pri_shadow_word_death : public SpellScript
bool Validate(SpellInfo const* spellInfo) override
{
return ValidateSpellInfo({ SPELL_PRIEST_SHADOW_WORD_DEATH_DAMAGE })
- && ValidateSpellEffect({ { spellInfo->Id, EFFECT_4 } });
+ && ValidateSpellEffect({ { spellInfo->Id, EFFECT_5 } })
+ && spellInfo->GetEffect(EFFECT_2).IsEffect(SPELL_EFFECT_DUMMY)
+ && spellInfo->GetEffect(EFFECT_3).IsEffect(SPELL_EFFECT_SCRIPT_EFFECT)
+ && spellInfo->GetEffect(EFFECT_5).IsEffect(SPELL_EFFECT_DUMMY);
}
void HandleDamageCalculation(Unit const* victim, int32 const& /*damage*/, int32 const& /*flatMod*/, float& pctMod) const
{
- if (victim->HealthBelowPct(GetEffectInfo(EFFECT_1).CalcValue(GetCaster())))
- AddPct(pctMod, GetEffectInfo(EFFECT_2).CalcValue(GetCaster()));
+ if (victim->HealthBelowPct(GetEffectInfo(EFFECT_2).CalcValue(GetCaster())))
+ AddPct(pctMod, GetEffectInfo(EFFECT_3).CalcValue(GetCaster()));
}
void DetermineKillStatus(DamageInfo const& damageInfo, uint32& /*resistAmount*/, int32& /*absorbAmount*/) const
@@ -3103,7 +3106,7 @@ class spell_pri_shadow_word_death : public SpellScript
if (!killed)
{
Unit* caster = GetCaster();
- int32 backlashDamage = caster->CountPctFromMaxHealth(GetEffectInfo(EFFECT_4).CalcValue(caster));
+ int32 backlashDamage = caster->CountPctFromMaxHealth(GetEffectInfo(EFFECT_5).CalcValue(caster));
caster->m_Events.AddEventAtOffset([caster, originalCastId = GetSpell()->m_castId, backlashDamage]
{
caster->CastSpell(caster, SPELL_PRIEST_SHADOW_WORD_DEATH_DAMAGE, CastSpellExtraArgs()