aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorModoX <moardox@gmail.com>2023-04-10 04:04:33 +0200
committerGitHub <noreply@github.com>2023-04-10 04:04:33 +0200
commit89e09dc44ed15567f77f862d1936e8e0d9019456 (patch)
treef5664f4a2798acd965e8b589bd6ed7ff596ff780
parent083b8d6c846cfdf75abb1fae481a3eeb25c13c56 (diff)
Core/AI: Drop script_waypoints and move data to waypoint_data (#28879)
-rw-r--r--sql/updates/world/master/2023_04_10_00_world_script_waypoints.sql150
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp79
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.h11
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp1
-rw-r--r--src/server/game/Scripting/ScriptSystem.cpp65
-rw-r--r--src/server/game/Scripting/ScriptSystem.h4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp11
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp7
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp3
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp5
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp13
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp13
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp13
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp13
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp5
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp224
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp31
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp7
-rw-r--r--src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp6
-rw-r--r--src/server/scripts/Kalimdor/zone_ashenvale.cpp13
-rw-r--r--src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp9
-rw-r--r--src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp5
-rw-r--r--src/server/scripts/Kalimdor/zone_the_barrens.cpp102
-rw-r--r--src/server/scripts/Kalimdor/zone_winterspring.cpp5
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp20
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp5
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp22
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sister_svalna.cpp5
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp7
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.cpp4
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp6
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp7
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp7
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp5
-rw-r--r--src/server/scripts/Outland/zone_nagrand.cpp16
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp7
-rw-r--r--src/server/scripts/World/npcs_special.cpp3
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