aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Maelstrom/kezan.cpp
diff options
context:
space:
mode:
authorUkulutl <gascart@gmail.com>2013-08-06 13:18:32 +0100
committerNay <dnpd.dd@gmail.com>2013-08-06 13:18:58 +0100
commitdf9f34cde7ae34801f16caddbed51724f0f45739 (patch)
tree1a281587400dfd7fa2e10918e39b533316962114 /src/server/scripts/Maelstrom/kezan.cpp
parent3995a55b2ddfbb6abee3c11d9631a3540503d774 (diff)
Scripts/Kezan: Fix quest "Good Help is Hard to Find"
Added Maelstorm to scriptloader Close #10337 Signed-off-by: Nay <dnpd.dd@gmail.com>
Diffstat (limited to 'src/server/scripts/Maelstrom/kezan.cpp')
-rw-r--r--src/server/scripts/Maelstrom/kezan.cpp129
1 files changed, 129 insertions, 0 deletions
diff --git a/src/server/scripts/Maelstrom/kezan.cpp b/src/server/scripts/Maelstrom/kezan.cpp
new file mode 100644
index 00000000000..b31f71ab970
--- /dev/null
+++ b/src/server/scripts/Maelstrom/kezan.cpp
@@ -0,0 +1,129 @@
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "ScriptedGossip.h"
+#include "Player.h"
+
+/*####
+## npc_defiant_troll (http://www.wowhead.com/quest=14069)
+####*/
+
+enum DefiantTrollEnum
+{
+ DEFFIANT_KILL_CREDIT = 34830,
+ SPELL_LIGHTNING_VISUAL = 45870,
+ SPELL_ENRAGE = 45111,
+ QUEST_GOOD_HELP_IS_HARD_TO_FIND = 14069,
+ GO_DEPOSIT = 195489,
+ SAY_WORK = 0
+};
+
+class npc_defiant_troll : public CreatureScript
+{
+public:
+ npc_defiant_troll() : CreatureScript("npc_defiant_troll") { }
+
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ {
+ return new npc_defiant_trollAI(creature);
+ }
+
+ struct npc_defiant_trollAI : public ScriptedAI
+ {
+ npc_defiant_trollAI(Creature* creature) : ScriptedAI(creature) { }
+
+ uint32 rebuffTimer;
+ bool work;
+
+ void Reset () OVERRIDE
+ {
+ rebuffTimer = 0;
+ work = false;
+ me->CastSpell(me, SPELL_ENRAGE, true);
+ }
+
+ void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE
+ {
+ if (id == 1)
+ work = true;
+ }
+
+ bool IsWorking() const { return work; }
+
+ void UpdateAI(const uint32 diff) OVERRIDE
+ {
+ if (IsWorking())
+ me->HandleEmoteCommand(EMOTE_ONESHOT_WORK_MINING);
+
+ if (rebuffTimer <= diff)
+ {
+ Reset();
+
+ switch (urand(0, 2))
+ {
+ case 0:
+ me->HandleEmoteCommand(EMOTE_STATE_EXCLAIM);
+ break;
+ case 1:
+ me->HandleEmoteCommand(EMOTE_STATE_DANCE);
+ break;
+ case 2:
+ me->HandleEmoteCommand(EMOTE_ONESHOT_NONE);
+ break;
+ }
+ rebuffTimer = 120000; // Rebuff again in 2 minutes
+ }
+ else
+ rebuffTimer -= diff;
+
+ if (!UpdateVictim())
+ return;
+
+ //DoMeleeAttackIfReady();
+ }
+ };
+
+ bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ {
+ if (player->GetQuestStatus(QUEST_GOOD_HELP_IS_HARD_TO_FIND) == QUEST_STATUS_INCOMPLETE && !CAST_AI(npc_defiant_troll::npc_defiant_trollAI, creature->AI())->IsWorking())
+ {
+ player->CastSpell(creature, SPELL_LIGHTNING_VISUAL, true);
+ player->KilledMonsterCredit(DEFFIANT_KILL_CREDIT, creature->GetGUID());
+ creature->AI()->Talk(SAY_WORK);
+ creature->RemoveAllAuras();
+
+ if (GameObject* deposit = creature->FindNearestGameObject(GO_DEPOSIT, 20))
+ creature->GetMotionMaster()->MovePoint(1, deposit->GetPositionX() - 1.0f, deposit->GetPositionY(), Deposit->GetPositionZ());
+
+ if (player->GetQuestStatus(QUEST_GOOD_HELP_IS_HARD_TO_FIND) == QUEST_STATUS_COMPLETE)
+ player->RemoveAura(SPELL_LIGHTNING_VISUAL);
+
+ player->CLOSE_GOSSIP_MENU();
+
+ return true;
+ }
+
+ player->CLOSE_GOSSIP_MENU();
+
+ return false;
+ }
+};
+
+void AddSC_kezan()
+{
+ new npc_defiant_troll();
+}