diff options
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/game/Scripting/ScriptLoader.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptLoader.h | 1 | ||||
-rw-r--r-- | src/server/scripts/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Maelstrom/CMakeLists.txt | 14 | ||||
-rw-r--r-- | src/server/scripts/Maelstrom/kezan.cpp | 129 |
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(); +} |