aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Events/darkmoon_faire.cpp168
-rw-r--r--src/server/scripts/Events/events_script_loader.cpp2
2 files changed, 170 insertions, 0 deletions
diff --git a/src/server/scripts/Events/darkmoon_faire.cpp b/src/server/scripts/Events/darkmoon_faire.cpp
new file mode 100644
index 00000000000..6b0fff9a699
--- /dev/null
+++ b/src/server/scripts/Events/darkmoon_faire.cpp
@@ -0,0 +1,168 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * 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 2 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 "Player.h"
+#include "ScriptedCreature.h"
+#include "ScriptedGossip.h"
+
+enum Creatures
+{
+ NPC_SELINA_DOURMAN = 10445
+};
+
+enum Events
+{
+ EVENT_SELINA_TALK_COOLDOWN = 1
+};
+
+enum Gossips
+{
+ GOSSIP_MENU_SELINA_POIS = 13076,
+ GOSSIP_MENU_SELINA_ITEM = 13113
+};
+
+enum GossipMenuOptions
+{
+ GOSSIP_MENU_OPTION_TONK_ARENA_POI = 0,
+ GOSSIP_MENU_OPTION_CANNON_POI = 1,
+ GOSSIP_MENU_OPTION_WHACK_A_GNOLL_POI = 2,
+ GOSSIP_MENU_OPTION_RING_TOSS_POI = 3,
+ GOSSIP_MENU_OPTION_SHOOTING_GALLERY_POI = 4,
+ GOSSIP_MENU_OPTION_FORTUNE_TELLER_POI = 5
+};
+
+enum PointsOfInterest
+{
+ POI_WHACK_A_GNOLL = 2716,
+ POI_CANNON = 2717,
+ POI_SHOOTING_GALLERY = 2718,
+ POI_TONK_ARENA = 2719,
+ POI_FORTUNE_TELLER = 2720,
+ POI_RING_TOSS = 2721
+};
+
+enum Spells
+{
+ SPELL_REPLACE_DARKMOON_ADVENTURES_GUIDE = 103413
+};
+
+enum Texts
+{
+ SAY_WELCOME = 0
+};
+
+// 10445 - Selina Dourman
+struct npc_selina_dourman : public ScriptedAI
+{
+ npc_selina_dourman(Creature* creature) : ScriptedAI(creature), _talkCooldown(false) { }
+
+ bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ {
+ switch (menuId)
+ {
+ case GOSSIP_MENU_SELINA_POIS:
+ {
+ uint32 poiId = 0;
+ switch (gossipListId)
+ {
+ case GOSSIP_MENU_OPTION_TONK_ARENA_POI:
+ poiId = POI_TONK_ARENA;
+ break;
+ case GOSSIP_MENU_OPTION_CANNON_POI:
+ poiId = POI_CANNON;
+ break;
+ case GOSSIP_MENU_OPTION_WHACK_A_GNOLL_POI:
+ poiId = POI_WHACK_A_GNOLL;
+ break;
+ case GOSSIP_MENU_OPTION_RING_TOSS_POI:
+ poiId = POI_RING_TOSS;
+ break;
+ case GOSSIP_MENU_OPTION_SHOOTING_GALLERY_POI:
+ poiId = POI_SHOOTING_GALLERY;
+ break;
+ case GOSSIP_MENU_OPTION_FORTUNE_TELLER_POI:
+ poiId = POI_FORTUNE_TELLER;
+ break;
+ default:
+ break;
+ }
+ if (poiId)
+ player->PlayerTalkClass->SendPointOfInterest(poiId);
+ break;
+ }
+ case GOSSIP_MENU_SELINA_ITEM:
+ me->CastSpell(player, SPELL_REPLACE_DARKMOON_ADVENTURES_GUIDE);
+ CloseGossipMenuFor(player);
+ break;
+ default:
+ break;
+ }
+
+ return false;
+ }
+
+ void DoWelcomeTalk(Unit* talkTarget)
+ {
+ if (!talkTarget || _talkCooldown)
+ return;
+
+ _talkCooldown = true;
+ _events.ScheduleEvent(EVENT_SELINA_TALK_COOLDOWN, 30s);
+ Talk(SAY_WELCOME, talkTarget);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _events.Update(diff);
+
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_SELINA_TALK_COOLDOWN:
+ _talkCooldown = false;
+ break;
+ default:
+ break;
+ }
+ }
+
+private:
+ EventMap _events;
+ bool _talkCooldown;
+};
+
+// 7016 - Darkmoon Faire Entrance
+class at_darkmoon_faire_entrance : public AreaTriggerScript
+{
+public:
+ at_darkmoon_faire_entrance() : AreaTriggerScript("at_darkmoon_faire_entrance") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
+ {
+ if (Creature* selinaDourman = player->FindNearestCreature(NPC_SELINA_DOURMAN, 50.f))
+ if (npc_selina_dourman* selinaDourmanAI = CAST_AI(npc_selina_dourman, selinaDourman->GetAI()))
+ selinaDourmanAI->DoWelcomeTalk(player);
+
+ return true;
+ }
+};
+
+void AddSC_event_darkmoon_faire()
+{
+ RegisterCreatureAI(npc_selina_dourman);
+ new at_darkmoon_faire_entrance();
+}
diff --git a/src/server/scripts/Events/events_script_loader.cpp b/src/server/scripts/Events/events_script_loader.cpp
index 2095b537cfa..78311bfa6ce 100644
--- a/src/server/scripts/Events/events_script_loader.cpp
+++ b/src/server/scripts/Events/events_script_loader.cpp
@@ -18,6 +18,7 @@
// This is where scripts' loading functions should be declared:
void AddSC_event_brewfest();
void AddSC_event_childrens_week();
+void AddSC_event_darkmoon_faire();
void AddSC_event_fireworks();
void AddSC_event_hallows_end();
void AddSC_event_love_is_in_the_air();
@@ -34,6 +35,7 @@ void AddEventsScripts()
{
AddSC_event_brewfest();
AddSC_event_childrens_week();
+ AddSC_event_darkmoon_faire();
AddSC_event_fireworks();
AddSC_event_hallows_end();
AddSC_event_love_is_in_the_air();