diff options
author | Malcrom <malcromdev@gmail.com> | 2022-10-04 05:24:54 -0300 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-10-13 11:44:15 +0200 |
commit | fee5160fe5f2762b2e739564c68632caf0efc94c (patch) | |
tree | c7257cdc53ecffa656fa34541088bce88a8d677d /src | |
parent | f9699a3fca8a4bc84f2161edb1f03f62513a8692 (diff) |
Scripts/Eversong Woords: Add cosmetic script for a party (#28308)
(cherry picked from commit 0174e6ba809172e29a0fc87962e1b88cd42d572a)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp | 216 |
2 files changed, 218 insertions, 0 deletions
diff --git a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp index 7ae0ad9a165..d300c894b33 100644 --- a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp +++ b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp @@ -191,6 +191,7 @@ void AddSC_dun_morogh_area_coldridge_valley(); void AddSC_duskwood(); void AddSC_eastern_plaguelands(); void AddSC_elwynn_forest(); +void AddSC_eversong_woods(); //void AddSC_ghostlands(); void AddSC_hinterlands(); void AddSC_isle_of_queldanas(); @@ -383,6 +384,7 @@ void AddEasternKingdomsScripts() AddSC_duskwood(); AddSC_eastern_plaguelands(); AddSC_elwynn_forest(); + AddSC_eversong_woods(); //AddSC_ghostlands(); AddSC_hinterlands(); AddSC_isle_of_queldanas(); diff --git a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp new file mode 100644 index 00000000000..ac982ea88b5 --- /dev/null +++ b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp @@ -0,0 +1,216 @@ +/* + * 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 "GameObject.h" +#include "MotionMaster.h" +#include "ScriptedCreature.h" + +enum Partygoer_Pather +{ + EVENT_PATH = 1, + EVENT_RANDOM_ACTION_PATHER, + EVENT_REMOVE_EQUIPMENT_PATHER, + EVENT_STOP_DANCING_PATHER, + + PATH_FIRST_PATH = 594440, + PATH_LAST_PATH = 594444, +}; + +struct npc_partygoer_pather : public ScriptedAI +{ + npc_partygoer_pather(Creature* creature) : ScriptedAI(creature), _path(PATH_FIRST_PATH) { } + + void JustAppeared() override + { + _path = PATH_FIRST_PATH; + _events.ScheduleEvent(EVENT_RANDOM_ACTION_PATHER, 11s, 14s); + } + + void WaypointPathEnded(uint32 /*nodeId*/, uint32 /*pathId*/) override + { + ++_path; + if (_path > PATH_LAST_PATH) + _path = PATH_FIRST_PATH; + + _events.ScheduleEvent(EVENT_RANDOM_ACTION_PATHER, 11s, 14s); + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_PATH: + me->GetMotionMaster()->MovePath(_path, false); + break; + case EVENT_RANDOM_ACTION_PATHER: + { + int8 action = urand(1, 5); + + switch (action) + { + case 1: + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + _events.ScheduleEvent(EVENT_PATH, 11s); + break; + case 2: + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + _events.ScheduleEvent(EVENT_PATH, 11s); + break; + case 3: + me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH); + _events.ScheduleEvent(EVENT_PATH, 11s); + break; + case 4: + me->LoadEquipment(urand(1, 2)); + me->HandleEmoteCommand(EMOTE_ONESHOT_EAT_NO_SHEATHE); + _events.ScheduleEvent(EVENT_REMOVE_EQUIPMENT_PATHER, 4s); + break; + case 5: + me->SetEmoteState(EMOTE_STATE_DANCE); + _events.ScheduleEvent(EVENT_STOP_DANCING_PATHER, 6s); + break; + } + break; + } + case EVENT_REMOVE_EQUIPMENT_PATHER: + me->LoadEquipment(0, true); + _events.ScheduleEvent(EVENT_PATH, 8s); + break; + case EVENT_STOP_DANCING_PATHER: + me->SetEmoteState(EMOTE_ONESHOT_NONE); + _events.ScheduleEvent(EVENT_PATH, 5s); + break; + } + } + + if (!UpdateVictim()) + return; + + DoMeleeAttackIfReady(); + } + +private: + EventMap _events; + uint32 _path; +}; + +enum Partygoer +{ + EVENT_RANDOM_ACTION = 1, + EVENT_REMOVE_EQUIPMENT, + EVENT_STOP_DANCING, + EVENT_THROW_FIREWORKS, + EVENT_RESET_FACING, + + GO_FIREWORKS_LAUNCHER = 180771, + + SPELL_SMALL_YELLOW_ROCKET = 26295 +}; + +struct npc_partygoer : public ScriptedAI +{ + npc_partygoer(Creature* creature) : ScriptedAI(creature), _facing(0.0f) { } + + void JustAppeared() override + { + _facing = me->GetOrientation(); + _events.ScheduleEvent(EVENT_RANDOM_ACTION, 1s, 20s); + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_RANDOM_ACTION: + { + int8 action = urand(1, 6); + + switch (action) + { + case 1: + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + _events.ScheduleEvent(EVENT_RANDOM_ACTION, 13s, 20s); + break; + case 2: + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + _events.ScheduleEvent(EVENT_RANDOM_ACTION, 13s, 20s); + break; + case 3: + me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH); + _events.ScheduleEvent(EVENT_RANDOM_ACTION, 13s, 20s); + break; + case 4: + me->LoadEquipment(urand(1, 2)); + me->HandleEmoteCommand(EMOTE_ONESHOT_EAT_NO_SHEATHE); + _events.ScheduleEvent(EVENT_REMOVE_EQUIPMENT, 4s); + break; + case 5: + me->SetEmoteState(EMOTE_STATE_DANCE); + _events.ScheduleEvent(EVENT_STOP_DANCING, 8s, 16s); + break; + case 6: + if (GameObject* launcher = me->FindNearestGameObject(GO_FIREWORKS_LAUNCHER, 20.0f)) + me->SetFacingToObject(launcher); + _events.ScheduleEvent(EVENT_THROW_FIREWORKS, 1s); + break; + } + break; + } + case EVENT_REMOVE_EQUIPMENT: + me->LoadEquipment(0, true); + _events.ScheduleEvent(EVENT_RANDOM_ACTION, 10s, 20s); + break; + case EVENT_STOP_DANCING: + me->SetEmoteState(EMOTE_ONESHOT_NONE); + _events.ScheduleEvent(EVENT_RANDOM_ACTION, 10s, 20s); + break; + case EVENT_THROW_FIREWORKS: + me->CastSpell(me, SPELL_SMALL_YELLOW_ROCKET); + _events.ScheduleEvent(EVENT_RESET_FACING, 3s); + break; + case EVENT_RESET_FACING: + me->SetFacingTo(_facing); + _events.ScheduleEvent(EVENT_RANDOM_ACTION, 12s, 20s); + break; + } + } + + if (!UpdateVictim()) + return; + + DoMeleeAttackIfReady(); + } + +private: + EventMap _events; + float _facing; +}; + +void AddSC_eversong_woods() +{ + RegisterCreatureAI(npc_partygoer_pather); + RegisterCreatureAI(npc_partygoer); +} |