diff --git a/sql/updates/world/4.3.4/2022_05_08_00_world.sql b/sql/updates/world/4.3.4/2022_05_08_00_world.sql new file mode 100644 index 00000000000..6bb835c657e --- /dev/null +++ b/sql/updates/world/4.3.4/2022_05_08_00_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_rog_vanish'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(-11327, 'spell_rog_vanish'); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 1b598483788..5a58060e92b 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -478,27 +478,6 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex) // special cases switch (triggered_spell_id) { - // Vanish (not exist) - case 18461: - { - unitTarget->RemoveMovementImpairingAuras(true); - unitTarget->RemoveAurasByType(SPELL_AURA_MOD_STALKED); - - // If this spell is given to an NPC, it must handle the rest using its own AI - if (unitTarget->GetTypeId() != TYPEID_PLAYER) - return; - - // See if we already are stealthed. If so, we're done. - if (unitTarget->HasAura(1784)) - return; - - // Reset cooldown on stealth if needed - if (unitTarget->GetSpellHistory()->HasCooldown(1784)) - unitTarget->GetSpellHistory()->ResetCooldown(1784); - - unitTarget->CastSpell(unitTarget, 1784, true); - return; - } // Demonic Empowerment -- succubus case 54437: { diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 826ddf6f60f..bc3b96190aa 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -77,7 +77,8 @@ enum RogueSpells SPELL_ROGUE_RUPTURE = 1943, SPELL_ROGUE_HONOR_AMONG_THIEVES_TRIGGERED = 51699, SPELL_ROGUE_BLACKJACK_R1 = 79123, - SPELL_RACIAL_ELUSIVENESS = 21009 + SPELL_RACIAL_ELUSIVENESS = 21009, + SPELL_ROGUE_STEALTH = 1784 }; enum RogueSpellIcons @@ -1522,6 +1523,36 @@ class spell_rog_gouge : public AuraScript } }; +// -11327 - Vanish +class spell_rog_vanish : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ROGUE_STEALTH }); + } + + void ApplyStealth(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* unitTarget = GetTarget(); + unitTarget->RemoveAurasByType(SPELL_AURA_MOD_STALKED); + + // See if we already are stealthed. If so, we're done. + if (unitTarget->HasAura(SPELL_ROGUE_STEALTH)) + return; + + // Reset cooldown on stealth if needed + if (unitTarget->GetSpellHistory()->HasCooldown(SPELL_ROGUE_STEALTH)) + unitTarget->GetSpellHistory()->ResetCooldown(SPELL_ROGUE_STEALTH); + + unitTarget->CastSpell(nullptr, SPELL_ROGUE_STEALTH, true); + } + + void Register() override + { + AfterEffectApply.Register(&spell_rog_vanish::ApplyStealth, EFFECT_1, SPELL_AURA_MOD_STEALTH, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + } +}; + void AddSC_rogue_spell_scripts() { RegisterSpellScript(spell_rog_bandits_guile); @@ -1557,4 +1588,5 @@ void AddSC_rogue_spell_scripts() RegisterSpellAndAuraScriptPair(spell_rog_tricks_of_the_trade, spell_rog_tricks_of_the_trade_aura); RegisterSpellScript(spell_rog_tricks_of_the_trade_proc); RegisterSpellScript(spell_rog_honor_among_thieves); + RegisterSpellScript(spell_rog_vanish); }