diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Kalimdor/zone_felwood.cpp | 89 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 2 |
2 files changed, 90 insertions, 1 deletions
diff --git a/src/server/scripts/Kalimdor/zone_felwood.cpp b/src/server/scripts/Kalimdor/zone_felwood.cpp index 7e698348a0c..f8d9d1bbc2a 100644 --- a/src/server/scripts/Kalimdor/zone_felwood.cpp +++ b/src/server/scripts/Kalimdor/zone_felwood.cpp @@ -25,6 +25,94 @@ #include "GridNotifiersImpl.h" #include "SpellScript.h" +/*###### +## npc_whisperwind_lasher +######*/ + +enum WhisperwindLasher +{ + EVENT_CHECK_OOC = 1, + SPELL_INFECTED_WOULD = 52225, + SPELL_STAND = 37752, + NPC_WHISPERWIND_LASHER = 47747, + NPC_CORRUPTED_LASHER = 48387, + FACTION_HOSTILE = 14, + CHANCE_HOSTILE = 30 +}; + +class npc_whisperwind_lasher : public CreatureScript +{ +public: + npc_whisperwind_lasher() : CreatureScript("npc_whisperwind_lasher") { } + + struct npc_whisperwind_lasherAI : public ScriptedAI + { + npc_whisperwind_lasherAI(Creature* creature) : ScriptedAI(creature) { } + + void Reset() override + { + lasher_clicked = false; + } + + void OnSpellClick(Unit* clicker, bool& result) override + { + if (!result) + return; + + if (roll_chance_i(CHANCE_HOSTILE)) + { + me->CastSpell(me, SPELL_INFECTED_WOULD); + me->SetEntry(NPC_CORRUPTED_LASHER); + me->setFaction(FACTION_HOSTILE); + } + else + { + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + } + + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + me->CastSpell(me, SPELL_STAND); + me->GetMotionMaster()->MoveRandom(8.0f); + events.ScheduleEvent(EVENT_CHECK_OOC, 20000); + lasher_clicked = true; + + if (Player* player = clicker->ToPlayer()) + player->KilledMonsterCredit(NPC_WHISPERWIND_LASHER, 0); + } + + void UpdateAI(uint32 diff) override + { + if (!lasher_clicked) + return; + + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CHECK_OOC: + if (!me->IsInCombat()) + me->DespawnOrUnsummon(); + else + events.ScheduleEvent(EVENT_CHECK_OOC, 5000); + break; + } + } + DoMeleeAttackIfReady(); + } + + private: + EventMap events; + bool lasher_clicked; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_whisperwind_lasherAI(creature); + } +}; + /*##### # Spell 88254 "Swipe Honey" scripted for quest 27989 "Ruumbo Demands Honey" #####*/ @@ -174,6 +262,7 @@ public: spell_ruumbos_silly_dance() : SpellScriptLoader("spell_ruumbos_silly_dan void AddSC_felwood() { + new npc_whisperwind_lasher(); new spell_swipe_honey(); new spell_beesbees(); new spell_ruumbos_silly_dance(); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 8d066c615fc..94d2a95f618 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -3685,8 +3685,8 @@ public: if (!target) return; - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); target->SetByteValue(UNIT_FIELD_BYTES_1, 0, UNIT_STAND_STATE_STAND); + target->HandleEmoteCommand(EMOTE_STATE_NONE); } void Register() override |