diff options
author | ModoX <moardox@gmail.com> | 2023-04-10 04:04:33 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-10 04:04:33 +0200 |
commit | 89e09dc44ed15567f77f862d1936e8e0d9019456 (patch) | |
tree | f5664f4a2798acd965e8b589bd6ed7ff596ff780 | |
parent | 083b8d6c846cfdf75abb1fae481a3eeb25c13c56 (diff) |
Core/AI: Drop script_waypoints and move data to waypoint_data (#28879)
41 files changed, 474 insertions, 454 deletions
diff --git a/sql/updates/world/master/2023_04_10_00_world_script_waypoints.sql b/sql/updates/world/master/2023_04_10_00_world_script_waypoints.sql new file mode 100644 index 00000000000..d349060a860 --- /dev/null +++ b/sql/updates/world/master/2023_04_10_00_world_script_waypoints.sql @@ -0,0 +1,150 @@ +-- +DROP PROCEDURE IF EXISTS apply_if_exists_2023_04_10_00_world; + +DELIMITER ;; +CREATE PROCEDURE apply_if_exists_2023_04_10_00_world() BEGIN + IF EXISTS (SELECT * FROM `information_schema`.`columns` WHERE `table_schema`=SCHEMA() AND `table_name`='script_waypoint') THEN + DELETE FROM `waypoint_data` WHERE `id` & 2; + INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `delay`) SELECT ((s.`entry` << 3) | 2), s.`pointid`, s.`location_x`, s.`location_y`, s.`location_z`, s.`waittime` FROM `script_waypoint` s; + + DROP TABLE IF EXISTS `script_waypoint`; + END IF; +END;; + +DELIMITER ; +CALL apply_if_exists_2023_04_10_00_world(); + +DROP PROCEDURE IF EXISTS apply_if_exists_2023_04_10_00_world; + +-- Rage Winterchill +SET @PATH_ID := 142138; +DELETE FROM `waypoint_data` WHERE `id`=@PATH_ID; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +(@PATH_ID, 0, 4896.08, -1576.35, 1333.65), +(@PATH_ID, 1, 4898.68, -1615.02, 1329.48), +(@PATH_ID, 2, 4907.12, -1667.08, 1321.00), +(@PATH_ID, 3, 4963.18, -1699.35, 1340.51), +(@PATH_ID, 4, 4989.16, -1716.67, 1335.74), +(@PATH_ID, 5, 5026.27, -1736.89, 1323.02), +(@PATH_ID, 6, 5037.77, -1770.56, 1324.36), +(@PATH_ID, 7, 5067.23, -1789.95, 1321.17); + +-- Kazrogal +SET @PATH_ID := 143106; +DELETE FROM `waypoint_data` WHERE `id`=@PATH_ID; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +(@PATH_ID, 0, 5492.91, -2404.61, 1462.63), +(@PATH_ID, 1, 5531.76, -2460.87, 1469.55), +(@PATH_ID, 2, 5554.58, -2514.66, 1476.12), +(@PATH_ID, 3, 5554.16, -2567.23, 1479.90), +(@PATH_ID, 4, 5540.67, -2625.99, 1480.89), +(@PATH_ID, 5, 5508.16, -2659.20, 1480.15), +(@PATH_ID, 6, 5489.62, -2704.05, 1482.18), +(@PATH_ID, 7, 5457.04, -2726.26, 1485.10); + +-- Azgalor +SET @PATH_ID := 142738; +DELETE FROM `waypoint_data` WHERE `id`=@PATH_ID; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +(@PATH_ID, 0, 5492.91, -2404.61, 1462.63), +(@PATH_ID, 1, 5531.76, -2460.87, 1469.55), +(@PATH_ID, 2, 5554.58, -2514.66, 1476.12), +(@PATH_ID, 3, 5554.16, -2567.23, 1479.90), +(@PATH_ID, 4, 5540.67, -2625.99, 1480.89), +(@PATH_ID, 5, 5508.16, -2659.20, 1480.15), +(@PATH_ID, 6, 5489.62, -2704.05, 1482.18), +(@PATH_ID, 7, 5457.04, -2726.26, 1485.10); + +-- Anetheron +SET @PATH_ID := 142466; +DELETE FROM `waypoint_data` WHERE `id`=@PATH_ID; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +(@PATH_ID, 0, 4896.08, -1576.35, 1333.65), +(@PATH_ID, 1, 4898.68, -1615.02, 1329.48), +(@PATH_ID, 2, 4907.12, -1667.08, 1321.00), +(@PATH_ID, 3, 4963.18, -1699.35, 1340.51), +(@PATH_ID, 4, 4989.16, -1716.67, 1335.74), +(@PATH_ID, 5, 5026.27, -1736.89, 1323.02), +(@PATH_ID, 6, 5037.77, -1770.56, 1324.36), +(@PATH_ID, 7, 5067.23, -1789.95, 1321.17); + +-- ------------------------------------------------------------------------------------------------ + +SET @MOVE_TYPE_RUN := 1; +SET @MOVE_TYPE_WALK := 0; + +-- Thrall, old_hillsbrad.cpp +SET @PATHID := 143010; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID AND `point` < 8; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_WALK WHERE `id`=@PATHID AND `point` BETWEEN 8 AND 10; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID AND `point` BETWEEN 11 AND 29; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_WALK WHERE `id`=@PATHID AND `point` = 30; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID AND `point` BETWEEN 31 AND 58; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_WALK WHERE `id`=@PATHID AND `point`=59; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID AND `point` BETWEEN 60 AND 63; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_WALK WHERE `id`=@PATHID AND `point` BETWEEN 64 AND 70; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID AND `point` BETWEEN 71 AND 80; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_WALK WHERE `id`=@PATHID AND `point` BETWEEN 81 AND 83; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID AND `point` BETWEEN 84 AND 90; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_WALK WHERE `id`=@PATHID AND `point` BETWEEN 91 AND 96; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID AND `point` >= 97; + +-- Magwin, zone_azuremyst_isle.cpp +SET @PATHID := 138498; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_WALK WHERE `id`=@PATHID; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID AND `point` >= 28; + +-- Wizzlecrank Shredder, zone_the_barrens.cpp +SET @PATHID := 27514; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_WALK WHERE `id`=@PATHID AND `point` BETWEEN 9 AND 17; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID AND `point` >= 18; + +-- Brann Bronzebeard, halls_of_stone.cpp +SET @PATHID := 224562; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID AND `point` >= 1; + +-- Maghar Captive, zone_nagrand.cpp +SET @PATHID := 145682; +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=@PATHID AND `point` >= 16; + +-- ------------------------------------------------------------------------------------------------ + +-- Mograine, chapter5.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=233386; + +-- Scarlet Trainee, boss_herod.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=52602; + +-- Anetheron, boss_anetheron.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=142466; + +-- Azgalor, boss_azgalor.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=142738; + +-- Kazrogal, boss_kazrogal.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=143106; + +-- Rage Winterchill, boss_rage_winterchill.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=142138; + +-- Legoso, zone_bloodmyst_isle.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=143858; + +-- Skeletal Gryphon, boss_black_knight.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=283930; + +-- Crok Scourgebane, boss_sister_svalna.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=297034; + +-- Mimirons Inferno, boss_flame_leviathan.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=266962; + +-- Icefang, zone_storm_peaks.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=236818; + +-- Garments of quests, npcs_special.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id` IN(99386,99418,99426,99434,99442); + +-- Taretha, old_hillsbrad.cpp +UPDATE `waypoint_data` SET `move_type`=@MOVE_TYPE_RUN WHERE `id`=151098; diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index f5a26fa4efc..572ab846ef2 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -25,6 +25,7 @@ #include "ObjectAccessor.h" #include "Player.h" #include "ScriptSystem.h" +#include "WaypointManager.h" #include "World.h" enum Points @@ -34,7 +35,7 @@ enum Points }; EscortAI::EscortAI(Creature* creature) : ScriptedAI(creature), _pauseTimer(2500ms), _playerCheckTimer(1000), _escortState(STATE_ESCORT_NONE), _maxPlayerDistance(DEFAULT_MAX_PLAYER_DISTANCE), - _escortQuest(nullptr), _activeAttacker(true), _running(false), _instantRespawn(false), _returnToStart(false), _despawnAtEnd(true), _despawnAtFar(true), _manualPath(false), + _escortQuest(nullptr), _activeAttacker(true), _instantRespawn(false), _returnToStart(false), _despawnAtEnd(true), _despawnAtFar(true), _hasImmuneToNPCFlags(false), _started(false), _ended(false), _resume(false) { } @@ -129,7 +130,7 @@ void EscortAI::MovementInform(uint32 type, uint32 id) if (id == POINT_LAST_POINT) { TC_LOG_DEBUG("scripts.ai.escortai", "EscortAI::MovementInform: returned to before combat position ({})", me->GetGUID().ToString()); - me->SetWalk(!_running); + me->SetWalk(false); RemoveEscortState(STATE_ESCORT_RETURNING); } else if (id == POINT_HOME) @@ -253,7 +254,12 @@ void EscortAI::UpdateEscortAI(uint32 /*diff*/) DoMeleeAttackIfReady(); } -void EscortAI::AddWaypoint(uint32 id, float x, float y, float z, float orientation/* = 0*/, Milliseconds waitTime/* = 0s*/) +void EscortAI::AddWaypoint(uint32 id, float x, float y, float z, bool run) +{ + AddWaypoint(id, x, y, z, 0.0f, 0s, run); +} + +void EscortAI::AddWaypoint(uint32 id, float x, float y, float z, float orientation/* = 0*/, Milliseconds waitTime/* = 0s*/, bool run /*= false*/) { Trinity::NormalizeMapCoord(x); Trinity::NormalizeMapCoord(y); @@ -264,18 +270,38 @@ void EscortAI::AddWaypoint(uint32 id, float x, float y, float z, float orientati waypoint.y = y; waypoint.z = z; waypoint.orientation = orientation; - waypoint.moveType = _running ? WAYPOINT_MOVE_TYPE_RUN : WAYPOINT_MOVE_TYPE_WALK; + waypoint.moveType = run ? WAYPOINT_MOVE_TYPE_RUN : WAYPOINT_MOVE_TYPE_WALK; waypoint.delay = waitTime.count(); waypoint.eventId = 0; waypoint.eventChance = 100; _path.nodes.push_back(std::move(waypoint)); +} - _manualPath = true; +void EscortAI::ResetPath() +{ + _path.nodes.clear(); +} + +void EscortAI::LoadPath(uint32 pathId) +{ + WaypointPath const* path = sWaypointMgr->GetPath(pathId); + if (!path) + { + TC_LOG_ERROR("scripts.ai.escortai", "EscortAI::LoadPath: (script: {}) path {} is invalid ({})", me->GetScriptName(), pathId, me->GetGUID().ToString()); + return; + } + _path = *path; } /// @todo get rid of this many variables passed in function. -void EscortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false */, ObjectGuid playerGUID /* = 0 */, Quest const* quest /* = nullptr */, bool instantRespawn /* = false */, bool canLoopPath /* = false */, bool resetWaypoints /* = true */) +void EscortAI::Start(bool isActiveAttacker /* = true*/, ObjectGuid playerGUID /* = 0 */, Quest const* quest /* = nullptr */, bool instantRespawn /* = false */, bool canLoopPath /* = false */) { + if (_path.nodes.empty()) + { + TC_LOG_ERROR("scripts.ai.escortai", "EscortAI::Start: (script: {}) path is empty ({})", me->GetScriptName(), me->GetGUID().ToString()); + return; + } + // Queue respawn from the point it starts if (CreatureData const* cdata = me->GetCreatureData()) { @@ -295,11 +321,6 @@ void EscortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false */, return; } - _running = run; - - if (!_manualPath && resetWaypoints) - FillPointMovementListForCreature(); - if (_path.nodes.empty()) { TC_LOG_ERROR("scripts.ai.escortai", "EscortAI::Start: (script: {}) is set to return home after waypoint end and instant respawn at waypoint end. Creature will never despawn ({})", me->GetScriptName(), me->GetGUID().ToString()); @@ -328,28 +349,13 @@ void EscortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false */, me->SetImmuneToNPC(false); } - TC_LOG_DEBUG("scripts.ai.escortai", "EscortAI::Start: (script: {}) started with {} waypoints. ActiveAttacker = {}, Run = {}, Player = {} ({})", - me->GetScriptName(), uint32(_path.nodes.size()), _activeAttacker, _running, _playerGUID.ToString(), me->GetGUID().ToString()); - - // set initial speed - me->SetWalk(!_running); + TC_LOG_DEBUG("scripts.ai.escortai", "EscortAI::Start: (script: {}) started with {} waypoints. ActiveAttacker = {}, Player = {} ({})", + me->GetScriptName(), uint32(_path.nodes.size()), _activeAttacker, _playerGUID.ToString(), me->GetGUID().ToString()); _started = false; AddEscortState(STATE_ESCORT_ESCORTING); } -void EscortAI::SetRun(bool on) -{ - if (on == _running) - return; - - for (auto& node : _path.nodes) - node.moveType = on ? WAYPOINT_MOVE_TYPE_RUN : WAYPOINT_MOVE_TYPE_WALK; - - me->SetWalk(!on); - _running = on; -} - void EscortAI::SetEscortPaused(bool on) { if (!HasEscortState(STATE_ESCORT_ESCORTING)) @@ -434,20 +440,3 @@ bool EscortAI::IsPlayerOrGroupInRange() return false; } - -void EscortAI::FillPointMovementListForCreature() -{ - WaypointPath const* path = sScriptSystemMgr->GetPath(me->GetEntry()); - if (!path) - return; - - for (WaypointNode const& value : path->nodes) - { - WaypointNode node = value; - Trinity::NormalizeMapCoord(node.x); - Trinity::NormalizeMapCoord(node.y); - node.moveType = _running ? WAYPOINT_MOVE_TYPE_RUN : WAYPOINT_MOVE_TYPE_WALK; - - _path.nodes.push_back(std::move(node)); - } -} diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h index 3a5ed989f43..0108a7a8c21 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h @@ -48,10 +48,12 @@ struct TC_GAME_API EscortAI : public ScriptedAI void UpdateAI(uint32 diff) override; // the "internal" update, calls UpdateEscortAI() virtual void UpdateEscortAI(uint32 diff); // used when it's needed to add code in update (abilities, scripted events, etc) - void AddWaypoint(uint32 id, float x, float y, float z, float orientation = 0.f, Milliseconds waitTime = 0s); - void Start(bool isActiveAttacker = true, bool run = false, ObjectGuid playerGUID = ObjectGuid::Empty, Quest const* quest = nullptr, bool instantRespawn = false, bool canLoopPath = false, bool resetWaypoints = true); + void AddWaypoint(uint32 id, float x, float y, float z, bool run); + void AddWaypoint(uint32 id, float x, float y, float z, float orientation = 0.f, Milliseconds waitTime = 0s, bool run = false); + void ResetPath(); + void LoadPath(uint32 pathId); + void Start(bool isActiveAttacker = true, ObjectGuid playerGUID = ObjectGuid::Empty, Quest const* quest = nullptr, bool instantRespawn = false, bool canLoopPath = false); - void SetRun(bool on = true); void SetEscortPaused(bool on); void SetPauseTimer(Milliseconds timer) { _pauseTimer = timer; } bool HasEscortState(uint32 escortState) { return (_escortState & escortState) != 0; } @@ -70,7 +72,6 @@ struct TC_GAME_API EscortAI : public ScriptedAI private: bool AssistPlayerInCombatAgainst(Unit* who); bool IsPlayerOrGroupInRange(); - void FillPointMovementListForCreature(); void AddEscortState(uint32 escortState) { _escortState |= escortState; } void RemoveEscortState(uint32 escortState) { _escortState &= ~escortState; } @@ -86,12 +87,10 @@ struct TC_GAME_API EscortAI : public ScriptedAI WaypointPath _path; bool _activeAttacker; // obsolete, determined by faction. - bool _running; // all creatures are walking by default (has flag MOVEMENTFLAG_WALK) bool _instantRespawn; // if creature should respawn instantly after escort over (if not, database respawntime are used) bool _returnToStart; // if creature can walk same path (loop) without despawn. Not for regular escort quests. bool _despawnAtEnd; bool _despawnAtFar; - bool _manualPath; bool _hasImmuneToNPCFlags; bool _started; bool _ended; diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 74c7d0ed747..7a544bb9f41 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1338,7 +1338,6 @@ void ScriptMgr::Unload() void ScriptMgr::LoadDatabase() { - sScriptSystemMgr->LoadScriptWaypoints(); sScriptSystemMgr->LoadScriptSplineChains(); } diff --git a/src/server/game/Scripting/ScriptSystem.cpp b/src/server/game/Scripting/ScriptSystem.cpp index 78f3128c431..02769f1a9ab 100644 --- a/src/server/game/Scripting/ScriptSystem.cpp +++ b/src/server/game/Scripting/ScriptSystem.cpp @@ -32,62 +32,6 @@ SystemMgr* SystemMgr::instance() return &instance; } -void SystemMgr::LoadScriptWaypoints() -{ - uint32 oldMSTime = getMSTime(); - - // drop Existing Waypoint list - _waypointStore.clear(); - - uint64 entryCount = 0; - - // load Waypoints - QueryResult result = WorldDatabase.Query("SELECT COUNT(entry) FROM script_waypoint GROUP BY entry"); - if (result) - entryCount = result->GetRowCount(); - - TC_LOG_INFO("server.loading", "Loading Script Waypoints for {} creature(s)...", entryCount); - - // 0 1 2 3 4 5 - result = WorldDatabase.Query("SELECT entry, pointid, location_x, location_y, location_z, waittime FROM script_waypoint ORDER BY pointid"); - - if (!result) - { - TC_LOG_INFO("server.loading", ">> Loaded 0 Script Waypoints. DB table `script_waypoint` is empty."); - return; - } - uint32 count = 0; - - do - { - Field* fields = result->Fetch(); - uint32 entry = fields[0].GetUInt32(); - uint32 id = fields[1].GetUInt32(); - float x = fields[2].GetFloat(); - float y = fields[3].GetFloat(); - float z = fields[4].GetFloat(); - uint32 waitTime = fields[5].GetUInt32(); - - CreatureTemplate const* info = sObjectMgr->GetCreatureTemplate(entry); - if (!info) - { - TC_LOG_ERROR("sql.sql", "SystemMgr: DB table script_waypoint has waypoint for non-existant creature entry {}", entry); - continue; - } - - if (!info->ScriptID) - TC_LOG_ERROR("sql.sql", "SystemMgr: DB table script_waypoint has waypoint for creature entry {}, but creature does not have ScriptName defined and then useless.", entry); - - WaypointPath& path = _waypointStore[entry]; - path.id = entry; - path.nodes.emplace_back(id, x, y, z, std::nullopt, waitTime); - - ++count; - } while (result->NextRow()); - - TC_LOG_INFO("server.loading", ">> Loaded {} Script Waypoint nodes in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); -} - void SystemMgr::LoadScriptSplineChains() { uint32 oldMSTime = getMSTime(); @@ -162,15 +106,6 @@ void SystemMgr::LoadScriptSplineChains() } } -WaypointPath const* SystemMgr::GetPath(uint32 creatureEntry) const -{ - auto itr = _waypointStore.find(creatureEntry); - if (itr == _waypointStore.end()) - return nullptr; - - return &itr->second; -} - std::vector<SplineChainLink> const* SystemMgr::GetSplineChain(uint32 entry, uint16 chainId) const { auto it = m_mSplineChainsMap.find({ entry, chainId }); diff --git a/src/server/game/Scripting/ScriptSystem.h b/src/server/game/Scripting/ScriptSystem.h index 0b717d6df6f..18bcd91e158 100644 --- a/src/server/game/Scripting/ScriptSystem.h +++ b/src/server/game/Scripting/ScriptSystem.h @@ -33,11 +33,8 @@ class TC_GAME_API SystemMgr static SystemMgr* instance(); // database - void LoadScriptWaypoints(); void LoadScriptSplineChains(); - WaypointPath const* GetPath(uint32 creatureEntry) const; - std::vector<SplineChainLink> const* GetSplineChain(uint32 entry, uint16 chainId) const; std::vector<SplineChainLink> const* GetSplineChain(Creature const* who, uint16 id) const; @@ -50,7 +47,6 @@ class TC_GAME_API SystemMgr SystemMgr(SystemMgr const&) = delete; SystemMgr& operator=(SystemMgr const&) = delete; - std::unordered_map<uint32, WaypointPath> _waypointStore; std::unordered_map<ChainKeyType, std::vector<SplineChainLink>> m_mSplineChainsMap; // spline chains }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index 1cdf56fb5f0..1265e378de1 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -124,6 +124,8 @@ enum GrimstoneTexts SAY_TEXT6 = 5 }; +static constexpr uint32 PATH_ESCORT_GRIMSTONE = 80770; + /// @todo implement quest part of event (different end boss) class npc_grimstone : public CreatureScript { @@ -287,7 +289,8 @@ public: case 0: Talk(SAY_TEXT5); HandleGameObject(DATA_ARENA4, false); - Start(false, false); + LoadPath(PATH_ESCORT_GRIMSTONE); + Start(false); CanWalk = true; Event_Timer = 0; break; @@ -502,7 +505,8 @@ enum Rocknot { SAY_GOT_BEER = 0, QUEST_ALE = 4295, - SPELL_DRUNKEN_RAGE = 14872 + SPELL_DRUNKEN_RAGE = 14872, + PATH_ESCORT_ROCKNOT = 76026 }; class npc_rocknot : public CreatureScript @@ -618,7 +622,8 @@ public: Talk(SAY_GOT_BEER); DoCastSelf(SPELL_DRUNKEN_RAGE, false); - Start(false, false); + LoadPath(PATH_ESCORT_ROCKNOT); + Start(false); } } } diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp index 5cd924863a5..3b501ca29d1 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp @@ -56,7 +56,9 @@ enum BlastmasterEmi SAY_BLASTMASTER_18 = 18, SAY_BLASTMASTER_19 = 19, - SAY_GRUBBIS = 0 + SAY_GRUBBIS = 0, + + PATH_ESCORT_BLASTMASTER_EMI = 63986, }; const Position SpawnPosition[] = @@ -133,7 +135,8 @@ public: { if (gossipListId == 0) { - Start(true, false, player->GetGUID()); + LoadPath(PATH_ESCORT_BLASTMASTER_EMI); + Start(true, player->GetGUID()); me->SetFaction(player->GetFaction()); SetData(1, 0); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index fb33ea12fdd..528a66bad72 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -122,6 +122,8 @@ float Spawns[6][2]= #define SPAWN_Y -1758 #define SPAWN_O 4.738f +static constexpr uint32 PATH_ESCORT_BARNES = 134498; + class npc_barnes : public CreatureScript { public: @@ -175,7 +177,8 @@ public: if (m_uiEventId == EVENT_OZ) instance->SetData(DATA_OPERA_OZ_DEATHCOUNT, IN_PROGRESS); - Start(false, false); + LoadPath(PATH_ESCORT_BARNES); + Start(false); } void JustEngagedWith(Unit* /*who*/) override { } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index 04fe6ee6ebb..f1a72d1818b 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -258,6 +258,8 @@ Position const LightofDawnLoc[] = {2273.972f, -5257.676f, 78.862f, 0}, // 29 Lich king moves forward }; +static constexpr uint32 PATH_ESCORT_MOGRAINE = 233386; + class npc_highlord_darion_mograine : public CreatureScript { public: @@ -1608,7 +1610,8 @@ public: case GOSSIP_ACTION_INFO_DEF + 1: CloseGossipMenuFor(player); uiStep = 1; - Start(true, true, player->GetGUID()); + LoadPath(PATH_ESCORT_MOGRAINE); + Start(true, player->GetGUID()); break; } return true; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp index 81219de4fe0..72551834c46 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp @@ -125,6 +125,8 @@ private: bool _enrage; }; +static constexpr uint32 PATH_ESCORT_SCARLET_TRAINEE = 52602; + struct npc_scarlet_trainee : public EscortAI { npc_scarlet_trainee(Creature* creature) : EscortAI(creature) @@ -138,7 +140,8 @@ struct npc_scarlet_trainee : public EscortAI { if (_startTimer <= diff) { - Start(true, true); + LoadPath(PATH_ESCORT_SCARLET_TRAINEE); + Start(true); _startTimer = 0; } else diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp index 992163dfa3a..9ea91aa40e0 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp @@ -123,7 +123,8 @@ public: if (action == GOSSIP_ACTION_INFO_DEF + 1) { CloseGossipMenuFor(player); - Start(false, false, player->GetGUID()); + LoadPath((me->GetEntry() << 3) | 2); + Start(false, player->GetGUID()); } return true; } diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp index ee1c4214c55..4161a3a8ce1 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp @@ -164,7 +164,9 @@ private: enum Morridune { SAY_MORRIDUNE_1 = 0, - SAY_MORRIDUNE_2 = 1 + SAY_MORRIDUNE_2 = 1, + + PATH_ESCORT_MORRIDUNE = 53834, }; struct npc_morridune : public EscortAI @@ -175,6 +177,7 @@ struct npc_morridune : public EscortAI { Talk(SAY_MORRIDUNE_1); me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); + LoadPath(PATH_ESCORT_MORRIDUNE); Start(false); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp index b6632e89391..d42358717ac 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp @@ -43,6 +43,8 @@ enum Texts SAY_ONAGGRO = 5, }; +static constexpr uint32 PATH_ESCORT_ANETHERON = 142466; + class boss_anetheron : public CreatureScript { public: @@ -126,15 +128,8 @@ public: if (!go) { go = true; - AddWaypoint(0, 4896.08f, -1576.35f, 1333.65f); - AddWaypoint(1, 4898.68f, -1615.02f, 1329.48f); - AddWaypoint(2, 4907.12f, -1667.08f, 1321.00f); - AddWaypoint(3, 4963.18f, -1699.35f, 1340.51f); - AddWaypoint(4, 4989.16f, -1716.67f, 1335.74f); - AddWaypoint(5, 5026.27f, -1736.89f, 1323.02f); - AddWaypoint(6, 5037.77f, -1770.56f, 1324.36f); - AddWaypoint(7, 5067.23f, -1789.95f, 1321.17f); - Start(false, true); + LoadPath(PATH_ESCORT_ANETHERON); + Start(false); SetDespawnAtEnd(false); } } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp index bd7ef61a80a..a08cf11f500 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp @@ -42,6 +42,8 @@ enum Texts SAY_ONAGGRO = 3, }; +static constexpr uint32 PATH_ESCORT_AZGALOR = 142738; + class boss_azgalor : public CreatureScript { public: @@ -129,15 +131,8 @@ public: if (!go) { go = true; - AddWaypoint(0, 5492.91f, -2404.61f, 1462.63f); - AddWaypoint(1, 5531.76f, -2460.87f, 1469.55f); - AddWaypoint(2, 5554.58f, -2514.66f, 1476.12f); - AddWaypoint(3, 5554.16f, -2567.23f, 1479.90f); - AddWaypoint(4, 5540.67f, -2625.99f, 1480.89f); - AddWaypoint(5, 5508.16f, -2659.2f, 1480.15f); - AddWaypoint(6, 5489.62f, -2704.05f, 1482.18f); - AddWaypoint(7, 5457.04f, -2726.26f, 1485.10f); - Start(false, true); + LoadPath(PATH_ESCORT_AZGALOR); + Start(false); SetDespawnAtEnd(false); } } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp index ff1c108d4a2..7cdc1f54b48 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp @@ -43,6 +43,8 @@ enum Sounds SOUND_ONDEATH = 11018, }; +static constexpr uint32 PATH_ESCORT_KAZROGAL = 143106; + class boss_kazrogal : public CreatureScript { public: @@ -124,15 +126,8 @@ public: if (!go) { go = true; - AddWaypoint(0, 5492.91f, -2404.61f, 1462.63f); - AddWaypoint(1, 5531.76f, -2460.87f, 1469.55f); - AddWaypoint(2, 5554.58f, -2514.66f, 1476.12f); - AddWaypoint(3, 5554.16f, -2567.23f, 1479.90f); - AddWaypoint(4, 5540.67f, -2625.99f, 1480.89f); - AddWaypoint(5, 5508.16f, -2659.2f, 1480.15f); - AddWaypoint(6, 5489.62f, -2704.05f, 1482.18f); - AddWaypoint(7, 5457.04f, -2726.26f, 1485.10f); - Start(false, true); + LoadPath(PATH_ESCORT_KAZROGAL); + Start(false); SetDespawnAtEnd(false); } } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp index 05c520cd470..a3e17f8c997 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp @@ -38,6 +38,8 @@ enum Texts SAY_ONAGGRO = 4 }; +static constexpr uint32 PATH_ESCORT_RAGE_WINTERCHILL = 142138; + class boss_rage_winterchill : public CreatureScript { public: @@ -119,15 +121,8 @@ public: if (!go) { go = true; - AddWaypoint(0, 4896.08f, -1576.35f, 1333.65f); - AddWaypoint(1, 4898.68f, -1615.02f, 1329.48f); - AddWaypoint(2, 4907.12f, -1667.08f, 1321.00f); - AddWaypoint(3, 4963.18f, -1699.35f, 1340.51f); - AddWaypoint(4, 4989.16f, -1716.67f, 1335.74f); - AddWaypoint(5, 5026.27f, -1736.89f, 1323.02f); - AddWaypoint(6, 5037.77f, -1770.56f, 1324.36f); - AddWaypoint(7, 5067.23f, -1789.95f, 1321.17f); - Start(false, true); + LoadPath(PATH_ESCORT_RAGE_WINTERCHILL); + Start(false); SetDespawnAtEnd(false); } } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp index 6247dbf990b..76ee8e86efc 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp @@ -507,7 +507,6 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3]) ++EnemyCount; creature->SetWalk(false); - ENSURE_AI(hyjal_trashAI, creature->AI())->SetRun(); creature->setActive(true); creature->SetFarVisible(true); switch (entry) @@ -627,7 +626,7 @@ void hyjalAI::Retreat() instance->SetData(DATA_ALLIANCE_RETREAT, 1); AddWaypoint(0, JainaWPs[0][0], JainaWPs[0][1], JainaWPs[0][2]); AddWaypoint(1, JainaWPs[1][0], JainaWPs[1][1], JainaWPs[1][2]); - Start(false, false); + Start(false); SetDespawnAtEnd(false);//move to center of alliance base } if (Faction == 1) @@ -641,7 +640,7 @@ void hyjalAI::Retreat() DummyGuid = JainaDummy->GetGUID(); } AddWaypoint(0, JainaDummySpawn[1][0], JainaDummySpawn[1][1], JainaDummySpawn[1][2]); - Start(false, false); + Start(false); SetDespawnAtEnd(false);//move to center of alliance base } SpawnVeins(); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp index 0298b8952db..3263af0cd5e 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp @@ -226,56 +226,56 @@ void hyjal_trashAI::UpdateAI(uint32 /*diff*/) switch (OverrunType) { case 0: - AddWaypoint(4, AllianceOverrunWP[22][0]+irand(-3, 3), AllianceOverrunWP[22][1]+irand(-3, 3), AllianceOverrunWP[22][2]); - AddWaypoint(5, AllianceOverrunWP[23][0]+irand(-3, 3), AllianceOverrunWP[23][1]+irand(-3, 3), AllianceOverrunWP[23][2]); - AddWaypoint(6, AllianceOverrunWP[24][0]+irand(-3, 3), AllianceOverrunWP[24][1]+irand(-3, 3), AllianceOverrunWP[24][2]); - AddWaypoint(7, AllianceOverrunWP[25][0]+irand(-3, 3), AllianceOverrunWP[25][1]+irand(-3, 3), AllianceOverrunWP[25][2]); - AddWaypoint(8, AllianceOverrunWP[26][0]+irand(-3, 3), AllianceOverrunWP[26][1]+irand(-3, 3), AllianceOverrunWP[26][2]); - AddWaypoint(9, AllianceOverrunWP[27][0]+irand(-3, 3), AllianceOverrunWP[27][1]+irand(-3, 3), AllianceOverrunWP[27][2]); - AddWaypoint(10, AllianceOverrunWP[28][0]+irand(-3, 3), AllianceOverrunWP[28][1]+irand(-3, 3), AllianceOverrunWP[28][2]); - - AddWaypoint(11, AllianceOverrunWP[36][0]+irand(-3, 3), AllianceOverrunWP[36][1]+irand(-3, 3), AllianceOverrunWP[36][2]); - AddWaypoint(12, AllianceOverrunWP[37][0]+irand(-3, 3), AllianceOverrunWP[37][1]+irand(-3, 3), AllianceOverrunWP[37][2]); - AddWaypoint(13, AllianceOverrunWP[38][0]+irand(-3, 3), AllianceOverrunWP[38][1]+irand(-3, 3), AllianceOverrunWP[38][2]); - AddWaypoint(14, AllianceOverrunWP[39][0]+irand(-3, 3), AllianceOverrunWP[39][1]+irand(-3, 3), AllianceOverrunWP[39][2]); - AddWaypoint(15, AllianceOverrunWP[40][0]+irand(-3, 3), AllianceOverrunWP[40][1]+irand(-3, 3), AllianceOverrunWP[40][2]); - AddWaypoint(16, AllianceOverrunWP[41][0]+irand(-3, 3), AllianceOverrunWP[41][1]+irand(-3, 3), AllianceOverrunWP[41][2]); - AddWaypoint(17, AllianceOverrunWP[42][0]+irand(-3, 3), AllianceOverrunWP[42][1]+irand(-3, 3), AllianceOverrunWP[42][2]); - AddWaypoint(18, AllianceOverrunWP[43][0]+irand(-3, 3), AllianceOverrunWP[43][1]+irand(-3, 3), AllianceOverrunWP[43][2]); + AddWaypoint(4, AllianceOverrunWP[22][0]+irand(-3, 3), AllianceOverrunWP[22][1]+irand(-3, 3), AllianceOverrunWP[22][2], true); + AddWaypoint(5, AllianceOverrunWP[23][0]+irand(-3, 3), AllianceOverrunWP[23][1]+irand(-3, 3), AllianceOverrunWP[23][2], true); + AddWaypoint(6, AllianceOverrunWP[24][0]+irand(-3, 3), AllianceOverrunWP[24][1]+irand(-3, 3), AllianceOverrunWP[24][2], true); + AddWaypoint(7, AllianceOverrunWP[25][0]+irand(-3, 3), AllianceOverrunWP[25][1]+irand(-3, 3), AllianceOverrunWP[25][2], true); + AddWaypoint(8, AllianceOverrunWP[26][0]+irand(-3, 3), AllianceOverrunWP[26][1]+irand(-3, 3), AllianceOverrunWP[26][2], true); + AddWaypoint(9, AllianceOverrunWP[27][0]+irand(-3, 3), AllianceOverrunWP[27][1]+irand(-3, 3), AllianceOverrunWP[27][2], true); + AddWaypoint(10, AllianceOverrunWP[28][0]+irand(-3, 3), AllianceOverrunWP[28][1]+irand(-3, 3), AllianceOverrunWP[28][2], true); + + AddWaypoint(11, AllianceOverrunWP[36][0]+irand(-3, 3), AllianceOverrunWP[36][1]+irand(-3, 3), AllianceOverrunWP[36][2], true); + AddWaypoint(12, AllianceOverrunWP[37][0]+irand(-3, 3), AllianceOverrunWP[37][1]+irand(-3, 3), AllianceOverrunWP[37][2], true); + AddWaypoint(13, AllianceOverrunWP[38][0]+irand(-3, 3), AllianceOverrunWP[38][1]+irand(-3, 3), AllianceOverrunWP[38][2], true); + AddWaypoint(14, AllianceOverrunWP[39][0]+irand(-3, 3), AllianceOverrunWP[39][1]+irand(-3, 3), AllianceOverrunWP[39][2], true); + AddWaypoint(15, AllianceOverrunWP[40][0]+irand(-3, 3), AllianceOverrunWP[40][1]+irand(-3, 3), AllianceOverrunWP[40][2], true); + AddWaypoint(16, AllianceOverrunWP[41][0]+irand(-3, 3), AllianceOverrunWP[41][1]+irand(-3, 3), AllianceOverrunWP[41][2], true); + AddWaypoint(17, AllianceOverrunWP[42][0]+irand(-3, 3), AllianceOverrunWP[42][1]+irand(-3, 3), AllianceOverrunWP[42][2], true); + AddWaypoint(18, AllianceOverrunWP[43][0]+irand(-3, 3), AllianceOverrunWP[43][1]+irand(-3, 3), AllianceOverrunWP[43][2], true); me->SetHomePosition(AllianceOverrunWP[43][0]+irand(-3, 3), AllianceOverrunWP[43][1]+irand(-3, 3), AllianceOverrunWP[43][2], 0); SetDespawnAtEnd(false); LastOverronPos = 18; - Start(true, true); + Start(true); break; case 1: - AddWaypoint(4, AllianceOverrunWP[22][0]+irand(-3, 3), AllianceOverrunWP[22][1]+irand(-3, 3), AllianceOverrunWP[22][2]); - AddWaypoint(5, AllianceOverrunWP[23][0]+irand(-3, 3), AllianceOverrunWP[23][1]+irand(-3, 3), AllianceOverrunWP[23][2]); - AddWaypoint(6, AllianceOverrunWP[24][0]+irand(-3, 3), AllianceOverrunWP[24][1]+irand(-3, 3), AllianceOverrunWP[24][2]); - AddWaypoint(7, AllianceOverrunWP[25][0]+irand(-3, 3), AllianceOverrunWP[25][1]+irand(-3, 3), AllianceOverrunWP[25][2]); - AddWaypoint(8, AllianceOverrunWP[26][0]+irand(-3, 3), AllianceOverrunWP[26][1]+irand(-3, 3), AllianceOverrunWP[26][2]); - AddWaypoint(9, AllianceOverrunWP[27][0]+irand(-3, 3), AllianceOverrunWP[27][1]+irand(-3, 3), AllianceOverrunWP[27][2]); - AddWaypoint(10, AllianceOverrunWP[28][0]+irand(-3, 3), AllianceOverrunWP[28][1]+irand(-3, 3), AllianceOverrunWP[28][2]); - - AddWaypoint(11, AllianceOverrunWP[36][0]+irand(-3, 3), AllianceOverrunWP[36][1]+irand(-3, 3), AllianceOverrunWP[36][2]); - AddWaypoint(12, AllianceOverrunWP[37][0]+irand(-3, 3), AllianceOverrunWP[37][1]+irand(-3, 3), AllianceOverrunWP[37][2]); - AddWaypoint(13, AllianceOverrunWP[38][0]+irand(-3, 3), AllianceOverrunWP[38][1]+irand(-3, 3), AllianceOverrunWP[38][2]); - AddWaypoint(14, AllianceOverrunWP[39][0]+irand(-3, 3), AllianceOverrunWP[39][1]+irand(-3, 3), AllianceOverrunWP[39][2]); - AddWaypoint(15, AllianceOverrunWP[40][0]+irand(-3, 3), AllianceOverrunWP[40][1]+irand(-3, 3), AllianceOverrunWP[40][2]); - AddWaypoint(16, AllianceOverrunWP[41][0]+irand(-3, 3), AllianceOverrunWP[41][1]+irand(-3, 3), AllianceOverrunWP[41][2]); - AddWaypoint(17, AllianceOverrunWP[42][0]+irand(-3, 3), AllianceOverrunWP[42][1]+irand(-3, 3), AllianceOverrunWP[42][2]); - AddWaypoint(18, AllianceOverrunWP[44][0]+irand(-3, 3), AllianceOverrunWP[44][1]+irand(-3, 3), AllianceOverrunWP[44][2]); + AddWaypoint(4, AllianceOverrunWP[22][0]+irand(-3, 3), AllianceOverrunWP[22][1]+irand(-3, 3), AllianceOverrunWP[22][2], true); + AddWaypoint(5, AllianceOverrunWP[23][0]+irand(-3, 3), AllianceOverrunWP[23][1]+irand(-3, 3), AllianceOverrunWP[23][2], true); + AddWaypoint(6, AllianceOverrunWP[24][0]+irand(-3, 3), AllianceOverrunWP[24][1]+irand(-3, 3), AllianceOverrunWP[24][2], true); + AddWaypoint(7, AllianceOverrunWP[25][0]+irand(-3, 3), AllianceOverrunWP[25][1]+irand(-3, 3), AllianceOverrunWP[25][2], true); + AddWaypoint(8, AllianceOverrunWP[26][0]+irand(-3, 3), AllianceOverrunWP[26][1]+irand(-3, 3), AllianceOverrunWP[26][2], true); + AddWaypoint(9, AllianceOverrunWP[27][0]+irand(-3, 3), AllianceOverrunWP[27][1]+irand(-3, 3), AllianceOverrunWP[27][2], true); + AddWaypoint(10, AllianceOverrunWP[28][0]+irand(-3, 3), AllianceOverrunWP[28][1]+irand(-3, 3), AllianceOverrunWP[28][2], true); + + AddWaypoint(11, AllianceOverrunWP[36][0]+irand(-3, 3), AllianceOverrunWP[36][1]+irand(-3, 3), AllianceOverrunWP[36][2], true); + AddWaypoint(12, AllianceOverrunWP[37][0]+irand(-3, 3), AllianceOverrunWP[37][1]+irand(-3, 3), AllianceOverrunWP[37][2], true); + AddWaypoint(13, AllianceOverrunWP[38][0]+irand(-3, 3), AllianceOverrunWP[38][1]+irand(-3, 3), AllianceOverrunWP[38][2], true); + AddWaypoint(14, AllianceOverrunWP[39][0]+irand(-3, 3), AllianceOverrunWP[39][1]+irand(-3, 3), AllianceOverrunWP[39][2], true); + AddWaypoint(15, AllianceOverrunWP[40][0]+irand(-3, 3), AllianceOverrunWP[40][1]+irand(-3, 3), AllianceOverrunWP[40][2], true); + AddWaypoint(16, AllianceOverrunWP[41][0]+irand(-3, 3), AllianceOverrunWP[41][1]+irand(-3, 3), AllianceOverrunWP[41][2], true); + AddWaypoint(17, AllianceOverrunWP[42][0]+irand(-3, 3), AllianceOverrunWP[42][1]+irand(-3, 3), AllianceOverrunWP[42][2], true); + AddWaypoint(18, AllianceOverrunWP[44][0]+irand(-3, 3), AllianceOverrunWP[44][1]+irand(-3, 3), AllianceOverrunWP[44][2], true); me->SetHomePosition(AllianceOverrunWP[44][0]+irand(-3, 3), AllianceOverrunWP[44][1]+irand(-3, 3), AllianceOverrunWP[44][2], 0); SetDespawnAtEnd(false); LastOverronPos = 18; - Start(true, true); + Start(true); break; default: for (uint8 i = 22; i < 36; ++i) - AddWaypoint(i-18, AllianceOverrunWP[i][0]+irand(-3, 3), AllianceOverrunWP[i][1]+irand(-3, 3), AllianceOverrunWP[i][2]); + AddWaypoint(i-18, AllianceOverrunWP[i][0]+irand(-3, 3), AllianceOverrunWP[i][1]+irand(-3, 3), AllianceOverrunWP[i][2], true); SetDespawnAtEnd(true); LastOverronPos = 17; - Start(true, true); + Start(true); break; } } @@ -286,68 +286,68 @@ void hyjal_trashAI::UpdateAI(uint32 /*diff*/) switch (OverrunType) { case 0: - AddWaypoint(4, AllianceOverrunWP[1][0]+irand(-3, 3), AllianceOverrunWP[1][1]+irand(-3, 3), AllianceOverrunWP[1][2]); - AddWaypoint(5, AllianceOverrunWP[2][0]+irand(-3, 3), AllianceOverrunWP[2][1]+irand(-3, 3), AllianceOverrunWP[2][2]); + AddWaypoint(4, AllianceOverrunWP[1][0]+irand(-3, 3), AllianceOverrunWP[1][1]+irand(-3, 3), AllianceOverrunWP[1][2], true); + AddWaypoint(5, AllianceOverrunWP[2][0]+irand(-3, 3), AllianceOverrunWP[2][1]+irand(-3, 3), AllianceOverrunWP[2][2], true); me->SetHomePosition(AllianceOverrunWP[2][0]+irand(-3, 3), AllianceOverrunWP[2][1]+irand(-3, 3), AllianceOverrunWP[2][2], 0); SetDespawnAtEnd(false); LastOverronPos = 5; - Start(true, true); + Start(true); break; case 1: - AddWaypoint(4, AllianceOverrunWP[3][0]+irand(-3, 3), AllianceOverrunWP[3][1]+irand(-3, 3), AllianceOverrunWP[3][2]); - AddWaypoint(5, AllianceOverrunWP[4][0]+irand(-3, 3), AllianceOverrunWP[4][1]+irand(-3, 3), AllianceOverrunWP[4][2]); - AddWaypoint(6, AllianceOverrunWP[5][0]+irand(-3, 3), AllianceOverrunWP[5][1]+irand(-3, 3), AllianceOverrunWP[5][2]); + AddWaypoint(4, AllianceOverrunWP[3][0]+irand(-3, 3), AllianceOverrunWP[3][1]+irand(-3, 3), AllianceOverrunWP[3][2], true); + AddWaypoint(5, AllianceOverrunWP[4][0]+irand(-3, 3), AllianceOverrunWP[4][1]+irand(-3, 3), AllianceOverrunWP[4][2], true); + AddWaypoint(6, AllianceOverrunWP[5][0]+irand(-3, 3), AllianceOverrunWP[5][1]+irand(-3, 3), AllianceOverrunWP[5][2], true); me->SetHomePosition(AllianceOverrunWP[5][0]+irand(-3, 3), AllianceOverrunWP[5][1]+irand(-3, 3), AllianceOverrunWP[5][2], 0); SetDespawnAtEnd(false); LastOverronPos = 6; - Start(true, true); + Start(true); break; case 2: - AddWaypoint(4, AllianceOverrunWP[6][0]+irand(-3, 3), AllianceOverrunWP[6][1]+irand(-3, 3), AllianceOverrunWP[6][2]); - AddWaypoint(5, AllianceOverrunWP[7][0]+irand(-3, 3), AllianceOverrunWP[7][1]+irand(-3, 3), AllianceOverrunWP[7][2]); - AddWaypoint(6, AllianceOverrunWP[8][0]+irand(-3, 3), AllianceOverrunWP[8][1]+irand(-3, 3), AllianceOverrunWP[8][2]); - AddWaypoint(7, AllianceOverrunWP[9][0]+irand(-3, 3), AllianceOverrunWP[9][1]+irand(-3, 3), AllianceOverrunWP[9][2]); + AddWaypoint(4, AllianceOverrunWP[6][0]+irand(-3, 3), AllianceOverrunWP[6][1]+irand(-3, 3), AllianceOverrunWP[6][2], true); + AddWaypoint(5, AllianceOverrunWP[7][0]+irand(-3, 3), AllianceOverrunWP[7][1]+irand(-3, 3), AllianceOverrunWP[7][2], true); + AddWaypoint(6, AllianceOverrunWP[8][0]+irand(-3, 3), AllianceOverrunWP[8][1]+irand(-3, 3), AllianceOverrunWP[8][2], true); + AddWaypoint(7, AllianceOverrunWP[9][0]+irand(-3, 3), AllianceOverrunWP[9][1]+irand(-3, 3), AllianceOverrunWP[9][2], true); me->SetHomePosition(AllianceOverrunWP[9][0]+irand(-3, 3), AllianceOverrunWP[9][1]+irand(-3, 3), AllianceOverrunWP[9][2], 0); SetDespawnAtEnd(false); LastOverronPos = 7; - Start(true, true); + Start(true); break; case 3: - AddWaypoint(4, AllianceOverrunWP[10][0]+irand(-3, 3), AllianceOverrunWP[10][1]+irand(-3, 3), AllianceOverrunWP[10][2]); - AddWaypoint(5, AllianceOverrunWP[11][0]+irand(-3, 3), AllianceOverrunWP[11][1]+irand(-3, 3), AllianceOverrunWP[11][2]); - AddWaypoint(6, AllianceOverrunWP[12][0]+irand(-3, 3), AllianceOverrunWP[12][1]+irand(-3, 3), AllianceOverrunWP[12][2]); + AddWaypoint(4, AllianceOverrunWP[10][0]+irand(-3, 3), AllianceOverrunWP[10][1]+irand(-3, 3), AllianceOverrunWP[10][2], true); + AddWaypoint(5, AllianceOverrunWP[11][0]+irand(-3, 3), AllianceOverrunWP[11][1]+irand(-3, 3), AllianceOverrunWP[11][2], true); + AddWaypoint(6, AllianceOverrunWP[12][0]+irand(-3, 3), AllianceOverrunWP[12][1]+irand(-3, 3), AllianceOverrunWP[12][2], true); me->SetHomePosition(AllianceOverrunWP[12][0]+irand(-3, 3), AllianceOverrunWP[12][1]+irand(-3, 3), AllianceOverrunWP[12][2], 0); SetDespawnAtEnd(false); LastOverronPos = 6; - Start(true, true); + Start(true); break; case 4: - AddWaypoint(4, AllianceOverrunWP[13][0]+irand(-3, 3), AllianceOverrunWP[13][1]+irand(-3, 3), AllianceOverrunWP[13][2]); - AddWaypoint(5, AllianceOverrunWP[14][0]+irand(-3, 3), AllianceOverrunWP[14][1]+irand(-3, 3), AllianceOverrunWP[14][2]); - AddWaypoint(6, AllianceOverrunWP[15][0]+irand(-3, 3), AllianceOverrunWP[15][1]+irand(-3, 3), AllianceOverrunWP[15][2]); + AddWaypoint(4, AllianceOverrunWP[13][0]+irand(-3, 3), AllianceOverrunWP[13][1]+irand(-3, 3), AllianceOverrunWP[13][2], true); + AddWaypoint(5, AllianceOverrunWP[14][0]+irand(-3, 3), AllianceOverrunWP[14][1]+irand(-3, 3), AllianceOverrunWP[14][2], true); + AddWaypoint(6, AllianceOverrunWP[15][0]+irand(-3, 3), AllianceOverrunWP[15][1]+irand(-3, 3), AllianceOverrunWP[15][2], true); me->SetHomePosition(AllianceOverrunWP[15][0]+irand(-3, 3), AllianceOverrunWP[15][1]+irand(-3, 3), AllianceOverrunWP[15][2], 0); SetDespawnAtEnd(false); LastOverronPos = 6; - Start(true, true); + Start(true); break; case 5: - AddWaypoint(4, AllianceOverrunWP[16][0]+irand(-3, 3), AllianceOverrunWP[16][1]+irand(-3, 3), AllianceOverrunWP[16][2]); - AddWaypoint(5, AllianceOverrunWP[17][0]+irand(-3, 3), AllianceOverrunWP[17][1]+irand(-3, 3), AllianceOverrunWP[17][2]); - AddWaypoint(6, AllianceOverrunWP[18][0]+irand(-3, 3), AllianceOverrunWP[18][1]+irand(-3, 3), AllianceOverrunWP[18][2]); - AddWaypoint(7, AllianceOverrunWP[19][0]+irand(-3, 3), AllianceOverrunWP[19][1]+irand(-3, 3), AllianceOverrunWP[19][2]); - AddWaypoint(8, AllianceOverrunWP[20][0]+irand(-3, 3), AllianceOverrunWP[20][1]+irand(-3, 3), AllianceOverrunWP[20][2]); - AddWaypoint(9, AllianceOverrunWP[21][0]+irand(-3, 3), AllianceOverrunWP[21][1]+irand(-3, 3), AllianceOverrunWP[21][2]); + AddWaypoint(4, AllianceOverrunWP[16][0]+irand(-3, 3), AllianceOverrunWP[16][1]+irand(-3, 3), AllianceOverrunWP[16][2], true); + AddWaypoint(5, AllianceOverrunWP[17][0]+irand(-3, 3), AllianceOverrunWP[17][1]+irand(-3, 3), AllianceOverrunWP[17][2], true); + AddWaypoint(6, AllianceOverrunWP[18][0]+irand(-3, 3), AllianceOverrunWP[18][1]+irand(-3, 3), AllianceOverrunWP[18][2], true); + AddWaypoint(7, AllianceOverrunWP[19][0]+irand(-3, 3), AllianceOverrunWP[19][1]+irand(-3, 3), AllianceOverrunWP[19][2], true); + AddWaypoint(8, AllianceOverrunWP[20][0]+irand(-3, 3), AllianceOverrunWP[20][1]+irand(-3, 3), AllianceOverrunWP[20][2], true); + AddWaypoint(9, AllianceOverrunWP[21][0]+irand(-3, 3), AllianceOverrunWP[21][1]+irand(-3, 3), AllianceOverrunWP[21][2], true); me->SetHomePosition(AllianceOverrunWP[21][0]+irand(-3, 3), AllianceOverrunWP[21][1]+irand(-3, 3), AllianceOverrunWP[21][2], 0); SetDespawnAtEnd(false); LastOverronPos = 9; - Start(true, true); + Start(true); break; default: for (uint8 i = 22; i < 36; ++i) - AddWaypoint(i-18, AllianceOverrunWP[i][0]+irand(-3, 3), AllianceOverrunWP[i][1]+irand(-3, 3), AllianceOverrunWP[i][2]); + AddWaypoint(i-18, AllianceOverrunWP[i][0]+irand(-3, 3), AllianceOverrunWP[i][1]+irand(-3, 3), AllianceOverrunWP[i][2], true); SetDespawnAtEnd(true); LastOverronPos = 17; - Start(true, true); + Start(true); break; } } @@ -361,43 +361,43 @@ void hyjal_trashAI::UpdateAI(uint32 /*diff*/) switch (OverrunType) { case 0: - AddWaypoint(5, HordeOverrunWP[16][0]+irand(-10, 10), HordeOverrunWP[16][1]+irand(-10, 10), HordeOverrunWP[16][2]); - AddWaypoint(6, HordeOverrunWP[17][0]+irand(-10, 10), HordeOverrunWP[17][1]+irand(-10, 10), HordeOverrunWP[17][2]); - AddWaypoint(7, HordeOverrunWP[18][0], HordeOverrunWP[18][1], HordeOverrunWP[18][2]); - AddWaypoint(8, HordeOverrunWP[19][0], HordeOverrunWP[19][1], HordeOverrunWP[19][2]); + AddWaypoint(5, HordeOverrunWP[16][0]+irand(-10, 10), HordeOverrunWP[16][1]+irand(-10, 10), HordeOverrunWP[16][2], true); + AddWaypoint(6, HordeOverrunWP[17][0]+irand(-10, 10), HordeOverrunWP[17][1]+irand(-10, 10), HordeOverrunWP[17][2], true); + AddWaypoint(7, HordeOverrunWP[18][0], HordeOverrunWP[18][1], HordeOverrunWP[18][2], true); + AddWaypoint(8, HordeOverrunWP[19][0], HordeOverrunWP[19][1], HordeOverrunWP[19][2], true); me->SetHomePosition(HordeOverrunWP[19][0], HordeOverrunWP[19][1], HordeOverrunWP[19][2], 0); SetDespawnAtEnd(false); LastOverronPos = 8; - Start(true, true); + Start(true); break; case 1: - AddWaypoint(5, HordeOverrunWP[16][0]+irand(-10, 10), HordeOverrunWP[16][1]+irand(-10, 10), HordeOverrunWP[16][2]); - AddWaypoint(6, HordeOverrunWP[17][0]+irand(-10, 10), HordeOverrunWP[17][1]+irand(-10, 10), HordeOverrunWP[17][2]); - AddWaypoint(7, HordeOverrunWP[18][0], HordeOverrunWP[18][1], HordeOverrunWP[18][2]); - AddWaypoint(8, HordeOverrunWP[20][0], HordeOverrunWP[20][1], HordeOverrunWP[20][2]); + AddWaypoint(5, HordeOverrunWP[16][0]+irand(-10, 10), HordeOverrunWP[16][1]+irand(-10, 10), HordeOverrunWP[16][2], true); + AddWaypoint(6, HordeOverrunWP[17][0]+irand(-10, 10), HordeOverrunWP[17][1]+irand(-10, 10), HordeOverrunWP[17][2], true); + AddWaypoint(7, HordeOverrunWP[18][0], HordeOverrunWP[18][1], HordeOverrunWP[18][2], true); + AddWaypoint(8, HordeOverrunWP[20][0], HordeOverrunWP[20][1], HordeOverrunWP[20][2], true); me->SetHomePosition(HordeOverrunWP[20][0], HordeOverrunWP[20][1], HordeOverrunWP[20][2], 0); SetDespawnAtEnd(false); LastOverronPos = 8; - Start(true, true); + Start(true); break; default: for (uint8 i = 0; i < 16; ++i) - AddWaypoint(i+6, HordeOverrunWP[i][0]+irand(-10, 10), HordeOverrunWP[i][1]+irand(-10, 10), HordeOverrunWP[i][2]); + AddWaypoint(i+6, HordeOverrunWP[i][0]+irand(-10, 10), HordeOverrunWP[i][1]+irand(-10, 10), HordeOverrunWP[i][2], true); SetDespawnAtEnd(true); LastOverronPos = 21; - Start(true, true); + Start(true); break; } } if (me->GetEntry() == ABOMINATION) { for (uint8 i = 0; i < 6; ++i) - AddWaypoint(i, HordeWPs[i][0]+irand(-10, 10), HordeWPs[i][1]+irand(-10, 10), HordeWPs[i][2]); + AddWaypoint(i, HordeWPs[i][0]+irand(-10, 10), HordeWPs[i][1]+irand(-10, 10), HordeWPs[i][2], true); for (uint8 i = 0; i < 16; ++i) - AddWaypoint(i+6, HordeOverrunWP[i][0]+irand(-10, 10), HordeOverrunWP[i][1]+irand(-10, 10), HordeOverrunWP[i][2]); + AddWaypoint(i+6, HordeOverrunWP[i][0]+irand(-10, 10), HordeOverrunWP[i][1]+irand(-10, 10), HordeOverrunWP[i][2], true); SetDespawnAtEnd(true); LastOverronPos = 21; - Start(true, true); + Start(true); } } } @@ -512,8 +512,8 @@ public: if (!go) { go = true; - AddWaypoint(0, HordeWPs[7][0]+irand(-3, 3), HordeWPs[7][1]+irand(-3, 3), HordeWPs[7][2]);//HordeWPs[7] infront of thrall - Start(true, true); + AddWaypoint(0, HordeWPs[7][0]+irand(-3, 3), HordeWPs[7][1]+irand(-3, 3), HordeWPs[7][2], true);//HordeWPs[7] infront of thrall + Start(true); SetDespawnAtEnd(false); } } @@ -612,14 +612,14 @@ public: if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, use horde WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2]); - Start(false, true); + AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2], true); + Start(false); SetDespawnAtEnd(false); }else//use alliance WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2]); - Start(false, true); + AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2], true); + Start(false); SetDespawnAtEnd(false); } } @@ -716,14 +716,14 @@ public: if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, use horde WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2]); - Start(false, true); + AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2], true); + Start(false); SetDespawnAtEnd(false); }else//use alliance WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2]); - Start(false, true); + AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2], true); + Start(false); SetDespawnAtEnd(false); } } @@ -850,14 +850,14 @@ public: if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, use horde WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2]); - Start(true, true); + AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2], true); + Start(true); SetDespawnAtEnd(false); }else//use alliance WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2]); - Start(true, true); + AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2], true); + Start(true); SetDespawnAtEnd(false); } } @@ -959,14 +959,14 @@ public: if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, use horde WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2]); - Start(false, true); + AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2], true); + Start(false); SetDespawnAtEnd(false); }else//use alliance WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2]); - Start(false, true); + AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2], true); + Start(false); SetDespawnAtEnd(false); } } @@ -1060,14 +1060,14 @@ public: if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, use horde WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2]); - Start(false, true); + AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2], true); + Start(false); SetDespawnAtEnd(false); }else//use alliance WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2]); - Start(false, true); + AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2], true); + Start(false); SetDespawnAtEnd(false); } } @@ -1151,14 +1151,14 @@ public: if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, use horde WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2]); - Start(false, true); + AddWaypoint(i, HordeWPs[i][0]+irand(-3, 3), HordeWPs[i][1]+irand(-3, 3), HordeWPs[i][2], true); + Start(false); SetDespawnAtEnd(false); }else//use alliance WPs { for (uint8 i = 0; i < 8; ++i) - AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2]); - Start(false, true); + AddWaypoint(i, AllianceWPs[i][0]+irand(-3, 3), AllianceWPs[i][1]+irand(-3, 3), AllianceWPs[i][2], true); + Start(false); SetDespawnAtEnd(false); } } @@ -1255,15 +1255,15 @@ public: if (!useFlyPath) { for (uint8 i = 0; i < 3; ++i) - AddWaypoint(i, FrostWyrmWPs[i][0], FrostWyrmWPs[i][1], FrostWyrmWPs[i][2]); + AddWaypoint(i, FrostWyrmWPs[i][0], FrostWyrmWPs[i][1], FrostWyrmWPs[i][2], true); } else {//fly path FlyPathWPs for (uint8 i = 0; i < 3; ++i) - AddWaypoint(i, FlyPathWPs[i][0]+irand(-10, 10), FlyPathWPs[i][1]+irand(-10, 10), FlyPathWPs[i][2]); + AddWaypoint(i, FlyPathWPs[i][0]+irand(-10, 10), FlyPathWPs[i][1]+irand(-10, 10), FlyPathWPs[i][2], true); } go = true; - Start(false, true); + Start(false); SetDespawnAtEnd(false); } } @@ -1378,13 +1378,13 @@ public: if (!useFlyPath) { for (uint8 i = 0; i < 3; ++i) - AddWaypoint(i, GargoyleWPs[i][0]+irand(-10, 10), GargoyleWPs[i][1]+irand(-10, 10), GargoyleWPs[i][2]); + AddWaypoint(i, GargoyleWPs[i][0]+irand(-10, 10), GargoyleWPs[i][1]+irand(-10, 10), GargoyleWPs[i][2], true); }else{//fly path FlyPathWPs for (uint8 i = 0; i < 3; ++i) - AddWaypoint(i, FlyPathWPs[i][0]+irand(-10, 10), FlyPathWPs[i][1]+irand(-10, 10), FlyPathWPs[i][2]); + AddWaypoint(i, FlyPathWPs[i][0]+irand(-10, 10), FlyPathWPs[i][1]+irand(-10, 10), FlyPathWPs[i][2], true); } go = true; - Start(false, true); + Start(false); SetDespawnAtEnd(false); } } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp index f6a33f0c303..86225fce859 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp @@ -185,6 +185,9 @@ enum ThrallOldHillsbrad #define SPEED_RUN (1.0f) #define SPEED_MOUNT (1.6f) +static constexpr uint32 PATH_ESCORT_THRALL_OLD_HILLSBRAD = 143010; +static constexpr uint32 PATH_ESCORT_TARETHA = 151098; + struct npc_thrall_old_hillsbrad : public EscortAI { npc_thrall_old_hillsbrad(Creature* creature) : EscortAI(creature) @@ -204,7 +207,7 @@ struct npc_thrall_old_hillsbrad : public EscortAI void InitializeAI() override { /* correct respawn positions after wipe cannot be used because of how waypoints are set up for this creature - * it would require splitting the path into 4 segments, moving it out of script_waypoint table and changing + * it would require splitting the path into 4 segments, moving it out of waypoint_data table and changing * all waypoint ids in WaypointReached function switch (instance->GetData(TYPE_THRALL_EVENT)) { @@ -243,7 +246,6 @@ struct npc_thrall_old_hillsbrad : public EscortAI switch (waypointId) { case 8: - SetRun(false); me->SummonCreature(18764, 2181.87f, 112.46f, 89.45f, 0.26f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s); break; case 9: @@ -255,7 +257,6 @@ struct npc_thrall_old_hillsbrad : public EscortAI me->SetDisplayId(THRALL_MODEL_EQUIPPED); break; case 11: - SetRun(); break; case 15: me->SummonCreature(NPC_RIFLE, 2200.28f, 137.37f, 87.93f, 5.07f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s); @@ -288,13 +289,11 @@ struct npc_thrall_old_hillsbrad : public EscortAI //temporary, skarloc should rather be triggered to walk up to thrall break; case 30: - SetRun(false); break; case 31: Talk(SAY_TH_MOUNTS_UP); HadMount = true; DoMount(); - SetRun(); break; case 37: //possibly regular patrollers? If so, remove this and let database handle them @@ -306,17 +305,14 @@ struct npc_thrall_old_hillsbrad : public EscortAI me->SummonCreature(SKARLOC_MOUNT, 2488.64f, 625.77f, 58.26f, 4.71f, TEMPSUMMON_TIMED_DESPAWN, 10s); DoUnmount(); HadMount = false; - SetRun(false); break; case 60: me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); //make horsie run off SetEscortPaused(true); instance->SetData(TYPE_THRALL_EVENT, OH_ESCORT_BARN_TO_TARETHA); - SetRun(); break; case 64: - SetRun(false); break; case 68: me->SummonCreature(NPC_BARN_PROTECTOR, 2500.22f, 692.60f, 55.50f, 2.84f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s); @@ -325,10 +321,8 @@ struct npc_thrall_old_hillsbrad : public EscortAI me->SummonCreature(NPC_BARN_GUARDSMAN, 2500.94f, 695.81f, 55.50f, 3.14f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s); break; case 71: - SetRun(); break; case 81: - SetRun(false); break; case 83: me->SummonCreature(NPC_CHURCH_PROTECTOR, 2627.33f, 646.82f, 56.03f, 4.28f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5s); @@ -338,11 +332,6 @@ struct npc_thrall_old_hillsbrad : public EscortAI break; case 84: Talk(SAY_TH_CHURCH_END); - SetRun(); - break; - case 91: - me->SetWalk(true); - SetRun(false); break; case 93: me->SummonCreature(NPC_INN_PROTECTOR, 2652.71f, 660.31f, 61.93f, 1.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s); @@ -364,7 +353,6 @@ struct npc_thrall_old_hillsbrad : public EscortAI break; case 97: Talk(SAY_TH_EPOCH_KILL_TARETHA); - SetRun(); break; case 98: //trigger epoch Yell("Thrall! Come outside and face your fate! ....") @@ -376,7 +364,13 @@ struct npc_thrall_old_hillsbrad : public EscortAI if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA))) { if (Player* player = GetPlayerForEscort()) - ENSURE_AI(EscortAI, (Taretha->AI()))->Start(false, true, player->GetGUID()); + { + if (EscortAI* ai = CAST_AI(EscortAI, Taretha->AI())) + { + ai->LoadPath(PATH_ESCORT_TARETHA); + ai->Start(false, player->GetGUID()); + } + } } //kill credit Creature for quest @@ -505,7 +499,8 @@ struct npc_thrall_old_hillsbrad : public EscortAI Talk(SAY_TH_START_EVENT_PART1); - Start(true, true, player->GetGUID()); + LoadPath(PATH_ESCORT_THRALL_OLD_HILLSBRAD); + Start(true, player->GetGUID()); SetMaxPlayerDistance(100.0f);//not really needed, because it will not despawn if player is too far SetDespawnAtEnd(false); diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp index 7dbf703705e..9a4e8f41ce5 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp @@ -40,7 +40,9 @@ enum Willix SAY_END = 10, QUEST_WILLIX_THE_IMPORTER = 1144, - ENTRY_BOAR = 4514 + ENTRY_BOAR = 4514, + + PATH_ESCORT_WILLIX = 36066 }; class npc_willix : public CreatureScript @@ -56,7 +58,8 @@ public: { if (quest->GetQuestId() == QUEST_WILLIX_THE_IMPORTER) { - Start(true, false, player->GetGUID()); + LoadPath(PATH_ESCORT_WILLIX); + Start(true, player->GetGUID()); Talk(SAY_READY, player); me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); } diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp index 6355a9a2133..3e683d4e9f6 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp +++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp @@ -74,6 +74,8 @@ enum Enums NPC_DEVIATE_MOCCASIN = 5762, NPC_NIGHTMARE_ECTOPLASM = 5763, NPC_MUTANUS_THE_DEVOURER = 3654, + + PATH_ESCORT_NARALEX_DISCIPLE = 29426, }; class npc_disciple_of_naralex : public CreatureScript @@ -281,7 +283,6 @@ public: naralex->AI()->Talk(SAY_FAREWELL); naralex->AddAura(SPELL_FLIGHT_FORM, naralex); } - SetRun(); me->SetStandState(UNIT_STAND_STATE_STAND); me->AddAura(SPELL_FLIGHT_FORM, me); } @@ -335,7 +336,8 @@ public: me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_ACTIVE); me->SetImmuneToPC(false); - Start(false, false, player->GetGUID()); + LoadPath(PATH_ESCORT_NARALEX_DISCIPLE); + Start(false, player->GetGUID()); SetDespawnAtFar(false); SetDespawnAtEnd(false); } diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp index 285db50448b..c1c627a2453 100644 --- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp +++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp @@ -46,7 +46,8 @@ enum RuulSnowhoof QUEST_FREEDOM_TO_RUUL = 6482, GO_CAGE = 178147, RUUL_SHAPECHANGE = 20514, - SAY_FINISH = 0 + SAY_FINISH = 0, + PATH_ESCORT_RUUL_SNOWHOOF = 102546, }; Position const RuulSnowhoofSummonsCoord[6] = @@ -86,7 +87,8 @@ public: if (quest->GetQuestId() == QUEST_FREEDOM_TO_RUUL) { me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); - EscortAI::Start(true, false, player->GetGUID()); + LoadPath(PATH_ESCORT_RUUL_SNOWHOOF); + EscortAI::Start(true, player->GetGUID()); } } @@ -167,7 +169,9 @@ enum Muglash NPC_WRATH_SEAWITCH = 3715, NPC_VORSHA = 12940, - NPC_MUGLASH = 12717 + NPC_MUGLASH = 12717, + + PATH_ESCORT_MUGLASH = 101738, }; Position const FirstNagaCoord[3] = @@ -239,7 +243,8 @@ public: { Talk(SAY_MUG_START1); me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); - EscortAI::Start(true, false, player->GetGUID()); + LoadPath(PATH_ESCORT_MUGLASH); + EscortAI::Start(true, player->GetGUID()); } } diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 18ddd8a2a38..76aa6af3c7f 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -336,7 +336,8 @@ enum Magwin EVENT_STAND = 3, EVENT_TALK_END = 4, EVENT_COWLEN_TALK = 5, - QUEST_A_CRY_FOR_HELP = 9528 + QUEST_A_CRY_FOR_HELP = 9528, + PATH_ESCORT_MAGWIN = 138498, }; class npc_magwin : public CreatureScript @@ -379,7 +380,6 @@ public: case 28: player->GroupEventHappens(QUEST_A_CRY_FOR_HELP, me); _events.ScheduleEvent(EVENT_TALK_END, 2s); - SetRun(true); break; case 29: if (Creature* cowlen = me->FindNearestCreature(NPC_COWLEN, 50.0f, true)) @@ -406,7 +406,10 @@ public: break; case EVENT_START_ESCORT: if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) - EscortAI::Start(true, false, player->GetGUID()); + { + LoadPath(PATH_ESCORT_MAGWIN); + EscortAI::Start(true, player->GetGUID()); + } _events.ScheduleEvent(EVENT_STAND, 2s); break; case EVENT_STAND: // Remove kneel standstate. Using a separate delayed event because it causes unwanted delay before starting waypoint movement. diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index d23895ed1a8..bf2ea648bc2 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -284,6 +284,8 @@ public: ## npc_demolitionist_legoso ######*/ +static constexpr uint32 PATH_ESCORT_LEGOSO = 143858; + class npc_demolitionist_legoso : public CreatureScript { public: @@ -307,7 +309,8 @@ public: if (quest->GetQuestId() == QUEST_ENDING_THEIR_WORLD) { SetGUID(player->GetGUID(), DATA_EVENT_STARTER_GUID); - Start(true, true, player->GetGUID(), quest); + LoadPath(PATH_ESCORT_LEGOSO); + Start(true, player->GetGUID(), quest); } } diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index 0f594165860..9c09e0d8cb6 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -35,99 +35,6 @@ EndContentData */ #include "TemporarySummon.h" /*###### -# npc_gilthares -######*/ - -enum Gilthares -{ - SAY_GIL_START = 0, - SAY_GIL_AT_LAST = 1, - SAY_GIL_PROCEED = 2, - SAY_GIL_FREEBOOTERS = 3, - SAY_GIL_AGGRO = 4, - SAY_GIL_ALMOST = 5, - SAY_GIL_SWEET = 6, - SAY_GIL_FREED = 7, - - QUEST_FREE_FROM_HOLD = 898, - AREA_MERCHANT_COAST = 391 -}; - -class npc_gilthares : public CreatureScript -{ -public: - npc_gilthares() : CreatureScript("npc_gilthares") { } - - struct npc_giltharesAI : public EscortAI - { - npc_giltharesAI(Creature* creature) : EscortAI(creature) { } - - void Reset() override { } - - void WaypointReached(uint32 waypointId, uint32 /*pathId*/) override - { - Player* player = GetPlayerForEscort(); - if (!player) - return; - - switch (waypointId) - { - case 16: - Talk(SAY_GIL_AT_LAST, player); - break; - case 17: - Talk(SAY_GIL_PROCEED, player); - break; - case 18: - Talk(SAY_GIL_FREEBOOTERS, player); - break; - case 37: - Talk(SAY_GIL_ALMOST, player); - break; - case 47: - Talk(SAY_GIL_SWEET, player); - break; - case 53: - Talk(SAY_GIL_FREED, player); - player->GroupEventHappens(QUEST_FREE_FROM_HOLD, me); - break; - } - } - - void JustEngagedWith(Unit* who) override - { - //not always use - if (rand32() % 4) - return; - - //only aggro text if not player and only in this area - if (who->GetTypeId() != TYPEID_PLAYER && me->GetAreaId() == AREA_MERCHANT_COAST) - { - //appears to be pretty much random (possible only if escorter not in combat with who yet?) - Talk(SAY_GIL_AGGRO, who); - } - } - - void OnQuestAccept(Player* player, Quest const* quest) override - { - if (quest->GetQuestId() == QUEST_FREE_FROM_HOLD) - { - me->SetFaction(FACTION_ESCORTEE_H_NEUTRAL_ACTIVE); - me->SetStandState(UNIT_STAND_STATE_STAND); - - Talk(SAY_GIL_START, player); - Start(false, false, player->GetGUID(), quest); - } - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_giltharesAI(creature); - } -}; - -/*###### ## npc_taskmaster_fizzule ######*/ @@ -478,6 +385,8 @@ enum Wizzlecrank QUEST_ESCAPE = 863, NPC_PILOT_WIZZ = 3451, NPC_MERCENARY = 3282, + + PATH_ESCORT_WIZZLECRANK = 27514, }; class npc_wizzlecrank_shredder : public CreatureScript @@ -506,9 +415,6 @@ public: case 0: Talk(SAY_STARTUP1); break; - case 9: - SetRun(false); - break; case 17: if (Creature* temp = me->SummonCreature(NPC_MERCENARY, 1128.489f, -3037.611f, 92.701f, 1.472f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 2min)) { @@ -536,7 +442,6 @@ public: break; case 18: Talk(SAY_PROGRESS_1, player); - SetRun(); break; } } @@ -599,7 +504,8 @@ public: me->SetFaction(FACTION_RATCHET); Talk(SAY_START); SetDespawnAtEnd(false); - Start(true, false, player->GetGUID()); + LoadPath(PATH_ESCORT_WIZZLECRANK), + Start(true, player->GetGUID()); } } }; diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp index eba6aa87899..ce9ef758f5d 100644 --- a/src/server/scripts/Kalimdor/zone_winterspring.cpp +++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp @@ -256,6 +256,8 @@ static Position wingThicketLocations[] = # npc_ranshalla #####*/ +static constexpr uint32 PATH_ESCORT_RANSHALLA = 82402; + class npc_ranshalla : public CreatureScript { public: @@ -544,7 +546,8 @@ public: Talk(SAY_QUEST_START); me->SetFaction(FACTION_ESCORTEE_A_NEUTRAL_PASSIVE); - Start(false, false, player->GetGUID(), quest); + LoadPath(PATH_ESCORT_RANSHALLA); + Start(false, player->GetGUID(), quest); } } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index d1f35975a14..c613fd4f5e1 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -548,13 +548,13 @@ public: switch (uiType) { case 0: - AddWaypoint(0, 712.14f, 628.42f, 411.88f); + AddWaypoint(0, 712.14f, 628.42f, 411.88f, true); break; case 1: - AddWaypoint(0, 742.44f, 650.29f, 411.79f); + AddWaypoint(0, 742.44f, 650.29f, 411.79f, true); break; case 2: - AddWaypoint(0, 783.33f, 615.29f, 411.84f); + AddWaypoint(0, 783.33f, 615.29f, 411.84f, true); break; } break; @@ -562,13 +562,13 @@ public: switch (uiType) { case 0: - AddWaypoint(0, 713.12f, 632.97f, 411.90f); + AddWaypoint(0, 713.12f, 632.97f, 411.90f, true); break; case 1: - AddWaypoint(0, 746.73f, 650.24f, 411.56f); + AddWaypoint(0, 746.73f, 650.24f, 411.56f, true); break; case 2: - AddWaypoint(0, 781.32f, 610.54f, 411.82f); + AddWaypoint(0, 781.32f, 610.54f, 411.82f, true); break; } break; @@ -576,19 +576,19 @@ public: switch (uiType) { case 0: - AddWaypoint(0, 715.06f, 637.07f, 411.91f); + AddWaypoint(0, 715.06f, 637.07f, 411.91f, true); break; case 1: - AddWaypoint(0, 750.72f, 650.20f, 411.77f); + AddWaypoint(0, 750.72f, 650.20f, 411.77f, true); break; case 2: - AddWaypoint(0, 779.77f, 607.03f, 411.81f); + AddWaypoint(0, 779.77f, 607.03f, 411.81f, true); break; } break; } - Start(false, true); + Start(false); uiWaypoint = uiType; } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index 7ca324bdd86..0343a09db55 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -351,6 +351,8 @@ public: } }; +static constexpr uint32 PATH_ESCORT_GRYPHON = 283930; + class npc_black_knight_skeletal_gryphon : public CreatureScript { public: @@ -360,7 +362,8 @@ public: { npc_black_knight_skeletal_gryphonAI(Creature* creature) : EscortAI(creature) { - Start(false, true); + LoadPath(PATH_ESCORT_GRYPHON); + Start(false); } void UpdateAI(uint32 uiDiff) override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index 1e478a87d9a..abec7d1e932 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -187,28 +187,28 @@ public: switch (uiType) { case 1: - AddWaypoint(0, 747.36f, 634.07f, 411.572f); - AddWaypoint(1, 780.43f, 607.15f, 411.82f); - AddWaypoint(2, 785.99f, 599.41f, 411.92f); - AddWaypoint(3, 778.44f, 601.64f, 411.79f); + AddWaypoint(0, 747.36f, 634.07f, 411.572f, true); + AddWaypoint(1, 780.43f, 607.15f, 411.82f, true); + AddWaypoint(2, 785.99f, 599.41f, 411.92f, true); + AddWaypoint(3, 778.44f, 601.64f, 411.79f, true); uiWaypointPath = 1; break; case 2: - AddWaypoint(0, 747.35f, 634.07f, 411.57f); - AddWaypoint(1, 768.72f, 581.01f, 411.92f); - AddWaypoint(2, 763.55f, 590.52f, 411.71f); + AddWaypoint(0, 747.35f, 634.07f, 411.57f, true); + AddWaypoint(1, 768.72f, 581.01f, 411.92f, true); + AddWaypoint(2, 763.55f, 590.52f, 411.71f, true); uiWaypointPath = 2; break; case 3: - AddWaypoint(0, 747.35f, 634.07f, 411.57f); - AddWaypoint(1, 784.02f, 645.33f, 412.39f); - AddWaypoint(2, 775.67f, 641.91f, 411.91f); + AddWaypoint(0, 747.35f, 634.07f, 411.57f, true); + AddWaypoint(1, 784.02f, 645.33f, 412.39f, true); + AddWaypoint(2, 775.67f, 641.91f, 411.91f, true); uiWaypointPath = 3; break; } if (uiType <= 3) - Start(false, true); + Start(false); } void WaypointReached(uint32 waypointId, uint32 /*pathId*/) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp index 6bed41e5cc0..56d5c21e9a0 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp @@ -513,6 +513,8 @@ private: bool _isEventInProgress; }; +static constexpr uint32 PATH_ESCORT_CROK_SCOURGEBANE = 297034; + struct npc_crok_scourgebane : public EscortAI { npc_crok_scourgebane(Creature* creature) : EscortAI(creature), _instance(creature->GetInstanceScript()), _respawnTime(creature->GetRespawnDelay()), _corpseDelay(creature->GetCorpseDelay()) @@ -747,7 +749,8 @@ struct npc_crok_scourgebane : public EscortAI Talk(SAY_CROK_INTRO_3); break; case EVENT_START_PATHING: - Start(true, true); + LoadPath(PATH_ESCORT_CROK_SCOURGEBANE), + Start(true); break; case EVENT_SCOURGE_STRIKE: DoCastVictim(SPELL_SCOURGE_STRIKE); diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp index 700a707fb13..6641c7bd186 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp @@ -260,6 +260,8 @@ struct npc_tribuna_controller : public ScriptedAI } }; +static constexpr uint32 PATH_ESCORT_BRANN = 224562; + struct npc_brann_hos : public EscortAI { npc_brann_hos(Creature* creature) : EscortAI(creature) @@ -388,6 +390,7 @@ struct npc_brann_hos : public EscortAI me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); SetEscortPaused(false); uiStep = 1; + LoadPath(PATH_ESCORT_BRANN); Start(); } @@ -416,7 +419,6 @@ struct npc_brann_hos : public EscortAI return; bIsBattle = false; Talk(SAY_ESCORT_START); - SetRun(true); JumpToNextStep(0); break; case 3: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 457ac16ad2f..eea2aaf0a74 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -999,6 +999,8 @@ class npc_thorims_hammer : public CreatureScript } }; +static constexpr uint32 PATH_ESCORT_MIMIRONS_INFERNO = 266962; + class npc_mimirons_inferno : public CreatureScript { public: @@ -1031,7 +1033,10 @@ public: EscortAI::UpdateAI(diff); if (!HasEscortState(STATE_ESCORT_ESCORTING)) - Start(false, true, ObjectGuid::Empty, nullptr, false, true); + { + LoadPath(PATH_ESCORT_MIMIRONS_INFERNO); + Start(false, ObjectGuid::Empty, nullptr, false, true); + } else { if (infernoTimer <= diff) diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 134da0dd127..a5d59677f25 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -880,11 +880,11 @@ struct violet_hold_trashAI : public EscortAI if (path) { for (uint32 i = 0; i <= _lastWaypointId; i++) - AddWaypoint(i, path[i].GetPositionX() + irand(-1, 1), path[i].GetPositionY() + irand(-1, 1), path[i].GetPositionZ(), 0); + AddWaypoint(i, path[i].GetPositionX() + irand(-1, 1), path[i].GetPositionY() + irand(-1, 1), path[i].GetPositionZ(), 0, 0s, true); me->SetHomePosition(path[_lastWaypointId].GetPositionX(), path[_lastWaypointId].GetPositionY(), path[_lastWaypointId].GetPositionZ(), float(M_PI)); } - Start(true, true); + Start(true); } } diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 5011e0645c6..8885426c44a 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -53,7 +53,8 @@ enum Floppy TEXT_EMOTE_WP1 = 9, // Mr. Floppy revives TEXT_EMOTE_AGGRO = 10, // The Ravenous Worg chomps down on Mr. Floppy SAY_QUEST_ACCEPT = 11, // Are you ready, Mr. Floppy? Stay close to me and watch out for those wolves! - SAY_QUEST_COMPLETE = 12 // Thank you for helping me get back to the camp. Go tell Walter that I'm safe now! + SAY_QUEST_COMPLETE = 12, // Thank you for helping me get back to the camp. Go tell Walter that I'm safe now! + PATH_ESCORT_EMILY = 212706 }; // emily @@ -186,7 +187,8 @@ struct npc_emily : public EscortAI if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 180.0f)) Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); - Start(true, false, player->GetGUID()); + LoadPath(PATH_ESCORT_EMILY); + Start(true, player->GetGUID()); } } diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index f3df07211b5..d59d3fa379e 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -50,7 +50,9 @@ enum EngineerHelice SAY_WP_7 = 6, // Quests - QUEST_DISASTER = 12688 + QUEST_DISASTER = 12688, + + PATH_ESCORT_HELICE = 230298, }; struct npc_engineer_helice : public EscortAI @@ -104,7 +106,8 @@ struct npc_engineer_helice : public EscortAI { me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); - Start(false, false, player->GetGUID()); + LoadPath(PATH_ESCORT_HELICE); + Start(false, player->GetGUID()); Talk(SAY_WP_1); } } diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 4932c018b97..7d2a256e64f 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -181,6 +181,8 @@ struct npc_freed_protodrake : public VehicleAI } }; +static constexpr uint32 PATH_ESCORT_ICEFANG = 236818; + struct npc_icefang : public EscortAI { npc_icefang(Creature* creature) : EscortAI(creature) { } @@ -194,7 +196,10 @@ struct npc_icefang : public EscortAI if (who->GetTypeId() == TYPEID_PLAYER) { if (apply) - Start(false, true, who->GetGUID()); + { + LoadPath(PATH_ESCORT_ICEFANG); + Start(false, who->GetGUID()); + } } } diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp index 1d246096c7b..813d5ce4e46 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp @@ -51,6 +51,8 @@ enum Events EVENT_BERSERK }; +static constexpr uint32 PATH_ESCORT_HELLMAW = 149850; + struct boss_ambassador_hellmaw : public EscortAI { boss_ambassador_hellmaw(Creature* creature) : EscortAI(creature) @@ -105,7 +107,8 @@ struct boss_ambassador_hellmaw : public EscortAI me->RemoveAurasDueToSpell(SPELL_BANISH); Talk(SAY_INTRO); - Start(true, false, ObjectGuid::Empty, nullptr, false, true); + LoadPath(PATH_ESCORT_HELLMAW); + Start(true, ObjectGuid::Empty, nullptr, false, true); } void JustEngagedWith(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp index ac2d55346bc..a4395a2fb04 100644 --- a/src/server/scripts/Outland/zone_nagrand.cpp +++ b/src/server/scripts/Outland/zone_nagrand.cpp @@ -60,7 +60,9 @@ enum MagharCaptive NPC_MURK_RAIDER = 18203, NPC_MURK_BRUTE = 18211, NPC_MURK_SCAVENGER = 18207, - NPC_MURK_PUTRIFIER = 18202 + NPC_MURK_PUTRIFIER = 18202, + + PATH_ESCORT_MAGHAR_CAPTIVE = 145682, }; static float m_afAmbushA[]= {-1568.805786f, 8533.873047f, 1.958f}; @@ -130,8 +132,6 @@ public: if (Player* player = GetPlayerForEscort()) player->GroupEventHappens(QUEST_TOTEM_KARDASH_H, me); - - SetRun(); break; } } @@ -207,7 +207,8 @@ public: { me->SetStandState(UNIT_STAND_STATE_STAND); me->SetFaction(FACTION_ESCORTEE_H_NEUTRAL_ACTIVE); - Start(true, false, player->GetGUID(), quest); + LoadPath(PATH_ESCORT_MAGHAR_CAPTIVE); + Start(true, player->GetGUID(), quest); Talk(SAY_MAG_START); me->SummonCreature(NPC_MURK_RAIDER, m_afAmbushA[0] + 2.5f, m_afAmbushA[1] - 2.5f, m_afAmbushA[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25s); @@ -249,6 +250,8 @@ enum KurenaiCaptive NPC_KUR_MURK_BRUTE = 18211, NPC_KUR_MURK_SCAVENGER = 18207, NPC_KUR_MURK_PUTRIFIER = 18202, + + PATH_ESCORT_KURENAI_CAPTIVE = 145674, }; static float kurenaiAmbushA[]= {-1568.805786f, 8533.873047f, 1.958f}; @@ -321,8 +324,6 @@ public: if (Player* player = GetPlayerForEscort()) player->GroupEventHappens(QUEST_TOTEM_KARDASH_A, me); - - SetRun(); break; } } @@ -401,7 +402,8 @@ public: { me->SetStandState(UNIT_STAND_STATE_STAND); me->SetFaction(FACTION_ESCORTEE_A_NEUTRAL_ACTIVE); - Start(true, false, player->GetGUID(), quest); + LoadPath(PATH_ESCORT_KURENAI_CAPTIVE); + Start(true, player->GetGUID(), quest); Talk(SAY_KUR_START); me->SummonCreature(NPC_KUR_MURK_RAIDER, kurenaiAmbushA[0] + 2.5f, kurenaiAmbushA[1] - 2.5f, kurenaiAmbushA[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25s); diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index a5dd73a2f37..b0b841d576b 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -490,7 +490,9 @@ enum Earthmender SPELL_HEALING_WAVE = 12491, QUEST_ESCAPE_COILSCAR = 10451, - NPC_COILSKAR_ASSASSIN = 21044 + NPC_COILSKAR_ASSASSIN = 21044, + + PATH_ESCORT_WILDA = 168218, }; class npc_earthmender_wilda : public CreatureScript @@ -635,7 +637,8 @@ public: Talk(SAY_WIL_START, player); me->SetFaction(FACTION_EARTHEN_RING); - Start(false, false, player->GetGUID(), quest); + LoadPath(PATH_ESCORT_WILDA); + Start(false, player->GetGUID(), quest); } } }; diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 2d15f0a3f78..ade17b58a2b 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -1066,7 +1066,8 @@ public: break; } - Start(false, true); + LoadPath((me->GetEntry() << 3) | 2); + Start(false); } else EnterEvadeMode(EvadeReason::Other); //something went wrong |