Skip to content

Commit 161625c

Browse files
committed
Scripts/Spells: Implement Surge of Adrenaline (Fury Warrior Talent)
- Also implement glow effect when cooldown resets
1 parent baed611 commit 161625c

2 files changed

Lines changed: 64 additions & 6 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_warr_surge_of_adrenaline';
2+
INSERT INTO `spell_script_names`(`spell_id`, `ScriptName`) VALUES
3+
(280270, 'spell_warr_surge_of_adrenaline');
4+
5+
DELETE FROM `spell_proc` WHERE `SpellId` IN (280270);
6+
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
7+
(280270,0x00,4,0x00000000,0x00000000,0x00000000,0x00000400,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0,0,0,0); -- Always Angry

src/server/scripts/Spells/spell_warrior.cpp

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
enum WarriorSpells
3737
{
38+
SPELL_WARRIOR_ALWAYS_ANGRY = 280270,
3839
SPELL_WARRIOR_AVATAR = 107574,
3940
SPELL_WARRIOR_BLADESTORM = 227847,
4041
SPELL_WARRIOR_BLADESTORM_PERIODIC_WHIRLWIND = 50622,
@@ -100,6 +101,8 @@ enum WarriorSpells
100101
SPELL_WARRIOR_STRATEGIST = 384041,
101102
SPELL_WARRIOR_SUDDEN_DEATH = 280721,
102103
SPELL_WARRIOR_SUDDEN_DEATH_BUFF = 280776,
104+
SPELL_WARRIOR_SURGE_OF_ADRENALINE_TALENT = 1265359,
105+
SPELL_WARRIOR_SURGE_OF_ADRENALINE_PROC = 1265560,
103106
SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1 = 12723,
104107
SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_2 = 26654,
105108
SPELL_WARRIOR_TAUNT = 355,
@@ -1148,20 +1151,23 @@ class spell_warr_raging_blow_cooldown_reset : public SpellScript
11481151
{
11491152
bool Validate(SpellInfo const* /*spellInfo*/) override
11501153
{
1151-
return ValidateSpellInfo({ SPELL_WARRIOR_IMPROVED_RAGING_BLOW })
1154+
return ValidateSpellInfo({ SPELL_WARRIOR_IMPROVED_RAGING_BLOW, SPELL_WARRIOR_SURGE_OF_ADRENALINE_TALENT, SPELL_WARRIOR_ALWAYS_ANGRY })
11521155
&& ValidateSpellEffect({{ SPELL_WARRIOR_WRATH_AND_FURY, EFFECT_0 }});
11531156
}
11541157

11551158
bool Load() override
11561159
{
11571160
Unit const* caster = GetCaster();
1158-
return caster->HasAura(SPELL_WARRIOR_IMPROVED_RAGING_BLOW) || caster->HasAuraEffect(SPELL_WARRIOR_WRATH_AND_FURY, EFFECT_0);
1161+
return caster->HasAura(SPELL_WARRIOR_IMPROVED_RAGING_BLOW)
1162+
|| caster->HasAuraEffect(SPELL_WARRIOR_WRATH_AND_FURY, EFFECT_0)
1163+
|| caster->HasAura(SPELL_WARRIOR_SURGE_OF_ADRENALINE_TALENT);
11591164
}
11601165

1161-
void HandleResetCooldown(SpellEffIndex /*effIndex*/) const
1166+
void CheckResetCooldown(SpellEffIndex /*effIndex*/)
11621167
{
1168+
_resetCooldown = false;
11631169
// it is currently impossible to have Wrath and Fury without having Improved Raging Blow, but we will check it anyway
1164-
Unit* caster = GetCaster();
1170+
Unit const* caster = GetCaster();
11651171
int32 value = 0;
11661172
if (caster->HasAura(SPELL_WARRIOR_IMPROVED_RAGING_BLOW))
11671173
value = GetEffectValue();
@@ -1170,13 +1176,30 @@ class spell_warr_raging_blow_cooldown_reset : public SpellScript
11701176
value += auraEffect->GetAmount();
11711177

11721178
if (roll_chance_i(value))
1173-
caster->GetSpellHistory()->RestoreCharge(GetSpellInfo()->ChargeCategoryId);
1179+
_resetCooldown = true;
1180+
}
1181+
1182+
void HandleResetCooldown() const
1183+
{
1184+
if (!_resetCooldown)
1185+
return;
1186+
1187+
Unit* caster = GetCaster();
1188+
1189+
caster->CastSpell(nullptr, SPELL_WARRIOR_ALWAYS_ANGRY, CastSpellExtraArgsInit{
1190+
.TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
1191+
.TriggeringSpell = GetSpell()
1192+
});
1193+
caster->GetSpellHistory()->RestoreCharge(GetSpellInfo()->ChargeCategoryId);
11741194
}
11751195

11761196
void Register() override
11771197
{
1178-
OnEffectHitTarget += SpellEffectFn(spell_warr_raging_blow_cooldown_reset::HandleResetCooldown, EFFECT_0, SPELL_EFFECT_DUMMY);
1198+
OnEffectHitTarget += SpellEffectFn(spell_warr_raging_blow_cooldown_reset::CheckResetCooldown, EFFECT_0, SPELL_EFFECT_DUMMY);
1199+
AfterCast += SpellCastFn(spell_warr_raging_blow_cooldown_reset::HandleResetCooldown);
11791200
}
1201+
1202+
bool _resetCooldown = false;
11801203
};
11811204

11821205
// 97462 - Rallying Cry
@@ -1411,6 +1434,33 @@ class spell_warr_sudden_death_proc : public AuraScript
14111434
}
14121435
};
14131436

1437+
// 1265359 - Surge of Adrenaline (talent) - attached to 280270 (Always Angry)
1438+
class spell_warr_surge_of_adrenaline : public AuraScript
1439+
{
1440+
bool Validate(SpellInfo const* /*spellInfo*/) override
1441+
{
1442+
return ValidateSpellInfo({ SPELL_WARRIOR_SURGE_OF_ADRENALINE_PROC, SPELL_WARRIOR_SURGE_OF_ADRENALINE_TALENT });
1443+
}
1444+
1445+
void OnApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) const
1446+
{
1447+
Unit* target = GetTarget();
1448+
1449+
if (!target->HasAura(SPELL_WARRIOR_SURGE_OF_ADRENALINE_TALENT))
1450+
return;
1451+
1452+
target->CastSpell(nullptr, SPELL_WARRIOR_SURGE_OF_ADRENALINE_PROC, CastSpellExtraArgsInit{
1453+
.TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
1454+
.TriggeringAura = aurEff
1455+
});
1456+
}
1457+
1458+
void Register() override
1459+
{
1460+
OnEffectApply += AuraEffectApplyFn(spell_warr_surge_of_adrenaline::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
1461+
}
1462+
};
1463+
14141464
// 12328, 18765, 35429 - Sweeping Strikes
14151465
class spell_warr_sweeping_strikes : public AuraScript
14161466
{
@@ -1766,6 +1816,7 @@ void AddSC_warrior_spell_scripts()
17661816
RegisterSpellScript(spell_warr_strategist);
17671817
RegisterSpellScript(spell_warr_sudden_death);
17681818
RegisterSpellScript(spell_warr_sudden_death_proc);
1819+
RegisterSpellScript(spell_warr_surge_of_adrenaline);
17691820
RegisterSpellScript(spell_warr_sweeping_strikes);
17701821
RegisterSpellScript(spell_warr_tenderize);
17711822
RegisterSpellScript(spell_warr_thunder_clap);

0 commit comments

Comments
 (0)