diff options
author | ModoX <moardox@gmail.com> | 2024-04-02 04:12:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-02 04:12:52 +0200 |
commit | e8f7d4153622aea70ac74fb73e134d51cdac821d (patch) | |
tree | 3eea7aedde766249bed6fb7e88202b09a0330113 | |
parent | 47e4bf06d395cd92a90555594dd1264e628f10e0 (diff) |
Core/Movement: Added Velocity field to waypoint_path table (#29837)
6 files changed, 38 insertions, 7 deletions
diff --git a/sql/updates/world/master/2024_04_02_00_world.sql b/sql/updates/world/master/2024_04_02_00_world.sql new file mode 100644 index 00000000000..a40494c0ea4 --- /dev/null +++ b/sql/updates/world/master/2024_04_02_00_world.sql @@ -0,0 +1,17 @@ +DELIMITER ;; +CREATE PROCEDURE waypoint_path_velocity_2024_04_02_00() BEGIN + IF NOT EXISTS (SELECT * FROM `information_schema`.`columns` WHERE `table_schema`=SCHEMA() AND `table_name`='waypoint_path' AND `column_name`='Velocity') THEN + + ALTER TABLE `waypoint_path` + ADD COLUMN `Velocity` float NULL DEFAULT NULL AFTER `Flags`; + + END IF; +END;; + +DELIMITER ; +CALL waypoint_path_velocity_2024_04_02_00(); + +DROP PROCEDURE IF EXISTS waypoint_path_velocity_2024_04_02_00; + +UPDATE `waypoint_path` SET `Velocity`=4.0 WHERE `PathId`=9301100; +UPDATE `waypoint_path` SET `Velocity`=35.0 WHERE `PathId` IN(11432300, 11432301, 11432302, 11432303, 11432304); 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); } } |