summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp1153
1 files changed, 445 insertions, 708 deletions
diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp
index 98c816dc22..473fd17717 100644
--- a/src/server/scripts/Spells/spell_warrior.cpp
+++ b/src/server/scripts/Spells/spell_warrior.cpp
@@ -75,32 +75,20 @@ enum MiscSpells
SPELL_GEN_DAMAGE_REDUCTION_AURA = 68066,
};
-// Ours
-class spell_warr_mocking_blow : public SpellScriptLoader
+class spell_warr_mocking_blow : public SpellScript
{
-public:
- spell_warr_mocking_blow() : SpellScriptLoader("spell_warr_mocking_blow") { }
+ PrepareSpellScript(spell_warr_mocking_blow);
- class spell_warr_mocking_blow_SpellScript : public SpellScript
+ void HandleOnHit()
{
- PrepareSpellScript(spell_warr_mocking_blow_SpellScript);
-
- void HandleOnHit()
- {
- if (Unit* target = GetHitUnit())
- if (target->IsImmunedToSpellEffect(GetSpellInfo(), EFFECT_1))
- SetHitDamage(0);
- }
-
- void Register() override
- {
- OnHit += SpellHitFn(spell_warr_mocking_blow_SpellScript::HandleOnHit);
- }
- };
+ if (Unit* target = GetHitUnit())
+ if (target->IsImmunedToSpellEffect(GetSpellInfo(), EFFECT_1))
+ SetHitDamage(0);
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_mocking_blow_SpellScript();
+ OnHit += SpellHitFn(spell_warr_mocking_blow::HandleOnHit);
}
};
@@ -109,971 +97,720 @@ enum VictoryRushEnum
SPELL_VICTORIOUS = 32216
};
-class spell_warr_victory_rush : public SpellScriptLoader
+class spell_warr_victory_rush : public SpellScript
{
-public:
- spell_warr_victory_rush() : SpellScriptLoader("spell_warr_victory_rush") { }
+ PrepareSpellScript(spell_warr_victory_rush);
- class spell_warr_victory_rush_SpellScript : public SpellScript
+ void VictoryRushHit()
{
- PrepareSpellScript(spell_warr_victory_rush_SpellScript);
-
- void VictoryRushHit()
+ if (Unit* player = GetCaster())
{
- if (Unit* player = GetCaster())
+ if (Unit* victim = GetHitUnit())
{
- if (Unit* victim = GetHitUnit())
+ if (victim->isDead())
{
- if (victim->isDead())
- {
- player->CastSpell(player, SPELL_VICTORIOUS, true);
- }
+ player->CastSpell(player, SPELL_VICTORIOUS, true);
}
}
}
+ }
- void Register() override
- {
- AfterHit += SpellHitFn(spell_warr_victory_rush_SpellScript::VictoryRushHit);
- }
- };
-
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_victory_rush_SpellScript();
+ AfterHit += SpellHitFn(spell_warr_victory_rush::VictoryRushHit);
}
};
-class spell_warr_intervene : public SpellScriptLoader
+class spell_warr_intervene : public SpellScript
{
-public:
- spell_warr_intervene() : SpellScriptLoader("spell_warr_intervene") { }
+ PrepareSpellScript(spell_warr_intervene);
- class spell_warr_intervene_SpellScript : public SpellScript
+ void HandleApplyAura(SpellEffIndex /*effIndex*/)
{
- PrepareSpellScript(spell_warr_intervene_SpellScript);
-
- void HandleApplyAura(SpellEffIndex /*effIndex*/)
- {
- if (Unit* target = GetHitUnit())
- target->CastSpell((Unit*)nullptr, SPELL_WARRIOR_INTERVENE_TRIGGER, true);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_warr_intervene_SpellScript::HandleApplyAura, EFFECT_1, SPELL_EFFECT_APPLY_AURA);
- }
- };
+ if (Unit* target = GetHitUnit())
+ target->CastSpell((Unit*)nullptr, SPELL_WARRIOR_INTERVENE_TRIGGER, true);
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_intervene_SpellScript();
+ OnEffectHitTarget += SpellEffectFn(spell_warr_intervene::HandleApplyAura, EFFECT_1, SPELL_EFFECT_APPLY_AURA);
}
};
-class spell_warr_improved_spell_reflection : public SpellScriptLoader
+class spell_warr_improved_spell_reflection : public AuraScript
{
-public:
- spell_warr_improved_spell_reflection() : SpellScriptLoader("spell_warr_improved_spell_reflection") { }
+ PrepareAuraScript(spell_warr_improved_spell_reflection);
- class spell_warr_improved_spell_reflection_AuraScript : public AuraScript
+ bool CheckProc(ProcEventInfo& eventInfo)
{
- PrepareAuraScript(spell_warr_improved_spell_reflection_AuraScript);
-
- bool CheckProc(ProcEventInfo& eventInfo)
- {
- return eventInfo.GetSpellInfo() && eventInfo.GetSpellInfo()->Id == SPELL_WARRIOR_SPELL_REFLECTION;
- }
-
- void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
- {
- PreventDefaultAction();
- CustomSpellValues values;
- values.AddSpellMod(SPELLVALUE_MAX_TARGETS, aurEff->GetAmount());
- values.AddSpellMod(SPELLVALUE_RADIUS_MOD, 2000); // Base range = 100, final range = 20 value / 10000.0f = 0.2f
- eventInfo.GetActor()->CastCustomSpell(SPELL_WARRIOR_IMPROVED_SPELL_REFLECTION_TRIGGER, values, eventInfo.GetActor(), TRIGGERED_FULL_MASK, nullptr);
- }
+ return eventInfo.GetSpellInfo() && eventInfo.GetSpellInfo()->Id == SPELL_WARRIOR_SPELL_REFLECTION;
+ }
- void Register() override
- {
- DoCheckProc += AuraCheckProcFn(spell_warr_improved_spell_reflection_AuraScript::CheckProc);
- OnEffectProc += AuraEffectProcFn(spell_warr_improved_spell_reflection_AuraScript::OnProc, EFFECT_1, SPELL_AURA_DUMMY);
- }
- };
+ void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ PreventDefaultAction();
+ CustomSpellValues values;
+ values.AddSpellMod(SPELLVALUE_MAX_TARGETS, aurEff->GetAmount());
+ values.AddSpellMod(SPELLVALUE_RADIUS_MOD, 2000); // Base range = 100, final range = 20 value / 10000.0f = 0.2f
+ eventInfo.GetActor()->CastCustomSpell(SPELL_WARRIOR_IMPROVED_SPELL_REFLECTION_TRIGGER, values, eventInfo.GetActor(), TRIGGERED_FULL_MASK, nullptr);
+ }
- AuraScript* GetAuraScript() const override
+ void Register() override
{
- return new spell_warr_improved_spell_reflection_AuraScript();
+ DoCheckProc += AuraCheckProcFn(spell_warr_improved_spell_reflection::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_warr_improved_spell_reflection::OnProc, EFFECT_1, SPELL_AURA_DUMMY);
}
};
-class spell_warr_improved_spell_reflection_trigger : public SpellScriptLoader
+class spell_warr_improved_spell_reflection_trigger : public SpellScript
{
-public:
- spell_warr_improved_spell_reflection_trigger() : SpellScriptLoader("spell_warr_improved_spell_reflection_trigger") { }
+ PrepareSpellScript(spell_warr_improved_spell_reflection_trigger);
- class spell_warr_improved_spell_reflection_trigger_SpellScript : public SpellScript
+ void FilterTargets(std::list<WorldObject*>& unitList)
{
- PrepareSpellScript(spell_warr_improved_spell_reflection_trigger_SpellScript);
-
- void FilterTargets(std::list<WorldObject*>& unitList)
- {
- GetCaster()->RemoveAurasDueToSpell(SPELL_WARRIOR_SPELL_REFLECTION);
- unitList.sort(Acore::ObjectDistanceOrderPred(GetCaster()));
- while (unitList.size() > GetSpellValue()->MaxAffectedTargets)
- unitList.pop_back();
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_improved_spell_reflection_trigger_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY);
- }
- };
+ GetCaster()->RemoveAurasDueToSpell(SPELL_WARRIOR_SPELL_REFLECTION);
+ unitList.sort(Acore::ObjectDistanceOrderPred(GetCaster()));
+ while (unitList.size() > GetSpellValue()->MaxAffectedTargets)
+ unitList.pop_back();
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_improved_spell_reflection_trigger_SpellScript();
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_improved_spell_reflection_trigger::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY);
}
+};
- class spell_warr_improved_spell_reflection_trigger_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_warr_improved_spell_reflection_trigger_AuraScript);
+class spell_warr_improved_spell_reflection_trigger_aura : public AuraScript
+{
+ PrepareAuraScript(spell_warr_improved_spell_reflection_trigger_aura);
- void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (!IsExpired())
{
- if (!IsExpired())
+ // aura remove - remove auras from all party members
+ std::list<Unit*> PartyMembers;
+ GetUnitOwner()->GetPartyMembers(PartyMembers);
+ for (std::list<Unit*>::iterator itr = PartyMembers.begin(); itr != PartyMembers.end(); ++itr)
{
- // aura remove - remove auras from all party members
- std::list<Unit*> PartyMembers;
- GetUnitOwner()->GetPartyMembers(PartyMembers);
- for (std::list<Unit*>::iterator itr = PartyMembers.begin(); itr != PartyMembers.end(); ++itr)
- {
- if ((*itr)->GetGUID() != GetOwner()->GetGUID())
- if (Aura* aur = (*itr)->GetAura(59725, GetCasterGUID()))
- {
- aur->SetDuration(0);
- aur->Remove();
- }
- }
+ if ((*itr)->GetGUID() != GetOwner()->GetGUID())
+ if (Aura* aur = (*itr)->GetAura(59725, GetCasterGUID()))
+ {
+ aur->SetDuration(0);
+ aur->Remove();
+ }
}
}
+ }
- void Register() override
- {
- AfterEffectRemove += AuraEffectRemoveFn(spell_warr_improved_spell_reflection_trigger_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_REFLECT_SPELLS, AURA_EFFECT_HANDLE_REAL);
- }
- };
-
- AuraScript* GetAuraScript() const override
+ void Register() override
{
- return new spell_warr_improved_spell_reflection_trigger_AuraScript();
+ AfterEffectRemove += AuraEffectRemoveFn(spell_warr_improved_spell_reflection_trigger_aura::HandleRemove, EFFECT_0, SPELL_AURA_REFLECT_SPELLS, AURA_EFFECT_HANDLE_REAL);
}
};
-// Theirs
// 12975 - Last Stand
-class spell_warr_last_stand : public SpellScriptLoader
+class spell_warr_last_stand : public SpellScript
{
-public:
- spell_warr_last_stand() : SpellScriptLoader("spell_warr_last_stand") { }
+ PrepareSpellScript(spell_warr_last_stand);
- class spell_warr_last_stand_SpellScript : public SpellScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- PrepareSpellScript(spell_warr_last_stand_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_WARRIOR_LAST_STAND_TRIGGERED });
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- Unit* caster = GetCaster();
- int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(GetEffectValue()));
- caster->CastCustomSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, nullptr, nullptr, true, nullptr);
- }
+ return ValidateSpellInfo({ SPELL_WARRIOR_LAST_STAND_TRIGGERED });
+ }
- void Register() override
- {
- OnEffectHit += SpellEffectFn(spell_warr_last_stand_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(GetEffectValue()));
+ caster->CastCustomSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, nullptr, nullptr, true, nullptr);
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_last_stand_SpellScript();
+ OnEffectHit += SpellEffectFn(spell_warr_last_stand::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
// -12162 - Deep Wounds
-class spell_warr_deep_wounds : public SpellScriptLoader
+class spell_warr_deep_wounds : public SpellScript
{
-public:
- spell_warr_deep_wounds() : SpellScriptLoader("spell_warr_deep_wounds") { }
+ PrepareSpellScript(spell_warr_deep_wounds);
- class spell_warr_deep_wounds_SpellScript : public SpellScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- PrepareSpellScript(spell_warr_deep_wounds_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo(
- {
- SPELL_WARRIOR_DEEP_WOUNDS_RANK_1,
- SPELL_WARRIOR_DEEP_WOUNDS_RANK_2,
- SPELL_WARRIOR_DEEP_WOUNDS_RANK_3
- });
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- int32 damage = std::max(GetEffectValue(), 0);
- Unit* caster = GetCaster();
- if (Unit* target = GetHitUnit())
+ return ValidateSpellInfo(
{
- // include target dependant auras
- damage = target->MeleeDamageBonusTaken(caster, damage, BASE_ATTACK, GetSpellInfo());
- // apply percent damage mods
- ApplyPct(damage, 16.0f * GetSpellInfo()->GetRank() / 6.0f);
- target->CastDelayedSpellWithPeriodicAmount(caster, SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, SPELL_AURA_PERIODIC_DAMAGE, damage, EFFECT_0);
-
- //caster->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, &damage, nullptr, nullptr, true);
- }
- }
+ SPELL_WARRIOR_DEEP_WOUNDS_RANK_1,
+ SPELL_WARRIOR_DEEP_WOUNDS_RANK_2,
+ SPELL_WARRIOR_DEEP_WOUNDS_RANK_3
+ });
+ }
- void Register() override
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ int32 damage = std::max(GetEffectValue(), 0);
+ Unit* caster = GetCaster();
+ if (Unit* target = GetHitUnit())
{
- OnEffectHitTarget += SpellEffectFn(spell_warr_deep_wounds_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ // include target dependant auras
+ damage = target->MeleeDamageBonusTaken(caster, damage, BASE_ATTACK, GetSpellInfo());
+ // apply percent damage mods
+ ApplyPct(damage, 16.0f * GetSpellInfo()->GetRank() / 6.0f);
+ target->CastDelayedSpellWithPeriodicAmount(caster, SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, SPELL_AURA_PERIODIC_DAMAGE, damage, EFFECT_0);
+
+ //caster->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, &damage, nullptr, nullptr, true);
}
- };
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_deep_wounds_SpellScript();
+ OnEffectHitTarget += SpellEffectFn(spell_warr_deep_wounds::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
// -100 - Charge
-class spell_warr_charge : public SpellScriptLoader
+class spell_warr_charge : public SpellScript
{
-public:
- spell_warr_charge() : SpellScriptLoader("spell_warr_charge") { }
+ PrepareSpellScript(spell_warr_charge);
- class spell_warr_charge_SpellScript : public SpellScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- PrepareSpellScript(spell_warr_charge_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo(
- {
- SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT,
- SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF,
- SPELL_WARRIOR_CHARGE
- });
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- int32 chargeBasePoints0 = GetEffectValue();
- Unit* caster = GetCaster();
- caster->CastCustomSpell(caster, SPELL_WARRIOR_CHARGE, &chargeBasePoints0, nullptr, nullptr, true);
+ return ValidateSpellInfo(
+ {
+ SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT,
+ SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF,
+ SPELL_WARRIOR_CHARGE
+ });
+ }
- // Juggernaut crit bonus
- if (caster->HasAura(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT))
- caster->CastSpell(caster, SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF, true);
- }
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ int32 chargeBasePoints0 = GetEffectValue();
+ Unit* caster = GetCaster();
+ caster->CastCustomSpell(caster, SPELL_WARRIOR_CHARGE, &chargeBasePoints0, nullptr, nullptr, true);
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_warr_charge_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
- }
- };
+ // Juggernaut crit bonus
+ if (caster->HasAura(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT))
+ caster->CastSpell(caster, SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF, true);
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_charge_SpellScript();
+ OnEffectHitTarget += SpellEffectFn(spell_warr_charge::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
}
};
// -1464 - Slam
-class spell_warr_slam : public SpellScriptLoader
+class spell_warr_slam : public SpellScript
{
-public:
- spell_warr_slam() : SpellScriptLoader("spell_warr_slam") { }
+ PrepareSpellScript(spell_warr_slam);
- class spell_warr_slam_SpellScript : public SpellScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- PrepareSpellScript(spell_warr_slam_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_WARRIOR_SLAM });
- }
+ return ValidateSpellInfo({ SPELL_WARRIOR_SLAM });
+ }
- void SendMiss(SpellMissInfo missInfo)
+ void SendMiss(SpellMissInfo missInfo)
+ {
+ if (missInfo != SPELL_MISS_NONE)
{
- if (missInfo != SPELL_MISS_NONE)
+ if (Unit* caster = GetCaster())
{
- if (Unit* caster = GetCaster())
+ if (Unit* target = GetHitUnit())
{
- if (Unit* target = GetHitUnit())
- {
- caster->SendSpellMiss(target, SPELL_WARRIOR_SLAM, missInfo);
- }
+ caster->SendSpellMiss(target, SPELL_WARRIOR_SLAM, missInfo);
}
}
}
+ }
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- if (GetHitUnit())
- GetCaster()->CastCustomSpell(SPELL_WARRIOR_SLAM, SPELLVALUE_BASE_POINT0, GetEffectValue(), GetHitUnit(), TRIGGERED_FULL_MASK);
- }
-
- void Register() override
- {
- BeforeHit += BeforeSpellHitFn(spell_warr_slam_SpellScript::SendMiss);
- OnEffectHitTarget += SpellEffectFn(spell_warr_slam_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ if (GetHitUnit())
+ GetCaster()->CastCustomSpell(SPELL_WARRIOR_SLAM, SPELLVALUE_BASE_POINT0, GetEffectValue(), GetHitUnit(), TRIGGERED_FULL_MASK);
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_slam_SpellScript();
+ BeforeHit += BeforeSpellHitFn(spell_warr_slam::SendMiss);
+ OnEffectHitTarget += SpellEffectFn(spell_warr_slam::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
// -58872 - Damage Shield
-class spell_warr_damage_shield : public SpellScriptLoader
+class spell_warr_damage_shield : public AuraScript
{
-public:
- spell_warr_damage_shield() : SpellScriptLoader("spell_warr_damage_shield") { }
+ PrepareAuraScript(spell_warr_damage_shield);
- class spell_warr_damage_shield_AuraScript : public AuraScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- PrepareAuraScript(spell_warr_damage_shield_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE });
- }
-
- void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
- {
- PreventDefaultAction();
+ return ValidateSpellInfo({ SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE });
+ }
- // % of amount blocked
- int32 damage = CalculatePct(int32(GetTarget()->GetShieldBlockValue()), aurEff->GetAmount());
- GetTarget()->CastCustomSpell(SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, nullptr, aurEff);
- }
+ void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ PreventDefaultAction();
- void Register() override
- {
- OnEffectProc += AuraEffectProcFn(spell_warr_damage_shield_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
- };
+ // % of amount blocked
+ int32 damage = CalculatePct(int32(GetTarget()->GetShieldBlockValue()), aurEff->GetAmount());
+ GetTarget()->CastCustomSpell(SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ }
- AuraScript* GetAuraScript() const override
+ void Register() override
{
- return new spell_warr_damage_shield_AuraScript();
+ OnEffectProc += AuraEffectProcFn(spell_warr_damage_shield::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
// -5308 - Execute
-class spell_warr_execute : public SpellScriptLoader
+class spell_warr_execute : public SpellScript
{
-public:
- spell_warr_execute() : SpellScriptLoader("spell_warr_execute") { }
+ PrepareSpellScript(spell_warr_execute);
- class spell_warr_execute_SpellScript : public SpellScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- PrepareSpellScript(spell_warr_execute_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_WARRIOR_EXECUTE, SPELL_WARRIOR_GLYPH_OF_EXECUTION });
- }
+ return ValidateSpellInfo({ SPELL_WARRIOR_EXECUTE, SPELL_WARRIOR_GLYPH_OF_EXECUTION });
+ }
- void SendMiss(SpellMissInfo missInfo)
+ void SendMiss(SpellMissInfo missInfo)
+ {
+ if (missInfo != SPELL_MISS_NONE)
{
- if (missInfo != SPELL_MISS_NONE)
+ if (Unit* caster = GetCaster())
{
- if (Unit* caster = GetCaster())
+ if (Unit* target = GetHitUnit())
{
- if (Unit* target = GetHitUnit())
- {
- caster->SendSpellMiss(target, SPELL_WARRIOR_EXECUTE, missInfo);
- }
+ caster->SendSpellMiss(target, SPELL_WARRIOR_EXECUTE, missInfo);
}
}
}
+ }
- void HandleEffect(SpellEffIndex effIndex)
+ void HandleEffect(SpellEffIndex effIndex)
+ {
+ Unit* caster = GetCaster();
+ if (Unit* target = GetHitUnit())
{
- Unit* caster = GetCaster();
- if (Unit* target = GetHitUnit())
- {
- SpellInfo const* spellInfo = GetSpellInfo();
- int32 rageUsed = std::min<int32>(300 - spellInfo->CalcPowerCost(caster, SpellSchoolMask(spellInfo->SchoolMask)), caster->GetPower(POWER_RAGE));
- int32 newRage = std::max<int32>(0, caster->GetPower(POWER_RAGE) - rageUsed);
-
- // Sudden Death rage save
- if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_PROC_TRIGGER_SPELL, SPELLFAMILY_GENERIC, WARRIOR_ICON_ID_SUDDEN_DEATH, EFFECT_0))
- {
- int32 ragesave = aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue() * 10;
- newRage = std::max(newRage, ragesave);
- }
+ SpellInfo const* spellInfo = GetSpellInfo();
+ int32 rageUsed = std::min<int32>(300 - spellInfo->CalcPowerCost(caster, SpellSchoolMask(spellInfo->SchoolMask)), caster->GetPower(POWER_RAGE));
+ int32 newRage = std::max<int32>(0, caster->GetPower(POWER_RAGE) - rageUsed);
- caster->SetPower(POWER_RAGE, uint32(newRage));
- // Glyph of Execution bonus
- if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_WARRIOR_GLYPH_OF_EXECUTION, EFFECT_0))
- rageUsed += aurEff->GetAmount() * 10;
-
- int32 bp = GetEffectValue() + int32(rageUsed * spellInfo->Effects[effIndex].DamageMultiplier + caster->GetTotalAttackPowerValue(BASE_ATTACK) * 0.2f);
- caster->CastCustomSpell(target, SPELL_WARRIOR_EXECUTE, &bp, nullptr, nullptr, true, nullptr, nullptr, GetOriginalCaster()->GetGUID());
+ // Sudden Death rage save
+ if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_PROC_TRIGGER_SPELL, SPELLFAMILY_GENERIC, WARRIOR_ICON_ID_SUDDEN_DEATH, EFFECT_0))
+ {
+ int32 ragesave = aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue() * 10;
+ newRage = std::max(newRage, ragesave);
}
- }
- void Register() override
- {
- BeforeHit += BeforeSpellHitFn(spell_warr_execute_SpellScript::SendMiss);
- OnEffectHitTarget += SpellEffectFn(spell_warr_execute_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_DUMMY);
+ caster->SetPower(POWER_RAGE, uint32(newRage));
+ // Glyph of Execution bonus
+ if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_WARRIOR_GLYPH_OF_EXECUTION, EFFECT_0))
+ rageUsed += aurEff->GetAmount() * 10;
+
+ int32 bp = GetEffectValue() + int32(rageUsed * spellInfo->Effects[effIndex].DamageMultiplier + caster->GetTotalAttackPowerValue(BASE_ATTACK) * 0.2f);
+ caster->CastCustomSpell(target, SPELL_WARRIOR_EXECUTE, &bp, nullptr, nullptr, true, nullptr, nullptr, GetOriginalCaster()->GetGUID());
}
- };
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_execute_SpellScript();
+ BeforeHit += BeforeSpellHitFn(spell_warr_execute::SendMiss);
+ OnEffectHitTarget += SpellEffectFn(spell_warr_execute::HandleEffect, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
// 12809 - Concussion Blow
-class spell_warr_concussion_blow : public SpellScriptLoader
+class spell_warr_concussion_blow : public SpellScript
{
-public:
- spell_warr_concussion_blow() : SpellScriptLoader("spell_warr_concussion_blow") { }
+ PrepareSpellScript(spell_warr_concussion_blow);
- class spell_warr_concussion_blow_SpellScript : public SpellScript
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
- PrepareSpellScript(spell_warr_concussion_blow_SpellScript);
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- SetHitDamage(CalculatePct(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetEffectValue()));
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_warr_concussion_blow_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY);
- }
- };
+ SetHitDamage(CalculatePct(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetEffectValue()));
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_concussion_blow_SpellScript();
+ OnEffectHitTarget += SpellEffectFn(spell_warr_concussion_blow::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY);
}
};
// 23881 - Bloodthirst
-class spell_warr_bloodthirst : public SpellScriptLoader
+class spell_warr_bloodthirst : public SpellScript
{
-public:
- spell_warr_bloodthirst() : SpellScriptLoader("spell_warr_bloodthirst") { }
+ PrepareSpellScript(spell_warr_bloodthirst);
- class spell_warr_bloodthirst_SpellScript : public SpellScript
+ void HandleDamage(SpellEffIndex /*effIndex*/)
{
- PrepareSpellScript(spell_warr_bloodthirst_SpellScript);
+ int32 damage = GetEffectValue();
+ ApplyPct(damage, GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK));
- void HandleDamage(SpellEffIndex /*effIndex*/)
+ if (Unit* target = GetHitUnit())
{
- int32 damage = GetEffectValue();
- ApplyPct(damage, GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK));
-
- if (Unit* target = GetHitUnit())
- {
- damage = GetCaster()->SpellDamageBonusDone(target, GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE);
- damage = target->SpellDamageBonusTaken(GetCaster(), GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE);
- }
- SetHitDamage(damage);
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- int32 damage = GetEffectValue();
- GetCaster()->CastCustomSpell(GetCaster(), SPELL_WARRIOR_BLOODTHIRST, &damage, nullptr, nullptr, true, nullptr);
+ damage = GetCaster()->SpellDamageBonusDone(target, GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE);
+ damage = target->SpellDamageBonusTaken(GetCaster(), GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE);
}
+ SetHitDamage(damage);
+ }
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
- OnEffectHit += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
- }
- };
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ int32 damage = GetEffectValue();
+ GetCaster()->CastCustomSpell(GetCaster(), SPELL_WARRIOR_BLOODTHIRST, &damage, nullptr, nullptr, true, nullptr);
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_bloodthirst_SpellScript();
+ OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ OnEffectHit += SpellEffectFn(spell_warr_bloodthirst::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
}
};
// 23880 - Bloodthirst (Heal)
-class spell_warr_bloodthirst_heal : public SpellScriptLoader
+class spell_warr_bloodthirst_heal : public SpellScript
{
-public:
- spell_warr_bloodthirst_heal() : SpellScriptLoader("spell_warr_bloodthirst_heal") { }
+ PrepareSpellScript(spell_warr_bloodthirst_heal);
- class spell_warr_bloodthirst_heal_SpellScript : public SpellScript
+ void HandleHeal(SpellEffIndex /*effIndex*/)
{
- PrepareSpellScript(spell_warr_bloodthirst_heal_SpellScript);
-
- void HandleHeal(SpellEffIndex /*effIndex*/)
- {
- if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARRIOR_BLOODTHIRST_DAMAGE))
- SetHitHeal(GetCaster()->CountPctFromMaxHealth(spellInfo->Effects[EFFECT_1].CalcValue(GetCaster())));
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);
- }
- };
+ if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARRIOR_BLOODTHIRST_DAMAGE))
+ SetHitHeal(GetCaster()->CountPctFromMaxHealth(spellInfo->Effects[EFFECT_1].CalcValue(GetCaster())));
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_bloodthirst_heal_SpellScript();
+ OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_heal::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);
}
};
// 7384, 7887, 11584, 11585 - Overpower
-class spell_warr_overpower : public SpellScriptLoader
+class spell_warr_overpower : public SpellScript
{
-public:
- spell_warr_overpower() : SpellScriptLoader("spell_warr_overpower") { }
+ PrepareSpellScript(spell_warr_overpower);
- class spell_warr_overpower_SpellScript : public SpellScript
+ void HandleEffect(SpellEffIndex /*effIndex*/)
{
- PrepareSpellScript(spell_warr_overpower_SpellScript);
+ uint32 spellId = 0;
+ if (GetCaster()->HasAura(SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_1))
+ spellId = SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_1;
+ else if (GetCaster()->HasAura(SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_2))
+ spellId = SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_2;
- void HandleEffect(SpellEffIndex /*effIndex*/)
- {
- uint32 spellId = 0;
- if (GetCaster()->HasAura(SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_1))
- spellId = SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_1;
- else if (GetCaster()->HasAura(SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_2))
- spellId = SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_2;
-
- if (!spellId)
- return;
-
- if (Player* target = GetHitPlayer())
- if (target->HasUnitState(UNIT_STATE_CASTING))
- target->CastSpell(target, spellId, true, 0, 0, GetCaster()->GetGUID());
- }
+ if (!spellId)
+ return;
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_warr_overpower_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_ANY);
- }
- };
+ if (Player* target = GetHitPlayer())
+ if (target->HasUnitState(UNIT_STATE_CASTING))
+ target->CastSpell(target, spellId, true, 0, 0, GetCaster()->GetGUID());
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_overpower_SpellScript();
+ OnEffectHitTarget += SpellEffectFn(spell_warr_overpower::HandleEffect, EFFECT_0, SPELL_EFFECT_ANY);
}
};
// 5246 - Intimidating Shout
-class spell_warr_intimidating_shout : public SpellScriptLoader
+class spell_warr_intimidating_shout : public SpellScript
{
-public:
- spell_warr_intimidating_shout() : SpellScriptLoader("spell_warr_intimidating_shout") { }
+ PrepareSpellScript(spell_warr_intimidating_shout);
- class spell_warr_intimidating_shout_SpellScript : public SpellScript
+ void FilterTargets(std::list<WorldObject*>& unitList)
{
- PrepareSpellScript(spell_warr_intimidating_shout_SpellScript);
-
- void FilterTargets(std::list<WorldObject*>& unitList)
- {
- unitList.remove(GetExplTargetWorldObject());
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_intimidating_shout_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_intimidating_shout_SpellScript::FilterTargets, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY);
- }
- };
+ unitList.remove(GetExplTargetWorldObject());
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_intimidating_shout_SpellScript();
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_intimidating_shout::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_intimidating_shout::FilterTargets, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
// -772 - Rend
-class spell_warr_rend : public SpellScriptLoader
+class spell_warr_rend : public AuraScript
{
-public:
- spell_warr_rend() : SpellScriptLoader("spell_warr_rend") { }
+ PrepareAuraScript(spell_warr_rend);
- class spell_warr_rend_AuraScript : public AuraScript
+ void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated)
{
- PrepareAuraScript(spell_warr_rend_AuraScript);
-
- void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated)
+ if (Unit* caster = GetCaster())
{
- if (Unit* caster = GetCaster())
+ canBeRecalculated = false;
+
+ // $0.2 * (($MWB + $mwb) / 2 + $AP / 14 * $MWS) bonus per tick
+ float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK);
+ int32 mws = caster->GetAttackTime(BASE_ATTACK);
+ float mwbMin = caster->GetWeaponDamageRange(BASE_ATTACK, MINDAMAGE);
+ float mwbMax = caster->GetWeaponDamageRange(BASE_ATTACK, MAXDAMAGE);
+ float mwb = ((mwbMin + mwbMax) / 2 + ap * mws / 14000) * 0.2f;
+ amount += int32(caster->ApplyEffectModifiers(GetSpellInfo(), aurEff->GetEffIndex(), mwb));
+
+ // "If used while your target is above 75% health, Rend does 35% more damage."
+ // as for 3.1.3 only ranks above 9 (wrong tooltip?)
+ if (GetSpellInfo()->GetRank() >= 9)
{
- canBeRecalculated = false;
-
- // $0.2 * (($MWB + $mwb) / 2 + $AP / 14 * $MWS) bonus per tick
- float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK);
- int32 mws = caster->GetAttackTime(BASE_ATTACK);
- float mwbMin = caster->GetWeaponDamageRange(BASE_ATTACK, MINDAMAGE);
- float mwbMax = caster->GetWeaponDamageRange(BASE_ATTACK, MAXDAMAGE);
- float mwb = ((mwbMin + mwbMax) / 2 + ap * mws / 14000) * 0.2f;
- amount += int32(caster->ApplyEffectModifiers(GetSpellInfo(), aurEff->GetEffIndex(), mwb));
-
- // "If used while your target is above 75% health, Rend does 35% more damage."
- // as for 3.1.3 only ranks above 9 (wrong tooltip?)
- if (GetSpellInfo()->GetRank() >= 9)
- {
- if (GetUnitOwner()->HasAuraState(AURA_STATE_HEALTH_ABOVE_75_PERCENT, GetSpellInfo(), caster))
- AddPct(amount, GetSpellInfo()->Effects[EFFECT_2].CalcValue(caster));
- }
+ if (GetUnitOwner()->HasAuraState(AURA_STATE_HEALTH_ABOVE_75_PERCENT, GetSpellInfo(), caster))
+ AddPct(amount, GetSpellInfo()->Effects[EFFECT_2].CalcValue(caster));
}
}
+ }
- void Register() override
- {
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warr_rend_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
- }
- };
-
- AuraScript* GetAuraScript() const override
+ void Register() override
{
- return new spell_warr_rend_AuraScript();
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warr_rend::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
// 64380, 65941 - Shattering Throw
-class spell_warr_shattering_throw : public SpellScriptLoader
+class spell_warr_shattering_throw : public SpellScript
{
-public:
- spell_warr_shattering_throw() : SpellScriptLoader("spell_warr_shattering_throw") { }
+ PrepareSpellScript(spell_warr_shattering_throw);
- class spell_warr_shattering_throw_SpellScript : public SpellScript
+ void HandleScript(SpellEffIndex effIndex)
{
- PrepareSpellScript(spell_warr_shattering_throw_SpellScript);
-
- void HandleScript(SpellEffIndex effIndex)
- {
- PreventHitDefaultEffect(effIndex);
-
- // remove shields, will still display immune to damage part
- if (Unit* target = GetHitUnit())
- target->RemoveAurasWithMechanic(1 << MECHANIC_IMMUNE_SHIELD, AURA_REMOVE_BY_ENEMY_SPELL);
- }
+ PreventHitDefaultEffect(effIndex);
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_warr_shattering_throw_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
+ // remove shields, will still display immune to damage part
+ if (Unit* target = GetHitUnit())
+ target->RemoveAurasWithMechanic(1 << MECHANIC_IMMUNE_SHIELD, AURA_REMOVE_BY_ENEMY_SPELL);
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_shattering_throw_SpellScript();
+ OnEffectHitTarget += SpellEffectFn(spell_warr_shattering_throw::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
// 12328, 18765, 35429 - Sweeping Strikes
-class spell_warr_sweeping_strikes : public SpellScriptLoader
+class spell_warr_sweeping_strikes : public AuraScript
{
-public:
- spell_warr_sweeping_strikes() : SpellScriptLoader("spell_warr_sweeping_strikes") { }
+ PrepareAuraScript(spell_warr_sweeping_strikes);
- class spell_warr_sweeping_strikes_AuraScript : public AuraScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- PrepareAuraScript(spell_warr_sweeping_strikes_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK });
- }
-
- bool Load() override
- {
- _procTarget = nullptr;
- return true;
- }
+ return ValidateSpellInfo({ SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK });
+ }
- bool CheckProc(ProcEventInfo& eventInfo)
- {
- _procTarget = eventInfo.GetActor()->SelectNearbyNoTotemTarget(eventInfo.GetProcTarget());
+ bool Load() override
+ {
+ _procTarget = nullptr;
+ return true;
+ }
- DamageInfo* damageInfo = eventInfo.GetDamageInfo();
+ bool CheckProc(ProcEventInfo& eventInfo)
+ {
+ _procTarget = eventInfo.GetActor()->SelectNearbyNoTotemTarget(eventInfo.GetProcTarget());
- if (!damageInfo || !damageInfo->GetSpellInfo())
- {
- return false;
- }
+ DamageInfo* damageInfo = eventInfo.GetDamageInfo();
- return _procTarget && !damageInfo->GetSpellInfo();
- }
-
- void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ if (!damageInfo || !damageInfo->GetSpellInfo())
{
- PreventDefaultAction();
- if (DamageInfo* damageInfo = eventInfo.GetDamageInfo())
- {
- int32 damage = damageInfo->GetUnmitigatedDamage();
- GetTarget()->CastCustomSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK, &damage, 0, 0, true, nullptr, aurEff);
- }
+ return false;
}
- void Register() override
+ return _procTarget && !damageInfo->GetSpellInfo();
+ }
+
+ void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ PreventDefaultAction();
+ if (DamageInfo* damageInfo = eventInfo.GetDamageInfo())
{
- DoCheckProc += AuraCheckProcFn(spell_warr_sweeping_strikes_AuraScript::CheckProc);
- OnEffectProc += AuraEffectProcFn(spell_warr_sweeping_strikes_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
+ int32 damage = damageInfo->GetUnmitigatedDamage();
+ GetTarget()->CastCustomSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK, &damage, 0, 0, true, nullptr, aurEff);
}
+ }
- private:
- Unit* _procTarget;
- };
-
- AuraScript* GetAuraScript() const override
+ void Register() override
{
- return new spell_warr_sweeping_strikes_AuraScript();
+ DoCheckProc += AuraCheckProcFn(spell_warr_sweeping_strikes::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_warr_sweeping_strikes::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
+
+private:
+ Unit* _procTarget;
};
// 50720 - Vigilance
-class spell_warr_vigilance : public SpellScriptLoader
+class spell_warr_vigilance : public AuraScript
{
-public:
- spell_warr_vigilance() : SpellScriptLoader("spell_warr_vigilance") { }
+ PrepareAuraScript(spell_warr_vigilance);
- class spell_warr_vigilance_AuraScript : public AuraScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- PrepareAuraScript(spell_warr_vigilance_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo(
- {
- SPELL_WARRIOR_GLYPH_OF_VIGILANCE,
- SPELL_WARRIOR_VIGILANCE_PROC,
- SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT,
- SPELL_GEN_DAMAGE_REDUCTION_AURA
- });
- }
-
- bool Load() override
- {
- _procTarget = nullptr;
- return true;
- }
+ return ValidateSpellInfo(
+ {
+ SPELL_WARRIOR_GLYPH_OF_VIGILANCE,
+ SPELL_WARRIOR_VIGILANCE_PROC,
+ SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT,
+ SPELL_GEN_DAMAGE_REDUCTION_AURA
+ });
+ }
- void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- Unit* target = GetTarget();
- target->CastSpell(target, SPELL_GEN_DAMAGE_REDUCTION_AURA, true);
+ bool Load() override
+ {
+ _procTarget = nullptr;
+ return true;
+ }
- if (Unit* caster = GetCaster())
- target->CastSpell(caster, SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT, true);
- }
+ void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->CastSpell(target, SPELL_GEN_DAMAGE_REDUCTION_AURA, true);
- void HandleAfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- //! WORKAROUND
- //! this glyph is a proc
- if (Unit* caster = GetCaster())
- {
- if (AuraEffect const* glyph = caster->GetAuraEffect(SPELL_WARRIOR_GLYPH_OF_VIGILANCE, EFFECT_0))
- GetTarget()->ModifyRedirectThreat(glyph->GetAmount());
- }
- }
+ if (Unit* caster = GetCaster())
+ target->CastSpell(caster, SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT, true);
+ }
- void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ void HandleAfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ //! WORKAROUND
+ //! this glyph is a proc
+ if (Unit* caster = GetCaster())
{
- Unit* target = GetTarget();
- if (target->HasAura(SPELL_GEN_DAMAGE_REDUCTION_AURA) &&
- !(target->HasAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY) ||
- target->HasAura(SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY) ||
- target->HasAura(SPELL_PRIEST_RENEWED_HOPE)))
- {
- target->RemoveAurasDueToSpell(SPELL_GEN_DAMAGE_REDUCTION_AURA);
- }
-
- target->ResetRedirectThreat();
+ if (AuraEffect const* glyph = caster->GetAuraEffect(SPELL_WARRIOR_GLYPH_OF_VIGILANCE, EFFECT_0))
+ GetTarget()->ModifyRedirectThreat(glyph->GetAmount());
}
+ }
- bool CheckProc(ProcEventInfo& /*eventInfo*/)
+ void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ if (target->HasAura(SPELL_GEN_DAMAGE_REDUCTION_AURA) &&
+ !(target->HasAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY) ||
+ target->HasAura(SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY) ||
+ target->HasAura(SPELL_PRIEST_RENEWED_HOPE)))
{
- _procTarget = GetCaster();
- return _procTarget;
+ target->RemoveAurasDueToSpell(SPELL_GEN_DAMAGE_REDUCTION_AURA);
}
- void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
- {
- PreventDefaultAction();
- GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_VIGILANCE_PROC, true, nullptr, aurEff);
- }
+ target->ResetRedirectThreat();
+ }
- void Register() override
- {
- OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- AfterEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::HandleAfterApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- DoCheckProc += AuraCheckProcFn(spell_warr_vigilance_AuraScript::CheckProc);
- OnEffectProc += AuraEffectProcFn(spell_warr_vigilance_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
+ bool CheckProc(ProcEventInfo& /*eventInfo*/)
+ {
+ _procTarget = GetCaster();
+ return _procTarget;
+ }
- private:
- Unit* _procTarget;
- };
+ void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
+ {
+ PreventDefaultAction();
+ GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_VIGILANCE_PROC, true, nullptr, aurEff);
+ }
- AuraScript* GetAuraScript() const override
+ void Register() override
{
- return new spell_warr_vigilance_AuraScript();
+ OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance::HandleApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ AfterEffectApply += AuraEffectApplyFn(spell_warr_vigilance::HandleAfterApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance::HandleRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ DoCheckProc += AuraCheckProcFn(spell_warr_vigilance::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_warr_vigilance::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
+
+private:
+ Unit* _procTarget;
};
// 50725 - Vigilance
-class spell_warr_vigilance_trigger : public SpellScriptLoader
+class spell_warr_vigilance_trigger : public SpellScript
{
-public:
- spell_warr_vigilance_trigger() : SpellScriptLoader("spell_warr_vigilance_trigger") { }
+ PrepareSpellScript(spell_warr_vigilance_trigger);
- class spell_warr_vigilance_trigger_SpellScript : public SpellScript
+ void HandleScript(SpellEffIndex effIndex)
{
- PrepareSpellScript(spell_warr_vigilance_trigger_SpellScript);
-
- void HandleScript(SpellEffIndex effIndex)
- {
- PreventHitDefaultEffect(effIndex);
+ PreventHitDefaultEffect(effIndex);
- // Remove Taunt cooldown
- if (Player* target = GetHitPlayer())
- target->RemoveSpellCooldown(SPELL_WARRIOR_TAUNT, true);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_warr_vigilance_trigger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
+ // Remove Taunt cooldown
+ if (Player* target = GetHitPlayer())
+ target->RemoveSpellCooldown(SPELL_WARRIOR_TAUNT, true);
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_warr_vigilance_trigger_SpellScript();
+ OnEffectHitTarget += SpellEffectFn(spell_warr_vigilance_trigger::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
// 58387 - Glyph of Sunder Armor
-class spell_warr_glyph_of_sunder_armor : public SpellScriptLoader
+class spell_warr_glyph_of_sunder_armor : public AuraScript
{
-public:
- spell_warr_glyph_of_sunder_armor() : SpellScriptLoader("spell_warr_glyph_of_sunder_armor") { }
+ PrepareAuraScript(spell_warr_glyph_of_sunder_armor);
- class spell_warr_glyph_of_sunder_armor_AuraScript : public AuraScript
+ void HandleEffectCalcSpellMod(AuraEffect const* aurEff, SpellModifier*& spellMod)
{
- PrepareAuraScript(spell_warr_glyph_of_sunder_armor_AuraScript);
-
- void HandleEffectCalcSpellMod(AuraEffect const* aurEff, SpellModifier*& spellMod)
+ if (!spellMod)
{
- if (!spellMod)
- {
- spellMod = new SpellModifier(aurEff->GetBase());
- spellMod->op = SpellModOp(aurEff->GetMiscValue());
- spellMod->type = SPELLMOD_FLAT;
- spellMod->spellId = GetId();
- spellMod->mask = GetSpellInfo()->Effects[aurEff->GetEffIndex()].SpellClassMask;
- }
-
- spellMod->value = aurEff->GetAmount();
+ spellMod = new SpellModifier(aurEff->GetBase());
+ spellMod->op = SpellModOp(aurEff->GetMiscValue());
+ spellMod->type = SPELLMOD_FLAT;
+ spellMod->spellId = GetId();
+ spellMod->mask = GetSpellInfo()->Effects[aurEff->GetEffIndex()].SpellClassMask;
}
- void Register() override
- {
- DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_warr_glyph_of_sunder_armor_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
- }
- };
+ spellMod->value = aurEff->GetAmount();
+ }
- AuraScript* GetAuraScript() const override
+ void Register() override
{
- return new spell_warr_glyph_of_sunder_armor_AuraScript();
+ DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_warr_glyph_of_sunder_armor::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};
// 20230 - Retaliation
-class spell_warr_retaliation : public SpellScriptLoader
+class spell_warr_retaliation : public AuraScript
{
-public:
- spell_warr_retaliation() : SpellScriptLoader("spell_warr_retaliation") { }
+ PrepareAuraScript(spell_warr_retaliation);
- class spell_warr_retaliation_AuraScript : public AuraScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- PrepareAuraScript(spell_warr_retaliation_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_WARRIOR_RETALIATION_DAMAGE });
- }
-
- bool CheckProc(ProcEventInfo& eventInfo)
- {
- // check attack comes not from behind and warrior is not stunned
- return GetTarget()->isInFront(eventInfo.GetActor(), M_PI) && !GetTarget()->HasUnitState(UNIT_STATE_STUNNED);
- }
+ return ValidateSpellInfo({ SPELL_WARRIOR_RETALIATION_DAMAGE });
+ }
- void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
- {
- PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARRIOR_RETALIATION_DAMAGE, true, nullptr, aurEff);
- }
+ bool CheckProc(ProcEventInfo& eventInfo)
+ {
+ // check attack comes not from behind and warrior is not stunned
+ return GetTarget()->isInFront(eventInfo.GetActor(), M_PI) && !GetTarget()->HasUnitState(UNIT_STATE_STUNNED);
+ }
- void Register() override
- {
- DoCheckProc += AuraCheckProcFn(spell_warr_retaliation_AuraScript::CheckProc);
- OnEffectProc += AuraEffectProcFn(spell_warr_retaliation_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
- };
+ void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ PreventDefaultAction();
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARRIOR_RETALIATION_DAMAGE, true, nullptr, aurEff);
+ }
- AuraScript* GetAuraScript() const override
+ void Register() override
{
- return new spell_warr_retaliation_AuraScript();
+ DoCheckProc += AuraCheckProcFn(spell_warr_retaliation::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_warr_retaliation::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
void AddSC_warrior_spell_scripts()
{
- // Ours
- new spell_warr_mocking_blow();
- new spell_warr_intervene();
- new spell_warr_improved_spell_reflection();
- new spell_warr_improved_spell_reflection_trigger();
- new spell_warr_victory_rush();
-
- // Theirs
- new spell_warr_bloodthirst();
- new spell_warr_bloodthirst_heal();
- new spell_warr_charge();
- new spell_warr_concussion_blow();
- new spell_warr_damage_shield();
- new spell_warr_deep_wounds();
- new spell_warr_execute();
- new spell_warr_glyph_of_sunder_armor();
- new spell_warr_intimidating_shout();
- new spell_warr_last_stand();
- new spell_warr_overpower();
- new spell_warr_rend();
- new spell_warr_retaliation();
- new spell_warr_shattering_throw();
- new spell_warr_slam();
- new spell_warr_sweeping_strikes();
- new spell_warr_vigilance();
- new spell_warr_vigilance_trigger();
+ RegisterSpellScript(spell_warr_mocking_blow);
+ RegisterSpellScript(spell_warr_intervene);
+ RegisterSpellScript(spell_warr_improved_spell_reflection);
+ RegisterSpellAndAuraScriptPair(spell_warr_improved_spell_reflection_trigger, spell_warr_improved_spell_reflection_trigger_aura);
+ RegisterSpellScript(spell_warr_victory_rush);
+ RegisterSpellScript(spell_warr_bloodthirst);
+ RegisterSpellScript(spell_warr_bloodthirst_heal);
+ RegisterSpellScript(spell_warr_charge);
+ RegisterSpellScript(spell_warr_concussion_blow);
+ RegisterSpellScript(spell_warr_damage_shield);
+ RegisterSpellScript(spell_warr_deep_wounds);
+ RegisterSpellScript(spell_warr_execute);
+ RegisterSpellScript(spell_warr_glyph_of_sunder_armor);
+ RegisterSpellScript(spell_warr_intimidating_shout);
+ RegisterSpellScript(spell_warr_last_stand);
+ RegisterSpellScript(spell_warr_overpower);
+ RegisterSpellScript(spell_warr_rend);
+ RegisterSpellScript(spell_warr_retaliation);
+ RegisterSpellScript(spell_warr_shattering_throw);
+ RegisterSpellScript(spell_warr_slam);
+ RegisterSpellScript(spell_warr_sweeping_strikes);
+ RegisterSpellScript(spell_warr_vigilance);
+ RegisterSpellScript(spell_warr_vigilance_trigger);
}