aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp89
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp212
-rw-r--r--src/server/scripts/Spells/spell_druid.cpp10
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp4
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp2
5 files changed, 216 insertions, 101 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 65b644fa082..0f59bd200bc 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -1697,95 +1697,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
}
}
break;
- case SPELLFAMILY_DEATHKNIGHT:
- if (GetSpellInfo()->GetSpellSpecific() == SPELL_SPECIFIC_PRESENCE)
- {
- AuraEffect* bloodPresenceAura=0; // healing by damage done
- AuraEffect* frostPresenceAura=0; // increased health
- AuraEffect* unholyPresenceAura=0; // increased movement speed, faster rune recovery
-
- // Improved Presences
- Unit::AuraEffectList const& vDummyAuras = target->GetAuraEffectsByType(SPELL_AURA_DUMMY);
- for (Unit::AuraEffectList::const_iterator itr = vDummyAuras.begin(); itr != vDummyAuras.end(); ++itr)
- {
- switch ((*itr)->GetId())
- {
- // Improved Blood Presence
- case 50365:
- case 50371:
- {
- bloodPresenceAura = (*itr);
- break;
- }
- // Improved Frost Presence
- case 50384:
- case 50385:
- {
- frostPresenceAura = (*itr);
- break;
- }
- // Improved Unholy Presence
- case 50391:
- case 50392:
- {
- unholyPresenceAura = (*itr);
- break;
- }
- }
- }
-
- uint32 presence = GetId();
- if (apply)
- {
- // Blood Presence bonus
- if (presence == 48266)
- target->CastSpell(target, 63611, true);
- else if (bloodPresenceAura)
- {
- int32 basePoints1 = bloodPresenceAura->GetAmount();
- target->CastCustomSpell(target, 63611, NULL, &basePoints1, NULL, true, 0, bloodPresenceAura);
- }
- // Frost Presence bonus
- if (presence == 48263)
- target->CastSpell(target, 61261, true);
- else if (frostPresenceAura)
- {
- int32 basePoints0 = frostPresenceAura->GetAmount();
- target->CastCustomSpell(target, 61261, &basePoints0, NULL, NULL, true, 0, frostPresenceAura);
- }
- // Unholy Presence bonus
- if (presence == 48265)
- {
- if (unholyPresenceAura)
- {
- // Not listed as any effect, only base points set
- int32 basePoints0 = unholyPresenceAura->GetSpellInfo()->Effects[EFFECT_1].CalcValue();
- target->CastCustomSpell(target, 63622, &basePoints0, &basePoints0, &basePoints0, true, 0, unholyPresenceAura);
- }
- target->CastSpell(target, 49772, true);
- }
- else if (unholyPresenceAura)
- {
- int32 basePoints0 = unholyPresenceAura->GetAmount();
- target->CastCustomSpell(target, 49772, &basePoints0, NULL, NULL, true, 0, unholyPresenceAura);
- }
- }
- else
- {
- // Remove passive auras
- if (presence == 48266 || bloodPresenceAura)
- target->RemoveAurasDueToSpell(63611);
- if (presence == 48263 || frostPresenceAura)
- target->RemoveAurasDueToSpell(61261);
- if (presence == 48265 || unholyPresenceAura)
- {
- if (presence == 48265 && unholyPresenceAura)
- target->RemoveAurasDueToSpell(63622);
- target->RemoveAurasDueToSpell(49772);
- }
- }
- }
- break;
case SPELLFAMILY_WARLOCK:
// Drain Soul - If the target is at or below 25% health, Drain Soul causes four times the normal damage
if (GetSpellInfo()->SpellFamilyFlags[0] & 0x00004000)
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp
index 1ab3961a662..bcbe944332c 100644
--- a/src/server/scripts/Spells/spell_dk.cpp
+++ b/src/server/scripts/Spells/spell_dk.cpp
@@ -38,8 +38,13 @@ enum DeathKnightSpells
SPELL_DK_DEATH_COIL_DAMAGE = 47632,
SPELL_DK_DEATH_COIL_HEAL = 47633,
SPELL_DK_DEATH_STRIKE_HEAL = 45470,
+ SPELL_DK_FROST_PRESENCE = 48263,
+ SPELL_DK_FROST_PRESENCE_TRIGGERED = 61261,
SPELL_DK_GHOUL_EXPLODE = 47496,
SPELL_DK_GLYPH_OF_ICEBOUND_FORTITUDE = 58625,
+ SPELL_DK_IMPROVED_BLOOD_PRESENCE_R1 = 50365,
+ SPELL_DK_IMPROVED_FROST_PRESENCE_R1 = 50384,
+ SPELL_DK_IMPROVED_UNHOLY_PRESENCE_R1 = 50391,
SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED = 63611,
SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED = 63622,
SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART = 64962,
@@ -48,6 +53,7 @@ enum DeathKnightSpells
SPELL_DK_SCENT_OF_BLOOD = 50422,
SPELL_DK_SCOURGE_STRIKE_TRIGGERED = 70890,
SPELL_DK_UNHOLY_PRESENCE = 48265,
+ SPELL_DK_UNHOLY_PRESENCE_TRIGGERED = 49772,
SPELL_DK_WILL_OF_THE_NECROPOLIS_TALENT_R1 = 49189,
SPELL_DK_WILL_OF_THE_NECROPOLIS_AURA_R1 = 52284
};
@@ -688,7 +694,7 @@ class spell_dk_icebound_fortitude : public SpellScriptLoader
}
};
-// 50365, 50371 - Improved Blood Presence
+// -50365 - Improved Blood Presence
class spell_dk_improved_blood_presence : public SpellScriptLoader
{
public:
@@ -700,7 +706,10 @@ class spell_dk_improved_blood_presence : public SpellScriptLoader
bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE) || !sSpellMgr->GetSpellInfo(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED))
+ if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_UNHOLY_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED))
return false;
return true;
}
@@ -708,10 +717,10 @@ class spell_dk_improved_blood_presence : public SpellScriptLoader
void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
- if (!target->HasAura(SPELL_DK_BLOOD_PRESENCE) && !target->HasAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED))
+ if ((target->HasAura(SPELL_DK_FROST_PRESENCE) || target->HasAura(SPELL_DK_UNHOLY_PRESENCE)) && !target->HasAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED))
{
int32 basePoints1 = aurEff->GetAmount();
- target->CastCustomSpell(target, SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED, NULL, &basePoints1, NULL, true, 0, aurEff);
+ target->CastCustomSpell(target, SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED, NULL, &basePoints1, NULL, true, NULL, aurEff);
}
}
@@ -735,7 +744,54 @@ class spell_dk_improved_blood_presence : public SpellScriptLoader
}
};
-// 50391, 50392 - Improved Unholy Presence
+// -50384 - Improved Frost Presence
+class spell_dk_improved_frost_presence : public SpellScriptLoader
+{
+ public:
+ spell_dk_improved_frost_presence() : SpellScriptLoader("spell_dk_improved_frost_presence") { }
+
+ class spell_dk_improved_frost_presence_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_dk_improved_frost_presence_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_UNHOLY_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE_TRIGGERED))
+ return false;
+ return true;
+ }
+
+ void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ if ((target->HasAura(SPELL_DK_BLOOD_PRESENCE) || target->HasAura(SPELL_DK_UNHOLY_PRESENCE)) && !target->HasAura(SPELL_DK_FROST_PRESENCE_TRIGGERED))
+ target->CastCustomSpell(SPELL_DK_FROST_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, NULL, aurEff);
+ }
+
+ void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ if (!target->HasAura(SPELL_DK_FROST_PRESENCE))
+ target->RemoveAura(SPELL_DK_FROST_PRESENCE_TRIGGERED);
+ }
+
+ void Register() OVERRIDE
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_dk_improved_frost_presence_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_dk_improved_frost_presence_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_dk_improved_frost_presence_AuraScript();
+ }
+};
+
+// -50391 - Improved Unholy Presence
class spell_dk_improved_unholy_presence : public SpellScriptLoader
{
public:
@@ -747,7 +803,11 @@ class spell_dk_improved_unholy_presence : public SpellScriptLoader
bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_DK_UNHOLY_PRESENCE) || !sSpellMgr->GetSpellInfo(SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED))
+ if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_UNHOLY_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED))
return false;
return true;
}
@@ -759,13 +819,21 @@ class spell_dk_improved_unholy_presence : public SpellScriptLoader
{
// Not listed as any effect, only base points set in dbc
int32 basePoints0 = aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue();
- target->CastCustomSpell(target, SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED, &basePoints0, &basePoints0, &basePoints0, true, 0, aurEff);
+ target->CastCustomSpell(target, SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED, &basePoints0, &basePoints0, &basePoints0, true, NULL, aurEff);
}
+
+ if ((target->HasAura(SPELL_DK_BLOOD_PRESENCE) || target->HasAura(SPELL_DK_FROST_PRESENCE)) && !target->HasAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED))
+ target->CastCustomSpell(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, NULL, aurEff);
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->RemoveAura(SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED);
+ Unit* target = GetTarget();
+
+ target->RemoveAura(SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED);
+
+ if (!target->HasAura(SPELL_DK_UNHOLY_PRESENCE))
+ target->RemoveAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED);
}
void Register() OVERRIDE
@@ -781,6 +849,132 @@ class spell_dk_improved_unholy_presence : public SpellScriptLoader
}
};
+// 48266 - Blood Presence
+// 48263 - Frost Presence
+// 48265 - Unholy Presence
+class spell_dk_presence : public SpellScriptLoader
+{
+ public:
+ spell_dk_presence() : SpellScriptLoader("spell_dk_presence") { }
+
+ class spell_dk_presence_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_dk_presence_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_UNHOLY_PRESENCE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_IMPROVED_BLOOD_PRESENCE_R1)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_IMPROVED_FROST_PRESENCE_R1)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_IMPROVED_UNHOLY_PRESENCE_R1)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE_TRIGGERED)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED))
+ return false;
+
+ return true;
+ }
+
+ void CheckImprovedBloodPresence()
+ {
+ Unit* target = GetTarget();
+ if (AuraEffect const* aurEff = target->GetAuraEffectOfRankedSpell(SPELL_DK_IMPROVED_BLOOD_PRESENCE_R1, EFFECT_0))
+ if (!target->HasAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED))
+ target->CastCustomSpell(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT1, aurEff->GetAmount(), target, true, NULL, aurEff);
+ }
+
+ void CheckImprovedFrostPresence()
+ {
+ Unit* target = GetTarget();
+ if (AuraEffect const* aurEff = target->GetAuraEffectOfRankedSpell(SPELL_DK_IMPROVED_FROST_PRESENCE_R1, EFFECT_0))
+ if (!target->HasAura(SPELL_DK_FROST_PRESENCE_TRIGGERED))
+ target->CastCustomSpell(SPELL_DK_FROST_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, NULL, aurEff);
+ }
+
+ void CheckImprovedUnholyPresence(bool inUnholy = false)
+ {
+ Unit* target = GetTarget();
+ if (AuraEffect const* aurEff = target->GetAuraEffectOfRankedSpell(SPELL_DK_IMPROVED_UNHOLY_PRESENCE_R1, EFFECT_0))
+ {
+ if (inUnholy)
+ {
+ // Not listed as any effect, only base points set
+ int32 bp = aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue();
+ target->CastCustomSpell(target, SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED, &bp, &bp, &bp, true, 0, aurEff);
+ }
+ else if (!target->HasAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED))
+ target->CastCustomSpell(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, NULL, aurEff);
+ }
+ }
+
+ void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+
+ switch (GetSpellInfo()->Id)
+ {
+ case SPELL_DK_BLOOD_PRESENCE:
+ target->CastSpell(target, SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED, true);
+ CheckImprovedFrostPresence();
+ CheckImprovedUnholyPresence();
+ break;
+ case SPELL_DK_FROST_PRESENCE:
+ target->CastSpell(target, SPELL_DK_FROST_PRESENCE_TRIGGERED, true);
+ CheckImprovedBloodPresence();
+ CheckImprovedUnholyPresence();
+ break;
+ case SPELL_DK_UNHOLY_PRESENCE:
+ target->CastSpell(target, SPELL_DK_UNHOLY_PRESENCE_TRIGGERED, true);
+ CheckImprovedBloodPresence();
+ CheckImprovedFrostPresence();
+ CheckImprovedUnholyPresence(true);
+ break;
+ default:
+ return;
+ }
+ }
+
+ void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->RemoveAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED);
+ target->RemoveAura(SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED);
+ target->RemoveAura(SPELL_DK_FROST_PRESENCE_TRIGGERED);
+ target->RemoveAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED);
+ }
+
+ void Register() OVERRIDE
+ {
+ uint32 auraType = 0;
+
+ switch (m_scriptSpellId)
+ {
+ case SPELL_DK_BLOOD_PRESENCE:
+ auraType = SPELL_AURA_MOD_DAMAGE_PERCENT_DONE;
+ break;
+ case SPELL_DK_FROST_PRESENCE:
+ auraType = SPELL_AURA_MOD_BASE_RESISTANCE_PCT;
+ break;
+ case SPELL_DK_UNHOLY_PRESENCE:
+ auraType = SPELL_AURA_MOD_MELEE_HASTE;
+ break;
+ default:
+ return;
+ }
+ AfterEffectApply += AuraEffectApplyFn(spell_dk_presence_AuraScript::HandleEffectApply, EFFECT_0, auraType, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_dk_presence_AuraScript::HandleEffectRemove, EFFECT_0, auraType, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_dk_presence_AuraScript();
+ }
+};
+
// 59754 Rune Tap - Party
class spell_dk_rune_tap_party : public SpellScriptLoader
{
@@ -1062,7 +1256,9 @@ void AddSC_deathknight_spell_scripts()
new spell_dk_ghoul_explode();
new spell_dk_icebound_fortitude();
new spell_dk_improved_blood_presence();
+ new spell_dk_improved_frost_presence();
new spell_dk_improved_unholy_presence();
+ new spell_dk_presence();
new spell_dk_rune_tap_party();
new spell_dk_scent_of_blood();
new spell_dk_scourge_strike();
diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp
index 40b33c13a40..61966ef8a8e 100644
--- a/src/server/scripts/Spells/spell_druid.cpp
+++ b/src/server/scripts/Spells/spell_druid.cpp
@@ -75,7 +75,7 @@ class spell_dru_dash : public SpellScriptLoader
}
};
-// -5229 - Enrage
+// 5229 - Enrage
class spell_dru_enrage : public SpellScriptLoader
{
public:
@@ -85,6 +85,14 @@ class spell_dru_enrage : public SpellScriptLoader
{
PrepareSpellScript(spell_dru_enrage_SpellScript);
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_KING_OF_THE_JUNGLE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DRUID_ENRAGE_MOD_DAMAGE))
+ return false;
+ return true;
+ }
+
void OnHit()
{
if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_0))
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 4d11f0a2d72..8d43f8e01fc 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -141,7 +141,7 @@ class spell_pri_glyph_of_prayer_of_healing : public SpellScriptLoader
}
};
-// -47788 - Guardian Spirit
+// 47788 - Guardian Spirit
class spell_pri_guardian_spirit : public SpellScriptLoader
{
public:
@@ -265,7 +265,7 @@ class spell_pri_lightwell_renew : public SpellScriptLoader
}
};
-// -8129 - Mana Burn
+// 8129 - Mana Burn
class spell_pri_mana_burn : public SpellScriptLoader
{
public:
diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp
index e6bfe3472cb..6aea2d7ad34 100644
--- a/src/server/scripts/Spells/spell_warlock.cpp
+++ b/src/server/scripts/Spells/spell_warlock.cpp
@@ -61,7 +61,7 @@ enum WarlockSpellIcons
WARLOCK_ICON_ID_MANA_FEED = 1982
};
-// 710, 18647 - Banish
+// -710 - Banish
class spell_warl_banish : public SpellScriptLoader
{
public: