diff --git a/sql/updates/world/4.3.4/2021_03_08_00_world.sql b/sql/updates/world/4.3.4/2021_03_08_00_world.sql new file mode 100644 index 0000000000..d01e97f432 --- /dev/null +++ b/sql/updates/world/4.3.4/2021_03_08_00_world.sql @@ -0,0 +1,9 @@ +DELETE FROM `spell_proc` WHERE `SpellId` IN (-83340, 83359, 89388); +INSERT INTO `spell_proc` (`SpellId`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `Charges`) VALUES +(-83340, 9, 0x800 | 0x20000, 0x80000000, 0x0, 0, 1, 2, 2, 0), +(83359, 9, 0x80000, 0x0, 0x0, 0x10, 1, 1, 0, 1), +(89388, 9, 0x80000, 0x0, 0x0, 0x10, 1, 1, 0, 1); + +DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_hun_sic_em'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(-83340, 'spell_hun_sic_em'); diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index ad9fd1ead7..b89e6b317a 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -75,6 +75,8 @@ enum HunterSpells SPELL_HUNTER_PIERCING_SHOTS = 63468, SPELL_HUNTER_RAPID_RECUPERATION = 58883, SPELL_HUNTER_READINESS = 23989, + SPELL_HUNTER_SIC_EM_R1 = 83359, + SPELL_HUNTER_SIC_EM_R2 = 89388, SPELL_HUNTER_SERPENT_STING = 1978, SPELL_HUNTER_SNIPER_TRAINING_R1 = 53302, SPELL_HUNTER_SNIPER_TRAINING_BUFF_R1 = 64418, @@ -1767,6 +1769,42 @@ class spell_hun_crouching_tiger_hidden_chimera : public AuraScript } }; +static std::array SicEmSpellIds = +{ + SPELL_HUNTER_SIC_EM_R1, + SPELL_HUNTER_SIC_EM_R2 +}; + +class spell_hun_sic_em : public AuraScript +{ + bool Load() override + { + return GetCaster()->IsPlayer(); + } + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_HUNTER_SIC_EM_R1, + SPELL_HUNTER_SIC_EM_R2 + }); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + if (Player* player = GetTarget()->ToPlayer()) + if (Pet* pet = player->GetPet()) + pet->CastSpell(pet, SicEmSpellIds[GetSpellInfo()->GetRank() - 1], aurEff); + } + + void Register() override + { + OnEffectProc.Register(&spell_hun_sic_em::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } +}; + void AddSC_hunter_spell_scripts() { new spell_hun_ancient_hysteria(); @@ -1802,6 +1840,7 @@ void AddSC_hunter_spell_scripts() new spell_hun_ready_set_aim(); new spell_hun_scatter_shot(); RegisterSpellScript(spell_hun_serpent_sting); + RegisterSpellScript(spell_hun_sic_em); new spell_hun_sniper_training(); new spell_hun_steady_shot(); new spell_hun_improved_steady_shot();