aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2023_05_18_01_world.sql3
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp47
2 files changed, 43 insertions, 7 deletions
diff --git a/sql/updates/world/master/2023_05_18_01_world.sql b/sql/updates/world/master/2023_05_18_01_world.sql
new file mode 100644
index 00000000000..658547c5619
--- /dev/null
+++ b/sql/updates/world/master/2023_05_18_01_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_script_names` WHERE `spell_id`= 262161;
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(262161,'spell_warr_colossus_smash');
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