diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 24 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 4 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_dk.cpp | 27 |
3 files changed, 42 insertions, 13 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a2adb6a320c..b87b9d444ea 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -161,6 +161,30 @@ ProcEventInfo::ProcEventInfo(Unit* actor, Unit* actionTarget, Unit* procTarget, _damageInfo(damageInfo), _healInfo(healInfo) { } +SpellInfo const* ProcEventInfo::GetSpellInfo() const +{ + /// WORKAROUND: unfinished new proc system + if (_spell) + return _spell->GetSpellInfo(); + if (_damageInfo) + return _damageInfo->GetSpellInfo(); + /*if (_healInfo) + return _healInfo->GetSpellInfo();*/ + return nullptr; +} + +SpellSchoolMask ProcEventInfo::GetSchoolMask() const +{ + /// WORKAROUND: unfinished new proc system + if (_spell) + return _spell->GetSpellInfo()->GetSchoolMask(); + if (_damageInfo) + return _damageInfo->GetSchoolMask(); + /*if (_healInfo) + return _healInfo->GetSchoolMask();*/ + return SPELL_SCHOOL_MASK_NONE; +} + Unit::Unit(bool isWorldObject) : WorldObject(isWorldObject), m_movedPlayer(NULL), m_lastSanctuaryTime(0), IsAIEnabled(false), NeedChangeAI(false), LastCharmerGUID(), diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 1b8c188afb4..cc9027e10c9 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -978,8 +978,8 @@ public: uint32 GetSpellPhaseMask() const { return _spellPhaseMask; } uint32 GetHitMask() const { return _hitMask; } - SpellInfo const* GetSpellInfo() const { return NULL; } - SpellSchoolMask GetSchoolMask() const { return SPELL_SCHOOL_MASK_NONE; } + SpellInfo const* GetSpellInfo() const; + SpellSchoolMask GetSchoolMask() const; DamageInfo* GetDamageInfo() const { return _damageInfo; } HealInfo* GetHealInfo() const { return _healInfo; } diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 00071c4804e..a3d3eee8d6d 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -658,11 +658,7 @@ class spell_dk_festering_strike : public SpellScriptLoader { PrepareSpellScript(spell_dk_festering_strike_SpellScript); - public: - spell_dk_festering_strike_SpellScript() { } - - private: - bool Validate(SpellInfo const* spellInfo) override + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_FROST_FEVER) || !sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PLAGUE) || !sSpellMgr->GetSpellInfo(SPELL_DK_CHAINS_OF_ICE)) return false; @@ -760,7 +756,8 @@ class spell_dk_glyph_of_deaths_embrace : public SpellScriptLoader bool CheckProc(ProcEventInfo& eventInfo) { - return (GetTarget()->GetCreatureType() == CREATURE_TYPE_UNDEAD && GetTarget()->GetOwner()); + Unit* actionTarget = eventInfo.GetActionTarget(); + return actionTarget && actionTarget->GetCreatureType() == CREATURE_TYPE_UNDEAD && actionTarget->GetOwner(); } void Register() override @@ -793,6 +790,11 @@ class spell_dk_glyph_of_runic_power : public SpellScriptLoader return true; } + bool Load() override + { + return GetUnitOwner()->getClass() == CLASS_DEATH_KNIGHT; + } + bool CheckProc(ProcEventInfo& eventInfo) { return eventInfo.GetSpellInfo() && (eventInfo.GetSpellInfo()->GetAllEffectsMechanicMask() & (1 << MECHANIC_SNARE | 1 << MECHANIC_ROOT | 1 << MECHANIC_FREEZE)); @@ -801,8 +803,7 @@ class spell_dk_glyph_of_runic_power : public SpellScriptLoader void HandleProc(ProcEventInfo& eventInfo) { if (Unit* target = eventInfo.GetProcTarget()) - if (target->getClass() == CLASS_DEATH_KNIGHT) - target->CastSpell(target, SPELL_DK_GLYPH_OF_RUNIC_POWER_TRIGGERED, true); + target->CastSpell(target, SPELL_DK_GLYPH_OF_RUNIC_POWER_TRIGGERED, true); } void Register() override @@ -1075,19 +1076,23 @@ class spell_dk_will_of_the_necropolis : public SpellScriptLoader { PrepareAuraScript(spell_dk_will_of_the_necropolis_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) override + bool Validate(SpellInfo const* spellInfo) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_WILL_OF_THE_NECROPOLIS)) return false; + if (!spellInfo->GetEffect(EFFECT_0)) + return false; return true; } bool CheckProc(ProcEventInfo& eventInfo) { - if (GetTarget()->HasAura(SPELL_DK_WILL_OF_THE_NECROPOLIS)) + Unit* target = GetTarget(); + + if (target->HasAura(SPELL_DK_WILL_OF_THE_NECROPOLIS)) return false; - return GetTarget()->HealthBelowPctDamaged(30, eventInfo.GetDamageInfo()->GetDamage()); + return target->HealthBelowPctDamaged(GetSpellInfo()->GetEffect(EFFECT_0)->CalcValue(target), eventInfo.GetDamageInfo()->GetDamage()); } void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) |