aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorModoX <moardox@gmail.com>2024-04-02 04:12:52 +0200
committerGitHub <noreply@github.com>2024-04-02 04:12:52 +0200
commite8f7d4153622aea70ac74fb73e134d51cdac821d (patch)
tree3eea7aedde766249bed6fb7e88202b09a0330113 /src
parent47e4bf06d395cd92a90555594dd1264e628f10e0 (diff)
Core/Movement: Added Velocity field to waypoint_path table (#29837)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp3
-rw-r--r--src/server/game/Movement/Waypoints/WaypointDefines.h1
-rw-r--r--src/server/game/Movement/Waypoints/WaypointManager.cpp18
-rw-r--r--src/server/scripts/BrokenIsles/TrialOfValor/boss_guarm.cpp4
-rw-r--r--src/server/scripts/BrokenIsles/zone_mardum.cpp2
5 files changed, 21 insertions, 7 deletions
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index 4676ebb8141..afbaae40562 100644
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -417,6 +417,9 @@ void WaypointMovementGenerator<Creature>::StartMove(Creature* owner, bool relaun
break;
}
+ if (GetPath()->Velocity && !_speed)
+ _speed = GetPath()->Velocity;
+
if (_speed)
init.SetVelocity(*_speed);
diff --git a/src/server/game/Movement/Waypoints/WaypointDefines.h b/src/server/game/Movement/Waypoints/WaypointDefines.h
index af47ccfd0db..ebd31ea3da7 100644
--- a/src/server/game/Movement/Waypoints/WaypointDefines.h
+++ b/src/server/game/Movement/Waypoints/WaypointDefines.h
@@ -81,6 +81,7 @@ struct WaypointPath
uint32 Id = 0;
WaypointMoveType MoveType = WaypointMoveType::Walk;
EnumFlag<WaypointPathFlags> Flags = WaypointPathFlags::None;
+ Optional<float> Velocity;
};
#endif
diff --git a/src/server/game/Movement/Waypoints/WaypointManager.cpp b/src/server/game/Movement/Waypoints/WaypointManager.cpp
index eec635bf6d1..dd21721a66c 100644
--- a/src/server/game/Movement/Waypoints/WaypointManager.cpp
+++ b/src/server/game/Movement/Waypoints/WaypointManager.cpp
@@ -38,8 +38,8 @@ void WaypointMgr::_LoadPaths()
_pathStore.clear();
- // 0 1 2
- QueryResult result = WorldDatabase.Query("SELECT PathId, MoveType, Flags FROM waypoint_path");
+ // 0 1 2 3
+ QueryResult result = WorldDatabase.Query("SELECT PathId, MoveType, Flags, Velocity FROM waypoint_path");
if (!result)
{
@@ -88,15 +88,25 @@ void WaypointMgr::LoadPathFromDB(Field* fields)
uint32 pathId = fields[0].GetUInt32();
WaypointPath& path = _pathStore[pathId];
- path.Id = pathId;
- path.MoveType = WaypointMoveType(fields[1].GetUInt8());
+ path.MoveType = WaypointMoveType(fields[1].GetUInt8());;
if (path.MoveType >= WaypointMoveType::Max)
{
TC_LOG_ERROR("sql.sql", "PathId {} in `waypoint_path` has invalid MoveType {}, ignoring", pathId, AsUnderlyingType(path.MoveType));
return;
}
+
+ path.Id = pathId;
path.Flags = WaypointPathFlags(fields[2].GetUInt8());
+
+ if (!fields[3].IsNull())
+ {
+ if (fields[3].GetFloat() > 0.0f)
+ path.Velocity = fields[3].GetFloat();
+ else
+ TC_LOG_ERROR("sql.sql", "PathId {} in `waypoint_path` has invalid velocity {}, using default velocity instead", pathId, fields[3].GetFloat());
+ }
+
path.Nodes.clear();
}
diff --git a/src/server/scripts/BrokenIsles/TrialOfValor/boss_guarm.cpp b/src/server/scripts/BrokenIsles/TrialOfValor/boss_guarm.cpp
index 2d84a644f07..30d4e8a9167 100644
--- a/src/server/scripts/BrokenIsles/TrialOfValor/boss_guarm.cpp
+++ b/src/server/scripts/BrokenIsles/TrialOfValor/boss_guarm.cpp
@@ -325,7 +325,7 @@ struct boss_guarm : public BossAI
DoCastAOE(SPELL_HEADLONG_CHARGE_PERIODIC_DAMAGE, true);
DoCastAOE(SPELL_HEADLONG_CHARGE_AT, true);
- me->GetMotionMaster()->MovePath(HeadlongChargePairs[headlongChargeId].PathID, false, {}, 35.0f);
+ me->GetMotionMaster()->MovePath(HeadlongChargePairs[headlongChargeId].PathID, false);
}
else if (pointId == POINT_BERSERK_JUMP)
{
@@ -333,7 +333,7 @@ struct boss_guarm : public BossAI
DoCastAOE(SPELL_BERSERK_CHARGE_AT);
DoCastAOE(SPELL_ROARING_LEAP_INITIAL_KNOCKBACK, true);
- me->GetMotionMaster()->MovePath(BerserkerPair.PathID, false, {}, 35.0f);
+ me->GetMotionMaster()->MovePath(BerserkerPair.PathID, false);
}
}
}
diff --git a/src/server/scripts/BrokenIsles/zone_mardum.cpp b/src/server/scripts/BrokenIsles/zone_mardum.cpp
index 882d2f40f1f..7ed591d195d 100644
--- a/src/server/scripts/BrokenIsles/zone_mardum.cpp
+++ b/src/server/scripts/BrokenIsles/zone_mardum.cpp
@@ -217,7 +217,7 @@ struct npc_kayn_sunfury_invasion_begins : public ScriptedAI
else if (pointId == POINT_KAYN_MOVE_TO_DEMON)
{
me->SetAIAnimKitId(ANIM_DH_RUN);
- me->GetMotionMaster()->MovePath(PATH_KAYN_ATTACK_DEMON, false, {}, 4.0f);
+ me->GetMotionMaster()->MovePath(PATH_KAYN_ATTACK_DEMON, false);
}
}