diff options
3 files changed, 201 insertions, 30 deletions
diff --git a/sql/updates/world/3.3.5/9999_99_99_99_world.sql b/sql/updates/world/3.3.5/9999_99_99_99_world.sql new file mode 100644 index 00000000000..b192efa6814 --- /dev/null +++ b/sql/updates/world/3.3.5/9999_99_99_99_world.sql @@ -0,0 +1,20 @@ +DELETE FROM `spell_script_names` where `ScriptName` IN ('spell_jormungars_burning_spray','spell_jormungars_paralytic_spray','spell_jormungars_paralytic_toxin','spell_jormungars_paralysis'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(66902,'spell_jormungars_burning_spray'), -- Burning Spray 10m normal +(67627,'spell_jormungars_burning_spray'), -- Burning Spray 25m normal +(67628,'spell_jormungars_burning_spray'), -- Burning Spray 10m heroic +(67629,'spell_jormungars_burning_spray'), -- Burning Spray 25m heroic +(66901,'spell_jormungars_paralytic_spray'), -- Paralytic Spray 10m normal +(67615,'spell_jormungars_paralytic_spray'), -- Paralytic Spray 25m normal +(67616,'spell_jormungars_paralytic_spray'), -- Paralytic Spray 10m heroic +(67617,'spell_jormungars_paralytic_spray'), -- Paralytic Spray 25m heroic +(66823,'spell_jormungars_paralytic_toxin'), -- Paralytic Toxin 10m normal +(67618,'spell_jormungars_paralytic_toxin'), -- Paralytic Toxin 25m normal +(67619,'spell_jormungars_paralytic_toxin'), -- Paralytic Toxin 10m heroic +(67620,'spell_jormungars_paralytic_toxin'), -- Paralytic Toxin 25m heroic +(66830,'spell_jormungars_paralysis'); -- Paralysis + +-- Acidmaw missing text +DELETE FROM `creature_text` where entry = 35144 AND groupid = 1; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(35144,1,0,'You have been infected with a Paralytic Toxin!',42,0,100,0,0,0,36323,0,'Acidmaw - Special Attack'); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 4133d0c8d65..9b23caef9ab 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -846,16 +846,6 @@ void AuraEffect::UpdatePeriodic(Unit* caster) case 59911: // Tenacity (vehicle) GetBase()->RefreshDuration(); break; - case 66823: case 67618: case 67619: case 67620: // Paralytic Toxin - // Get 0 effect aura - if (AuraEffect* slow = GetBase()->GetEffect(0)) - { - int32 newAmount = slow->GetAmount() - 10; - if (newAmount < -100) - newAmount = -100; - slow->ChangeAmount(newAmount); - } - break; default: break; } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index 566c296a60e..7f4a2158d25 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -25,6 +25,7 @@ #include "Vehicle.h" #include "Player.h" #include "SpellScript.h" +#include "SpellAuraEffects.h" enum Yells { @@ -33,6 +34,7 @@ enum Yells // Acidmaw & Dreadscale EMOTE_ENRAGE = 0, + SAY_SPECIAL = 1, // Icehowl EMOTE_TRAMPLE_START = 0, @@ -78,22 +80,29 @@ enum BossSpells SPELL_FIRE_BOMB_DOT = 66318, SPELL_HEAD_CRACK = 66407, - //Acidmaw & Dreadscale + //Acidmaw & Dreadscale Generic + SPELL_SWEEP = 66794, + SUMMON_SLIME_POOL = 66883, + SPELL_EMERGE = 66947, + SPELL_SUBMERGE = 66948, + SPELL_ENRAGE = 68335, + SPELL_SLIME_POOL_EFFECT = 66882, //In 60s it diameter grows from 10y to 40y (r=r+0.25 per second) + SPELL_GROUND_VISUAL_0 = 66969, + SPELL_GROUND_VISUAL_1 = 68302, + SPELL_HATE_TO_ZERO = 63984, + //Acidmaw SPELL_ACID_SPIT = 66880, SPELL_PARALYTIC_SPRAY = 66901, - SPELL_ACID_SPEW = 66819, - SPELL_PARALYTIC_BITE = 66824, - SPELL_SWEEP_0 = 66794, - SUMMON_SLIME_POOL = 66883, - SPELL_FIRE_SPIT = 66796, + SPELL_PARALYTIC_BITE = 66824, //Paralytic Toxin + SPELL_ACID_SPEW = 66818, + SPELL_PARALYSIS = 66830, + SPELL_PARALYTIC_TOXIN = 66823, + //Dreadscale + SPELL_BURNING_BITE = 66879, // Burning Bile SPELL_MOLTEN_SPEW = 66821, - SPELL_BURNING_BITE = 66879, + SPELL_FIRE_SPIT = 66796, SPELL_BURNING_SPRAY = 66902, - SPELL_SWEEP_1 = 67646, - SPELL_EMERGE_0 = 66947, - SPELL_SUBMERGE_0 = 66948, - SPELL_ENRAGE = 68335, - SPELL_SLIME_POOL_EFFECT = 66882, //In 60s it diameter grows from 10y to 40y (r=r+0.25 per second) + SPELL_BURNING_BILE = 66869, //Icehowl SPELL_FEROCIOUS_BUTT = 66770, @@ -549,7 +558,7 @@ struct boss_jormungarAI : public BossAI if (!Enraged && instance->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL) { - me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0); + me->RemoveAurasDueToSpell(SPELL_SUBMERGE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); DoCast(SPELL_ENRAGE); Enraged = true; @@ -589,7 +598,8 @@ struct boss_jormungarAI : public BossAI acidmaw->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); acidmaw->SetReactState(REACT_AGGRESSIVE); acidmaw->SetInCombatWithZone(); - acidmaw->CastSpell(acidmaw, SPELL_EMERGE_0); + acidmaw->CastSpell(acidmaw, SPELL_EMERGE); + acidmaw->CastSpell(acidmaw, SPELL_GROUND_VISUAL_1, true); } return; case EVENT_SPRAY: @@ -598,7 +608,7 @@ struct boss_jormungarAI : public BossAI events.ScheduleEvent(EVENT_SPRAY, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS), 0, PHASE_STATIONARY); return; case EVENT_SWEEP: - DoCastAOE(SPELL_SWEEP_0); + DoCastAOE(SPELL_SWEEP); events.ScheduleEvent(EVENT_SWEEP, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS), 0, PHASE_STATIONARY); return; default: @@ -608,13 +618,14 @@ struct boss_jormungarAI : public BossAI if (events.IsInPhase(PHASE_MOBILE)) DoMeleeAttackIfReady(); if (events.IsInPhase(PHASE_STATIONARY)) - DoSpellAttackIfReady(SpitSpell); + DoCastVictim(SpitSpell); } void Submerge() { - DoCast(me, SPELL_SUBMERGE_0); - me->RemoveAurasDueToSpell(SPELL_EMERGE_0); + DoCast(me, SPELL_SUBMERGE); + DoCast(me, SPELL_GROUND_VISUAL_0, true); + me->RemoveAurasDueToSpell(SPELL_EMERGE); me->SetInCombatWithZone(); events.SetPhase(PHASE_SUBMERGED); events.ScheduleEvent(EVENT_EMERGE, 5*IN_MILLISECONDS, 0, PHASE_SUBMERGED); @@ -625,9 +636,11 @@ struct boss_jormungarAI : public BossAI void Emerge() { - DoCast(me, SPELL_EMERGE_0); + DoCast(me, SPELL_EMERGE); + DoCastAOE(SPELL_HATE_TO_ZERO, true); me->SetDisplayId(ModelMobile); - me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0); + me->RemoveAurasDueToSpell(SPELL_SUBMERGE); + me->RemoveAurasDueToSpell(SPELL_GROUND_VISUAL_0); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); // if the worm was mobile before submerging, make him stationary now @@ -636,6 +649,7 @@ struct boss_jormungarAI : public BossAI me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL); SetCombatMovement(false); me->SetDisplayId(ModelStationary); + me->CastSpell(me, SPELL_GROUND_VISUAL_1, true); events.SetPhase(PHASE_STATIONARY); events.ScheduleEvent(EVENT_SUBMERGE, 45*IN_MILLISECONDS, 0, PHASE_STATIONARY); events.ScheduleEvent(EVENT_SPIT, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS), 0, PHASE_STATIONARY); @@ -648,6 +662,7 @@ struct boss_jormungarAI : public BossAI SetCombatMovement(true); me->GetMotionMaster()->MoveChase(me->GetVictim()); me->SetDisplayId(ModelMobile); + me->RemoveAurasDueToSpell(SPELL_GROUND_VISUAL_1); events.SetPhase(PHASE_MOBILE); events.ScheduleEvent(EVENT_SUBMERGE, 45*IN_MILLISECONDS, 0, PHASE_MOBILE); events.ScheduleEvent(EVENT_BITE, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS), 0, PHASE_MOBILE); @@ -1122,6 +1137,148 @@ class boss_icehowl : public CreatureScript } }; +class spell_jormungars_paralytic_toxin : public SpellScriptLoader +{ +public: + spell_jormungars_paralytic_toxin() : SpellScriptLoader("spell_jormungars_paralytic_toxin") { } + + class spell_jormungars_paralytic_toxin_AuraScript : public AuraScript + { + PrepareAuraScript(spell_jormungars_paralytic_toxin_AuraScript); + + bool Validate(SpellInfo const* /*spell*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_PARALYSIS)) + return false; + return true; + } + + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* caster = GetCaster(); + if (caster && caster->GetEntry() == NPC_ACIDMAW) + { + if (Creature* acidMaw = caster->ToCreature()) + acidMaw->AI()->Talk(SAY_SPECIAL, GetTarget()); + } + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_PARALYSIS); + } + + void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) + { + if (!canBeRecalculated) + amount = aurEff->GetAmount(); + + canBeRecalculated = false; + } + + void HandleDummy(AuraEffect const* /*aurEff*/) + { + if (AuraEffect* slowEff = GetEffect(EFFECT_0)) + { + int32 newAmount = slowEff->GetAmount() - 10; + if (newAmount < -100) + newAmount = -100; + slowEff->ChangeAmount(newAmount); + + if (newAmount <= -100 && !GetTarget()->HasAura(SPELL_PARALYSIS)) + GetTarget()->CastSpell(GetTarget(), SPELL_PARALYSIS, true, NULL, slowEff, GetCasterGUID()); + } + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_jormungars_paralytic_toxin_AuraScript::OnApply, EFFECT_0, SPELL_AURA_MOD_DECREASE_SPEED, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_jormungars_paralytic_toxin_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_DECREASE_SPEED, AURA_EFFECT_HANDLE_REAL); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_jormungars_paralytic_toxin_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_DECREASE_SPEED); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_jormungars_paralytic_toxin_AuraScript::HandleDummy, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_jormungars_paralytic_toxin_AuraScript(); + } +}; + +class spell_jormungars_snakes_spray : public SpellScriptLoader +{ +public: + spell_jormungars_snakes_spray(const char* name, uint32 spellId) : SpellScriptLoader(name), _spellId(spellId) { } + + class spell_jormungars_snakes_spray_SpellScript : public SpellScript + { + PrepareSpellScript(spell_jormungars_snakes_spray_SpellScript); + + public: + spell_jormungars_snakes_spray_SpellScript(uint32 spellId) : SpellScript(), _spellId(spellId) { } + + bool Validate(SpellInfo const* /*spell*/) override + { + if (!sSpellMgr->GetSpellInfo(_spellId)) + return false; + return true; + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Player* target = GetHitPlayer()) + GetCaster()->CastSpell(target, _spellId, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_jormungars_snakes_spray_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } + + private: + uint32 _spellId; + }; + + SpellScript* GetSpellScript() const override + { + return new spell_jormungars_snakes_spray_SpellScript(_spellId); + } + +private: + uint32 _spellId; +}; + +class spell_jormungars_paralysis : public SpellScriptLoader +{ +public: + spell_jormungars_paralysis() : SpellScriptLoader("spell_jormungars_paralysis") { } + + class spell_jormungars_paralysis_AuraScript : public AuraScript + { + PrepareAuraScript(spell_jormungars_paralysis_AuraScript); + + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + if (InstanceScript* instance = caster->GetInstanceScript()) + if (instance->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_IN_PROGRESS || instance->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL) + return; + + Remove(); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_jormungars_paralysis_AuraScript::OnApply, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_jormungars_paralysis_AuraScript(); + } +}; + void AddSC_boss_northrend_beasts() { new boss_gormok(); @@ -1132,6 +1289,10 @@ void AddSC_boss_northrend_beasts() new boss_acidmaw(); new boss_dreadscale(); new npc_slime_pool(); + new spell_jormungars_paralytic_toxin(); + new spell_jormungars_snakes_spray("spell_jormungars_burning_spray", SPELL_BURNING_BILE); + new spell_jormungars_snakes_spray("spell_jormungars_paralytic_spray", SPELL_PARALYTIC_TOXIN); + new spell_jormungars_paralysis(); new boss_icehowl(); } |