aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMalcrom <malcromdev@gmail.com>2014-09-14 15:07:18 -0230
committerMalcrom <malcromdev@gmail.com>2014-09-14 15:07:18 -0230
commitf471c49563d680e06f01fd712821de28f7339798 (patch)
tree4e673165dff7d6e3597b0b3d22b5ecc6042bb17f /src
parent2e026fab0d5eec28d559e43ee7bfb4db20a6ca49 (diff)
Scripting/Felwood: Scripted Whisperwind Lasher for quest Weeding the Lawn
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Kalimdor/zone_felwood.cpp89
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp2
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