diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 14 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 156 |
2 files changed, 101 insertions, 69 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 667249d897e..f90a3c33b9b 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -241,7 +241,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= &Spell::EffectUnlockGuildVaultTab, //173 SPELL_EFFECT_UNLOCK_GUILD_VAULT_TAB &Spell::EffectNULL, //174 SPELL_EFFECT_APPLY_AURA_ON_PET &Spell::EffectUnused, //175 SPELL_EFFECT_175 unused - &Spell::EffectNULL, //176 SPELL_EFFECT_SANCTUARY_2 + &Spell::EffectSanctuary, //176 SPELL_EFFECT_SANCTUARY_2 &Spell::EffectNULL, //177 SPELL_EFFECT_177 &Spell::EffectUnused, //178 SPELL_EFFECT_178 unused &Spell::EffectCreateAreaTrigger, //179 SPELL_EFFECT_CREATE_AREATRIGGER @@ -618,18 +618,6 @@ void Spell::EffectTriggerSpell(SpellEffIndex /*effIndex*/) { unitTarget->RemoveMovementImpairingAuras(); 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 - unitTarget->GetSpellHistory()->ResetCooldown(1784); - unitTarget->CastSpell(unitTarget, 1784, true); return; } // Demonic Empowerment -- succubus diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index a4f876b289e..ff0be4595cf 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -42,9 +42,11 @@ enum RogueSpells SPELL_ROGUE_MASTER_OF_SUBTLETY_DAMAGE_PERCENT = 31665, SPELL_ROGUE_MASTER_OF_SUBTLETY_PASSIVE = 31223, SPELL_ROGUE_MASTER_OF_SUBTLETY_PERIODIC = 31666, - SPELL_ROGUE_OVERKILL_TALENT = 58426, - SPELL_ROGUE_OVERKILL_PERIODIC = 58428, - SPELL_ROGUE_OVERKILL_POWER_REGEN = 58427, + SPELL_ROGUE_SANCTUARY = 98877, + SPELL_ROGUE_STEALTH = 1784, + SPELL_ROGUE_STEALTH_STEALTH_AURA = 158185, + SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA = 158188, + SPELL_ROGUE_VANISH_AURA = 11327, SPELL_ROGUE_PREY_ON_THE_WEAK = 58670, SPELL_ROGUE_SHIV_TRIGGERED = 5940, SPELL_ROGUE_SILCE_AND_DICE = 5171, @@ -493,43 +495,6 @@ class spell_rog_master_of_subtlety : public SpellScriptLoader } }; -// 58428 - Overkill -class spell_rog_overkill : public SpellScriptLoader -{ - public: - spell_rog_overkill() : SpellScriptLoader("spell_rog_overkill") { } - - class spell_rog_overkill_AuraScript : public AuraScript - { - PrepareAuraScript(spell_rog_overkill_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_OVERKILL_POWER_REGEN)) - return false; - return true; - } - - void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) - { - Unit* target = GetTarget(); - - if (!target->HasAuraType(SPELL_AURA_MOD_STEALTH)) - target->RemoveAurasDueToSpell(SPELL_ROGUE_OVERKILL_POWER_REGEN); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_overkill_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_rog_overkill_AuraScript(); - } -}; - // 14185 - Preparation class spell_rog_preparation : public SpellScriptLoader { @@ -740,9 +705,9 @@ class spell_rog_stealth : public SpellScriptLoader if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_MASTER_OF_SUBTLETY_PASSIVE) || !sSpellMgr->GetSpellInfo(SPELL_ROGUE_MASTER_OF_SUBTLETY_DAMAGE_PERCENT) || !sSpellMgr->GetSpellInfo(SPELL_ROGUE_MASTER_OF_SUBTLETY_PERIODIC) || - !sSpellMgr->GetSpellInfo(SPELL_ROGUE_OVERKILL_TALENT) || - !sSpellMgr->GetSpellInfo(SPELL_ROGUE_OVERKILL_POWER_REGEN) || - !sSpellMgr->GetSpellInfo(SPELL_ROGUE_OVERKILL_PERIODIC)) + !sSpellMgr->GetSpellInfo(SPELL_ROGUE_SANCTUARY) || + !sSpellMgr->GetSpellInfo(SPELL_ROGUE_STEALTH_STEALTH_AURA) || + !sSpellMgr->GetSpellInfo(SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA)) return false; return true; } @@ -753,14 +718,11 @@ class spell_rog_stealth : public SpellScriptLoader // Master of Subtlety if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_ROGUE_MASTER_OF_SUBTLETY_PASSIVE, EFFECT_0)) - { - int32 basepoints0 = aurEff->GetAmount(); - target->CastCustomSpell(target, SPELL_ROGUE_MASTER_OF_SUBTLETY_DAMAGE_PERCENT, &basepoints0, NULL, NULL, true); - } + target->CastCustomSpell(SPELL_ROGUE_MASTER_OF_SUBTLETY_DAMAGE_PERCENT, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true); - // Overkill - if (target->HasAura(SPELL_ROGUE_OVERKILL_TALENT)) - target->CastSpell(target, SPELL_ROGUE_OVERKILL_POWER_REGEN, true); + target->CastSpell(target, SPELL_ROGUE_SANCTUARY, TRIGGERED_FULL_MASK); + target->CastSpell(target, SPELL_ROGUE_STEALTH_STEALTH_AURA, TRIGGERED_FULL_MASK); + target->CastSpell(target, SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA, TRIGGERED_FULL_MASK); } void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -771,15 +733,14 @@ class spell_rog_stealth : public SpellScriptLoader if (target->HasAura(SPELL_ROGUE_MASTER_OF_SUBTLETY_PASSIVE)) target->CastSpell(target, SPELL_ROGUE_MASTER_OF_SUBTLETY_PERIODIC, true); - // Overkill - if (target->HasAura(SPELL_ROGUE_OVERKILL_TALENT)) - target->CastSpell(target, SPELL_ROGUE_OVERKILL_PERIODIC, true); + target->RemoveAurasDueToSpell(SPELL_ROGUE_STEALTH_STEALTH_AURA); + target->RemoveAurasDueToSpell(SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA); } void Register() override { - AfterEffectApply += AuraEffectApplyFn(spell_rog_stealth_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_MOD_SHAPESHIFT, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); - AfterEffectRemove += AuraEffectRemoveFn(spell_rog_stealth_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_MOD_SHAPESHIFT, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + AfterEffectApply += AuraEffectApplyFn(spell_rog_stealth_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_rog_stealth_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; @@ -789,6 +750,88 @@ class spell_rog_stealth : public SpellScriptLoader } }; +// 1856 - Vanish +class spell_rog_vanish : public SpellScriptLoader +{ + public: + spell_rog_vanish() : SpellScriptLoader("spell_rog_vanish") { } + + class spell_rog_vanish_SpellScript : public SpellScript + { + PrepareSpellScript(spell_rog_vanish_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_VANISH_AURA) || + !sSpellMgr->GetSpellInfo(SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA)) + return false; + return true; + } + + void OnLaunchTarget(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + + Unit* target = GetHitUnit(); + + target->RemoveMovementImpairingAuras(); + target->RemoveAurasByType(SPELL_AURA_MOD_STALKED); + if (target->GetTypeId() != TYPEID_PLAYER) + return; + + if (target->HasAura(SPELL_ROGUE_VANISH_AURA)) + return; + + target->CastSpell(target, SPELL_ROGUE_VANISH_AURA, TRIGGERED_FULL_MASK); + target->CastSpell(target, SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA, TRIGGERED_FULL_MASK); + } + + void Register() override + { + OnEffectLaunchTarget += SpellEffectFn(spell_rog_vanish_SpellScript::OnLaunchTarget, EFFECT_1, SPELL_EFFECT_TRIGGER_SPELL); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_rog_vanish_SpellScript(); + } +}; + +// 11327 - Vanish +class spell_rog_vanish_aura : public SpellScriptLoader +{ + public: + spell_rog_vanish_aura() : SpellScriptLoader("spell_rog_vanish_aura") { } + + class spell_rog_vanish_aura_AuraScript : public AuraScript + { + PrepareAuraScript(spell_rog_vanish_aura_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_STEALTH)) + return false; + return true; + } + + void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_ROGUE_STEALTH, TRIGGERED_FULL_MASK); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_rog_vanish_aura_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_rog_vanish_aura_AuraScript(); + } +}; + // 57934 - Tricks of the Trade class spell_rog_tricks_of_the_trade : public SpellScriptLoader { @@ -1016,12 +1059,13 @@ void AddSC_rogue_spell_scripts() new spell_rog_deadly_poison(); new spell_rog_killing_spree(); new spell_rog_master_of_subtlety(); - new spell_rog_overkill(); new spell_rog_preparation(); new spell_rog_recuperate(); new spell_rog_rupture(); new spell_rog_shiv(); new spell_rog_stealth(); + new spell_rog_vanish(); + new spell_rog_vanish_aura(); new spell_rog_tricks_of_the_trade(); new spell_rog_tricks_of_the_trade_proc(); new spell_rog_serrated_blades(); |