diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_hunter.cpp | 874 |
1 files changed, 360 insertions, 514 deletions
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index ca962cc005f..b4a90172ce3 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -104,647 +104,493 @@ class spell_hun_a_murder_of_crows : public AuraScript }; // 186257 - Aspect of the Cheetah -class spell_hun_aspect_cheetah : public SpellScriptLoader +class spell_hun_aspect_cheetah : public AuraScript { - public: - spell_hun_aspect_cheetah() : SpellScriptLoader("spell_hun_aspect_cheetah") { } + PrepareAuraScript(spell_hun_aspect_cheetah); - class spell_hun_aspect_cheetah_AuraScript : public AuraScript - { - PrepareAuraScript(spell_hun_aspect_cheetah_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo - ({ - SPELL_HUNTER_ASPECT_CHEETAH_SLOW - }); - } - - void HandleOnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE) - GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_ASPECT_CHEETAH_SLOW, true); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo + ({ + SPELL_HUNTER_ASPECT_CHEETAH_SLOW + }); + } - void Register() override - { - AfterEffectRemove += AuraEffectRemoveFn(spell_hun_aspect_cheetah_AuraScript::HandleOnRemove, EFFECT_0, SPELL_AURA_MOD_INCREASE_SPEED, AURA_EFFECT_HANDLE_REAL); - } - }; + void HandleOnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE) + GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_ASPECT_CHEETAH_SLOW, true); + } - AuraScript* GetAuraScript() const override - { - return new spell_hun_aspect_cheetah_AuraScript(); - } + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_hun_aspect_cheetah::HandleOnRemove, EFFECT_0, SPELL_AURA_MOD_INCREASE_SPEED, AURA_EFFECT_HANDLE_REAL); + } }; // 109304 - Exhilaration -class spell_hun_exhilaration : public SpellScriptLoader +class spell_hun_exhilaration : public SpellScript { - public: - spell_hun_exhilaration() : SpellScriptLoader("spell_hun_exhilaration") { } - - class spell_hun_exhilaration_SpellScript : public SpellScript - { - PrepareSpellScript(spell_hun_exhilaration_SpellScript); + PrepareSpellScript(spell_hun_exhilaration); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_HUNTER_EXHILARATION_R2, SPELL_HUNTER_LONE_WOLF }); - } - - void HandleOnHit() - { - if (GetCaster()->HasAura(SPELL_HUNTER_EXHILARATION_R2) && !GetCaster()->HasAura(SPELL_HUNTER_LONE_WOLF)) - GetCaster()->CastSpell(nullptr, SPELL_HUNTER_EXHILARATION_PET, true); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_HUNTER_EXHILARATION_R2, SPELL_HUNTER_LONE_WOLF }); + } - void Register() override - { - OnHit += SpellHitFn(spell_hun_exhilaration_SpellScript::HandleOnHit); - } - }; + void HandleOnHit() + { + if (GetCaster()->HasAura(SPELL_HUNTER_EXHILARATION_R2) && !GetCaster()->HasAura(SPELL_HUNTER_LONE_WOLF)) + GetCaster()->CastSpell(nullptr, SPELL_HUNTER_EXHILARATION_PET, true); + } - SpellScript* GetSpellScript() const override - { - return new spell_hun_exhilaration_SpellScript(); - } + void Register() override + { + OnHit += SpellHitFn(spell_hun_exhilaration::HandleOnHit); + } }; // 212658 - Hunting Party -class spell_hun_hunting_party : public SpellScriptLoader +class spell_hun_hunting_party : public AuraScript { - public: - spell_hun_hunting_party() : SpellScriptLoader("spell_hun_hunting_party") { } + PrepareAuraScript(spell_hun_hunting_party); - class spell_hun_hunting_party_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( { - PrepareAuraScript(spell_hun_hunting_party_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo( - { - SPELL_HUNTER_EXHILARATION, - SPELL_HUNTER_EXHILARATION_PET - }); - } - - void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) - { - PreventDefaultAction(); - GetTarget()->GetSpellHistory()->ModifyCooldown(SPELL_HUNTER_EXHILARATION, -Seconds(aurEff->GetAmount())); - GetTarget()->GetSpellHistory()->ModifyCooldown(SPELL_HUNTER_EXHILARATION_PET, -Seconds(aurEff->GetAmount())); - } + SPELL_HUNTER_EXHILARATION, + SPELL_HUNTER_EXHILARATION_PET + }); + } - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_hun_hunting_party_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->GetSpellHistory()->ModifyCooldown(SPELL_HUNTER_EXHILARATION, -Seconds(aurEff->GetAmount())); + GetTarget()->GetSpellHistory()->ModifyCooldown(SPELL_HUNTER_EXHILARATION_PET, -Seconds(aurEff->GetAmount())); + } - AuraScript* GetAuraScript() const override - { - return new spell_hun_hunting_party_AuraScript(); - } + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_hun_hunting_party::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // 53478 - Last Stand Pet -class spell_hun_last_stand_pet : public SpellScriptLoader +class spell_hun_last_stand_pet : public SpellScript { - public: - spell_hun_last_stand_pet() : SpellScriptLoader("spell_hun_last_stand_pet") { } - - class spell_hun_last_stand_pet_SpellScript : public SpellScript - { - PrepareSpellScript(spell_hun_last_stand_pet_SpellScript); + PrepareSpellScript(spell_hun_last_stand_pet); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_HUNTER_PET_LAST_STAND_TRIGGERED }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.AddSpellBP0(caster->CountPctFromMaxHealth(30)); - caster->CastSpell(caster, SPELL_HUNTER_PET_LAST_STAND_TRIGGERED, args); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_HUNTER_PET_LAST_STAND_TRIGGERED }); + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_hun_last_stand_pet_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.AddSpellBP0(caster->CountPctFromMaxHealth(30)); + caster->CastSpell(caster, SPELL_HUNTER_PET_LAST_STAND_TRIGGERED, args); + } - SpellScript* GetSpellScript() const override - { - return new spell_hun_last_stand_pet_SpellScript(); - } + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_hun_last_stand_pet::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } }; // 53271 - Masters Call -class spell_hun_masters_call : public SpellScriptLoader +class spell_hun_masters_call : public SpellScript { - public: - spell_hun_masters_call() : SpellScriptLoader("spell_hun_masters_call") { } - - class spell_hun_masters_call_SpellScript : public SpellScript - { - PrepareSpellScript(spell_hun_masters_call_SpellScript); - - bool Validate(SpellInfo const* spellInfo) override - { - return !spellInfo->GetEffects().empty() - && ValidateSpellInfo({ SPELL_HUNTER_MASTERS_CALL_TRIGGERED, uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) }); - } + PrepareSpellScript(spell_hun_masters_call); - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; - } + bool Validate(SpellInfo const* spellInfo) override + { + return !spellInfo->GetEffects().empty() + && ValidateSpellInfo({ SPELL_HUNTER_MASTERS_CALL_TRIGGERED, uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) }); + } - SpellCastResult DoCheckCast() - { - Guardian* pet = GetCaster()->ToPlayer()->GetGuardianPet(); - ASSERT(pet); // checked in Spell::CheckCast - - if (!pet->IsPet() || !pet->IsAlive()) - return SPELL_FAILED_NO_PET; - - // Do a mini Spell::CheckCasterAuras on the pet, no other way of doing this - SpellCastResult result = SPELL_CAST_OK; - uint32 const unitflag = pet->m_unitData->Flags; - if (!pet->GetCharmerGUID().IsEmpty()) - result = SPELL_FAILED_CHARMED; - else if (unitflag & UNIT_FLAG_STUNNED) - result = SPELL_FAILED_STUNNED; - else if (unitflag & UNIT_FLAG_FLEEING) - result = SPELL_FAILED_FLEEING; - else if (unitflag & UNIT_FLAG_CONFUSED) - result = SPELL_FAILED_CONFUSED; - - if (result != SPELL_CAST_OK) - return result; - - Unit* target = GetExplTargetUnit(); - if (!target) - return SPELL_FAILED_BAD_TARGETS; - - if (!pet->IsWithinLOSInMap(target)) - return SPELL_FAILED_LINE_OF_SIGHT; - - return SPELL_CAST_OK; - } + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } - void HandleDummy(SpellEffIndex /*effIndex*/) - { - GetCaster()->ToPlayer()->GetPet()->CastSpell(GetHitUnit(), GetEffectValue(), true); - } + SpellCastResult DoCheckCast() + { + Guardian* pet = GetCaster()->ToPlayer()->GetGuardianPet(); + ASSERT(pet); // checked in Spell::CheckCast + + if (!pet->IsPet() || !pet->IsAlive()) + return SPELL_FAILED_NO_PET; + + // Do a mini Spell::CheckCasterAuras on the pet, no other way of doing this + SpellCastResult result = SPELL_CAST_OK; + uint32 const unitflag = pet->m_unitData->Flags; + if (!pet->GetCharmerGUID().IsEmpty()) + result = SPELL_FAILED_CHARMED; + else if (unitflag & UNIT_FLAG_STUNNED) + result = SPELL_FAILED_STUNNED; + else if (unitflag & UNIT_FLAG_FLEEING) + result = SPELL_FAILED_FLEEING; + else if (unitflag & UNIT_FLAG_CONFUSED) + result = SPELL_FAILED_CONFUSED; + + if (result != SPELL_CAST_OK) + return result; + + Unit* target = GetExplTargetUnit(); + if (!target) + return SPELL_FAILED_BAD_TARGETS; + + if (!pet->IsWithinLOSInMap(target)) + return SPELL_FAILED_LINE_OF_SIGHT; + + return SPELL_CAST_OK; + } - void HandleScriptEffect(SpellEffIndex /*effIndex*/) - { - GetHitUnit()->CastSpell(nullptr, SPELL_HUNTER_MASTERS_CALL_TRIGGERED, true); - } + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->ToPlayer()->GetPet()->CastSpell(GetHitUnit(), GetEffectValue(), true); + } - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_hun_masters_call_SpellScript::DoCheckCast); + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->CastSpell(nullptr, SPELL_HUNTER_MASTERS_CALL_TRIGGERED, true); + } - OnEffectHitTarget += SpellEffectFn(spell_hun_masters_call_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - OnEffectHitTarget += SpellEffectFn(spell_hun_masters_call_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_hun_masters_call::DoCheckCast); - SpellScript* GetSpellScript() const override - { - return new spell_hun_masters_call_SpellScript(); - } + OnEffectHitTarget += SpellEffectFn(spell_hun_masters_call::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + OnEffectHitTarget += SpellEffectFn(spell_hun_masters_call::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + } }; // 34477 - Misdirection -class spell_hun_misdirection : public SpellScriptLoader +class spell_hun_misdirection : public AuraScript { - public: - spell_hun_misdirection() : SpellScriptLoader("spell_hun_misdirection") { } + PrepareAuraScript(spell_hun_misdirection); - class spell_hun_misdirection_AuraScript : public AuraScript - { - PrepareAuraScript(spell_hun_misdirection_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_HUNTER_MISDIRECTION_PROC }); - } - - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_DEFAULT || GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_INTERRUPT) - return; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_HUNTER_MISDIRECTION_PROC }); + } - if (!GetTarget()->HasAura(SPELL_HUNTER_MISDIRECTION_PROC)) - GetTarget()->GetThreatManager().UnregisterRedirectThreat(SPELL_HUNTER_MISDIRECTION); - } + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_DEFAULT || GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_INTERRUPT) + return; - void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) - { - PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_MISDIRECTION_PROC, aurEff); - } + if (!GetTarget()->HasAura(SPELL_HUNTER_MISDIRECTION_PROC)) + GetTarget()->GetThreatManager().UnregisterRedirectThreat(SPELL_HUNTER_MISDIRECTION); + } - void Register() override - { - AfterEffectRemove += AuraEffectRemoveFn(spell_hun_misdirection_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - OnEffectProc += AuraEffectProcFn(spell_hun_misdirection_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); - } - }; + void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_MISDIRECTION_PROC, aurEff); + } - AuraScript* GetAuraScript() const override - { - return new spell_hun_misdirection_AuraScript(); - } + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_hun_misdirection::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + OnEffectProc += AuraEffectProcFn(spell_hun_misdirection::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); + } }; // 35079 - Misdirection (Proc) -class spell_hun_misdirection_proc : public SpellScriptLoader +class spell_hun_misdirection_proc : public AuraScript { - public: - spell_hun_misdirection_proc() : SpellScriptLoader("spell_hun_misdirection_proc") { } + PrepareAuraScript(spell_hun_misdirection_proc); - class spell_hun_misdirection_proc_AuraScript : public AuraScript - { - PrepareAuraScript(spell_hun_misdirection_proc_AuraScript); - - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->GetThreatManager().UnregisterRedirectThreat(SPELL_HUNTER_MISDIRECTION); - } - - void Register() override - { - AfterEffectRemove += AuraEffectRemoveFn(spell_hun_misdirection_proc_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } - }; + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->GetThreatManager().UnregisterRedirectThreat(SPELL_HUNTER_MISDIRECTION); + } - AuraScript* GetAuraScript() const override - { - return new spell_hun_misdirection_proc_AuraScript(); - } + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_hun_misdirection_proc::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } }; // 2643 - Multi-Shot -class spell_hun_multi_shot : public SpellScriptLoader +class spell_hun_multi_shot : public SpellScript { - public: - spell_hun_multi_shot() : SpellScriptLoader("spell_hun_multi_shot") { } - - class spell_hun_multi_shot_SpellScript : public SpellScript - { - PrepareSpellScript(spell_hun_multi_shot_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_HUNTER_MULTI_SHOT_FOCUS }); - } + PrepareSpellScript(spell_hun_multi_shot); - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_HUNTER_MULTI_SHOT_FOCUS }); + } - void HandleOnHit() - { - // We need to check hunter's spec because it doesn't generate focus on other specs than MM - if (GetCaster()->ToPlayer()->GetPrimarySpecialization() == TALENT_SPEC_HUNTER_MARKSMAN) - GetCaster()->CastSpell(GetCaster(), SPELL_HUNTER_MULTI_SHOT_FOCUS, true); - } + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } - void Register() override - { - OnHit += SpellHitFn(spell_hun_multi_shot_SpellScript::HandleOnHit); - } - }; + void HandleOnHit() + { + // We need to check hunter's spec because it doesn't generate focus on other specs than MM + if (GetCaster()->ToPlayer()->GetPrimarySpecialization() == TALENT_SPEC_HUNTER_MARKSMAN) + GetCaster()->CastSpell(GetCaster(), SPELL_HUNTER_MULTI_SHOT_FOCUS, true); + } - SpellScript* GetSpellScript() const override - { - return new spell_hun_multi_shot_SpellScript(); - } + void Register() override + { + OnHit += SpellHitFn(spell_hun_multi_shot::HandleOnHit); + } }; // 55709 - Pet Heart of the Phoenix -class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader +class spell_hun_pet_heart_of_the_phoenix : public SpellScript { - public: - spell_hun_pet_heart_of_the_phoenix() : SpellScriptLoader("spell_hun_pet_heart_of_the_phoenix") { } - - class spell_hun_pet_heart_of_the_phoenix_SpellScript : public SpellScript - { - PrepareSpellScript(spell_hun_pet_heart_of_the_phoenix_SpellScript); + PrepareSpellScript(spell_hun_pet_heart_of_the_phoenix); - bool Load() override - { - if (!GetCaster()->IsPet()) - return false; - return true; - } - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF }); - } + bool Load() override + { + if (!GetCaster()->IsPet()) + return false; + return true; + } - void HandleScript(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - if (Unit* owner = caster->GetOwner()) - { - if (!caster->HasAura(SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF)) - { - CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.AddSpellBP0(100); - owner->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, args); - caster->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF, true); - } - } - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF }); + } - void Register() override + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + if (Unit* owner = caster->GetOwner()) + { + if (!caster->HasAura(SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF)) { - OnEffectHitTarget += SpellEffectFn(spell_hun_pet_heart_of_the_phoenix_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.AddSpellBP0(100); + owner->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, args); + caster->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF, true); } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_hun_pet_heart_of_the_phoenix_SpellScript(); } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_hun_pet_heart_of_the_phoenix::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } }; // 53480 - Roar of Sacrifice -class spell_hun_roar_of_sacrifice : public SpellScriptLoader +class spell_hun_roar_of_sacrifice : public AuraScript { - public: - spell_hun_roar_of_sacrifice() : SpellScriptLoader("spell_hun_roar_of_sacrifice") { } - - class spell_hun_roar_of_sacrifice_AuraScript : public AuraScript - { - PrepareAuraScript(spell_hun_roar_of_sacrifice_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_ROAR_OF_SACRIFICE_TRIGGERED }); - } + PrepareAuraScript(spell_hun_roar_of_sacrifice); - bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - DamageInfo* damageInfo = eventInfo.GetDamageInfo(); - if (!damageInfo || !(damageInfo->GetSchoolMask() & aurEff->GetMiscValue())) - return false; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ROAR_OF_SACRIFICE_TRIGGERED }); + } - if (!GetCaster()) - return false; + bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + DamageInfo* damageInfo = eventInfo.GetDamageInfo(); + if (!damageInfo || !(damageInfo->GetSchoolMask() & aurEff->GetMiscValue())) + return false; - return true; - } + if (!GetCaster()) + return false; - void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); + return true; + } - CastSpellExtraArgs args(aurEff); - args.AddSpellBP0(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount())); - eventInfo.GetActor()->CastSpell(GetCaster(), SPELL_ROAR_OF_SACRIFICE_TRIGGERED, args); - } + void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); - void Register() override - { - DoCheckEffectProc += AuraCheckEffectProcFn(spell_hun_roar_of_sacrifice_AuraScript::CheckProc, EFFECT_1, SPELL_AURA_DUMMY); - OnEffectProc += AuraEffectProcFn(spell_hun_roar_of_sacrifice_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); - } - }; + CastSpellExtraArgs args(aurEff); + args.AddSpellBP0(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount())); + eventInfo.GetActor()->CastSpell(GetCaster(), SPELL_ROAR_OF_SACRIFICE_TRIGGERED, args); + } - AuraScript* GetAuraScript() const override - { - return new spell_hun_roar_of_sacrifice_AuraScript(); - } + void Register() override + { + DoCheckEffectProc += AuraCheckEffectProcFn(spell_hun_roar_of_sacrifice::CheckProc, EFFECT_1, SPELL_AURA_DUMMY); + OnEffectProc += AuraEffectProcFn(spell_hun_roar_of_sacrifice::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); + } }; // 37506 - Scatter Shot -class spell_hun_scatter_shot : public SpellScriptLoader +class spell_hun_scatter_shot : public SpellScript { - public: - spell_hun_scatter_shot() : SpellScriptLoader("spell_hun_scatter_shot") { } - - class spell_hun_scatter_shot_SpellScript : public SpellScript - { - PrepareSpellScript(spell_hun_scatter_shot_SpellScript); + PrepareSpellScript(spell_hun_scatter_shot); - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Player* caster = GetCaster()->ToPlayer(); - // break Auto Shot and autohit - caster->InterruptSpell(CURRENT_AUTOREPEAT_SPELL); - caster->AttackStop(); - caster->SendAttackSwingCancelAttack(); - } + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_hun_scatter_shot_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Player* caster = GetCaster()->ToPlayer(); + // break Auto Shot and autohit + caster->InterruptSpell(CURRENT_AUTOREPEAT_SPELL); + caster->AttackStop(); + caster->SendAttackSwingCancelAttack(); + } - SpellScript* GetSpellScript() const override - { - return new spell_hun_scatter_shot_SpellScript(); - } + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_hun_scatter_shot::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } }; // 56641 - Steady Shot -class spell_hun_steady_shot : public SpellScriptLoader +class spell_hun_steady_shot : public SpellScript { - public: - spell_hun_steady_shot() : SpellScriptLoader("spell_hun_steady_shot") { } + PrepareSpellScript(spell_hun_steady_shot); - class spell_hun_steady_shot_SpellScript : public SpellScript - { - PrepareSpellScript(spell_hun_steady_shot_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_HUNTER_STEADY_SHOT_FOCUS }); - } - - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_HUNTER_STEADY_SHOT_FOCUS }); + } - void HandleOnHit() - { - GetCaster()->CastSpell(GetCaster(), SPELL_HUNTER_STEADY_SHOT_FOCUS, true); - } + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } - void Register() override - { - OnHit += SpellHitFn(spell_hun_steady_shot_SpellScript::HandleOnHit); - } - }; + void HandleOnHit() + { + GetCaster()->CastSpell(GetCaster(), SPELL_HUNTER_STEADY_SHOT_FOCUS, true); + } - SpellScript* GetSpellScript() const override - { - return new spell_hun_steady_shot_SpellScript(); - } + void Register() override + { + OnHit += SpellHitFn(spell_hun_steady_shot::HandleOnHit); + } }; // 1515 - Tame Beast -class spell_hun_tame_beast : public SpellScriptLoader +class spell_hun_tame_beast : public SpellScript { - public: - spell_hun_tame_beast() : SpellScriptLoader("spell_hun_tame_beast") { } + PrepareSpellScript(spell_hun_tame_beast); + + static constexpr uint32 CallPetSpellIds[MAX_ACTIVE_PETS] = + { + 883, + 83242, + 83243, + 83244, + 83245, + }; + + SpellCastResult CheckCast() + { + Player* caster = GetCaster()->ToPlayer(); + if (!caster) + return SPELL_FAILED_DONT_REPORT; + + if (!GetExplTargetUnit()) + return SPELL_FAILED_BAD_IMPLICIT_TARGETS; - class spell_hun_tame_beast_SpellScript : public SpellScript + if (Creature* target = GetExplTargetUnit()->ToCreature()) { - PrepareSpellScript(spell_hun_tame_beast_SpellScript); + if (target->GetLevel() > caster->GetLevel()) + return SPELL_FAILED_HIGHLEVEL; - static constexpr uint32 CallPetSpellIds[MAX_ACTIVE_PETS] = - { - 883, - 83242, - 83243, - 83244, - 83245, - }; - - SpellCastResult CheckCast() + // use SMSG_PET_TAME_FAILURE? + if (!target->GetCreatureTemplate()->IsTameable(caster->CanTameExoticPets())) + return SPELL_FAILED_BAD_TARGETS; + + if (PetStable const* petStable = caster->GetPetStable()) { - Player* caster = GetCaster()->ToPlayer(); - if (!caster) - return SPELL_FAILED_DONT_REPORT; + if (petStable->CurrentPetIndex) + return SPELL_FAILED_ALREADY_HAVE_SUMMON; - if (!GetExplTargetUnit()) - return SPELL_FAILED_BAD_IMPLICIT_TARGETS; + auto freeSlotItr = std::find_if(petStable->ActivePets.begin(), petStable->ActivePets.end(), [](Optional<PetStable::PetInfo> const& petInfo) + { + return !petInfo.has_value(); + }); - if (Creature* target = GetExplTargetUnit()->ToCreature()) + if (freeSlotItr == petStable->ActivePets.end()) { - if (target->GetLevel() > caster->GetLevel()) - return SPELL_FAILED_HIGHLEVEL; - - // use SMSG_PET_TAME_FAILURE? - if (!target->GetCreatureTemplate()->IsTameable(caster->CanTameExoticPets())) - return SPELL_FAILED_BAD_TARGETS; - - if (PetStable const* petStable = caster->GetPetStable()) - { - if (petStable->CurrentPetIndex) - return SPELL_FAILED_ALREADY_HAVE_SUMMON; - - auto freeSlotItr = std::find_if(petStable->ActivePets.begin(), petStable->ActivePets.end(), [](Optional<PetStable::PetInfo> const& petInfo) - { - return !petInfo.has_value(); - }); - - if (freeSlotItr == petStable->ActivePets.end()) - { - caster->SendTameFailure(PetTameResult::TooMany); - return SPELL_FAILED_DONT_REPORT; - } - - // Check for known Call Pet X spells - std::size_t freeSlotIndex = std::distance(petStable->ActivePets.begin(), freeSlotItr); - if (!caster->HasSpell(CallPetSpellIds[freeSlotIndex])) - { - caster->SendTameFailure(PetTameResult::TooMany); - return SPELL_FAILED_DONT_REPORT; - } - } - - if (!caster->GetCharmedGUID().IsEmpty()) - return SPELL_FAILED_ALREADY_HAVE_CHARM; + caster->SendTameFailure(PetTameResult::TooMany); + return SPELL_FAILED_DONT_REPORT; } - else - return SPELL_FAILED_BAD_IMPLICIT_TARGETS; - - return SPELL_CAST_OK; - } - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_hun_tame_beast_SpellScript::CheckCast); + // Check for known Call Pet X spells + std::size_t freeSlotIndex = std::distance(petStable->ActivePets.begin(), freeSlotItr); + if (!caster->HasSpell(CallPetSpellIds[freeSlotIndex])) + { + caster->SendTameFailure(PetTameResult::TooMany); + return SPELL_FAILED_DONT_REPORT; + } } - }; - SpellScript* GetSpellScript() const override - { - return new spell_hun_tame_beast_SpellScript(); + if (!caster->GetCharmedGUID().IsEmpty()) + return SPELL_FAILED_ALREADY_HAVE_CHARM; } + else + return SPELL_FAILED_BAD_IMPLICIT_TARGETS; + + return SPELL_CAST_OK; + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_hun_tame_beast::CheckCast); + } }; // 67151 - Item - Hunter T9 4P Bonus (Steady Shot) -class spell_hun_t9_4p_bonus : public SpellScriptLoader +class spell_hun_t9_4p_bonus : public AuraScript { -public: - spell_hun_t9_4p_bonus() : SpellScriptLoader("spell_hun_t9_4p_bonus") { } + PrepareAuraScript(spell_hun_t9_4p_bonus); - class spell_hun_t9_4p_bonus_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_hun_t9_4p_bonus_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_HUNTER_T9_4P_GREATNESS }); - } - - bool CheckProc(ProcEventInfo& eventInfo) - { - if (eventInfo.GetActor()->GetTypeId() == TYPEID_PLAYER && eventInfo.GetActor()->ToPlayer()->GetPet()) - return true; - return false; - } + return ValidateSpellInfo({ SPELL_HUNTER_T9_4P_GREATNESS }); + } - void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - Unit* caster = eventInfo.GetActor(); + bool CheckProc(ProcEventInfo& eventInfo) + { + if (eventInfo.GetActor()->GetTypeId() == TYPEID_PLAYER && eventInfo.GetActor()->ToPlayer()->GetPet()) + return true; + return false; + } - caster->CastSpell(caster->ToPlayer()->GetPet(), SPELL_HUNTER_T9_4P_GREATNESS, aurEff); - } + void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + Unit* caster = eventInfo.GetActor(); - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_hun_t9_4p_bonus_AuraScript::CheckProc); - OnEffectProc += AuraEffectProcFn(spell_hun_t9_4p_bonus_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); - } - }; + caster->CastSpell(caster->ToPlayer()->GetPet(), SPELL_HUNTER_T9_4P_GREATNESS, aurEff); + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_hun_t9_4p_bonus_AuraScript(); + DoCheckProc += AuraCheckProcFn(spell_hun_t9_4p_bonus::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_hun_t9_4p_bonus::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; void AddSC_hunter_spell_scripts() { RegisterSpellScript(spell_hun_a_murder_of_crows); - new spell_hun_aspect_cheetah(); - new spell_hun_exhilaration(); - new spell_hun_hunting_party(); - new spell_hun_last_stand_pet(); - new spell_hun_masters_call(); - new spell_hun_misdirection(); - new spell_hun_misdirection_proc(); - new spell_hun_multi_shot(); - new spell_hun_pet_heart_of_the_phoenix(); - new spell_hun_roar_of_sacrifice(); - new spell_hun_scatter_shot(); - new spell_hun_steady_shot(); - new spell_hun_tame_beast(); - new spell_hun_t9_4p_bonus(); + RegisterSpellScript(spell_hun_aspect_cheetah); + RegisterSpellScript(spell_hun_exhilaration); + RegisterSpellScript(spell_hun_hunting_party); + RegisterSpellScript(spell_hun_last_stand_pet); + RegisterSpellScript(spell_hun_masters_call); + RegisterSpellScript(spell_hun_misdirection); + RegisterSpellScript(spell_hun_misdirection_proc); + RegisterSpellScript(spell_hun_multi_shot); + RegisterSpellScript(spell_hun_pet_heart_of_the_phoenix); + RegisterSpellScript(spell_hun_roar_of_sacrifice); + RegisterSpellScript(spell_hun_scatter_shot); + RegisterSpellScript(spell_hun_steady_shot); + RegisterSpellScript(spell_hun_tame_beast); + RegisterSpellScript(spell_hun_t9_4p_bonus); } |