aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp47
1 files changed, 40 insertions, 7 deletions
diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp
index 6a8a10cead7..ce1c3064a3f 100644
--- a/src/server/scripts/Spells/spell_warrior.cpp
+++ b/src/server/scripts/Spells/spell_warrior.cpp
@@ -42,7 +42,7 @@ enum WarriorSpells
SPELL_WARRIOR_CHARGE_ROOT_EFFECT = 105771,
SPELL_WARRIOR_CHARGE_SLOW_EFFECT = 236027,
SPELL_WARRIOR_COLOSSUS_SMASH = 167105,
- SPELL_WARRIOR_COLOSSUS_SMASH_EFFECT = 208086,
+ SPELL_WARRIOR_COLOSSUS_SMASH_AURA = 208086,
SPELL_WARRIOR_EXECUTE = 20647,
SPELL_WARRIOR_FUELED_BY_VIOLENCE_HEAL = 383104,
SPELL_WARRIOR_GLYPH_OF_THE_BLAZING_TRAIL = 123779,
@@ -50,6 +50,8 @@ enum WarriorSpells
SPELL_WARRIOR_GLYPH_OF_HEROIC_LEAP_BUFF = 133278,
SPELL_WARRIOR_HEROIC_LEAP_JUMP = 178368,
SPELL_WARRIOR_IGNORE_PAIN = 190456,
+ SPELL_WARRIOR_IN_FOR_THE_KILL = 248621,
+ SPELL_WARRIOR_IN_FOR_THE_KILL_HASTE = 248622,
SPELL_WARRIOR_IMPENDING_VICTORY = 202168,
SPELL_WARRIOR_IMPENDING_VICTORY_HEAL = 202166,
SPELL_WARRIOR_IMPROVED_HEROIC_LEAP = 157449,
@@ -216,26 +218,57 @@ class spell_warr_charge_effect : public SpellScript
}
};
-// 167105 - Colossus Smash 7.1.5
+// 167105 - Colossus Smash
+// 262161 - Warbreaker
class spell_warr_colossus_smash : public SpellScript
{
PrepareSpellScript(spell_warr_colossus_smash);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
- return ValidateSpellInfo({ SPELL_WARRIOR_COLOSSUS_SMASH_EFFECT });
+ return ValidateSpellInfo({ SPELL_WARRIOR_COLOSSUS_SMASH_AURA, SPELL_WARRIOR_IN_FOR_THE_KILL, SPELL_WARRIOR_IN_FOR_THE_KILL_HASTE })
+ && sSpellMgr->AssertSpellInfo(SPELL_WARRIOR_IN_FOR_THE_KILL, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_2;
}
- void HandleOnHit()
+ void HandleHit()
{
- if (Unit* target = GetHitUnit())
- GetCaster()->CastSpell(target, SPELL_WARRIOR_COLOSSUS_SMASH_EFFECT, true);
+ Unit* target = GetHitUnit();
+ Unit* caster = GetCaster();
+
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_WARRIOR_COLOSSUS_SMASH_AURA, true);
+
+ if (caster->HasAura(SPELL_WARRIOR_IN_FOR_THE_KILL))
+ {
+ if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARRIOR_IN_FOR_THE_KILL, DIFFICULTY_NONE))
+ {
+ if (target->HealthBelowPct(spellInfo->GetEffect(EFFECT_2).CalcValue(caster)))
+ _bonusHaste = true;
+ }
+ }
+ }
+
+ void HandleAfterCast()
+ {
+ Unit* caster = GetCaster();
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARRIOR_IN_FOR_THE_KILL, DIFFICULTY_NONE);
+ if (!spellInfo)
+ return;
+
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.AddSpellBP0(spellInfo->GetEffect(EFFECT_0).CalcValue(caster));
+ if (_bonusHaste)
+ args.AddSpellBP0(spellInfo->GetEffect(EFFECT_1).CalcValue(caster));
+ caster->CastSpell(caster, SPELL_WARRIOR_IN_FOR_THE_KILL_HASTE, args);
}
void Register() override
{
- OnHit += SpellHitFn(spell_warr_colossus_smash::HandleOnHit);
+ OnHit += SpellHitFn(spell_warr_colossus_smash::HandleHit);
+ AfterCast += SpellCastFn(spell_warr_colossus_smash::HandleAfterCast);
}
+
+private:
+ bool _bonusHaste = false;
};
// 383103 - Fueled by Violence