diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 150 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 | ||||
-rw-r--r-- | src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp | 33 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp | 51 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp | 17 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_dk.cpp | 30 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_druid.cpp | 37 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_hunter.cpp | 58 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 23 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 41 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_shaman.cpp | 21 |
11 files changed, 301 insertions, 161 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 3675a9980a6..4d0093a3b13 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -826,7 +826,7 @@ void AuraEffect::PeriodicTick(AuraApplication* aurApp, Unit* caster) const switch (GetAuraType()) { case SPELL_AURA_PERIODIC_DUMMY: - HandlePeriodicDummyAuraTick(target, caster); + // handled via scripts break; case SPELL_AURA_PERIODIC_TRIGGER_SPELL: HandlePeriodicTriggerSpellAuraTick(target, caster); @@ -4998,154 +4998,6 @@ void AuraEffect::HandlePreventResurrection(AuraApplication const* aurApp, uint8 aurApp->GetTarget()->SetByteFlag(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_FLAGS, PLAYER_FIELD_BYTE_RELEASE_TIMER); } -void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const -{ - switch (GetSpellInfo()->SpellFamilyName) - { - case SPELLFAMILY_GENERIC: - switch (GetId()) - { - case 66149: // Bullet Controller Periodic - 10 Man - case 68396: // Bullet Controller Periodic - 25 Man - { - if (!caster) - break; - - caster->CastCustomSpell(66152, SPELLVALUE_MAX_TARGETS, urand(1, 6), target, true); - caster->CastCustomSpell(66153, SPELLVALUE_MAX_TARGETS, urand(1, 6), target, true); - break; - } - case 62292: // Blaze (Pool of Tar) - // should we use custom damage? - target->CastSpell(nullptr, m_spellInfo->Effects[m_effIndex].TriggerSpell, true); - break; - case 62399: // Overload Circuit - if (target->GetMap()->IsDungeon() && int(target->GetAppliedAuras().count(62399)) >= (target->GetMap()->IsHeroic() ? 4 : 2)) - { - target->CastSpell(target, 62475, true); // System Shutdown - if (Unit* veh = target->GetVehicleBase()) - veh->CastSpell(target, 62475, true); - } - break; - case 64821: // Fuse Armor (Razorscale) - if (GetBase()->GetStackAmount() == GetSpellInfo()->StackAmount) - { - target->CastSpell(target, 64774, true, nullptr, nullptr, GetCasterGUID()); - target->RemoveAura(64821); - } - break; - } - break; - case SPELLFAMILY_MAGE: - { - // Mirror Image - if (GetId() == 55342) - // Set name of summons to name of caster - target->CastSpell(nullptr, m_spellInfo->Effects[m_effIndex].TriggerSpell, true); - break; - } - case SPELLFAMILY_DRUID: - { - switch (GetSpellInfo()->Id) - { - // Frenzied Regeneration - case 22842: - { - // Converts up to 10 rage per second into health for $d. Each point of rage is converted into ${$m2/10}.1% of max health. - // Should be manauser - if (target->getPowerType() != POWER_RAGE) - break; - uint32 rage = target->GetPower(POWER_RAGE); - // Nothing todo - if (rage == 0) - break; - int32 mod = (rage < 100) ? rage : 100; - int32 points = target->CalculateSpellDamage(target, GetSpellInfo(), 1); - int32 regen = target->GetMaxHealth() * (mod * points / 10) / 1000; - target->CastCustomSpell(target, 22845, ®en, nullptr, nullptr, true, nullptr, this); - target->SetPower(POWER_RAGE, rage-mod); - break; - } - } - break; - } - case SPELLFAMILY_ROGUE: - { - switch (GetSpellInfo()->Id) - { - // Master of Subtlety - case 31666: - target->RemoveAurasDueToSpell(31665); - break; - // Overkill - case 58428: - target->RemoveAurasDueToSpell(58427); - break; - } - break; - } - case SPELLFAMILY_HUNTER: - { - // Explosive Shot - if (GetSpellInfo()->SpellFamilyFlags[1] & 0x80000000) - { - if (caster) - caster->CastCustomSpell(53352, SPELLVALUE_BASE_POINT0, m_amount, target, true, nullptr, this); - break; - } - switch (GetSpellInfo()->Id) - { - // Feeding Frenzy Rank 1 - case 53511: - if (target->GetVictim() && target->EnsureVictim()->HealthBelowPct(35)) - target->CastSpell(target, 60096, true, nullptr, this); - return; - // Feeding Frenzy Rank 2 - case 53512: - if (target->GetVictim() && target->EnsureVictim()->HealthBelowPct(35)) - target->CastSpell(target, 60097, true, nullptr, this); - return; - default: - break; - } - break; - } - case SPELLFAMILY_SHAMAN: - if (GetId() == 52179) // Astral Shift - { - // Periodic need for remove visual on stun/fear/silence lost - if (!(target->GetUInt32Value(UNIT_FIELD_FLAGS)&(UNIT_FLAG_STUNNED|UNIT_FLAG_FLEEING|UNIT_FLAG_SILENCED))) - target->RemoveAurasDueToSpell(52179); - break; - } - break; - case SPELLFAMILY_DEATHKNIGHT: - switch (GetId()) - { - case 49016: // Hysteria - uint32 damage = uint32(target->CountPctFromMaxHealth(1)); - target->DealDamage(target, damage, nullptr, NODAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); - break; - } - // Blood of the North - // Reaping - // Death Rune Mastery - if (GetSpellInfo()->SpellIconID == 3041 || GetSpellInfo()->SpellIconID == 22 || GetSpellInfo()->SpellIconID == 2622) - { - if (target->GetTypeId() != TYPEID_PLAYER) - return; - if (target->ToPlayer()->getClass() != CLASS_DEATH_KNIGHT) - return; - - // timer expired - remove death runes - target->ToPlayer()->RemoveRunesByAuraEffect(this); - } - break; - default: - break; - } -} - void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster) const { // generic casting code with custom spells and target/caster customs diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 861f02c14f4..d18ac2d0919 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -300,7 +300,6 @@ class TC_GAME_API AuraEffect void HandlePreventResurrection(AuraApplication const* aurApp, uint8 mode, bool apply) const; // aura effect periodic tick handlers - void HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const; void HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster) const; void HandlePeriodicTriggerSpellWithValueAuraTick(Unit* target, Unit* caster) const; void HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index 7050f20c1c9..33c4ffc7249 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -90,7 +90,10 @@ enum BossSpells SPELL_POWER_TWINS = 65879, SPELL_BERSERK = 64238, SPELL_POWERING_UP = 67590, - SPELL_SURGE_OF_SPEED = 65828 + SPELL_SURGE_OF_SPEED = 65828, + + SPELL_SUMMON_PERIODIC_LIGHT = 66152, + SPELL_SUMMON_PERIODIC_DARK = 66153 }; enum Events @@ -695,6 +698,33 @@ class npc_bullet_controller : public CreatureScript } }; +// 66149 - Bullet Controller Periodic +// 68396 - Bullet Controller Periodic +class spell_bullet_controller : public AuraScript +{ + PrepareAuraScript(spell_bullet_controller); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + return ValidateSpellInfo({ SPELL_SUMMON_PERIODIC_LIGHT, SPELL_SUMMON_PERIODIC_DARK }); + } + + void PeriodicTick(AuraEffect const* /*aurEff*/) + { + Unit* caster = GetCaster(); + if (!caster) + return; + + caster->CastCustomSpell(SPELL_SUMMON_PERIODIC_LIGHT, SPELLVALUE_MAX_TARGETS, urand(1, 6), GetTarget(), true); + caster->CastCustomSpell(SPELL_SUMMON_PERIODIC_DARK, SPELLVALUE_MAX_TARGETS, urand(1, 6), GetTarget(), true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_bullet_controller::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } +}; + class spell_powering_up : public SpellScriptLoader { public: @@ -907,6 +937,7 @@ void AddSC_boss_twin_valkyr() new npc_essence_of_twin(); new npc_bullet_controller(); + RegisterAuraScript(spell_bullet_controller); new spell_powering_up(); new spell_valkyr_essences(); new spell_power_of_the_twins(); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 09f80db1f36..05e509c6987 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -34,6 +34,7 @@ #include "ScriptedEscortAI.h" #include "ScriptedGossip.h" #include "Spell.h" +#include "SpellAuraEffects.h" #include "SpellInfo.h" #include "SpellScript.h" #include "ulduar.h" @@ -1464,6 +1465,54 @@ class achievement_orbit_uary : public AchievementCriteriaScript } }; +// 62399 Overload Circuit +class spell_overload_circuit : public AuraScript +{ + PrepareAuraScript(spell_overload_circuit); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + return ValidateSpellInfo({ SPELL_SYSTEMS_SHUTDOWN }); + } + + void PeriodicTick(AuraEffect const* /*aurEff*/) + { + if (!GetTarget()->GetMap()->IsDungeon() || int32(GetTarget()->GetAppliedAuras().count(GetId())) < (GetTarget()->GetMap()->Is25ManRaid() ? 4 : 2)) + return; + + GetTarget()->CastSpell(nullptr, SPELL_SYSTEMS_SHUTDOWN, true); + if (Unit* veh = GetTarget()->GetVehicleBase()) + veh->CastSpell(nullptr, SPELL_SYSTEMS_SHUTDOWN, true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_overload_circuit::PeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY); + } +}; + +// 62292 Blaze +class spell_tar_blaze : public AuraScript +{ + PrepareAuraScript(spell_tar_blaze); + + bool Validate(SpellInfo const* spellInfo) + { + return ValidateSpellInfo({ spellInfo->Effects[EFFECT_0].TriggerSpell }); + } + + void PeriodicTick(AuraEffect const* aurEff) + { + // should we use custom damage? + GetTarget()->CastSpell(nullptr, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_tar_blaze::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } +}; + class spell_load_into_catapult : public SpellScriptLoader { enum Spells @@ -1819,6 +1868,8 @@ void AddSC_boss_flame_leviathan() new achievement_nuked_from_orbit(); new achievement_orbit_uary(); + RegisterAuraScript(spell_overload_circuit); + RegisterAuraScript(spell_tar_blaze); new spell_load_into_catapult(); new spell_auto_repair(); new spell_systems_shutdown(); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 2b5e11c0d50..42e140ec066 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -642,7 +642,9 @@ struct boss_razorscale : public BossAI DoCastSelf(SPELL_FIREBOLT); break; case EVENT_FUSE_ARMOR: - DoCastVictim(SPELL_FUSE_ARMOR); + if (Unit* victim = me->GetVictim()) + if (!victim->HasAura(SPELL_FUSED_ARMOR)) + DoCast(victim, SPELL_FUSE_ARMOR); events.Repeat(Seconds(10), Seconds(15)); break; case EVENT_RESUME_MOVE_CHASE: @@ -1660,7 +1662,7 @@ class spell_razorscale_summon_iron_dwarves : public SpellScript } }; -// 64771 - Fuse Armor +// 64821 - Fuse Armor class spell_razorscale_fuse_armor : public AuraScript { PrepareAuraScript(spell_razorscale_fuse_armor); @@ -1670,15 +1672,18 @@ class spell_razorscale_fuse_armor : public AuraScript return ValidateSpellInfo({ SPELL_FUSED_ARMOR }); } - void HandleFused(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + void HandleFused(AuraEffect const* /*aurEff*/) { - if (GetStackAmount() == 5) - GetTarget()->CastSpell(GetTarget(), SPELL_FUSED_ARMOR, true); + if (GetStackAmount() != GetSpellInfo()->StackAmount) + return; + + GetTarget()->CastSpell(nullptr, SPELL_FUSED_ARMOR, true); + Remove(); } void Register() override { - AfterEffectApply += AuraEffectRemoveFn(spell_razorscale_fuse_armor::HandleFused, EFFECT_1, SPELL_AURA_MOD_MELEE_HASTE, AURA_EFFECT_HANDLE_REAL); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_razorscale_fuse_armor::HandleFused, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 1cbe0537563..decd33701db 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -1020,6 +1020,11 @@ class spell_dk_death_rune : public SpellScriptLoader { PrepareAuraScript(spell_dk_death_rune_AuraScript); + bool Load() override + { + return GetUnitOwner()->GetTypeId() == TYPEID_PLAYER && GetUnitOwner()->ToPlayer()->getClass() == CLASS_DEATH_KNIGHT; + } + bool CheckProc(ProcEventInfo& eventInfo) { Unit* caster = eventInfo.GetActor(); @@ -1073,10 +1078,17 @@ class spell_dk_death_rune : public SpellScriptLoader } } + void PeriodicTick(AuraEffect const* aurEff) + { + // timer expired - remove death runes + GetTarget()->ToPlayer()->RemoveRunesByAuraEffect(aurEff); + } + void Register() override { DoCheckProc += AuraCheckProcFn(spell_dk_death_rune_AuraScript::CheckProc); OnProc += AuraProcFn(spell_dk_death_rune_AuraScript::HandleProc); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_dk_death_rune_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; @@ -1240,6 +1252,23 @@ class spell_dk_glyph_of_scourge_strike : public SpellScriptLoader } }; +// 49016 - Hysteria +class spell_dk_hysteria : public AuraScript +{ + PrepareAuraScript(spell_dk_hysteria); + + void PeriodicTick(AuraEffect const* aurEff) + { + uint32 const damage = GetTarget()->CountPctFromMaxHealth(GetTarget()->CalculateSpellDamage(nullptr, GetSpellInfo(), aurEff->GetEffIndex())); + GetTarget()->DealDamage(GetTarget(), damage, nullptr, NODAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_dk_hysteria::PeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY); + } +}; + // 51209 - Hungering Cold class spell_dk_hungering_cold : public SpellScriptLoader { @@ -2948,6 +2977,7 @@ void AddSC_deathknight_spell_scripts() new spell_dk_ghoul_explode(); new spell_dk_glyph_of_death_grip(); new spell_dk_glyph_of_scourge_strike(); + RegisterAuraScript(spell_dk_hysteria); new spell_dk_hungering_cold(); new spell_dk_icebound_fortitude(); new spell_dk_improved_blood_presence(); diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 1fda9d3ebf2..c4e7d96652c 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -88,7 +88,8 @@ enum DruidSpells SPELL_DRUID_BALANCE_T10_BONUS = 70718, SPELL_DRUID_BALANCE_T10_BONUS_PROC = 70721, SPELL_DRUID_BARKSKIN_01 = 63058, - SPELL_DRUID_RESTORATION_T10_2P_BONUS = 70658 + SPELL_DRUID_RESTORATION_T10_2P_BONUS = 70658, + SPELL_DRUID_FRENZIED_REGENERATION_HEAL = 22845 }; // 22812 - Barkskin @@ -477,6 +478,39 @@ class spell_dru_flight_form : public SpellScriptLoader } }; +// 22842 - Frenzied Regeneration +class spell_dru_frenzied_regeneration : public AuraScript +{ + PrepareAuraScript(spell_dru_frenzied_regeneration); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DRUID_FRENZIED_REGENERATION_HEAL }); + } + + void PeriodicTick(AuraEffect const* aurEff) + { + // Converts up to 10 rage per second into health for $d. Each point of rage is converted into ${$m2/10}.1% of max health. + if (GetTarget()->getPowerType() != POWER_RAGE) + return; + + uint32 rage = GetTarget()->GetPower(POWER_RAGE); + // Nothing to do + if (!rage) + return; + + int32 const mod = std::min(static_cast<int32>(rage), 100); + int32 const regen = CalculatePct(GetTarget()->GetMaxHealth(), GetTarget()->CalculateSpellDamage(nullptr, GetSpellInfo(), EFFECT_1) * mod / 100.f); + GetTarget()->CastCustomSpell(SPELL_DRUID_FRENZIED_REGENERATION_HEAL, SPELLVALUE_BASE_POINT0, regen, nullptr, true, nullptr, aurEff); + GetTarget()->SetPower(POWER_RAGE, rage - mod); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_dru_frenzied_regeneration::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } +}; + // 63057 - Glyph of Barkskin class spell_dru_glyph_of_barkskin : public SpellScriptLoader { @@ -2308,6 +2342,7 @@ void AddSC_druid_spell_scripts() new spell_dru_enrage(); new spell_dru_forms_trinket(); new spell_dru_flight_form(); + RegisterAuraScript(spell_dru_frenzied_regeneration); new spell_dru_glyph_of_barkskin(); new spell_dru_glyph_of_innervate(); new spell_dru_glyph_of_rake(); diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index a7fed99dccf..a96f9a4cd88 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -66,7 +66,10 @@ enum HunterSpells SPELL_REPLENISHMENT = 57669, SPELL_HUNTER_RAPID_RECUPERATION_MANA_R1 = 56654, SPELL_HUNTER_RAPID_RECUPERATION_MANA_R2 = 58882, - SPELL_HUNTER_GLYPH_OF_MEND_PET_HAPPINESS = 57894 + SPELL_HUNTER_GLYPH_OF_MEND_PET_HAPPINESS = 57894, + SPELL_HUNTER_EXPLOSIVE_SHOT_DAMAGE = 53352, + SPELL_HUNTER_FEEDING_FRENZY_BUFF_R1 = 60096, + SPELL_HUNTER_FEEDING_FRENZY_BUFF_R2 = 60097 }; // 13161 - Aspect of the Beast @@ -458,6 +461,57 @@ class spell_hun_glyph_of_mend_pet : public SpellScriptLoader } }; +// -53301 - Explosive Shot +class spell_hun_explosive_shot : public AuraScript +{ + PrepareAuraScript(spell_hun_explosive_shot); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_HUNTER_EXPLOSIVE_SHOT_DAMAGE }); + } + + void PeriodicTick(AuraEffect const* aurEff) + { + if (Unit* caster = GetCaster()) + caster->CastCustomSpell(SPELL_HUNTER_EXPLOSIVE_SHOT_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_hun_explosive_shot::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } +}; + +// -53511 - Feeding Frenzy +class spell_hun_feeding_frenzy : public AuraScript +{ + PrepareAuraScript(spell_hun_feeding_frenzy); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_HUNTER_FEEDING_FRENZY_BUFF_R1, SPELL_HUNTER_FEEDING_FRENZY_BUFF_R2 }); + } + + void PeriodicTick(AuraEffect const* aurEff) + { + static uint32 const triggerSpells[2] = { SPELL_HUNTER_FEEDING_FRENZY_BUFF_R1, SPELL_HUNTER_FEEDING_FRENZY_BUFF_R2 }; + + uint8 rank = GetSpellInfo()->GetRank(); + uint32 spellId = triggerSpells[rank - 1]; + + if (GetTarget()->GetVictim() && GetTarget()->EnsureVictim()->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT)) + GetTarget()->CastSpell(nullptr, spellId, true, nullptr, aurEff); + else + GetTarget()->RemoveAurasDueToSpell(spellId); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_hun_feeding_frenzy::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } +}; + // -53290 - Hunting Party class spell_hun_hunting_party : public SpellScriptLoader { @@ -1544,6 +1598,8 @@ void AddSC_hunter_spell_scripts() new spell_hun_disengage(); new spell_hun_glyph_of_arcane_shot(); new spell_hun_glyph_of_mend_pet(); + RegisterAuraScript(spell_hun_explosive_shot); + RegisterAuraScript(spell_hun_feeding_frenzy); new spell_hun_hunting_party(); new spell_hun_improved_mend_pet(); new spell_hun_invigoration(); diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index e45ed806ec2..b5b12afae5e 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -1176,6 +1176,28 @@ class spell_mage_master_of_elements : public SpellScriptLoader } }; +// 55342 - Mirror Image +class spell_mage_mirror_image : public AuraScript +{ + PrepareAuraScript(spell_mage_mirror_image); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ spellInfo->Effects[EFFECT_2].TriggerSpell }); + } + + void PeriodicTick(AuraEffect const* aurEff) + { + // Set name of summons to name of caster + GetTarget()->CastSpell(nullptr, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_mage_mirror_image::PeriodicTick, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY); + } +}; + // -44404 - Missile Barrage class spell_mage_missile_barrage : public SpellScriptLoader { @@ -1334,6 +1356,7 @@ void AddSC_mage_spell_scripts() new spell_mage_magic_absorption(); new spell_mage_mana_shield(); new spell_mage_master_of_elements(); + RegisterAuraScript(spell_mage_mirror_image); new spell_mage_missile_barrage(); new spell_mage_polymorph_cast_visual(); new spell_mage_summon_water_elemental(); diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 0476c4c09df..d7c0e61ec1e 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -52,7 +52,9 @@ enum RogueSpells SPELL_ROGUE_T10_2P_BONUS = 70804, SPELL_ROGUE_GLYPH_OF_BACKSTAB_TRIGGER = 63975, SPELL_ROGUE_QUICK_RECOVERY_ENERGY = 31663, - SPELL_ROGUE_CRIPPLING_POISON = 3409 + SPELL_ROGUE_CRIPPLING_POISON = 3409, + SPELL_ROGUE_MASTER_OF_SUBTLETY_BUFF = 31665, + SPELL_ROGUE_OVERKILL_BUFF = 58427 }; // 13877, 33735, (check 51211, 65956) - Blade Flurry @@ -479,6 +481,41 @@ class spell_rog_nerves_of_steel : public SpellScriptLoader } }; +// 31666 - Master of Subtlety +// 58428 - Overkill - aura remove spell (SERVERSIDE) +template <uint32 RemoveSpell> +class spell_rog_overkill_mos : public SpellScriptLoader +{ + public: + spell_rog_overkill_mos(char const* ScriptName) : SpellScriptLoader(ScriptName) { } + + template <uint32 RemoveSpellId> + class spell_rog_overkill_mos_AuraScript : public AuraScript + { + PrepareAuraScript(spell_rog_overkill_mos_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ RemoveSpellId }); + } + + void PeriodicTick(AuraEffect const* /*aurEff*/) + { + GetTarget()->RemoveAurasDueToSpell(RemoveSpellId); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_overkill_mos_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_rog_overkill_mos_AuraScript<RemoveSpell>(); + } +}; + // 14185 - Preparation class spell_rog_preparation : public SpellScriptLoader { @@ -1084,6 +1121,8 @@ void AddSC_rogue_spell_scripts() new spell_rog_deadly_poison(); new spell_rog_killing_spree(); new spell_rog_nerves_of_steel(); + new spell_rog_overkill_mos<SPELL_ROGUE_OVERKILL_BUFF>("spell_rog_overkill"); + new spell_rog_overkill_mos<SPELL_ROGUE_MASTER_OF_SUBTLETY_BUFF>("spell_rog_master_of_subtlety"); new spell_rog_preparation(); new spell_rog_prey_on_the_weak(); new spell_rog_quick_recovery(); diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index ecde34a4b8e..4585f4435f4 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -88,7 +88,7 @@ enum ShamanSpells SPELL_SHAMAN_SHAMANISTIC_RAGE_PROC = 30824, SPELL_SHAMAN_MAELSTROM_POWER = 70831, SPELL_SHAMAN_T10_ENHANCEMENT_4P_BONUS = 70832, - SPELL_SHAMAN_BLESSING_OF_THE_ETERNALS_R1 = 51554 + SPELL_SHAMAN_BLESSING_OF_THE_ETERNALS_R1 = 51554, }; enum ShamanSpellIcons @@ -265,6 +265,24 @@ class spell_sha_astral_shift_aura : public SpellScriptLoader } }; +// 52179 - Astral Shift +class spell_sha_astral_shift_visual_dummy : public AuraScript +{ + PrepareAuraScript(spell_sha_astral_shift_visual_dummy); + + void PeriodicTick(AuraEffect const* /*aurEff*/) + { + // Periodic needed to remove visual on stun/fear/silence lost + if (!GetTarget()->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_FLEEING | UNIT_FLAG_SILENCED)) + Remove(); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_sha_astral_shift_visual_dummy::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } +}; + // 2825 - Bloodlust class spell_sha_bloodlust : public SpellScriptLoader { @@ -2247,6 +2265,7 @@ void AddSC_shaman_spell_scripts() new spell_sha_ancestral_awakening_proc(); new spell_sha_astral_shift(); new spell_sha_astral_shift_aura(); + RegisterAuraScript(spell_sha_astral_shift_visual_dummy); new spell_sha_bloodlust(); new spell_sha_chain_heal(); new spell_sha_cleansing_totem_pulse(); |