diff --git a/sql/updates/world/4.3.4/2022_04_12_00_world.sql b/sql/updates/world/4.3.4/2022_04_12_00_world.sql new file mode 100644 index 00000000000..9b4cc056489 --- /dev/null +++ b/sql/updates/world/4.3.4/2022_04_12_00_world.sql @@ -0,0 +1,9 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN +('spell_dru_pounce', +'spell_dru_ravage', +'spell_gen_shadowmeld'); + +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(9005, 'spell_dru_pounce'), +(6785, 'spell_dru_ravage'), +(58984, 'spell_gen_shadowmeld'); diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 9876e7daa1f..1e54391f949 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -135,7 +135,8 @@ enum DruidSpellIconIds enum MiscSpells { - SPELL_CATEGORY_MANGLE_BEAR = 971 + SPELL_CATEGORY_MANGLE_BEAR = 971, + SPELL_RACIAL_SHADOWMELD = 58984 }; // 50334 - Berserk @@ -1985,6 +1986,40 @@ class spell_dru_maul : public SpellScript } }; +// 9005 - Pounce +class spell_dru_pounce : public SpellScript +{ + SpellCastResult CheckCast() + { + if (GetCaster()->HasAura(SPELL_RACIAL_SHADOWMELD)) + return SPELL_FAILED_TARGET_AURASTATE; + + return SPELL_CAST_OK; + } + + void Register() override + { + OnCheckCast.Register(&spell_dru_pounce::CheckCast); + } +}; + +// 6785 - Ravage +class spell_dru_ravage : public SpellScript +{ + SpellCastResult CheckCast() + { + if (GetCaster()->HasAura(SPELL_RACIAL_SHADOWMELD)) + return SPELL_FAILED_TARGET_AURASTATE; + + return SPELL_CAST_OK; + } + + void Register() override + { + OnCheckCast.Register(&spell_dru_ravage::CheckCast); + } +}; + void AddSC_druid_spell_scripts() { RegisterSpellScript(spell_dru_astral_alignment); @@ -2040,4 +2075,6 @@ void AddSC_druid_spell_scripts() RegisterSpellScript(spell_dru_wild_mushroom_detonate); RegisterSpellScript(spell_dru_stampeding_roar); RegisterSpellScript(spell_dru_feral_swiftness_clear); + RegisterSpellScript(spell_dru_pounce); + RegisterSpellScript(spell_dru_ravage); } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 68919bba209..f20322ce0fe 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -5447,6 +5447,31 @@ class spell_gen_face_rage : public AuraScript } }; +enum Shadowmeld +{ + SPELL_RACIAL_ELUSIVENESS = 21009 +}; + +// 58984 Shadowmeld (Racial) +class spell_gen_shadowmeld : public AuraScript +{ + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_RACIAL_ELUSIVENESS }); + } + + void HandleStealthLevel(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + if (AuraEffect const* aurEff = GetUnitOwner()->GetAuraEffect(SPELL_RACIAL_ELUSIVENESS, EFFECT_0)) + amount += aurEff->GetAmount(); + } + + void Register() override + { + DoEffectCalcAmount.Register(&spell_gen_shadowmeld::HandleStealthLevel, EFFECT_2, SPELL_AURA_MOD_STEALTH); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -5583,4 +5608,5 @@ void AddSC_generic_spell_scripts() RegisterSpellScript(spell_gen_wounded); RegisterSpellScript(spell_gen_rocket_barrage); RegisterSpellScript(spell_gen_face_rage); + RegisterSpellScript(spell_gen_shadowmeld); } diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index f5be442e98d..826ddf6f60f 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -76,7 +76,8 @@ enum RogueSpells SPELL_ROGUE_SERRATED_BLADES_R1 = 14171, SPELL_ROGUE_RUPTURE = 1943, SPELL_ROGUE_HONOR_AMONG_THIEVES_TRIGGERED = 51699, - SPELL_ROGUE_BLACKJACK_R1 = 79123 + SPELL_ROGUE_BLACKJACK_R1 = 79123, + SPELL_RACIAL_ELUSIVENESS = 21009 }; enum RogueSpellIcons @@ -847,7 +848,8 @@ class spell_rog_stealth : public SpellScriptLoader SPELL_ROGUE_MASTER_OF_SUBTLETY_PERIODIC, SPELL_ROGUE_OVERKILL_TALENT, SPELL_ROGUE_OVERKILL_POWER_REGEN, - SPELL_ROGUE_OVERKILL_PERIODIC + SPELL_ROGUE_OVERKILL_PERIODIC, + SPELL_RACIAL_ELUSIVENESS }); } @@ -880,10 +882,18 @@ class spell_rog_stealth : public SpellScriptLoader target->CastSpell(target, SPELL_ROGUE_OVERKILL_PERIODIC, true); } + void HandleSpeedIncrease(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + // Elusiveness (Racial) + if (AuraEffect const* aurEff = GetUnitOwner()->GetAuraEffect(SPELL_RACIAL_ELUSIVENESS, EFFECT_0)) + amount += aurEff->GetAmount(); + } + void Register() override { AfterEffectApply.Register(&spell_rog_stealth_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_MOD_SHAPESHIFT, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); AfterEffectRemove.Register(&spell_rog_stealth_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_MOD_SHAPESHIFT, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + DoEffectCalcAmount.Register(&spell_rog_stealth_AuraScript::HandleSpeedIncrease, EFFECT_2, SPELL_AURA_MOD_SPEED_ALWAYS); } };