diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 111 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 154 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_hunter.cpp | 67 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_paladin.cpp | 45 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 122 |
5 files changed, 318 insertions, 181 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 7788ace3435..36345e431a5 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -1057,22 +1057,6 @@ void AuraEffect::UpdatePeriodic(Unit * caster) { switch(GetAuraType()) { - case SPELL_AURA_PERIODIC_DAMAGE: - switch (GetId()) - { - case 41337: // Aura of Anger - if (AuraEffect * aurEff = GetBase()->GetEffect(1)) - aurEff->ChangeAmount(aurEff->GetAmount()+5); - SetAmount(100 * m_tickNumber); - break; - case 46394: // Brutallus Burn - if (m_tickNumber % 11 == 0) - SetAmount(GetAmount() * 2); - break; - default: - break; - } - break; case SPELL_AURA_DUMMY: // Haunting Spirits if (GetId() == 7057) @@ -1081,24 +1065,6 @@ void AuraEffect::UpdatePeriodic(Unit * caster) m_amplitude *= IN_MILLISECONDS; } break; - case SPELL_AURA_PERIODIC_TRIGGER_SPELL: - switch (GetId()) - { - // Sniper training - case 53302: - case 53303: - case 53304: - Unit * target = GetBase()->GetUnitOwner(); - if (target->GetTypeId() != TYPEID_PLAYER) - break; - - if (target->ToPlayer()->isMoving()) - m_amount = target->CalculateSpellDamage(target, m_spellProto,m_effIndex, &m_baseAmount); - else - --m_amount; - break; - } - break; case SPELL_AURA_PERIODIC_DUMMY: switch(GetSpellProto()->SpellFamilyName) { @@ -1913,32 +1879,6 @@ void AuraEffect::PeriodicDummyTick(Unit * target, Unit * caster) const // 7053 Forsaken Skill: Shadow return; } - case 45472: // Parachute - if (target->GetTypeId() == TYPEID_PLAYER) - { - Player *plr = (Player*)target; - if (plr->IsFalling()) - { - plr->RemoveAurasDueToSpell(45472); - plr->CastSpell(plr, 44795, true); - } - } - break; - - case 51685: // Prey on the Weak - case 51686: - case 51687: - case 51688: - case 51689: - if (target->getVictim() && (target->GetHealthPct() > target->getVictim()->GetHealthPct())) { - if (!target->HasAura(58670)) { - int32 basepoints = SpellMgr::CalculateSpellEffectAmount(GetSpellProto(), 0); - target->CastCustomSpell(target, 58670, &basepoints, 0, 0, true); - } - } - else - target->RemoveAurasDueToSpell(58670); - break; case 62292: // Blaze (Pool of Tar) // should we use custom damage? target->CastSpell((Unit*)NULL, m_spellProto->EffectTriggerSpell[m_effIndex], true); @@ -1958,14 +1898,6 @@ void AuraEffect::PeriodicDummyTick(Unit * target, Unit * caster) const target->RemoveAura(64821); } break; - case 66118: // Leeching Swarm (Anub'arak) - int32 lifeLeeched = target->GetHealth() * GetAmount() / 100; - if (lifeLeeched < 250) lifeLeeched = 250; - // Damage - caster->CastCustomSpell(target, 66240, &lifeLeeched, 0, 0, false); - // Heal - caster->CastCustomSpell(caster, 66125, &lifeLeeched, 0, 0, false); - break; } break; case SPELLFAMILY_MAGE: @@ -2329,27 +2261,6 @@ void AuraEffect::TriggerSpell(Unit * target, Unit * caster) const } break; } - case SPELLFAMILY_HUNTER: - { - switch (auraId) - { - // Sniper training - case 53302: - case 53303: - case 53304: - // We are standing at the moment - if (GetAmount() > 0) - return; - - triggerSpellId = 64418 + auraId - 53302; - - // If aura is active - no need to continue - if (target->HasAura(triggerSpellId)) - return; - break; - } - break; - } case SPELLFAMILY_SHAMAN: { switch(auraId) @@ -6158,26 +6069,8 @@ void AuraEffect::HandleAuraDummy(AuraApplication const * aurApp, uint8 mode, boo break; } case SPELLFAMILY_PALADIN: - if (!(mode & AURA_EFFECT_HANDLE_REAL)) - break; - switch (GetSpellProto()->SpellIconID) - { - // Blessing of Sanctuary - // Greater Blessing of Sanctuary - case 19: - case 1804: - { - if (!caster) - break; - - if (apply) - caster->CastSpell(target, 67480, true); - else - target->RemoveAura(67480, GetCasterGUID()); - - break; - } - } + // if (!(mode & AURA_EFFECT_HANDLE_REAL)) + // break; break; } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index b1daada093f..bcd9960a8c5 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -23,6 +23,106 @@ */ #include "ScriptPCH.h" +#include "SpellAuraEffects.h" + +// 41337 Aura of Anger +class spell_gen_aura_of_anger : public SpellScriptLoader +{ +public: + spell_gen_aura_of_anger() : SpellScriptLoader("spell_gen_aura_of_anger") { } + + class spell_gen_aura_of_anger_AuraScript : public AuraScript + { + void HandleEffectPeriodicUpdate(AuraEffect * aurEff) + { + if (AuraEffect * aurEff1 = aurEff->GetBase()->GetEffect(EFFECT_1)) + aurEff1->ChangeAmount(aurEff1->GetAmount() + 5); + aurEff->SetAmount(100 * aurEff->GetTickNumber()); + } + + void Register() + { + OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_aura_of_anger_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + } + }; + + AuraScript *GetAuraScript() const + { + return new spell_gen_aura_of_anger_AuraScript(); + } +}; + +// 46394 Brutallus Burn +class spell_gen_burn_brutallus : public SpellScriptLoader +{ +public: + spell_gen_burn_brutallus() : SpellScriptLoader("spell_gen_burn_brutallus") { } + + class spell_gen_burn_brutallus_AuraScript : public AuraScript + { + void HandleEffectPeriodicUpdate(AuraEffect * aurEff) + { + if (aurEff->GetTickNumber() % 11 == 0) + aurEff->SetAmount(aurEff->GetAmount() * 2); + } + + void Register() + { + OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_burn_brutallus_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + } + }; + + AuraScript *GetAuraScript() const + { + return new spell_gen_burn_brutallus_AuraScript(); + } +}; + +// 45472 Parachute +enum eParachuteSpells +{ + SPELL_PARACHUTE = 45472, + SPELL_PARACHUTE_BUFF = 44795, +}; + +class spell_gen_parachute : public SpellScriptLoader +{ +public: + spell_gen_parachute() : SpellScriptLoader("spell_gen_parachute") { } + + class spell_gen_parachute_AuraScript : public AuraScript + { + bool Validate(SpellEntry const * /*spellEntry*/) + { + if (!sSpellStore.LookupEntry(SPELL_PARACHUTE)) + return false; + if (!sSpellStore.LookupEntry(SPELL_PARACHUTE_BUFF)) + return false; + return true; + } + + void HandleEffectPeriodic(AuraEffect const * /*aurEff*/, AuraApplication const * aurApp) + { + if (Unit* pTarget = aurApp->GetTarget()) + if (Player* pPlayerTarget = pTarget->ToPlayer()) + if (pPlayerTarget->IsFalling()) + { + pPlayerTarget->RemoveAurasDueToSpell(SPELL_PARACHUTE); + pPlayerTarget->CastSpell(pPlayerTarget, SPELL_PARACHUTE_BUFF, true); + } + } + + void Register() + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_parachute_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript *GetAuraScript() const + { + return new spell_gen_parachute_AuraScript(); + } +}; enum NPCEntries { @@ -115,6 +215,56 @@ public: } }; +// 66118 Leeching Swarm +enum eLeechingSwarmSpells +{ + SPELL_LEECHING_SWARM_DMG = 66240, + SPELL_LEECHING_SWARM_HEAL = 66125, +}; + +class spell_gen_leeching_swarm : public SpellScriptLoader +{ +public: + spell_gen_leeching_swarm() : SpellScriptLoader("spell_gen_leeching_swarm") { } + + class spell_gen_leeching_swarm_AuraScript : public AuraScript + { + bool Validate(SpellEntry const * /*spellEntry*/) + { + if (!sSpellStore.LookupEntry(SPELL_LEECHING_SWARM_DMG)) + return false; + if (!sSpellStore.LookupEntry(SPELL_LEECHING_SWARM_HEAL)) + return false; + return true; + } + + void HandleEffectPeriodic(AuraEffect const * aurEff, AuraApplication const * aurApp) + { + if (Unit* pTarget = aurApp->GetTarget()) + if (Unit* pCaster = GetCaster()) + { + int32 lifeLeeched = pTarget->CountPctFromMaxHealth(aurEff->GetAmount()); + if (lifeLeeched < 250) + lifeLeeched = 250; + // Damage + pCaster->CastCustomSpell(pTarget, SPELL_LEECHING_SWARM_DMG, &lifeLeeched, 0, 0, false); + // Heal + pCaster->CastCustomSpell(pCaster, SPELL_LEECHING_SWARM_HEAL, &lifeLeeched, 0, 0, false); + } + } + + void Register() + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_leeching_swarm_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript *GetAuraScript() const + { + return new spell_gen_leeching_swarm_AuraScript(); + } +}; + // 24750 Trick enum eTrickSpells { @@ -320,6 +470,10 @@ public: void AddSC_generic_spell_scripts() { + new spell_gen_aura_of_anger(); + new spell_gen_burn_brutallus(); + new spell_gen_leeching_swarm(); + new spell_gen_parachute(); new spell_gen_pet_summoned(); new spell_gen_remove_flight_auras(); new spell_gen_trick(); diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index 2416cbc0a73..9c4a339da6a 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -329,6 +329,72 @@ public: } }; +// 53302, 53303, 53304 Sniper Training +enum eSniperTrainingSpells +{ + SPELL_SNIPER_TRAINING_R1 = 53302, + SPELL_SNIPER_TRAINING_BUFF_R1 = 64418, +}; + +class spell_hun_sniper_training : public SpellScriptLoader +{ +public: + spell_hun_sniper_training() : SpellScriptLoader("spell_hun_sniper_training") { } + + class spell_hun_sniper_training_AuraScript : public AuraScript + { + bool Validate(SpellEntry const * entry) + { + if (!sSpellStore.LookupEntry(SPELL_SNIPER_TRAINING_R1)) + return false; + if (!sSpellStore.LookupEntry(SPELL_SNIPER_TRAINING_BUFF_R1)) + return false; + return true; + } + + void HandlePeriodic(AuraEffect const * aurEff, AuraApplication const * aurApp) + { + if (aurEff->GetAmount() > 0) + return; + + if (Unit* pTarget = aurApp->GetTarget()) + { + uint32 spellId = SPELL_SNIPER_TRAINING_BUFF_R1 + GetId() - SPELL_SNIPER_TRAINING_R1; + if (!pTarget->HasAura(spellId)) + { + const SpellEntry* triggeredSpellInfo = sSpellStore.LookupEntry(spellId); + Unit* triggerCaster = GetTriggeredSpellCaster(triggeredSpellInfo, GetCaster(), pTarget); + triggerCaster->CastSpell(pTarget, triggeredSpellInfo, true, 0, aurEff); + } + } + } + + void HandleUpdatePeriodic(AuraEffect * aurEff) + { + if (Unit* pTarget = GetUnitOwner()) + if (Player* pPlayerTarget = pTarget->ToPlayer()) + { + int32 baseAmount = aurEff->GetBaseAmount(); + int32 amount = pPlayerTarget->isMoving() ? + pTarget->CalculateSpellDamage(pTarget, GetSpellProto(), aurEff->GetEffIndex(), &baseAmount) : + aurEff->GetAmount() - 1; + aurEff->SetAmount(amount); + } + } + + void Register() + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_hun_sniper_training_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_hun_sniper_training_AuraScript::HandleUpdatePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + } + }; + + AuraScript *GetAuraScript() const + { + return new spell_hun_sniper_training_AuraScript(); + } +}; + class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader { public: @@ -424,6 +490,7 @@ void AddSC_hunter_spell_scripts() new spell_hun_masters_call(); new spell_hun_readiness(); new spell_hun_scatter_shot(); + new spell_hun_sniper_training(); new spell_hun_pet_heart_of_the_phoenix(); new spell_hun_pet_carrion_feeder(); } diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index b128016f0e6..a0706ed3ac8 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -27,6 +27,7 @@ enum PaladinSpells { PALADIN_SPELL_DIVINE_PLEA = 54428, + PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF = 67480, PALADIN_SPELL_HOLY_SHOCK_R1 = 20473, PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE = 25912, @@ -89,6 +90,49 @@ public: } }; +// 20911 Blessing of Sanctuary +// 25899 Greater Blessing of Sanctuary +class spell_pal_blessing_of_sanctuary : public SpellScriptLoader +{ +public: + spell_pal_blessing_of_sanctuary() : SpellScriptLoader("spell_pal_blessing_of_sanctuary") { } + + class spell_pal_blessing_of_sanctuary_AuraScript : public AuraScript + { + bool Validate(SpellEntry const * entry) + { + if (!sSpellStore.LookupEntry(PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF)) + return false; + return true; + } + + void HandleEffectApply(AuraEffect const * /*aurEff*/, AuraApplication const * aurApp, AuraEffectHandleModes /*mode*/) + { + if (Unit* pCaster = GetCaster()) + if (Unit* pTarget = aurApp->GetTarget()) + pCaster->CastSpell(pTarget, PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF, true); + } + + void HandleEffectRemove(AuraEffect const * /*aurEff*/, AuraApplication const * aurApp, AuraEffectHandleModes /*mode*/) + { + if (GetCaster()) + if (Unit* pTarget = aurApp->GetTarget()) + pTarget->RemoveAura(PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF, GetCasterGUID()); + } + + void Register() + { + OnEffectApply += AuraEffectApplyFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove += AuraEffectRemoveFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript *GetAuraScript() const + { + return new spell_pal_blessing_of_sanctuary_AuraScript(); + } +}; + // 63521 Guarded by The Light class spell_pal_guarded_by_the_light : public SpellScriptLoader { @@ -206,6 +250,7 @@ public: void AddSC_paladin_spell_scripts() { new spell_pal_blessing_of_faith(); + new spell_pal_blessing_of_sanctuary(); new spell_pal_guarded_by_the_light(); new spell_pal_holy_shock(); new spell_pal_judgement_of_command(); diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 0ccd1dd586b..8ad97c135ca 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -25,76 +25,9 @@ enum RogueSpells { - ROGUE_SPELL_HUNGER_FOR_BLOOD_BUFF = 63848, ROGUE_SPELL_SHIV_TRIGGERED = 5940, - ROGUE_SPELL_CHEATING_DEATH = 45182, ROGUE_SPELL_GLYPH_OF_PREPARATION = 56819, -}; - -class spell_rog_cheat_death : public SpellScriptLoader -{ - public: - spell_rog_cheat_death() : SpellScriptLoader("spell_rog_cheat_death") { } - - class spell_rog_cheat_death_SpellScript : public SpellScript - { - bool Validate(SpellEntry const * /*spellEntry*/) - { - if (!sSpellStore.LookupEntry(ROGUE_SPELL_CHEATING_DEATH)) - return false; - return true; - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Unit *caster = GetCaster(); - caster->CastSpell(caster, ROGUE_SPELL_CHEATING_DEATH, true); - } - - void Register() - { - // add dummy effect spell handler to Cheat Death - OnEffect += SpellEffectFn(spell_rog_cheat_death_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - - SpellScript *GetSpellScript() const - { - return new spell_rog_cheat_death_SpellScript; - } -}; - -class spell_rog_hunger_for_blood : public SpellScriptLoader -{ - public: - spell_rog_hunger_for_blood() : SpellScriptLoader("spell_rog_hunger_for_blood") { } - - class spell_rog_hunger_for_blood_SpellScript : public SpellScript - { - bool Validate(SpellEntry const * /*spellEntry*/) - { - if (!sSpellStore.LookupEntry(ROGUE_SPELL_HUNGER_FOR_BLOOD_BUFF)) - return false; - return true; - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Unit *caster = GetCaster(); - caster->CastSpell(caster, ROGUE_SPELL_HUNGER_FOR_BLOOD_BUFF, true); - } - - void Register() - { - // add dummy effect spell handler to Hunger for Blood - OnEffect += SpellEffectFn(spell_rog_hunger_for_blood_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - - SpellScript *GetSpellScript() const - { - return new spell_rog_hunger_for_blood_SpellScript(); - } + ROGUE_SPELL_PREY_ON_THE_WEAK = 58670, }; class spell_rog_preparation : public SpellScriptLoader @@ -159,6 +92,52 @@ class spell_rog_preparation : public SpellScriptLoader } }; +// 51685-51689 Prey on the Weak +class spell_rog_prey_on_the_weak : public SpellScriptLoader +{ +public: + spell_rog_prey_on_the_weak() : SpellScriptLoader("spell_rog_prey_on_the_weak") { } + + class spell_rog_prey_on_the_weak_AuraScript : public AuraScript + { + bool Validate(SpellEntry const * /*spellEntry*/) + { + if (!sSpellStore.LookupEntry(ROGUE_SPELL_PREY_ON_THE_WEAK)) + return false; + return true; + } + + void HandleEffectPeriodic(AuraEffect const * /*aurEff*/, AuraApplication const * aurApp) + { + if (Unit* pTarget = aurApp->GetTarget()) + { + Unit* pVictim = pTarget->getVictim(); + if (pVictim && (pTarget->GetHealthPct() > pVictim->GetHealthPct())) + { + if (!pTarget->HasAura(ROGUE_SPELL_PREY_ON_THE_WEAK)) + { + int32 bp = SpellMgr::CalculateSpellEffectAmount(GetSpellProto(), 0); + pTarget->CastCustomSpell(pTarget, ROGUE_SPELL_PREY_ON_THE_WEAK, &bp, 0, 0, true); + } + } + else + pTarget->RemoveAurasDueToSpell(ROGUE_SPELL_PREY_ON_THE_WEAK); + } + } + + void Register() + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_prey_on_the_weak_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript *GetAuraScript() const + { + return new spell_rog_prey_on_the_weak_AuraScript(); + } +}; + + class spell_rog_shiv : public SpellScriptLoader { public: @@ -198,8 +177,7 @@ class spell_rog_shiv : public SpellScriptLoader void AddSC_rogue_spell_scripts() { - new spell_rog_cheat_death; - new spell_rog_hunger_for_blood; - new spell_rog_preparation; - new spell_rog_shiv; + new spell_rog_preparation(); + new spell_rog_prey_on_the_weak(); + new spell_rog_shiv(); } |