diff options
author | Aqua Deus <95978183+aquadeus@users.noreply.github.com> | 2024-11-08 19:49:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-08 19:49:00 +0100 |
commit | ea9b8a28743f75f383fac61463949f6a36e65ae7 (patch) | |
tree | 07730902736da515dec2835854456a9617ca3d66 | |
parent | 5dfaf41c5ec710ad94a9262a65b4646f172d5d82 (diff) |
Scripts/Spells: Implement Rogue talent Improved Garrote (#30379)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
-rw-r--r-- | sql/updates/world/master/2024_11_08_07_world.sql | 7 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 92 |
2 files changed, 99 insertions, 0 deletions
diff --git a/sql/updates/world/master/2024_11_08_07_world.sql b/sql/updates/world/master/2024_11_08_07_world.sql new file mode 100644 index 00000000000..544b9beb8e0 --- /dev/null +++ b/sql/updates/world/master/2024_11_08_07_world.sql @@ -0,0 +1,7 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=703 AND `ScriptName`='spell_rog_improved_garrote_damage'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(703, 'spell_rog_improved_garrote_damage'); + +DELETE FROM `spell_script_names` WHERE `spell_id`=1784 AND `ScriptName`='spell_rog_improved_garrote'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(1784, 'spell_rog_improved_garrote'); diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 2bc0fb7323a..187eb72ddb0 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -58,6 +58,9 @@ enum RogueSpells SPELL_ROGUE_DEATH_FROM_ABOVE = 152150, SPELL_ROGUE_GRAND_MELEE = 193358, SPELL_ROGUE_GRAPPLING_HOOK = 195457, + SPELL_ROGUE_IMPROVED_GARROTE_AFTER_STEALTH = 392401, + SPELL_ROGUE_IMPROVED_GARROTE_STEALTH = 392403, + SPELL_ROGUE_IMPROVED_GARROTE_TALENT = 381632, SPELL_ROGUE_IMPROVED_SHIV = 319032, SPELL_ROGUE_INSTANT_POISON = 315584, SPELL_ROGUE_INSTANT_POISON_DAMAGE = 315585, @@ -433,6 +436,93 @@ class spell_rog_honor_among_thieves : public AuraScript } }; +// Called by 1784 - Stealth +class spell_rog_improved_garrote : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo + ({ + SPELL_ROGUE_IMPROVED_GARROTE_AFTER_STEALTH, + SPELL_ROGUE_IMPROVED_GARROTE_STEALTH, + SPELL_ROGUE_IMPROVED_GARROTE_TALENT, + }); + } + + bool Load() override + { + return GetCaster()->HasAura(SPELL_ROGUE_IMPROVED_GARROTE_TALENT); + } + + void HandleBuff(uint32 spellToCast, uint32 auraToRemove) const + { + Unit* target = GetTarget(); + + target->RemoveAurasDueToSpell(auraToRemove); + target->CastSpell(target, spellToCast, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR + }); + + } + + void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) const + { + HandleBuff(SPELL_ROGUE_IMPROVED_GARROTE_STEALTH, SPELL_ROGUE_IMPROVED_GARROTE_AFTER_STEALTH); + } + + void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) const + { + HandleBuff(SPELL_ROGUE_IMPROVED_GARROTE_AFTER_STEALTH, SPELL_ROGUE_IMPROVED_GARROTE_STEALTH); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_rog_improved_garrote::HandleEffectApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_rog_improved_garrote::HandleEffectRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 703 - Garrote +class spell_rog_improved_garrote_damage : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo + ({ + SPELL_ROGUE_IMPROVED_GARROTE_AFTER_STEALTH, + SPELL_ROGUE_IMPROVED_GARROTE_STEALTH, + SPELL_ROGUE_IMPROVED_GARROTE_TALENT, + }); + } + + void CalculateBonus(AuraEffect const* /*aurEff*/, int32& /*amount*/, bool& /*canBeRecalculated*/) + { + _pctMod = 1.0f; + Unit* caster = GetCaster(); + if (!caster) + return; + + if (AuraEffect const* improvedGarroteStealth = caster->GetAuraEffect(SPELL_ROGUE_IMPROVED_GARROTE_AFTER_STEALTH, EFFECT_1)) + AddPct(_pctMod, improvedGarroteStealth->GetAmount()); + else if (AuraEffect const* improvedGarroteAfterStealth = caster->GetAuraEffect(SPELL_ROGUE_IMPROVED_GARROTE_STEALTH, EFFECT_1)) + AddPct(_pctMod, improvedGarroteAfterStealth->GetAmount()); + } + + void CalculateDamage(AuraEffect const* /*aurEff*/, Unit const* /*victim*/, int32& /*damage*/, int32& /*flatMod*/, float& pctMod) const + { + pctMod *= _pctMod; + } + + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_rog_improved_garrote_damage::CalculateBonus, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + DoEffectCalcDamageAndHealing += AuraEffectCalcDamageFn(spell_rog_improved_garrote_damage::CalculateDamage, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + } + +private: + float _pctMod = 1.0f; +}; + // 5938 - Shiv class spell_rog_improved_shiv : public SpellScript { @@ -1169,6 +1259,8 @@ void AddSC_rogue_spell_scripts() RegisterSpellScript(spell_rog_eviscerate); RegisterSpellScript(spell_rog_grand_melee); RegisterSpellScript(spell_rog_honor_among_thieves); + RegisterSpellScript(spell_rog_improved_garrote); + RegisterSpellScript(spell_rog_improved_garrote_damage); RegisterSpellScript(spell_rog_improved_shiv); RegisterSpellAndAuraScriptPair(spell_rog_killing_spree, spell_rog_killing_spree_aura); RegisterSpellScript(spell_rog_kingsbane); |