aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp12
-rw-r--r--src/server/game/Scripting/ScriptLoader.h1
-rw-r--r--src/server/scripts/CMakeLists.txt1
-rw-r--r--src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp2
-rw-r--r--src/server/scripts/Maelstrom/CMakeLists.txt14
-rw-r--r--src/server/scripts/Maelstrom/kezan.cpp129
6 files changed, 158 insertions, 1 deletions
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index 5b535fc99a2..6e86b79a38c 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -615,6 +615,9 @@ void AddSC_shattrath_city();
void AddSC_terokkar_forest();
void AddSC_zangarmarsh();
+// Maelstrom
+void AddSC_kezan();
+
// Events
void AddSC_event_childrens_week();
@@ -644,6 +647,7 @@ void AddScripts()
AddKalimdorScripts();
AddOutlandScripts();
AddNorthrendScripts();
+ AddMaelstromScripts();
AddEventScripts();
AddBattlegroundScripts();
AddOutdoorPvPScripts();
@@ -1276,6 +1280,14 @@ void AddNorthrendScripts()
#endif
}
+
+void AddMaelstromScripts()
+{
+#ifdef SCRIPTS
+ AddSC_kezan();
+#endif
+}
+
void AddEventScripts()
{
#ifdef SCRIPTS
diff --git a/src/server/game/Scripting/ScriptLoader.h b/src/server/game/Scripting/ScriptLoader.h
index ef29b54369d..5e1b829798e 100644
--- a/src/server/game/Scripting/ScriptLoader.h
+++ b/src/server/game/Scripting/ScriptLoader.h
@@ -27,6 +27,7 @@ void AddEasternKingdomsScripts();
void AddKalimdorScripts();
void AddOutlandScripts();
void AddNorthrendScripts();
+void AddMaelstromScripts();
void AddEventScripts();
void AddBattlegroundScripts();
void AddOutdoorPvPScripts();
diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt
index 12e68fc5831..55abbec3025 100644
--- a/src/server/scripts/CMakeLists.txt
+++ b/src/server/scripts/CMakeLists.txt
@@ -38,6 +38,7 @@ if(SCRIPTS)
include(Outland/CMakeLists.txt)
include(Northrend/CMakeLists.txt)
include(Events/CMakeLists.txt)
+ include(Maelstrom/CMakeLists.txt)
endif()
message(STATUS "SCRIPT PREPARATION COMPLETE")
diff --git a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp
index b2f27bd619a..7985ee8e349 100644
--- a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp
@@ -53,7 +53,7 @@ enum ProfessorPhizzlethorpe
EVENT_SAY_3 = 1,
EVENT_SAY_6 = 2,
EVENT_SAY_8 = 3,
-
+
// Quests
QUEST_SUNKEN_TREASURE = 665,
QUEST_GOGGLE_BOGGLE = 26050,
diff --git a/src/server/scripts/Maelstrom/CMakeLists.txt b/src/server/scripts/Maelstrom/CMakeLists.txt
new file mode 100644
index 00000000000..79f0789fd3f
--- /dev/null
+++ b/src/server/scripts/Maelstrom/CMakeLists.txt
@@ -0,0 +1,14 @@
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+set(scripts_STAT_SRCS
+ ${scripts_STAT_SRCS}
+ Maelstrom/kezan.cpp
+)
+
+message(" -> Prepared: The Maelstrom")
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();
+}