diff options
| author | Meji <alvaro.megias@outlook.com> | 2022-07-02 00:24:11 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-02 00:24:11 +0200 |
| commit | 1a967dcd140e1ec7b2adcc20f6bc62a28abf6589 (patch) | |
| tree | d9a145c9e484a43d8c34d91bdd87cfae48d378cc /src | |
| parent | 4ac86c13d2b00817c9213ca2c22b747d3fff454e (diff) | |
Scripts/Events: Implemented Selina Dourman / Darkmoon Faire (#28036)
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/scripts/Events/darkmoon_faire.cpp | 168 | ||||
| -rw-r--r-- | src/server/scripts/Events/events_script_loader.cpp | 2 |
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(); |
