mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Scripts/Events: Implemented Selina Dourman / Darkmoon Faire (#28036)
This commit is contained in:
100
sql/updates/world/master/2022_07_02_00_world.sql
Normal file
100
sql/updates/world/master/2022_07_02_00_world.sql
Normal file
@@ -0,0 +1,100 @@
|
||||
-- Selina Dourman
|
||||
UPDATE `creature_template` SET `AIName`='', `ScriptName`='npc_selina_dourman' WHERE `entry`=10445;
|
||||
|
||||
UPDATE `gossip_menu_option` SET `VerifiedBuild`=44127 WHERE `MenuID`=13076;
|
||||
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=13075;
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=13113;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(14,13075,18362,0,0,22,1,974,0,0,1,0,0,'','Show gossip text 18362 if creature is not located in Darkmoon Faire'),
|
||||
(14,13075,18372,0,0,22,1,974,0,0,0,0,0,'','Show gossip text 18372 if creature is located in Darkmoon Faire'),
|
||||
(15,13113,0,0,0,2,0,71634,1,1,1,0,0,'','Show gossip option if player does not have has Darkmoon Adventurer''s Guide'),
|
||||
(15,13113,0,0,0,47,0,7905,64,0,0,0,0,'','Show gossip option if quest 7905 is rewarded'),
|
||||
(15,13113,0,0,1,2,0,71634,1,1,1,0,0,'','Show gossip option if player does not have has Darkmoon Adventurer''s Guide'),
|
||||
(15,13113,0,0,1,47,0,7926,64,0,0,0,0,'','Show gossip option if quest 7926 is rewarded');
|
||||
|
||||
DELETE FROM `creature_text` WHERE `CreatureID`=10445;
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `SoundPlayType`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||
(10445, 0, 0, 'Welcome to the Darkmoon Faire, $c!', 12, 0, 100, 70, 0, 0, 0, 53804, 0, 'Selina Dourman - Welcome Random text'),
|
||||
(10445, 0, 1, 'Welcome to the Darkmoon Faire!', 12, 0, 100, 70, 0, 0, 0, 53805, 0, 'Selina Dourman - Welcome Random text'),
|
||||
(10445, 0, 2, 'Welcome!', 12, 0, 100, 70, 0, 0, 0, 53806, 0, 'Selina Dourman - Welcome Random text'),
|
||||
(10445, 0, 3, 'Greetings!', 12, 0, 100, 70, 0, 0, 0, 53808, 0, 'Selina Dourman - Welcome Random text');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=10445;
|
||||
|
||||
DELETE FROM `areatrigger_scripts` WHERE `entry`=7016;
|
||||
INSERT INTO `areatrigger_scripts` VALUES
|
||||
(7016, 'at_darkmoon_faire_entrance');
|
||||
|
||||
DELETE FROM `points_of_interest` WHERE `ID` BETWEEN 10463 AND 10468;
|
||||
DELETE FROM `points_of_interest` WHERE `ID` BETWEEN 2716 AND 2721;
|
||||
INSERT INTO `points_of_interest` (`ID`, `PositionX`, `PositionY`, `PositionZ`, `Icon`, `Flags`, `Importance`, `Name`, `Unknown905`, `VerifiedBuild`) VALUES
|
||||
(2716, -3998.494873046875, 6280.140625, 13.06377983093261718, 7, 99, 0, 'AAA Whack-a-Gnoll', 0, 44127),
|
||||
(2717, -4018.01904296875, 6292.56103515625, 13.03492259979248046, 7, 99, 0, 'AAA Cannon', 0, 44127),
|
||||
(2718, -4076.423583984375, 6351.39599609375, 13.00009632110595703, 7, 99, 0, 'AAA Shooting Gallery', 0, 44127),
|
||||
(2719, -4128.34033203125, 6324.9287109375, 13.11676025390625, 7, 99, 0, 'AAA Tonk Arena', 0, 44127),
|
||||
(2720, -4263.24853515625, 6281.23095703125, 13.11678886413574218, 7, 99, 0, 'AAA Fortune Teller', 0, 44127),
|
||||
(2721, -4290.15625, 6308.5537109375, 13.11675357818603515, 7, 99, 0, 'AAA Ring Toss', 0, 44127);
|
||||
|
||||
DELETE FROM `points_of_interest_locale` WHERE `ID` BETWEEN 2716 AND 2721;
|
||||
INSERT INTO `points_of_interest_locale` (`ID`, `locale`, `Name`, `VerifiedBuild`) VALUES
|
||||
(2716, 'deDE', 'Hau-den-Gnoll', 44127),
|
||||
(2716, 'esES', 'AAA Whack-a-Gnoll', 44127),
|
||||
(2716, 'esMX', 'AAA Whack-a-Gnoll', 44127),
|
||||
(2716, 'frFR', 'AAA Cogne-Gnoll', 44127),
|
||||
(2716, 'itIT', 'AAA Pesta-lo-Gnoll', 44127),
|
||||
(2716, 'koKR', 'AAA 놀 때려잡기', 44127),
|
||||
(2716, 'ptBR', 'AAA Pancada-no-Gnoll', 44127),
|
||||
(2716, 'ruRU', 'ААА Гноллобой', 44127),
|
||||
(2716, 'zhCN', '3A级打豺狼人', 44127),
|
||||
(2716, 'zhTW', 'AAA痛扁豺狼人', 44127),
|
||||
(2717, 'deDE', 'Kanone', 44127),
|
||||
(2717, 'esES', 'AAA Cannon', 44127),
|
||||
(2717, 'esMX', 'AAA Cannon', 44127),
|
||||
(2717, 'frFR', 'AAA Canon', 44127),
|
||||
(2717, 'itIT', 'AAA Cannone', 44127),
|
||||
(2717, 'koKR', 'AAA 대포', 44127),
|
||||
(2717, 'ptBR', 'AAA Canhão', 44127),
|
||||
(2717, 'ruRU', 'ААА Пушка', 44127),
|
||||
(2717, 'zhCN', '3A级暗月大炮', 44127),
|
||||
(2717, 'zhTW', 'AAA火砲', 44127),
|
||||
(2718, 'deDE', 'Schießbude', 44127),
|
||||
(2718, 'esES', 'AAA Shooting Gallery', 44127),
|
||||
(2718, 'esMX', 'AAA Shooting Gallery', 44127),
|
||||
(2718, 'frFR', 'AAA Stand de tir', 44127),
|
||||
(2718, 'itIT', 'AAA Tiro a Segno', 44127),
|
||||
(2718, 'koKR', 'AAA 사격 연습장', 44127),
|
||||
(2718, 'ptBR', 'AAA Galeria de Tiro', 44127),
|
||||
(2718, 'ruRU', 'ААА Тир', 44127),
|
||||
(2718, 'zhCN', '3A级射击场', 44127),
|
||||
(2718, 'zhTW', 'AAA打靶場', 44127),
|
||||
(2719, 'deDE', 'Panzerarena', 44127),
|
||||
(2719, 'esES', 'AAA Tonk Arena', 44127),
|
||||
(2719, 'esMX', 'AAA Tonk Arena', 44127),
|
||||
(2719, 'frFR', 'AAA Arène à chariottes', 44127),
|
||||
(2719, 'itIT', 'AAA Arena dei Carri Giocattoli', 44127),
|
||||
(2719, 'koKR', 'AAA 통통 전차 게임장', 44127),
|
||||
(2719, 'ptBR', 'AAA Arena de Tonques', 44127),
|
||||
(2719, 'ruRU', 'ААА Танковая арена', 44127),
|
||||
(2719, 'zhCN', '3A级蒸汽坦克竞技场', 44127),
|
||||
(2719, 'zhTW', 'AAA坦克競技場', 44127),
|
||||
(2720, 'deDE', 'Wahrsager', 44127),
|
||||
(2720, 'esES', 'AAA Fortune Teller', 44127),
|
||||
(2720, 'esMX', 'AAA Fortune Teller', 44127),
|
||||
(2720, 'frFR', 'AAA Diseuse de bonne aventure', 44127),
|
||||
(2720, 'itIT', 'AAA Indovina', 44127),
|
||||
(2720, 'koKR', 'AAA 점술소', 44127),
|
||||
(2720, 'ptBR', 'AAA Cartomante', 44127),
|
||||
(2720, 'ruRU', 'ААА Предсказание судьбы', 44127),
|
||||
(2720, 'zhCN', '3A级占卜师', 44127),
|
||||
(2720, 'zhTW', 'AAA占卜師', 44127),
|
||||
(2721, 'deDE', 'Ringwurf', 44127),
|
||||
(2721, 'esES', 'AAA Ring Toss', 44127),
|
||||
(2721, 'esMX', 'AAA Ring Toss', 44127),
|
||||
(2721, 'frFR', 'AAA Lancer d\’anneaux', 44127),
|
||||
(2721, 'itIT', 'AAA Lancio degli Anelli', 44127),
|
||||
(2721, 'koKR', 'AAA 고리 던지기', 44127),
|
||||
(2721, 'ptBR', 'AAA Arremesso de Argolas', 44127),
|
||||
(2721, 'ruRU', 'ААА Метание колец', 44127),
|
||||
(2721, 'zhCN', '3A级套圈圈', 44127),
|
||||
(2721, 'zhTW', 'AAA丟圈圈', 44127);
|
||||
168
src/server/scripts/Events/darkmoon_faire.cpp
Normal file
168
src/server/scripts/Events/darkmoon_faire.cpp
Normal file
@@ -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();
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user