From 92e868cf5dce2546d33ff9875392a9fc21607a28 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sun, 3 Jun 2018 18:01:27 +0200 Subject: [PATCH] Scripts/Pets: Lil' Ragnaros --- .../world/4.3.4/2018_06_03_10_world.sql | 1 + src/server/scripts/Pet/pet_generic.cpp | 87 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 sql/updates/world/4.3.4/2018_06_03_10_world.sql diff --git a/sql/updates/world/4.3.4/2018_06_03_10_world.sql b/sql/updates/world/4.3.4/2018_06_03_10_world.sql new file mode 100644 index 00000000000..081201f6996 --- /dev/null +++ b/sql/updates/world/4.3.4/2018_06_03_10_world.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `ScriptName`= 'npc_pet_gen_lil_ragnaros' WHERE `entry`= 51600; diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index 2d50dbbaba4..a9e654f2f21 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -320,10 +320,97 @@ class npc_pet_gen_mojo : public CreatureScript } }; +// Lil' Ragnaros +enum LilRagnaros +{ + SPELL_DND_LR_2 = 95804, // Root and emerge effect + SPELL_DND_SUMMON_BASIC_CAMPFIRE = 95811, + SPELL_DND_LR = 95802, + SPELL_SCORCHLING = 45887, + SPELL_DND_LR_1 = 95803, // Submerge effect + SPELL_DND_DESPAWN_BASIC_CAMPFIRE = 95813, + + EVENT_CHECK_PLAYER_DISTANCE = 1, +}; + +class npc_pet_gen_lil_ragnaros : public CreatureScript +{ + public: + npc_pet_gen_lil_ragnaros() : CreatureScript("npc_pet_gen_lil_ragnaros") { } + + struct npc_pet_gen_lil_ragnarosAI : public PetAI + { + npc_pet_gen_lil_ragnarosAI(Creature* creature) : PetAI(creature) + { + Initialize(); + } + + void Initialize() + { + _submerged = false; + } + + void IsSummonedBy(Unit* summoner) override + { + DoCastSelf(SPELL_DND_LR_2, true); + DoCastSelf(SPELL_DND_SUMMON_BASIC_CAMPFIRE, true); + DoCastSelf(SPELL_DND_LR, true); + DoCastSelf(SPELL_SCORCHLING, true); + _events.ScheduleEvent(EVENT_CHECK_PLAYER_DISTANCE, Seconds(1)); + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + if (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CHECK_PLAYER_DISTANCE: + if (Unit* owner = me->GetCharmerOrOwner()) + { + if (me->GetDistance(owner) >= 20.0f && !_submerged) + { + me->RemoveAllAuras(); + DoCastSelf(SPELL_DND_LR_1, true); + DoCastSelf(SPELL_DND_DESPAWN_BASIC_CAMPFIRE, true); + me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); + _submerged = true; + } + else if (me->GetDistance(owner) <= 5.0f && _submerged) + { + me->RemoveAurasDueToSpell(SPELL_DND_LR_1); + DoCastSelf(SPELL_DND_LR_2, true); + DoCastSelf(SPELL_DND_SUMMON_BASIC_CAMPFIRE, true); + DoCastSelf(SPELL_DND_LR, true); + DoCastSelf(SPELL_SCORCHLING, true); + _submerged = false; + } + } + _events.Repeat(Seconds(1)); + break; + default: + break; + } + } + } + private: + EventMap _events; + bool _submerged; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_pet_gen_lil_ragnarosAI(creature); + } +}; + void AddSC_generic_pet_scripts() { new npc_pet_gen_baby_blizzard_bear(); new npc_pet_gen_egbert(); new npc_pet_gen_pandaren_monk(); new npc_pet_gen_mojo(); + new npc_pet_gen_lil_ragnaros(); }