From f67c63e380341b60d3597f7cc8654adcd58e4ead Mon Sep 17 00:00:00 2001 From: MatiasPastori Date: Thu, 4 Sep 2025 13:46:36 -0300 Subject: [PATCH 01/10] Some probability based for more immersive/ variated fire from the bots (for both infantry and vehicles ) --- ext/Server/Bot/BotAttacking.lua | 10 ++++++++-- ext/Server/Bot/VehicleAttacking.lua | 17 +++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/ext/Server/Bot/BotAttacking.lua b/ext/Server/Bot/BotAttacking.lua index f4b66bdb..d0e94380 100644 --- a/ext/Server/Bot/BotAttacking.lua +++ b/ext/Server/Bot/BotAttacking.lua @@ -337,13 +337,19 @@ local function _DefaultAttackingAction(p_DeltaTime, p_Bot) end end else - if p_Bot._ShotTimer >= (p_Bot.m_ActiveWeapon.fireCycle + p_Bot.m_ActiveWeapon.pauseCycle) then + local baseFireCycle = p_Bot.m_ActiveWeapon.fireCycle + local increasedFireCycle = baseFireCycle + if math.random() < 0.2 then -- 20% chance of increased firing cycle + increasedFireCycle = baseFireCycle * 2.5 + end + + if p_Bot._ShotTimer >= (increasedFireCycle + p_Bot.m_ActiveWeapon.pauseCycle) then p_Bot._ShotTimer = 0.0 end if p_Bot._ShotTimer >= 0.0 and p_Bot._ActiveAction ~= BotActionFlags.MeleeActive then if p_Bot.m_ActiveWeapon.delayed == false then - if p_Bot._ShotTimer <= p_Bot.m_ActiveWeapon.fireCycle then + if p_Bot._ShotTimer <= increasedFireCycle then _Fire(p_Bot) end else -- Start with pause Cycle. diff --git a/ext/Server/Bot/VehicleAttacking.lua b/ext/Server/Bot/VehicleAttacking.lua index fa4e0d6e..9fa035e7 100644 --- a/ext/Server/Bot/VehicleAttacking.lua +++ b/ext/Server/Bot/VehicleAttacking.lua @@ -125,10 +125,23 @@ function VehicleAttacking:UpdateAttackingVehicle(p_DeltaTime, p_Bot) self:Fire(p_Bot) end else - if p_Bot._ShotTimer >= 0.6 then + local baseResetTimer = 0.6 + local increasedResetTimer = baseResetTimer + if math.random() < 0.2 then -- 20% chance of increased reset timer + increasedResetTimer = baseResetTimer * 1.5 + end + + if p_Bot._ShotTimer >= increasedResetTimer then p_Bot._ShotTimer = 0.0 end - if p_Bot._ShotTimer >= 0.3 and p_Bot._VehicleReadyToShoot then + + local baseFireTimer = 0.3 + local increasedFireTimer = baseFireTimer + if math.random() < 0.5 then -- 50% chance of increased fire timer + increasedFireTimer = baseFireTimer * 2.0 + end + + if p_Bot._ShotTimer >= increasedFireTimer and p_Bot._VehicleReadyToShoot then self:Fire(p_Bot) end end From 6c1caea7f267cd68697489e03073cbb932a16908 Mon Sep 17 00:00:00 2001 From: Joe <1015.5@gmx.de> Date: Thu, 4 Sep 2025 19:50:07 +0200 Subject: [PATCH 02/10] other approach with cycle-modifier for each cycle. todo: tweaking and testing --- .github/CHANGELOG.md | 1 + ext/Server/Bot.lua | 2 ++ ext/Server/Bot/BotAttacking.lua | 13 ++++--------- ext/Server/Bot/VehicleAttacking.lua | 18 +++--------------- 4 files changed, 10 insertions(+), 24 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index d0b0243b..bbddd54e 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -35,6 +35,7 @@ This is the changelog for the version V3.0 Don't forget to [join us on Discord]( * Bots don't use 3rd seat of Tanks anymore (by MatiasPastori) * Support for dynamic-jet-spawn (by MatiasPastori) * Support of Gunship on Rush-Maps +* Variation in default fire-cycles (by MatiasPastori) ### some open TODOs: * rework of raycasts for better performance diff --git a/ext/Server/Bot.lua b/ext/Server/Bot.lua index 92e90acd..176034f7 100644 --- a/ext/Server/Bot.lua +++ b/ext/Server/Bot.lua @@ -139,6 +139,7 @@ function Bot:__init(p_Player) self._OnSwitch = false self._ActiveDelay = 0.0 self._VehicleMoveWhileShooting = false + self._FireCycleModifier = 1.0 -- Vehicle stuff. ---@type integer|nil @@ -1045,6 +1046,7 @@ function Bot:ResetSpawnVars() self._ExitVehicleActive = false self._OnSwitch = false self._VehicleMoveWhileShooting = false + -- self._FireCycleModifier = 1.0 -- either randomize or don't do it at all... self.m_AttackPriority = 1 self.m_DelayedInputs = {} diff --git a/ext/Server/Bot/BotAttacking.lua b/ext/Server/Bot/BotAttacking.lua index d0e94380..7c9ee19a 100644 --- a/ext/Server/Bot/BotAttacking.lua +++ b/ext/Server/Bot/BotAttacking.lua @@ -337,23 +337,18 @@ local function _DefaultAttackingAction(p_DeltaTime, p_Bot) end end else - local baseFireCycle = p_Bot.m_ActiveWeapon.fireCycle - local increasedFireCycle = baseFireCycle - if math.random() < 0.2 then -- 20% chance of increased firing cycle - increasedFireCycle = baseFireCycle * 2.5 - end - - if p_Bot._ShotTimer >= (increasedFireCycle + p_Bot.m_ActiveWeapon.pauseCycle) then + if p_Bot._ShotTimer >= ((p_Bot.m_ActiveWeapon.fireCycle + p_Bot.m_ActiveWeapon.pauseCycle) * p_Bot._FireCycleModifier) then p_Bot._ShotTimer = 0.0 + p_Bot._FireCycleModifier = 0.8 + (math.random() * 0.8) -- between 0.8 and 1.6 end if p_Bot._ShotTimer >= 0.0 and p_Bot._ActiveAction ~= BotActionFlags.MeleeActive then if p_Bot.m_ActiveWeapon.delayed == false then - if p_Bot._ShotTimer <= increasedFireCycle then + if p_Bot._ShotTimer <= (p_Bot.m_ActiveWeapon.fireCycle * p_Bot._FireCycleModifier) then _Fire(p_Bot) end else -- Start with pause Cycle. - if p_Bot._ShotTimer >= p_Bot.m_ActiveWeapon.pauseCycle then + if p_Bot._ShotTimer >= (p_Bot.m_ActiveWeapon.pauseCycle * p_Bot._FireCycleModifier) then _Fire(p_Bot) end end diff --git a/ext/Server/Bot/VehicleAttacking.lua b/ext/Server/Bot/VehicleAttacking.lua index 9fa035e7..c486c20b 100644 --- a/ext/Server/Bot/VehicleAttacking.lua +++ b/ext/Server/Bot/VehicleAttacking.lua @@ -125,23 +125,11 @@ function VehicleAttacking:UpdateAttackingVehicle(p_DeltaTime, p_Bot) self:Fire(p_Bot) end else - local baseResetTimer = 0.6 - local increasedResetTimer = baseResetTimer - if math.random() < 0.2 then -- 20% chance of increased reset timer - increasedResetTimer = baseResetTimer * 1.5 - end - - if p_Bot._ShotTimer >= increasedResetTimer then + if p_Bot._ShotTimer >= (0.6 * p_Bot._FireCycleModifier) then p_Bot._ShotTimer = 0.0 + p_Bot._FireCycleModifier = 0.8 + (math.random() * 1.2) -- between 0.8 and 2.0 end - - local baseFireTimer = 0.3 - local increasedFireTimer = baseFireTimer - if math.random() < 0.5 then -- 50% chance of increased fire timer - increasedFireTimer = baseFireTimer * 2.0 - end - - if p_Bot._ShotTimer >= increasedFireTimer and p_Bot._VehicleReadyToShoot then + if p_Bot._ShotTimer >= (0.3 * p_Bot._FireCycleModifier) and p_Bot._VehicleReadyToShoot then self:Fire(p_Bot) end end From 182c919c0570526e90386ce15176b41da8ae2097 Mon Sep 17 00:00:00 2001 From: MatiasPastori Date: Thu, 4 Sep 2025 19:17:47 -0300 Subject: [PATCH 03/10] Fixed the wrong bot states checking for vehicle actions when clearly they shouldn't have a vehicle related state since their player doesn't have any associated attachedControllable nor ControlledControllable entity. Added proper state checking for the Vehicle States to transition as they should. Always validating first if the bot has died and then if it still has a proper controlledControllable or an attachedControllable. Also enhanced a bit the call for ShouldExit for passengers, removed the AbortAttack call since that will be already properly handled within the _DoExitVehicle execution. Unless there was a need for triggering it before it gets executed. Open to discuss. Added the FirstPassengerSeat property for missing vehicles such as the LittleBird helis, transport helis and No armor light vehicles such as the buggys Please Hard test --- ext/Server/Bot.lua | 2 +- .../BotStates/StateInVehicleAttacking.lua | 26 ++++++++++++++++--- .../StateInVehicleChopperControl.lua | 14 ++++++++++ .../BotStates/StateInVehicleJetControl.lua | 23 ++++++++++++++++ ext/Server/BotStates/StateInVehicleMoving.lua | 22 ++++++++++++++++ .../StateInVehicleStationaryAAControl.lua | 25 ++++++++++++++++++ .../BotStates/StateOnVehicleAttacking.lua | 25 ++++++++++++++++++ ext/Server/BotStates/StateOnVehicleIdle.lua | 25 ++++++++++++++++++ ext/Shared/Constants/VehicleData.lua | 11 ++++++++ 9 files changed, 169 insertions(+), 4 deletions(-) diff --git a/ext/Server/Bot.lua b/ext/Server/Bot.lua index 01ed1e32..b49253a0 100644 --- a/ext/Server/Bot.lua +++ b/ext/Server/Bot.lua @@ -788,7 +788,7 @@ function Bot:_CheckShouldExitVehicleIfPassenger() end if s_ShouldExit then - self:AbortAttack() + --self:AbortAttack() I understand it should be needed because when _DoExitVehicle gets executed it will also do this too self:ExitVehicle() end end diff --git a/ext/Server/BotStates/StateInVehicleAttacking.lua b/ext/Server/BotStates/StateInVehicleAttacking.lua index 5a79e4b1..eb11c335 100644 --- a/ext/Server/BotStates/StateInVehicleAttacking.lua +++ b/ext/Server/BotStates/StateInVehicleAttacking.lua @@ -33,11 +33,16 @@ function StateInVehicleAttacking:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Idle) return end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end if p_Bot._ShootPlayer == nil then p_Bot:SetState(g_BotStates.States.InVehicleMoving) return end + -- use state-timer to change vehicle movement during attack if not m_Vehicles:IsGunship(p_Bot.m_ActiveVehicle) then if p_Bot.m_StateTimer == 0.0 or p_Bot.m_StateTimer > 5.0 then @@ -81,6 +86,11 @@ end ---@param p_DeltaTime number function StateInVehicleAttacking:UpdateFast(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) return end @@ -105,16 +115,26 @@ end ---update in every frame ---@param p_Bot Bot function StateInVehicleAttacking:UpdateVeryFast(p_Bot) + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end end ---slow update-function ---@param p_Bot Bot ---@param p_DeltaTime number function StateInVehicleAttacking:UpdateSlow(p_Bot, p_DeltaTime) - if p_Bot.m_Player.soldier then - p_Bot:_CheckForVehicleActions(p_DeltaTime, true) - p_Bot:_DoExitVehicle() + if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return end + p_Bot:_CheckForVehicleActions(p_DeltaTime, true) + p_Bot:_DoExitVehicle() end if g_StateInVehicleAttacking == nil then diff --git a/ext/Server/BotStates/StateInVehicleChopperControl.lua b/ext/Server/BotStates/StateInVehicleChopperControl.lua index 513484f6..b4816d9d 100644 --- a/ext/Server/BotStates/StateInVehicleChopperControl.lua +++ b/ext/Server/BotStates/StateInVehicleChopperControl.lua @@ -22,6 +22,10 @@ function StateInVehicleChopperControl:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Idle) return end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end local s_IsAttacking = p_Bot._ShootPlayer ~= nil -- update state-timer @@ -51,6 +55,11 @@ end ---@param p_DeltaTime number function StateInVehicleChopperControl:UpdateFast(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) return end @@ -74,6 +83,11 @@ end ---@param p_DeltaTime number function StateInVehicleChopperControl:UpdateSlow(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) return end local s_IsAttacking = p_Bot._ShootPlayer ~= nil diff --git a/ext/Server/BotStates/StateInVehicleJetControl.lua b/ext/Server/BotStates/StateInVehicleJetControl.lua index f53860f9..be89dcb9 100644 --- a/ext/Server/BotStates/StateInVehicleJetControl.lua +++ b/ext/Server/BotStates/StateInVehicleJetControl.lua @@ -23,6 +23,11 @@ function StateInVehicleJetControl:Update(p_Bot, p_DeltaTime) return end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end + local s_IsAttacking = p_Bot._ShootPlayer ~= nil -- update state-timer p_Bot.m_StateTimer = p_Bot.m_StateTimer + p_DeltaTime @@ -50,9 +55,14 @@ end ---@param p_DeltaTime number function StateInVehicleJetControl:UpdateFast(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) return end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end local s_IsAttacking = p_Bot._ShootPlayer ~= nil -- assign new target after some time @@ -82,6 +92,14 @@ end ---update in every frame ---@param p_Bot Bot function StateInVehicleJetControl:UpdateVeryFast(p_Bot) + if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end end ---slow update-function @@ -89,6 +107,11 @@ end ---@param p_DeltaTime number function StateInVehicleJetControl:UpdateSlow(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) return end -- p_Bot:_CheckForVehicleActions(p_DeltaTime, true) -- don't exit vehicle on low health? diff --git a/ext/Server/BotStates/StateInVehicleMoving.lua b/ext/Server/BotStates/StateInVehicleMoving.lua index 14e4163e..1a56a7d3 100644 --- a/ext/Server/BotStates/StateInVehicleMoving.lua +++ b/ext/Server/BotStates/StateInVehicleMoving.lua @@ -29,6 +29,10 @@ function StateInVehicleMoving:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Idle) return end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end if p_Bot._ShootPlayer ~= nil then p_Bot:SetState(g_BotStates.States.InVehicleAttacking) @@ -67,6 +71,11 @@ end ---@param p_DeltaTime number function StateInVehicleMoving:UpdateFast(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) return end @@ -85,6 +94,14 @@ end ---update in every frame ---@param p_Bot Bot function StateInVehicleMoving:UpdateVeryFast(p_Bot) + if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end end ---slow update-function @@ -92,6 +109,11 @@ end ---@param p_DeltaTime number function StateInVehicleMoving:UpdateSlow(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) return end p_Bot:_CheckForVehicleActions(p_DeltaTime, false) diff --git a/ext/Server/BotStates/StateInVehicleStationaryAAControl.lua b/ext/Server/BotStates/StateInVehicleStationaryAAControl.lua index 1645cb3a..2d58388d 100644 --- a/ext/Server/BotStates/StateInVehicleStationaryAAControl.lua +++ b/ext/Server/BotStates/StateInVehicleStationaryAAControl.lua @@ -30,6 +30,10 @@ function StateInVehicleStationaryAAControl:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Idle) return end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end local s_IsAttacking = p_Bot._ShootPlayer ~= nil -- update state-timer @@ -56,6 +60,11 @@ end ---@param p_DeltaTime number function StateInVehicleStationaryAAControl:UpdateFast(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) return end @@ -92,12 +101,28 @@ end ---update in every frame ---@param p_Bot Bot function StateInVehicleStationaryAAControl:UpdateVeryFast(p_Bot) + if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end end ---slow update-function ---@param p_Bot Bot ---@param p_DeltaTime number function StateInVehicleStationaryAAControl:UpdateSlow(p_Bot, p_DeltaTime) + if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end p_Bot:_DoExitVehicle() end diff --git a/ext/Server/BotStates/StateOnVehicleAttacking.lua b/ext/Server/BotStates/StateOnVehicleAttacking.lua index b13a735f..a03d1046 100644 --- a/ext/Server/BotStates/StateOnVehicleAttacking.lua +++ b/ext/Server/BotStates/StateOnVehicleAttacking.lua @@ -30,6 +30,10 @@ function StateOnVehicleAttacking:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Idle) return end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end if p_Bot._ShootPlayer == nil then p_Bot:SetState(g_BotStates.States.OnVehicleIdle) return @@ -50,12 +54,28 @@ end ---@param p_Bot Bot ---@param p_DeltaTime number function StateOnVehicleAttacking:UpdateFast(p_Bot, p_DeltaTime) + if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end m_BotAiming:UpdateAiming(p_Bot) end ---update in every frame ---@param p_Bot Bot function StateOnVehicleAttacking:UpdateVeryFast(p_Bot) + if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end -- Update yaw of soldier every tick. m_BotMovement:UpdateYaw(p_Bot) end @@ -65,6 +85,11 @@ end ---@param p_DeltaTime number function StateOnVehicleAttacking:UpdateSlow(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) return end p_Bot:_SetActiveVarsSlow() diff --git a/ext/Server/BotStates/StateOnVehicleIdle.lua b/ext/Server/BotStates/StateOnVehicleIdle.lua index c7e4eda3..20b27e20 100644 --- a/ext/Server/BotStates/StateOnVehicleIdle.lua +++ b/ext/Server/BotStates/StateOnVehicleIdle.lua @@ -28,6 +28,10 @@ function StateOnVehicleIdle:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Idle) return end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end -- update state-timer p_Bot.m_StateTimer = p_Bot.m_StateTimer + p_DeltaTime @@ -47,6 +51,14 @@ end ---@param p_Bot Bot ---@param p_DeltaTime number function StateOnVehicleIdle:UpdateFast(p_Bot, p_DeltaTime) + if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end -- trasition to attack if p_Bot._ShootPlayer ~= nil then p_Bot:SetState(g_BotStates.States.OnVehicleAttacking) @@ -56,6 +68,14 @@ end ---update in every frame ---@param p_Bot Bot function StateOnVehicleIdle:UpdateVeryFast(p_Bot) + if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) + return + end -- Update yaw of soldier every tick. m_BotMovement:UpdateYaw(p_Bot) end @@ -65,6 +85,11 @@ end ---@param p_DeltaTime number function StateOnVehicleIdle:UpdateSlow(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then + p_Bot:SetState(g_BotStates.States.Moving) return end p_Bot:_CheckForVehicleActions(p_DeltaTime, false) diff --git a/ext/Shared/Constants/VehicleData.lua b/ext/Shared/Constants/VehicleData.lua index 12fb535f..3a713a2e 100644 --- a/ext/Shared/Constants/VehicleData.lua +++ b/ext/Shared/Constants/VehicleData.lua @@ -428,6 +428,7 @@ VehicleData = { Parts = { { -2, -2 }, -1, -1, -1 }, Speed = { { 900, 10000 }, 300, 300, 300 }, Drop = { { 0.0, 0.0 }, 9.81, 9.81, 9.81 }, + FirstPassengerSeat = 2, Offset = { { Vec3(0.453, -0.062, 0.848), Vec3(0.453, -0.062, 0.848) }, Vec3(0, 0, 0), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["AH6_Littlebird_EQ"] = { @@ -437,6 +438,7 @@ VehicleData = { Parts = { { -2, -2 }, -1, -1, -1 }, Speed = { { 900, 10000 }, 300, 300, 300 }, Drop = { { 0.0, 0.0 }, 9.81, 9.81, 9.81 }, + FirstPassengerSeat = 2, Offset = { { Vec3(0.453, -0.062, 0.848), Vec3(0.453, -0.062, 0.848) }, Vec3(0, 0, 0), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["Ka-60"] = { @@ -446,6 +448,7 @@ VehicleData = { Parts = { -1, 18, 15, -1, -1 }, Speed = { 350, 900, 900, 350, 350 }, Drop = { 9.81, 0.0, 0.0, 9.81, 9.81 }, + FirstPassengerSeat = 4, Offset = { Vec3(0, 0, 0), Vec3(0.0, 0.191, -0.360), Vec3(0.0, 0.191, -0.360), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["Mi28"] = { @@ -465,6 +468,7 @@ VehicleData = { Parts = { -1, 19, 16, -1, -1 }, Speed = { 350, 900, 900, 350, 350 }, Drop = { 9.81, 0.0, 0.0, 9.81, 9.81 }, + FirstPassengerSeat = 4, Offset = { Vec3(0, 0, 0), Vec3(0.0, 0.239, -0.650), Vec3(0.0, 0.239, -0.650), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["Venom_coop"] = { @@ -474,6 +478,7 @@ VehicleData = { Parts = { -1, 19, 16, -1, -1 }, Speed = { 350, 900, 900, 350, 350 }, Drop = { 9.81, 0.0, 0.0, 9.81, 9.81 }, + FirstPassengerSeat = 4, Offset = { Vec3(0, 0, 0), Vec3(0.0, 0.239, -0.650), Vec3(0.0, 0.239, -0.650), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["Z-11w"] = { @@ -483,6 +488,7 @@ VehicleData = { Parts = { { -1, -1 }, -1, -1, -1 }, Speed = { { 900, 10000 }, 350, 350, 350 }, Drop = { { 0.0, 0.0 }, 9.81, 9.81, 9.81 }, + FirstPassengerSeat = 2, Offset = { { Vec3(0.495, -0.199, 2.158), Vec3(0.495, -0.199, 2.158) }, Vec3(0, 0, 0), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["Wz11_SP_Paris"] = { @@ -492,6 +498,7 @@ VehicleData = { Parts = { { -1, -1 }, -1, -1, -1 }, Speed = { { 900, 10000 }, 350, 350, 350 }, Drop = { { 0.0, 0.0 }, 9.81, 9.81, 9.81 }, + FirstPassengerSeat = 2, Offset = { { Vec3(0.495, -0.199, 2.158), Vec3(0.495, -0.199, 2.158) }, Vec3(0, 0, 0), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, @@ -503,6 +510,7 @@ VehicleData = { Parts = { -1, 47, -1 }, Speed = { 300, 610, 300 }, Drop = { 0.0, 9.81, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(0, 0.239, -0.816), Vec3(0, 0, 0) } }, ["GrowlerITV_Valley"] = { @@ -512,6 +520,7 @@ VehicleData = { Parts = { -1, 47, -1 }, Speed = { 300, 610, 300 }, Drop = { 0.0, 9.81, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(0, 0.239, -0.816), Vec3(0, 0, 0) } }, ["VDV Buggy"] = { @@ -521,6 +530,7 @@ VehicleData = { Parts = { -1, 7, -1 }, Speed = { 300, 610, 300 }, Drop = { 0.0, 9.81, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(-0.037, 0.096, -0.624), Vec3(0, 0, 0) } }, ["DPV"] = { @@ -530,6 +540,7 @@ VehicleData = { Parts = { -1, 4, -1 }, Speed = { 300, 610, 300 }, Drop = { 0.0, 9.81, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(-0.001, 0.189, -0.600), Vec3(0, 0, 0) } }, From 8ef99917074be72c8e3cc09a49b703727f368227 Mon Sep 17 00:00:00 2001 From: MatiasPastori Date: Fri, 12 Sep 2025 00:51:40 -0300 Subject: [PATCH 04/10] Well well well... don't hate me joe Been testing this for quite some days, no crashes, no erorrs while running in different game modes, either CQ, rush, Assault, etc. Changelog: - MP_017, attempt to fix the paths in the US Carrier for the boats, as it was, the bots were falling to the water when walking through the paths that lead to the boats when they weren't there anymore because some other bot took them. - XP4_FD, first attempt to add vehicle paths on CQL. Air ones already work, and some of them already do some decent things. Can be improved. - XP5_002 CQL fix for US base Light aa and bike being stuck in a loop. - Enhanced the fireCycle stuff for both soldiers and vehicles, now the skill of a bot and its behavior do cause impact on how they fire, this sinergies very well with the already existing logic at ShootAt that defines some logic per encounter, this other logic impacts directly on what happens within the encounter, how the bot will shoot, not for how long the encounter is supposed to last. - Added a chance for the bots to hold their ground while shooting ( 80 % ), but added more side movements so they aren't as static and robotic. Feels realy nice in my playtests. - I think I got rid of the issues being raised on bad states and weird vehicles attempting to get saved in the MobileRespawnVehicle list and also made sure that all the vehiles defined in vehicleData had these new property for passenger seats... not sure but I believe this issues had also something to do with the logic we had for LightAA and for Mobile Artillery, this ones rely on the action of seat switching to the second seat to fire and then go back to the driver seat... the logic that tried to check if a bot ShouldExit the vehicle within its state could have been interacting wrongly with this other logic, since for MobileArtillery and for LightAA vehicles, there was no FirstPassengerSeat property, causing every other seat different from the 0 index (driver) to be considered a ShouldExit == true case. I know this is a big one, don't hate me joe xd --- ext/Server/Bot.lua | 3 + ext/Server/Bot/BotAttacking.lua | 9 +- ext/Server/Bot/BotMovement.lua | 28 +- ext/Server/Bot/VehicleAttacking.lua | 9 +- ext/Server/BotStates/StateAttacking.lua | 8 + .../BotStates/StateInVehicleAttacking.lua | 4 +- ext/Server/Vehicles.lua | 8 +- ext/Shared/Constants/VehicleData.lua | 15 + ext/Shared/Registry/Registry.lua | 3 +- ext/Shared/Utilities.lua | 5 + mapfiles/MP_017_ConquestLarge0.map | 16 +- mapfiles/XP4_FD_ConquestLarge0.map | 738 +++++++++++++++++- mapfiles/XP5_002_ConquestLarge0.map | 221 ++---- 13 files changed, 865 insertions(+), 202 deletions(-) diff --git a/ext/Server/Bot.lua b/ext/Server/Bot.lua index d5a6fac5..342348de 100644 --- a/ext/Server/Bot.lua +++ b/ext/Server/Bot.lua @@ -139,6 +139,7 @@ function Bot:__init(p_Player) self._OnSwitch = false self._ActiveDelay = 0.0 self._VehicleMoveWhileShooting = false + self._OnFootStopMovingWhenAttacking = false self._FireCycleModifier = 1.0 -- Vehicle stuff. @@ -1046,8 +1047,10 @@ function Bot:ResetSpawnVars() self._ExitVehicleActive = false self._OnSwitch = false self._VehicleMoveWhileShooting = false + self._OnFootStopMovingWhenAttacking = false self._FireCycleModifier = 1.0 -- don't init it at all on spawn? + self.m_AttackPriority = 1 self.m_DelayedInputs = {} diff --git a/ext/Server/Bot/BotAttacking.lua b/ext/Server/Bot/BotAttacking.lua index 7c9ee19a..27838711 100644 --- a/ext/Server/Bot/BotAttacking.lua +++ b/ext/Server/Bot/BotAttacking.lua @@ -339,7 +339,14 @@ local function _DefaultAttackingAction(p_DeltaTime, p_Bot) else if p_Bot._ShotTimer >= ((p_Bot.m_ActiveWeapon.fireCycle + p_Bot.m_ActiveWeapon.pauseCycle) * p_Bot._FireCycleModifier) then p_Bot._ShotTimer = 0.0 - p_Bot._FireCycleModifier = 0.8 + (math.random() * 0.8) -- between 0.8 and 1.6 + local behaviorFactor = 1.0 + if p_Bot.m_Behavior == BotBehavior.LongerAttacking then + behaviorFactor = 0.8 + elseif p_Bot.m_Behavior == BotBehavior.AbortAttackFast then + behaviorFactor = 1.4 + end + local spread = 0.7 - (p_Bot.m_Skill * 0.4 * behaviorFactor) + p_Bot._FireCycleModifier = math.max(0.7, math.min(2.0, Utilities:RandomNormal(1.0, spread))) end if p_Bot._ShotTimer >= 0.0 and p_Bot._ActiveAction ~= BotActionFlags.MeleeActive then diff --git a/ext/Server/Bot/BotMovement.lua b/ext/Server/Bot/BotMovement.lua index eda2cd25..df3d3741 100644 --- a/ext/Server/Bot/BotMovement.lua +++ b/ext/Server/Bot/BotMovement.lua @@ -546,16 +546,24 @@ function BotMovement:UpdateShootMovement(p_DeltaTime, p_Bot) end -- Do some sidewards movement from time to time. - if p_Bot._AttackModeMoveTimer > 20.0 then + local movementIntensity = Config.SpeedFactorAttack + + -- More frequent but still substantial movements (every 2.5 seconds, move for 1.0s) + if p_Bot._AttackModeMoveTimer > 15.0 then p_Bot._AttackModeMoveTimer = 0.0 - elseif p_Bot._AttackModeMoveTimer > 17.0 then - p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, -0.5 * Config.SpeedFactorAttack) + elseif p_Bot._AttackModeMoveTimer > 14.0 and p_Bot._AttackModeMoveTimer <= 15.0 then + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, -movementIntensity) elseif p_Bot._AttackModeMoveTimer > 12.0 and p_Bot._AttackModeMoveTimer <= 13.0 then - p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, 0.5 * Config.SpeedFactorAttack) - elseif p_Bot._AttackModeMoveTimer > 7.0 and p_Bot._AttackModeMoveTimer <= 9.0 then - p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, 0.5 * Config.SpeedFactorAttack) + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, movementIntensity) + elseif p_Bot._AttackModeMoveTimer > 9.5 and p_Bot._AttackModeMoveTimer <= 10.5 then + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, -movementIntensity) + elseif p_Bot._AttackModeMoveTimer > 7.0 and p_Bot._AttackModeMoveTimer <= 8.0 then + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, movementIntensity) + elseif p_Bot._AttackModeMoveTimer > 4.5 and p_Bot._AttackModeMoveTimer <= 5.5 then + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, -movementIntensity) + elseif p_Bot._AttackModeMoveTimer > 2.0 and p_Bot._AttackModeMoveTimer <= 3.0 then + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, movementIntensity) end - p_Bot._AttackModeMoveTimer = p_Bot._AttackModeMoveTimer + p_DeltaTime end end @@ -598,7 +606,11 @@ function BotMovement:UpdateSpeedOfMovement(p_Bot) -- Do not reduce speed if sprinting. if s_SpeedVal > 0 and p_Bot._ShootPlayer ~= nil and p_Bot._ShootPlayer.soldier ~= nil and p_Bot.m_ActiveSpeedValue <= BotMoveSpeeds.Normal then - s_SpeedVal = s_SpeedVal * Config.SpeedFactorAttack + if p_Bot._OnFootStopMovingWhenAttacking then -- Check for stats to stop for shoot + s_SpeedVal = 0 + else + s_SpeedVal = s_SpeedVal * Config.SpeedFactorAttack + end end -- Movent speed. diff --git a/ext/Server/Bot/VehicleAttacking.lua b/ext/Server/Bot/VehicleAttacking.lua index c486c20b..710f431b 100644 --- a/ext/Server/Bot/VehicleAttacking.lua +++ b/ext/Server/Bot/VehicleAttacking.lua @@ -127,7 +127,14 @@ function VehicleAttacking:UpdateAttackingVehicle(p_DeltaTime, p_Bot) else if p_Bot._ShotTimer >= (0.6 * p_Bot._FireCycleModifier) then p_Bot._ShotTimer = 0.0 - p_Bot._FireCycleModifier = 0.8 + (math.random() * 1.2) -- between 0.8 and 2.0 + local behaviorFactor = 1.0 + if p_Bot.m_Behavior == BotBehavior.LongerAttacking then + behaviorFactor = 0.8 + elseif p_Bot.m_Behavior == BotBehavior.AbortAttackFast then + behaviorFactor = 1.4 + end + local spread = 0.7 - (p_Bot.m_Skill * 0.4 * behaviorFactor) + p_Bot._FireCycleModifier = math.max(0.7, math.min(2.0, Utilities:RandomNormal(1.0, spread))) end if p_Bot._ShotTimer >= (0.3 * p_Bot._FireCycleModifier) and p_Bot._VehicleReadyToShoot then self:Fire(p_Bot) diff --git a/ext/Server/BotStates/StateAttacking.lua b/ext/Server/BotStates/StateAttacking.lua index 14e55d9d..3cf27392 100644 --- a/ext/Server/BotStates/StateAttacking.lua +++ b/ext/Server/BotStates/StateAttacking.lua @@ -36,6 +36,14 @@ function StateAttacking:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Moving) return end + if p_Bot.m_StateTimer == 0.0 or p_Bot.m_StateTimer > 5.0 then + p_Bot.m_StateTimer = 0.0 + if m_Utilities:CheckProbablity(Registry.BOT.PROBABILITY_BOT_STOP_TO_SHOOT) then + p_Bot._OnFootStopMovingWhenAttacking = true + else + p_Bot._OnFootStopMovingWhenAttacking = false + end + end -- update state-timer p_Bot.m_StateTimer = p_Bot.m_StateTimer + p_DeltaTime diff --git a/ext/Server/BotStates/StateInVehicleAttacking.lua b/ext/Server/BotStates/StateInVehicleAttacking.lua index 5a79e4b1..767570c7 100644 --- a/ext/Server/BotStates/StateInVehicleAttacking.lua +++ b/ext/Server/BotStates/StateInVehicleAttacking.lua @@ -43,9 +43,9 @@ function StateInVehicleAttacking:Update(p_Bot, p_DeltaTime) if p_Bot.m_StateTimer == 0.0 or p_Bot.m_StateTimer > 5.0 then p_Bot.m_StateTimer = 0.0 if m_Utilities:CheckProbablity(Registry.VEHICLES.PROBABILITY_VEHICLE_STOP_TO_SHOOT) then - p_Bot._VehicleMoveWhileShooting = false - else p_Bot._VehicleMoveWhileShooting = true + else + p_Bot._VehicleMoveWhileShooting = false end end else diff --git a/ext/Server/Vehicles.lua b/ext/Server/Vehicles.lua index 0ee15f0c..1b2578d2 100644 --- a/ext/Server/Vehicles.lua +++ b/ext/Server/Vehicles.lua @@ -67,14 +67,14 @@ end ---@param p_Entity ControllableEntity ---@param p_PlayerIsDriver boolean function Vehicles:GetNrOfFreeSeats(p_Entity, p_PlayerIsDriver) - local s_MaxEntries = p_Entity.entryCount - local s_NrOfFreeSeats = 0 - local s_NumBotsInVehicle = 0 - if not p_Entity then return 0 end + local s_MaxEntries = p_Entity.entryCount + local s_NrOfFreeSeats = 0 + local s_NumBotsInVehicle = 0 + local vehicleData = self:GetVehicle(p_Entity:GetPlayerInEntry(0)) if not vehicleData then return 0 diff --git a/ext/Shared/Constants/VehicleData.lua b/ext/Shared/Constants/VehicleData.lua index 12fb535f..b5353e54 100644 --- a/ext/Shared/Constants/VehicleData.lua +++ b/ext/Shared/Constants/VehicleData.lua @@ -314,6 +314,7 @@ VehicleData = { Parts = { -1, { 13, 13 } }, Speed = { 300, { 50, 50 } }, Drop = { 0.0, { 25.0, 25.0 } }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), { Vec3(0, 0, 0), Vec3(0, 0, 0) } } }, ["STAR_1466"] = { @@ -323,6 +324,9 @@ VehicleData = { Parts = { -1, { 1, 1 } }, Speed = { 300, { 50, 50 } }, Drop = { 0.0, { 25.0, 25.0 } }, + FirstPassengerSeat = 3, -- CRITICAL: we must ensure this because with the new ShouldExit logic, + -- we check for passenger seats and MobileArtillery and LightAA have logic to switch seats to fire their guns + -- and then switch back. Offset = { Vec3(0, 0, 0), { Vec3(0, 0, 0), Vec3(0, 0, 0) } } }, @@ -428,6 +432,7 @@ VehicleData = { Parts = { { -2, -2 }, -1, -1, -1 }, Speed = { { 900, 10000 }, 300, 300, 300 }, Drop = { { 0.0, 0.0 }, 9.81, 9.81, 9.81 }, + FirstPassengerSeat = 2, Offset = { { Vec3(0.453, -0.062, 0.848), Vec3(0.453, -0.062, 0.848) }, Vec3(0, 0, 0), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["AH6_Littlebird_EQ"] = { @@ -437,6 +442,7 @@ VehicleData = { Parts = { { -2, -2 }, -1, -1, -1 }, Speed = { { 900, 10000 }, 300, 300, 300 }, Drop = { { 0.0, 0.0 }, 9.81, 9.81, 9.81 }, + FirstPassengerSeat = 2, Offset = { { Vec3(0.453, -0.062, 0.848), Vec3(0.453, -0.062, 0.848) }, Vec3(0, 0, 0), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["Ka-60"] = { @@ -446,6 +452,7 @@ VehicleData = { Parts = { -1, 18, 15, -1, -1 }, Speed = { 350, 900, 900, 350, 350 }, Drop = { 9.81, 0.0, 0.0, 9.81, 9.81 }, + FirstPassengerSeat = 4, Offset = { Vec3(0, 0, 0), Vec3(0.0, 0.191, -0.360), Vec3(0.0, 0.191, -0.360), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["Mi28"] = { @@ -465,6 +472,7 @@ VehicleData = { Parts = { -1, 19, 16, -1, -1 }, Speed = { 350, 900, 900, 350, 350 }, Drop = { 9.81, 0.0, 0.0, 9.81, 9.81 }, + FirstPassengerSeat = 4, Offset = { Vec3(0, 0, 0), Vec3(0.0, 0.239, -0.650), Vec3(0.0, 0.239, -0.650), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["Venom_coop"] = { @@ -474,6 +482,7 @@ VehicleData = { Parts = { -1, 19, 16, -1, -1 }, Speed = { 350, 900, 900, 350, 350 }, Drop = { 9.81, 0.0, 0.0, 9.81, 9.81 }, + FirstPassengerSeat = 4, Offset = { Vec3(0, 0, 0), Vec3(0.0, 0.239, -0.650), Vec3(0.0, 0.239, -0.650), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["Z-11w"] = { @@ -483,6 +492,7 @@ VehicleData = { Parts = { { -1, -1 }, -1, -1, -1 }, Speed = { { 900, 10000 }, 350, 350, 350 }, Drop = { { 0.0, 0.0 }, 9.81, 9.81, 9.81 }, + FirstPassengerSeat = 2, Offset = { { Vec3(0.495, -0.199, 2.158), Vec3(0.495, -0.199, 2.158) }, Vec3(0, 0, 0), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["Wz11_SP_Paris"] = { @@ -492,6 +502,7 @@ VehicleData = { Parts = { { -1, -1 }, -1, -1, -1 }, Speed = { { 900, 10000 }, 350, 350, 350 }, Drop = { { 0.0, 0.0 }, 9.81, 9.81, 9.81 }, + FirstPassengerSeat = 2, Offset = { { Vec3(0.495, -0.199, 2.158), Vec3(0.495, -0.199, 2.158) }, Vec3(0, 0, 0), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, @@ -503,6 +514,7 @@ VehicleData = { Parts = { -1, 47, -1 }, Speed = { 300, 610, 300 }, Drop = { 0.0, 9.81, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(0, 0.239, -0.816), Vec3(0, 0, 0) } }, ["GrowlerITV_Valley"] = { @@ -512,6 +524,7 @@ VehicleData = { Parts = { -1, 47, -1 }, Speed = { 300, 610, 300 }, Drop = { 0.0, 9.81, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(0, 0.239, -0.816), Vec3(0, 0, 0) } }, ["VDV Buggy"] = { @@ -521,6 +534,7 @@ VehicleData = { Parts = { -1, 7, -1 }, Speed = { 300, 610, 300 }, Drop = { 0.0, 9.81, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(-0.037, 0.096, -0.624), Vec3(0, 0, 0) } }, ["DPV"] = { @@ -530,6 +544,7 @@ VehicleData = { Parts = { -1, 4, -1 }, Speed = { 300, 610, 300 }, Drop = { 0.0, 9.81, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(-0.001, 0.189, -0.600), Vec3(0, 0, 0) } }, diff --git a/ext/Shared/Registry/Registry.lua b/ext/Shared/Registry/Registry.lua index 1e28ad0f..4bcf0635 100644 --- a/ext/Shared/Registry/Registry.lua +++ b/ext/Shared/Registry/Registry.lua @@ -34,7 +34,7 @@ Registry = { -- Number of Nodes to load in one cycle MAX_NUMBER_OF_NODES_PER_CYCLE = 1024, -- experimental nametags - USE_EXPERIMENTAL_NAMETAGS = false, + USE_EXPERIMENTAL_NAMETAGS = true, }, -- Version and Release related variables. -- Variables related to the current build version, version and the type of version. @@ -189,6 +189,7 @@ Registry = { BOT_DESTORY_DELAY = 0.05, -- Distance to closest objective on which passengers should exit vehicles PASSENGER_EXIT_DISTANCE = 50, + PROBABILITY_BOT_STOP_TO_SHOOT = 80, }, -- Bot team balancing (only in keep_playercount - spawn-mode) BOT_TEAM_BALANCING = { diff --git a/ext/Shared/Utilities.lua b/ext/Shared/Utilities.lua index f6f4cf4d..0becb516 100644 --- a/ext/Shared/Utilities.lua +++ b/ext/Shared/Utilities.lua @@ -236,6 +236,11 @@ function requireExists(p_Module) return s_Status end +function Utilities:RandomNormal(mu, sigma) + local u, v = math.random(), math.random() + return math.sqrt(-2 * math.log(u)) * math.cos(2 * math.pi * v) * sigma + mu +end + if g_Utilities == nil then ---@type Utilities g_Utilities = Utilities() diff --git a/mapfiles/MP_017_ConquestLarge0.map b/mapfiles/MP_017_ConquestLarge0.map index 134424bf..cc81d7d9 100644 --- a/mapfiles/MP_017_ConquestLarge0.map +++ b/mapfiles/MP_017_ConquestLarge0.map @@ -1,4 +1,5 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data +0;0;0.000000;0.000000;0.000000;0;{"Authors":["Beschutzer"],"CompIndex":1,"Date":"2025-09-07 15:24:15"} 1;1;-202.944519;69.466530;591.129822;65283;{"LinkMode":0,"Links":[[2,1],[21,1],[35,1],[40,1]],"Objectives":["base us"]} 1;2;-203.091965;69.466530;592.809448;4; 1;3;-203.478302;69.466530;594.683899;4; @@ -33,9 +34,8 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 2;10;-197.766266;67.654060;575.924316;4; 2;11;-197.145538;67.657555;574.075867;4; 2;12;-196.524811;67.660194;572.227417;4; -2;13;-196.473831;67.662018;570.848572;3; -2;14;-197.096786;67.663307;569.831543;3; -2;15;-197.365646;67.664268;569.451294;3;{"Action":{"inputs":[35],"pitch":-0.68722301721573,"time":0.5,"type":"vehicle","yaw":2.340806722641}} +2;13;-197.021591;67.663307;570.705566;3; +2;14;-197.290451;67.664268;570.325317;3;{"Action":{"inputs":[35],"pitch":-0.68722301721573,"time":0.5,"type":"vehicle","yaw":2.340806722641}} 3;1;-199.163986;66.559372;566.949158;3;{"Vehicles":["water"]} 3;2;-199.046371;66.582146;566.307190;3; 3;3;-198.842957;66.626305;565.186584;3; @@ -1919,10 +1919,8 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 21;4;-202.113708;69.462433;585.685730;4; 21;5;-201.436768;68.485535;583.972900;4; 21;6;-200.786057;67.666641;582.321411;4; -21;7;-200.163330;67.666641;580.539368;4; -21;8;-200.424164;67.666641;579.616150;3; -21;9;-200.787140;67.666641;579.038147;3; -21;10;-201.251572;67.666641;579.450256;3;{"Action":{"inputs":[35],"pitch":-0.80881720781326,"time":0.5,"type":"vehicle","yaw":2.2381932735443}} +21;7;-200.780594;67.666641;581.430847;3; +21;8;-201.016174;67.666641;580.913269;3;{"Action":{"inputs":[35],"pitch":-0.80881720781326,"time":0.5,"type":"vehicle","yaw":2.2381932735443}} 22;1;-201.876053;66.568932;574.284119;65283;{"Vehicles":["water"]} 22;2;-202.013901;66.595680;573.745361;3; 22;3;-202.136154;66.612656;572.768188;3; @@ -3338,8 +3336,8 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 35;11;-195.394165;67.666641;571.667419;4; 35;12;-194.943451;67.666641;569.996399;4; 35;13;-194.851837;67.666641;568.065247;4; -35;14;-195.403839;67.666641;566.219177;4; -35;15;-195.872360;67.666641;565.249695;3;{"Action":{"inputs":[35],"pitch":-0.60797023773193,"time":0.5,"type":"vehicle","yaw":2.2178936004639}} +35;14;-195.196854;67.666641;567.340454;4; +35;15;-195.665375;67.666641;566.370972;3;{"Action":{"inputs":[35],"pitch":-0.60797023773193,"time":0.5,"type":"vehicle","yaw":2.2178936004639}} 36;1;-203.570282;66.555084;579.238953;65283;{"Objectives":["vehicle tank1 ru"],"Vehicles":["water"]} 36;2;-203.865158;66.568916;579.111450;3; 36;3;-203.948166;66.592819;578.466003;3; diff --git a/mapfiles/XP4_FD_ConquestLarge0.map b/mapfiles/XP4_FD_ConquestLarge0.map index 7406f2e1..433c6a95 100644 --- a/mapfiles/XP4_FD_ConquestLarge0.map +++ b/mapfiles/XP4_FD_ConquestLarge0.map @@ -1,4 +1,5 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data +0;0;0.000000;0.000000;0.000000;0;{"Authors":["Beschutzer"],"CompIndex":1,"Date":"2025-09-07 18:33:49"} 1;1;368.513184;70.124855;-185.167969;3;{"Objectives":["base us"]} 1;2;367.192352;70.180725;-184.941498;3; 1;3;366.030853;70.218056;-184.742264;3; @@ -1077,7 +1078,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 18;72;-15.203975;70.780052;29.587412;4; 18;73;-17.073832;70.780014;29.407728;3; 18;74;-18.255222;70.780075;29.330151;3;{"LinkMode":0,"Links":[[9,23]]} -19;1;-43.781204;71.896309;174.152344;65283;{"LinkMode":0,"Links":[[16,16],[17,31]],"Objectives":["base ru","d"]} +19;1;-43.781204;71.896309;174.152344;65283;{"LinkMode":0,"Links":[[16,16],[17,31]],"Objectives":{}} 19;2;-44.329144;71.861366;173.890320;4;{"LinkMode":0,"Links":[[15,34]]} 19;3;-45.891689;71.814011;173.134659;4; 19;4;-47.614433;71.769768;172.310150;4; @@ -1118,7 +1119,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 19;39;-69.388992;70.813324;110.648605;4; 19;40;-69.359154;70.813347;108.445633;4; 19;41;-69.333809;70.813339;106.500046;4; -19;42;-69.307266;70.813347;104.536675;4; +19;42;-69.307266;70.813347;104.536674;4; 19;43;-69.278412;70.813301;102.406204;4; 19;44;-69.251068;70.813309;100.383133;4; 19;45;-69.230812;70.813301;98.456215;4; @@ -1603,7 +1604,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 23;192;146.616821;63.872955;-163.867401;4; 23;193;145.471313;63.383537;-164.298950;3; 23;194;144.466766;63.105560;-164.387482;3;{"LinkMode":0,"Links":[[5,65]]} -24;1;-32.193359;70.779114;2.736328;65283;{"LinkMode":0,"Links":[[9,66]],"Objectives":["a","d","c"]} +24;1;-32.193359;70.779114;2.736328;65283;{"LinkMode":0,"Links":[[9,66]],"Objectives":["a","c","d"]} 24;2;-31.871191;70.779137;1.681620;4; 24;3;-31.019218;70.884445;0.046575;4; 24;4;-30.205114;70.780029;-1.907356;4; @@ -2686,7 +2687,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 32;99;130.497849;66.608475;-60.241550;4; 32;100;128.550095;67.118683;-59.935020;3; 32;101;127.426361;67.442787;-59.773735;3;{"LinkMode":0,"Links":[[7,38]]} -33;1;-39.025063;70.729172;5.749222;65283;{"LinkMode":0,"Links":[[9,60]],"Objectives":["d"]} +33;1;-39.025063;70.729172;5.749222;65283;{"LinkMode":0,"Links":[[9,60]],"Objectives":{}} 33;2;-39.041656;70.779175;5.017333;3; 33;3;-39.886581;70.779175;5.034105;3; 33;4;-39.872639;70.780075;6.225341;3; @@ -2856,7 +2857,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 35;32;5.607852;64.001755;-237.149002;3;{"LinkMode":0,"Links":[[37,10]]} 35;33;4.910293;64.000984;-237.743866;3; 35;34;4.731188;64.000977;-238.444336;3; -35;35;4.914754;64.000977;-239.106720;3;{"LinkMode":0,"Links":[[38,1]]} +35;35;4.914754;64.000977;-239.106720;3;{"LinkMode":0,"Links":[[38,1],[58,1]]} 35;36;5.239762;64.000977;-239.775482;3; 35;37;6.037240;64.006798;-240.756027;3; 35;38;6.414962;64.083321;-241.302750;3; @@ -2868,7 +2869,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 35;44;12.254021;64.020554;-244.975235;3; 35;45;13.397057;64.002510;-245.530563;3; 35;46;14.552531;64.024895;-246.061951;3; -35;47;15.702973;64.027000;-246.587021;3;{"LinkMode":0,"Links":[[40,1]]} +35;47;15.702973;64.027000;-246.587021;3;{"LinkMode":0,"Links":[[40,1],[59,1]]} 35;48;16.881771;64.035934;-247.121613;3; 35;49;18.051891;63.934746;-247.663040;3; 35;50;19.156172;64.007858;-248.164627;3; @@ -3241,3 +3242,728 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 40;101;146.819214;63.979565;-168.941223;4; 40;102;145.499390;63.549641;-168.531799;3; 40;103;144.254929;63.170784;-168.140106;3;{"LinkMode":0,"Links":[[5,2]]} +41;1;210.474106;65.050499;-190.636246;3;{"Objectives":["spawn vehicle tank2 us"]} +41;2;210.546875;65.028229;-189.817963;3; +41;3;210.254120;64.963860;-188.556778;3; +41;4;209.474319;64.924583;-188.080917;3; +41;5;208.566010;64.890732;-187.910263;3;{"Action":{"inputs":[35],"pitch":-0.14140038192272,"time":0.5,"type":"vehicle","yaw":1.1776703596115}} +42;1;351.519043;70.564445;-192.380402;3;{"Objectives":["spawn vehicle tank1 us"]} +42;2;351.073578;70.564445;-192.419617;3; +42;3;350.529236;70.564445;-192.720230;3; +42;4;349.643555;70.564445;-193.634277;3;{"Action":{"inputs":[35],"pitch":-0.17431955039501,"time":0.5,"type":"vehicle","yaw":2.304354429245}} +43;1;352.565186;70.522072;-166.593719;3;{"Objectives":["spawn vehicle other1 us"]} +43;2;352.799866;70.495277;-167.923065;3; +43;3;352.739166;70.500778;-168.328949;3;{"Action":{"inputs":[35],"pitch":-0.087963461875916,"time":0.5,"type":"vehicle","yaw":2.963276386261}} +44;1;395.455658;69.437599;-181.651733;3;{"Objectives":["spawn vehicle chopper1 us"]} +44;2;395.142395;69.438095;-180.823349;3; +44;3;394.864075;69.438232;-179.795105;3; +44;4;394.891785;69.438316;-179.432358;3;{"Action":{"inputs":[35],"pitch":-0.010206066071987,"time":0.5,"type":"vehicle","yaw":5.9806280136108}} +45;1;328.881958;70.582779;-187.376892;65283;{"LinkMode":0,"Links":[[56,9],[57,9]],"Objectives":["base us"],"Vehicles":["land"]} +45;2;328.229187;70.572380;-187.374313;3; +45;3;327.160583;70.550339;-187.370407;3; +45;4;325.720093;70.493462;-187.365082;3; +45;5;323.914856;70.466965;-187.358398;3; +45;6;321.760529;70.440651;-187.356323;3; +45;7;319.286316;70.409058;-187.370178;3; +45;8;316.631104;70.391785;-187.497375;3; +45;9;313.880951;70.414398;-187.840515;3; +45;10;311.004272;70.482742;-188.233322;3; +45;11;308.067932;70.586098;-188.700256;3; +45;12;305.111206;70.739044;-189.259964;3; +45;13;302.197601;70.924263;-189.960632;3; +45;14;299.249329;71.110321;-190.681519;3; +45;15;296.263214;71.284821;-191.416672;3; +45;16;293.246979;71.441162;-192.157669;3; +45;17;290.210114;71.563950;-192.902435;3; +45;18;287.181549;71.652313;-193.693878;3; +45;19;284.154480;71.764305;-194.542374;3; +45;20;281.106873;71.878151;-195.398605;3; +45;21;278.040497;71.963264;-196.260117;3; +45;22;274.959747;72.019325;-197.119888;3; +45;23;271.897186;72.016785;-197.828705;3; +45;24;268.806335;71.981369;-198.385742;3; +45;25;265.685059;71.867569;-198.933975;3; +45;26;262.529694;71.659462;-199.390442;3; +45;27;259.311981;71.382500;-199.841492;3; +45;28;256.033905;71.034912;-200.221130;3; +45;29;252.700012;70.642723;-200.539459;3; +45;30;249.306778;70.201057;-200.780884;3; +45;31;245.864471;69.742867;-200.950989;3; +45;32;242.372253;69.274124;-201.070694;3; +45;33;238.871780;68.802681;-201.075928;3; +45;34;235.383087;68.371338;-201.070160;2; +45;35;232.499954;68.003075;-201.014496;2; +45;36;230.088013;67.696335;-200.962372;2; +45;37;228.222122;67.449684;-200.864456;2; +45;38;226.904129;67.270050;-200.790405;2; +45;39;226.016708;67.199356;-200.731247;2; +45;40;225.529007;67.130646;-200.699951;2; +45;41;225.224609;67.087234;-200.681976;2;{"LinkMode":0,"Links":[[47,6],[46,1]]} +46;1;193.664764;64.719307;-199.135880;65283;{"LinkMode":0,"Links":[[45,41],[47,5]],"Objectives":["a","d"],"Vehicles":["land"]} +46;2;192.714172;64.720680;-199.117752;3; +46;3;191.536407;64.708580;-199.095551;3; +46;4;189.999817;64.671242;-199.066589;3; +46;5;188.117920;64.681068;-199.030991;3; +46;6;185.909454;64.679909;-199.002365;3; +46;7;183.384766;64.677338;-198.971802;3; +46;8;180.630966;64.675453;-198.958893;3; +46;9;177.705063;64.674202;-198.949234;3; +46;10;174.667328;64.651405;-198.966934;3; +46;11;171.589325;64.537346;-199.055893;3; +46;12;168.507996;64.711014;-199.160187;3; +46;13;165.652649;64.855186;-199.319412;3;{"LinkMode":0,"Links":[[47,270]]} +46;14;162.947037;64.858109;-199.694183;3; +46;15;160.320480;64.984879;-200.332748;3; +46;16;157.882172;65.078484;-201.243240;3; +46;17;155.792938;65.226624;-202.586365;3; +46;18;153.869400;65.471313;-204.223923;3; +46;19;151.928299;65.809631;-205.939148;3; +46;20;149.956345;66.193146;-207.680893;3; +46;21;147.932602;66.611542;-209.460632;3; +46;22;145.899673;67.130821;-211.218903;3; +46;23;143.868698;67.703613;-212.821426;3;{"LinkMode":0,"Links":[[47,276]]} +46;24;141.854553;68.290703;-214.016312;3; +46;25;139.797867;68.896950;-215.027328;3; +46;26;137.704117;69.504364;-216.049225;3; +46;27;135.577332;70.098038;-217.090607;3; +46;28;133.403320;70.662178;-218.152130;3; +46;29;131.183350;71.176758;-219.234451;3; +46;30;128.958527;71.654671;-220.321198;3; +46;31;126.726242;72.071358;-221.406601;3;{"LinkMode":0,"Links":[[60,1]]} +46;32;124.474792;72.382950;-222.489426;3; +46;33;122.178284;72.616096;-223.588531;3; +46;34;119.808311;72.795479;-224.758469;3; +46;35;117.331184;72.974686;-225.996262;3; +46;36;114.759521;73.146576;-227.280350;3; +46;37;112.122528;73.309715;-228.554611;3; +46;38;109.472359;73.469795;-229.589630;3; +46;39;106.765045;73.641937;-230.245117;3; +46;40;103.975716;73.815758;-230.783524;3; +46;41;101.181046;73.989571;-231.133163;3; +46;42;98.394470;74.171471;-231.165894;3; +46;43;95.646118;74.341560;-230.973618;3; +46;44;92.997276;74.489975;-230.432373;3; +46;45;90.253540;74.654289;-229.774704;3; +46;46;87.477921;74.854141;-228.999146;3; +46;47;84.699211;75.081390;-228.165115;3; +46;48;82.023178;75.281639;-227.131821;3; +46;49;79.305885;75.494995;-226.044159;3;{"LinkMode":0,"Links":[[60,15]]} +46;50;76.535744;75.708305;-224.928131;3; +46;51;73.794312;75.946487;-223.728256;3; +46;52;71.096848;76.173752;-222.482513;3; +46;53;68.402412;76.278328;-221.235886;3; +46;54;65.629974;76.392990;-220.044373;3; +46;55;62.807335;76.532310;-218.920135;3; +46;56;59.933952;76.654984;-217.790649;3; +46;57;57.017746;76.784782;-216.652573;3; +46;58;54.091270;76.854904;-215.579910;3; +46;59;51.152637;76.819809;-214.501480;3; +46;60;48.146862;76.797661;-213.398468;3; +46;61;45.094517;76.788963;-212.277786;3; +46;62;42.007751;76.767097;-211.144745;3; +46;63;38.896637;76.750381;-210.002655;3; +46;64;35.769001;76.733093;-208.854523;3; +46;65;32.630417;76.718925;-207.702469;3; +46;66;29.551430;76.531700;-206.584045;3; +46;67;26.497055;76.095070;-205.483994;3; +46;68;23.340208;75.704468;-204.365112;3; +46;69;20.147316;75.490898;-203.163269;3; +46;70;17.136730;75.634026;-201.890823;3; +46;71;14.201966;75.670883;-200.616608;3; +46;72;11.353571;75.883209;-199.328445;3; +46;73;8.638946;76.316406;-198.037155;3; +46;74;6.087576;76.529472;-196.806519;3; +46;75;3.602509;76.252007;-195.607712;3; +46;76;0.916522;76.056618;-194.316452;3; +46;77;-1.892297;75.870308;-192.965302;3; +46;78;-4.815935;75.629837;-191.558914;3; +46;79;-7.822346;75.399513;-190.113159;3; +46;80;-10.883308;75.162415;-188.645126;3; +46;81;-13.949759;75.042442;-187.171295;3; +46;82;-17.011023;74.910866;-185.698334;3; +46;83;-20.084599;74.773659;-184.213928;3; +46;84;-23.031195;74.645515;-182.629486;3; +46;85;-25.842108;74.503311;-180.894852;3; +46;86;-28.585093;74.381691;-179.061890;3; +46;87;-31.223700;74.244141;-177.125854;3; +46;88;-33.898903;74.093491;-175.162338;3; +46;89;-36.604229;73.927818;-173.174957;3; +46;90;-39.339413;73.752449;-171.169540;3; +46;91;-42.090027;73.567131;-169.146317;3; +46;92;-44.754044;73.348007;-167.058990;3; +46;93;-47.420837;73.106468;-164.950638;3; +46;94;-50.016762;72.837494;-162.769012;3; +46;95;-52.584225;72.563240;-160.533539;3; +46;96;-55.046368;72.278145;-158.205963;3; +46;97;-57.530598;71.991173;-155.843246;3; +46;98;-59.892998;71.696938;-153.392395;3; +46;99;-62.194984;71.418396;-150.882935;3; +46;100;-64.504539;71.160957;-148.334625;3; +46;101;-66.631386;70.922737;-145.722137;2; +46;102;-68.183327;70.716103;-143.306412;2; +46;103;-69.409508;70.559433;-141.184464;2; +46;104;-70.482475;70.408775;-139.066055;2; +46;105;-71.123833;70.278679;-137.319061;2; +46;106;-71.390076;70.255150;-136.288834;2; +46;107;-71.522224;70.241539;-135.773926;2;{"LinkMode":0,"Links":[[47,94],[60,98],[47,102]]} +47;1;206.801178;64.891350;-186.606903;65283;{"Objectives":["a","b","d","e"],"Vehicles":["land"]} +47;2;206.803741;64.878777;-185.612427;3; +47;3;206.799240;64.814598;-184.026489;3; +47;4;206.797699;64.777451;-181.804031;3; +47;5;206.805801;64.701347;-178.986038;3;{"LinkMode":0,"Links":[[46,1]]} +47;6;206.781967;64.597939;-175.763748;2;{"LinkMode":0,"Links":[[45,41]]} +47;7;206.371307;64.501129;-172.901016;2; +47;8;205.396347;64.463745;-170.570251;3; +47;9;203.733139;64.405556;-168.243057;3; +47;10;201.320663;64.260460;-166.078781;3; +47;11;198.211792;64.109123;-164.309448;3; +47;12;194.600952;64.060265;-163.119583;3; +47;13;191.203842;64.031647;-162.401413;2; +47;14;188.119308;64.044891;-161.982376;3; +47;15;184.861816;64.054016;-162.036011;2; +47;16;181.820862;64.032768;-162.252304;3; +47;17;178.448181;64.060501;-162.478119;3; +47;18;175.103989;64.034546;-162.468857;3; +47;19;171.670120;64.054558;-162.327118;2; +47;20;168.731857;64.030930;-162.193008;2; +47;21;165.926514;64.049278;-162.047211;3; +47;22;163.127380;64.044495;-161.826385;2; +47;23;160.409592;64.042831;-161.420685;3; +47;24;157.954559;64.045242;-160.522873;3; +47;25;155.776215;64.046478;-159.056320;2; +47;26;154.135345;64.037209;-157.587204;3; +47;27;152.692505;64.053780;-155.745468;2; +47;28;151.977982;64.034340;-154.105606;3; +47;29;151.495193;64.052986;-152.182068;2; +47;30;151.195755;64.037727;-150.378220;2; +47;31;150.902725;64.043953;-148.694733;3; +47;32;150.335236;64.049629;-146.802856;2; +47;33;149.772644;64.037216;-145.361496;3; +47;34;148.817429;64.048317;-144.030090;2; +47;35;147.839432;64.058334;-143.211182;2; +47;36;146.841873;64.070549;-142.659988;3; +47;37;145.385605;64.059319;-142.205185;3; +47;38;143.442444;64.056999;-142.012207;3; +47;39;140.920975;64.045525;-141.997055;3; +47;40;137.905472;64.052933;-141.955490;3; +47;41;134.580460;64.046234;-142.200592;3; +47;42;131.007309;64.049728;-142.572922;3; +47;43;127.241066;64.047203;-142.693192;3; +47;44;123.335518;64.047508;-142.698517;3; +47;45;119.351631;64.046600;-142.621857;3; +47;46;115.319260;64.046326;-142.452423;3; +47;47;111.251694;64.046410;-142.263351;3; +47;48;107.162453;64.046677;-142.197556;3; +47;49;103.056145;64.047318;-142.214081;3; +47;50;98.940041;64.045288;-142.300186;3; +47;51;95.040085;64.041962;-142.394379;2; +47;52;91.800400;64.032547;-142.473160;3; +47;53;88.428047;64.062630;-142.553406;3; +47;54;84.808197;64.054672;-142.637512;3; +47;55;80.976418;64.056740;-142.723465;3; +47;56;77.034500;64.046844;-142.683289;3; +47;57;73.009758;64.046494;-142.597031;3; +47;58;69.269455;64.040215;-142.259384;3; +47;59;65.665581;64.062660;-141.629364;3; +47;60;62.345272;64.083832;-140.556259;2; +47;61;59.511200;64.069298;-138.828827;3; +47;62;56.793541;64.088928;-136.554031;2; +47;63;54.460545;64.094688;-134.519394;3; +47;64;51.965816;64.106766;-132.543716;3; +47;65;49.202538;64.066093;-130.291946;3; +47;66;46.296799;64.078590;-127.894814;3; +47;67;43.370644;64.038872;-125.799675;2; +47;68;40.657452;63.990349;-124.641579;3; +47;69;37.585548;63.991947;-123.970528;3; +47;70;34.156292;64.088264;-123.592041;3; +47;71;30.869038;64.221420;-123.632477;3; +47;72;27.393976;64.313309;-123.975288;3; +47;73;23.721560;64.462578;-124.321732;3; +47;74;19.943583;64.810028;-124.411163;3; +47;75;16.165033;65.182457;-124.434586;3; +47;76;12.385188;65.593216;-124.419830;3; +47;77;8.616513;66.074623;-124.379692;3; +47;78;4.896818;66.630257;-124.294403;3; +47;79;1.248249;67.269714;-124.189323;3; +47;80;-2.314046;67.884346;-124.173241;3; +47;81;-5.839293;68.460938;-124.188972;3; +47;82;-9.346025;68.970955;-124.199715;3; +47;83;-12.903080;69.341454;-124.210335;3; +47;84;-16.537968;69.634384;-124.222534;3; +47;85;-20.266151;69.805298;-124.234367;3; +47;86;-24.097937;69.869682;-124.244881;3; +47;87;-28.040167;69.923813;-124.256653;3; +47;88;-32.029495;69.962616;-124.268463;3; +47;89;-36.060268;69.992523;-124.280403;3; +47;90;-40.121891;70.014481;-124.228912;3; +47;91;-44.191948;70.014946;-124.080780;3; +47;92;-47.877621;70.002052;-123.846642;3; +47;93;-51.630089;70.025673;-123.585350;3; +47;94;-55.521172;70.013702;-123.312851;3;{"LinkMode":0,"Links":[[46,107]]} +47;95;-59.518921;70.015724;-123.018814;3; +47;96;-63.533226;70.015518;-122.496178;3; +47;97;-67.491798;70.003151;-121.570877;3; +47;98;-70.813911;69.923866;-120.183792;2; +47;99;-73.396896;69.885178;-118.214111;3; +47;100;-75.442886;69.879890;-115.751755;3; +47;101;-76.987404;69.916916;-112.717354;2; +47;102;-77.728638;69.923218;-109.705124;3;{"LinkMode":0,"Links":[[60,98],[46,107]]} +47;103;-77.999756;69.967621;-106.326561;3; +47;104;-77.939140;69.945305;-102.801193;3; +47;105;-77.621071;69.958893;-99.046890;3; +47;106;-77.081718;69.941696;-95.496666;3; +47;107;-76.425941;69.962257;-91.803673;2; +47;108;-75.722466;69.936844;-88.511993;3; +47;109;-75.350334;69.963409;-85.042557;3; +47;110;-75.366646;69.953018;-81.352585;3; +47;111;-75.557098;69.953644;-77.479118;3; +47;112;-75.763962;69.953766;-73.504425;3; +47;113;-75.910141;69.971436;-69.463730;3; +47;114;-75.989258;69.992538;-65.402885;3; +47;115;-76.059181;69.974274;-61.534267;2; +47;116;-76.128418;69.957077;-58.110523;3; +47;117;-76.279449;70.130234;-54.430744;3; +47;118;-76.373550;70.154655;-50.688782;3; +47;119;-76.423920;69.983650;-46.544617;3; +47;120;-76.537544;70.179474;-42.378731;3; +47;121;-76.692444;70.237305;-38.257343;3; +47;122;-76.902306;70.394310;-34.159267;3; +47;123;-77.125076;70.508522;-30.096748;3; +47;124;-77.348320;70.616425;-26.039968;3; +47;125;-77.571854;70.703789;-21.975241;3; +47;126;-77.795593;70.777809;-17.908829;3; +47;127;-78.019974;70.830490;-13.829102;3; +47;128;-78.245026;70.863190;-9.739209;3; +47;129;-78.471062;70.882919;-5.628538;3; +47;130;-78.697456;70.903366;-1.512974;3; +47;131;-78.924461;70.930458;2.612635;3; +47;132;-79.077751;70.915932;6.740223;3; +47;133;-79.194130;70.923317;10.885459;3; +47;134;-79.313698;70.920395;15.031829;3; +47;135;-79.433609;70.921219;19.183563;3; +47;136;-79.506271;70.921120;23.335236;3; +47;137;-79.415916;70.920776;27.481739;3; +47;138;-79.288551;70.918053;31.630444;3; +47;139;-79.087776;70.880577;35.777710;3; +47;140;-78.429092;70.894852;39.863525;3; +47;141;-77.109299;70.888153;43.752773;3;{"LinkMode":0,"Links":[[49,49]]} +47;142;-75.275269;70.860359;47.443005;3; +47;143;-72.883667;70.853821;50.797470;3; +47;144;-69.946106;70.871559;53.666916;3; +47;145;-66.551086;70.894653;55.942726;3; +47;146;-62.799728;70.888229;57.558556;3; +47;147;-58.812370;70.891418;58.500248;3; +47;148;-54.727119;70.882645;59.012352;3; +47;149;-50.600948;70.846977;59.308819;3; +47;150;-46.472858;70.864853;59.165920;3; +47;151;-42.350990;70.856445;58.899090;3; +47;152;-38.214832;70.859169;58.757240;3; +47;153;-34.071411;70.858665;58.643658;3; +47;154;-29.922222;70.858467;58.529881;3; +47;155;-25.770247;70.858665;58.415932;3; +47;156;-21.616592;70.858505;58.301929;3; +47;157;-17.460373;70.865669;58.190407;3;{"LinkMode":0,"Links":[[54,28]]} +47;158;-13.311116;70.881622;58.112492;3; +47;159;-9.167306;70.857460;58.060375;3; +47;160;-5.006110;70.768188;58.018707;3; +47;161;-0.818835;70.618858;57.977310;3; +47;162;3.410395;70.369316;57.938213;3; +47;163;7.715300;70.097832;57.899055;3;{"LinkMode":0,"Links":[[54,28]]} +47;164;12.056442;69.881035;57.855003;3; +47;165;16.407042;69.589973;57.810993;3; +47;166;20.786722;69.218735;57.769016;3; +47;167;25.214804;68.711967;57.725651;3; +47;168;29.715788;68.097939;57.689930;3; +47;169;34.304657;67.486031;57.652687;3; +47;170;38.467918;66.941414;57.627445;3; +47;171;42.625675;66.495834;57.594807;3; +47;172;46.946930;66.366570;57.539352;3; +47;173;51.204533;66.398674;57.479908;3; +47;174;55.468201;66.381424;57.415642;3; +47;175;59.703049;66.437927;57.275105;3; +47;176;63.890369;66.371613;57.035011;3; +47;177;68.106125;66.379280;56.589638;3; +47;178;72.276024;66.524452;55.902573;3; +47;179;76.249138;67.225075;55.078865;3; +47;180;79.966606;67.427216;54.176811;3; +47;181;84.098930;67.519951;52.988327;3; +47;182;87.924583;67.831902;51.412201;3; +47;183;91.261520;68.049911;49.408459;3; +47;184;94.437408;68.335320;47.149368;3; +47;185;97.602989;68.525063;44.868626;3; +47;186;100.977348;68.671059;42.882168;3; +47;187;104.602676;68.713036;41.324383;3; +47;188;108.451584;68.695747;40.188755;3; +47;189;112.441010;68.687897;39.470753;3; +47;190;116.509415;68.642365;39.018669;3; +47;191;120.622238;68.636971;38.831543;3; +47;192;124.741737;68.663147;38.882362;3; +47;193;128.854568;68.669540;38.977470;3; +47;194;132.990158;68.637901;38.967270;3; +47;195;137.077209;68.652184;38.452068;3; +47;196;140.844513;68.658882;37.301075;2; +47;197;143.954788;68.656128;35.505722;3; +47;198;146.787567;68.671547;33.001350;3; +47;199;149.177689;68.633255;29.914986;3; +47;200;151.031693;68.361420;26.416025;3; +47;201;152.300446;67.661308;22.498270;3; +47;202;152.920303;66.524559;18.220232;3; +47;203;153.206650;65.364349;13.752007;2; +47;204;153.318588;64.597893;9.481573;3; +47;205;152.964188;64.074326;5.061194;3; +47;206;151.925201;64.027664;0.666125;3; +47;207;150.493301;64.050392;-3.335486;2; +47;208;149.178833;64.019104;-6.584392;2; +47;209;148.022278;64.080315;-9.763542;3; +47;210;147.339981;64.153175;-13.236041;3; +47;211;147.125580;64.141045;-16.918308;2; +47;212;147.061340;64.143112;-20.084723;3; +47;213;147.264740;64.094383;-23.281212;3; +47;214;147.528015;64.072739;-26.844204;3; +47;215;147.982132;64.084251;-30.571524;3; +47;216;148.920425;64.062538;-34.335396;3; +47;217;150.055069;63.982414;-38.157188;2; +47;218;151.071213;63.944412;-41.692848;2; +47;219;151.959122;64.081985;-44.687511;3; +47;220;152.837189;64.030380;-47.921738;3; +47;221;153.679077;63.964821;-51.018562;2; +47;222;154.386902;63.213486;-53.762856;3; +47;223;155.011612;62.700665;-56.592812;3; +47;224;155.932693;63.230251;-59.561478;3; +47;225;157.055542;63.587559;-62.585575;3; +47;226;158.495773;63.926411;-65.291565;2; +47;227;159.730362;64.130577;-67.385704;3; +47;228;160.875519;64.342262;-69.660675;3; +47;229;161.523483;64.552101;-72.013397;2; +47;230;161.438522;64.477280;-73.777397;2; +47;231;161.002365;64.204559;-75.023186;3; +47;232;160.503067;63.982582;-76.848656;3; +47;233;159.640717;64.076706;-79.416245;3; +47;234;158.497284;64.416405;-82.031029;3; +47;235;157.167374;64.042870;-84.713669;3; +47;236;155.646088;64.069740;-88.246704;3; +47;237;154.258575;64.053192;-91.895454;3; +47;238;153.197708;63.900364;-95.767288;3; +47;239;152.503662;63.821590;-99.835876;3; +47;240;151.933914;63.548744;-104.069656;3; +47;241;151.651459;63.518494;-108.352142;3; +47;242;151.564041;63.445694;-112.653793;3; +47;243;151.605423;63.871899;-116.878754;3; +47;244;151.447586;64.147835;-120.924515;3; +47;245;151.158508;64.033157;-125.038620;2; +47;246;150.862289;64.207901;-128.574341;2; +47;247;150.682770;64.242882;-131.440964;2; +47;248;150.633926;64.023506;-133.847473;2; +47;249;150.876007;63.959213;-136.056046;2; +47;250;151.297318;64.100159;-137.523056;2; +47;251;151.517975;64.052498;-138.501587;2; +47;252;151.673965;64.061798;-139.149857;2; +47;253;151.765427;64.060249;-139.597443;3; +47;254;151.875351;64.061234;-140.112717;2; +47;255;151.944534;64.060234;-140.417908;2; +47;256;152.027161;64.062790;-141.103836;3; +47;257;152.105713;64.047272;-142.385376;3; +47;258;152.309631;64.048813;-144.275131;3; +47;259;152.376984;64.048698;-146.720901;3; +47;260;152.455231;64.050262;-149.680054;3; +47;261;152.552979;64.048080;-152.987244;3; +47;262;152.658020;64.048546;-156.555374;3; +47;263;152.768829;64.047836;-160.318588;3; +47;264;152.883575;64.047104;-164.215317;3; +47;265;153.000641;64.055443;-168.197327;3; +47;266;153.118973;64.184227;-172.233948;3; +47;267;153.236801;64.350761;-176.236557;3; +47;268;153.346466;64.483414;-180.142441;2; +47;269;153.152512;64.574203;-183.336487;2; +47;270;152.897049;64.670937;-186.280807;3;{"LinkMode":0,"Links":[[46,13]]} +47;271;152.613052;64.740097;-189.386719;2; +47;272;152.370514;64.814110;-192.033630;2; +47;273;152.178787;64.909027;-194.106964;2; +47;274;152.044601;64.980530;-195.550400;2; +47;275;151.965134;65.047874;-196.407227;2; +47;276;151.923264;65.076691;-196.859177;2;{"LinkMode":0,"Links":[[46,23]]} +48;1;-52.486210;73.290741;252.731750;3;{"Objectives":["spawn vehicle chopper1 ru"]} +48;2;-51.652782;73.168251;251.411011;3; +48;3;-51.571873;73.171059;250.724213;3; +48;4;-50.788311;73.152496;249.999725;3; +48;5;-50.290264;73.153816;249.829453;3;{"Action":{"inputs":[35],"pitch":-0.048285193741322,"time":0.5,"type":"vehicle","yaw":4.5535159111023}} +49;1;-44.549995;72.149918;180.296249;65283;{"Objectives":["base ru"],"Vehicles":["land"]} +49;2;-45.200878;72.140480;179.638519;3; +49;3;-46.029766;72.108040;178.813110;3; +49;4;-47.119953;72.053230;177.734955;3; +49;5;-48.459545;71.996346;176.531616;3; +49;6;-50.101582;71.917709;175.206940;3; +49;7;-51.981934;71.824898;173.771973;3; +49;8;-54.097404;71.727364;172.477356;3; +49;9;-56.541916;71.625252;171.248962;3; +49;10;-59.186634;71.505508;169.920151;3; +49;11;-61.873554;71.390869;168.416229;3; +49;12;-64.344597;71.285782;166.664017;3; +49;13;-66.353012;71.173164;164.573975;3; +49;14;-67.696808;71.057190;162.209518;3; +49;15;-68.440094;71.025772;159.670029;3; +49;16;-68.805420;70.981041;157.034973;3; +49;17;-69.491135;70.960526;154.416763;3; +49;18;-70.429886;70.942039;151.702881;3; +49;19;-71.410622;70.953400;148.860260;3; +49;20;-72.348846;70.982536;145.941559;3; +49;21;-73.062607;70.981804;143.012024;3; +49;22;-73.720062;70.985291;139.998215;3; +49;23;-74.262833;70.982643;136.955948;3; +49;24;-74.755104;70.984215;133.878876;3; +49;25;-75.113464;70.982285;130.799164;3; +49;26;-75.444481;70.984879;127.688454;3; +49;27;-75.741417;70.983124;124.556801;3; +49;28;-76.030884;70.983780;121.405968;3; +49;29;-76.320335;70.983765;118.237724;3; +49;30;-76.565292;70.982689;115.068451;3; +49;31;-76.805672;70.984268;111.892242;3; +49;32;-76.980865;70.982719;108.722488;3; +49;33;-77.130920;70.983749;105.556053;3; +49;34;-77.286522;70.983696;102.383972;3; +49;35;-77.609276;70.980957;99.288605;3; +49;36;-78.115700;70.985023;96.225494;3; +49;37;-78.644798;70.983513;93.139015;3; +49;38;-79.176964;70.983810;90.018242;3; +49;39;-79.684982;70.983665;86.875145;3; +49;40;-80.084976;70.982384;83.744934;3; +49;41;-80.407455;70.980316;80.777580;2; +49;42;-80.594101;70.978790;78.131508;3; +49;43;-80.576576;70.988266;75.536926;2; +49;44;-80.211273;70.976273;73.275230;2; +49;45;-79.854080;70.978012;71.455330;3; +49;46;-79.523529;70.984299;69.779449;3; +49;47;-79.180847;70.984413;68.204819;2; +49;48;-78.974487;70.996063;67.285278;2; +49;49;-78.865562;71.000488;66.813705;2;{"LinkMode":0,"Links":[[47,141]]} +50;1;-32.537167;72.000092;196.072357;3;{"Objectives":["spawn vehicle other1 ru"]} +50;2;-32.710480;72.000572;195.010544;3; +50;3;-32.636761;72.000710;193.918610;3; +50;4;-32.756798;72.000839;193.360397;3;{"Action":{"inputs":[35],"pitch":-0.15599866211414,"time":0.5,"type":"vehicle","yaw":3.6118581295013}} +51;1;-48.928188;71.934418;208.799377;3;{"Objectives":["spawn vehicle tank1 ru"]} +51;2;-48.023544;71.970451;208.516296;3; +51;3;-46.894726;71.998734;208.158508;3; +51;4;-46.055374;72.026443;207.516129;3; +51;5;-45.684238;72.030067;207.298782;3; +51;6;-45.366581;72.030701;207.299240;3;{"Action":{"inputs":[35],"pitch":-0.16899855434895,"time":0.5,"type":"vehicle","yaw":4.7202000617981}} +52;1;-35.744972;72.002281;221.889191;3;{"Objectives":["spawn vehicle other2 ru"]} +52;2;-35.521473;72.002281;221.363678;3; +52;3;-34.820713;72.002281;220.433517;3; +52;4;-34.375881;72.001099;219.981720;3;{"Action":{"inputs":[35],"pitch":-0.16064141690731,"time":0.5,"type":"vehicle","yaw":3.8854281902313}} +53;1;-38.017838;72.501106;94.469627;3;{"Objectives":["spawn vehicle tank2 ru"]} +53;2;-37.416168;72.501106;94.314919;3; +53;3;-36.234577;72.501106;94.281509;3; +53;4;-35.259457;72.501106;93.938828;3;{"Action":{"inputs":[35],"pitch":-0.19778241217136,"time":0.5,"type":"vehicle","yaw":4.6885628700256}} +54;1;-31.655178;72.531311;94.127617;65283;{"Vehicles":["land"]} +54;2;-31.316275;72.536362;94.127617;3; +54;3;-30.415462;72.533981;94.127617;3; +54;4;-29.146927;72.512703;94.127617;3; +54;5;-27.987534;72.522285;94.127617;2; +54;6;-27.411619;72.525070;94.127617;2; +54;7;-26.607809;72.538597;94.127617;3; +54;8;-25.589012;72.530174;94.127281;3; +54;9;-24.217348;72.506615;94.101479;3; +54;10;-22.497095;72.516136;94.067612;3; +54;11;-20.493166;72.510094;93.978943;3; +54;12;-18.371994;72.507927;93.647842;3; +54;13;-16.168764;72.510941;93.034805;3; +54;14;-13.842917;72.509605;92.253105;3; +54;15;-11.499367;72.507484;91.224373;2; +54;16;-9.411711;72.503647;89.883179;3; +54;17;-7.565121;72.511940;88.104454;3; +54;18;-6.134964;72.503166;86.081940;2; +54;19;-5.173383;72.560562;84.088478;2; +54;20;-4.805824;72.552711;82.127640;3; +54;21;-4.786998;72.447571;80.131439;3; +54;22;-4.821998;72.340416;78.013115;2; +54;23;-4.853968;72.191246;76.323395;3; +54;24;-4.909280;72.038017;74.318069;3; +54;25;-4.955386;71.823936;72.312981;2; +54;26;-4.895001;71.637756;70.464279;2; +54;27;-4.605107;71.501175;69.041748;1; +54;28;-4.435578;71.440979;68.358948;2;{"LinkMode":0,"Links":[[47,163],[47,157]]} +55;1;327.343994;70.563576;-161.703918;3;{"Objectives":["spawn vehicle other2 us"]} +55;2;328.551300;70.563576;-162.316345;3; +55;3;328.931885;70.563576;-162.551437;3;{"Action":{"inputs":[35],"pitch":-0.13087072968483,"time":0.5,"type":"vehicle","yaw":4.4565062522888}} +56;1;339.018799;70.561523;-173.216873;3;{"Vehicles":["land"]} +56;2;338.460114;70.563759;-174.151062;3; +56;3;337.805664;70.547440;-175.184021;3; +56;4;337.171234;70.566544;-176.185745;2; +56;5;336.547089;70.556480;-176.996292;3; +56;6;335.441223;70.534653;-178.173798;2; +56;7;334.497925;70.540688;-179.276108;2; +56;8;333.859406;70.585953;-180.034332;2; +56;9;333.458832;70.573807;-180.504593;2;{"LinkMode":0,"Links":[[45,1]]} +57;1;342.754669;70.526703;-194.453201;3;{"Vehicles":["land"]} +57;2;341.820740;70.550903;-193.613434;3; +57;3;340.889160;70.554100;-193.098206;3; +57;4;339.841431;70.571053;-192.513702;3; +57;5;338.178528;70.600403;-191.667664;3; +57;6;337.577545;70.610168;-191.379272;3; +57;7;336.615875;70.623726;-190.918091;3; +57;8;335.517151;70.624367;-190.436951;3; +57;9;334.833405;70.624825;-190.172272;3;{"LinkMode":0,"Links":[[45,1]]} +58;1;3.938273;64.248238;-242.787140;3;{"LinkMode":0,"Links":[[35,35]],"Objectives":["vehicle tank3 both"]} +58;2;3.172629;64.082596;-244.227020;4; +58;3;2.411156;64.057663;-245.452728;4; +58;4;1.328249;64.044128;-247.060379;4; +58;5;-0.006585;63.998592;-248.766006;4; +58;6;-1.125936;63.999210;-250.088806;4; +58;7;-2.436212;63.999722;-251.532730;4; +58;8;-3.825838;64.000122;-253.194138;4; +58;9;-5.024652;64.000366;-254.731506;4; +58;10;-6.050347;64.000526;-256.128632;4; +58;11;-7.302556;64.000679;-257.896454;4; +58;12;-8.239404;63.976833;-259.353821;4; +58;13;-9.249578;63.969730;-261.021454;4; +58;14;-10.398348;63.969730;-262.535889;4; +58;15;-11.479964;63.969730;-264.152740;4; +58;16;-12.648842;63.969730;-265.976562;4; +58;17;-13.576097;63.969730;-267.440979;4; +58;18;-13.983351;63.969730;-269.456787;4; +58;19;-13.456841;63.969730;-270.595520;3;{"Action":{"inputs":[35],"pitch":-0.060107257217169,"time":0.5,"type":"vehicle","yaw":4.015362739563}} +59;1;16.333847;64.017426;-248.546600;3;{"LinkMode":0,"Links":[[35,47]],"Objectives":["vehicle other3 both"]} +59;2;15.501191;64.000938;-249.874924;4; +59;3;14.489858;64.178040;-251.476852;4; +59;4;13.543137;64.081070;-253.121140;4; +59;5;12.680559;63.995533;-254.859619;4; +59;6;11.998159;63.992504;-256.682922;4; +59;7;11.343501;63.969730;-258.747437;4; +59;8;10.607648;63.969730;-260.545990;4; +59;9;9.742279;63.969730;-262.044891;4; +59;10;8.713467;63.969730;-263.700958;4; +59;11;7.614520;63.969730;-265.311035;4; +59;12;6.478405;63.969730;-266.895721;4; +59;13;5.331573;63.969730;-268.472748;4; +59;14;4.195655;63.969730;-270.056305;4; +59;15;2.744164;63.969730;-272.467926;4; +59;16;2.263255;63.969730;-273.437592;4; +59;17;1.537541;63.969730;-275.245728;4; +59;18;0.910342;63.969730;-277.090240;4; +59;19;0.662948;63.969730;-278.931732;3; +59;20;0.768467;63.969730;-279.787689;3;{"Action":{"inputs":[35],"pitch":-0.12696312367916,"time":0.5,"type":"vehicle","yaw":3.6977941989899}} +60;1;109.478516;73.414268;-241.323181;65283;{"LinkMode":0,"Links":[[46,31]],"Objectives":["c"],"Vehicles":["land"]} +60;2;109.215973;73.432098;-241.479858;3; +60;3;108.445374;73.474106;-241.883087;3; +60;4;107.393135;73.518539;-242.436798;3; +60;5;106.070534;73.549316;-243.130936;3; +60;6;104.486610;73.640938;-243.966537;3; +60;7;102.648094;73.739799;-244.937195;3; +60;8;100.569458;73.856667;-246.038727;3; +60;9;98.287277;74.003349;-247.237625;3; +60;10;95.864830;74.147522;-248.445297;3; +60;11;93.347160;74.238853;-249.591568;3; +60;12;90.714828;74.243668;-250.526566;3; +60;13;87.958488;74.179581;-251.489288;3; +60;14;85.158669;74.033493;-252.575165;3; +60;15;82.285965;73.833382;-253.751480;3;{"LinkMode":0,"Links":[[46,49]]} +60;16;79.364494;73.583282;-255.039093;3; +60;17;76.471184;73.260658;-256.469879;3; +60;18;73.625336;72.874603;-258.050934;3; +60;19;70.768433;72.441216;-259.756287;3; +60;20;67.948837;71.898224;-261.567596;3; +60;21;65.131927;71.270370;-263.492188;3; +60;22;62.300381;70.563644;-265.504883;3; +60;23;59.385593;69.767189;-267.523163;3; +60;24;56.371216;68.871040;-269.305664;3; +60;25;53.237789;67.863213;-270.753540;3; +60;26;49.980164;66.883186;-271.850494;3; +60;27;46.607201;66.107872;-272.526917;3; +60;28;43.249725;65.531563;-272.713318;3; +60;29;40.040314;65.050720;-272.373657;3; +60;30;37.016247;64.653976;-271.461090;3; +60;31;33.964302;64.317886;-270.351410;3; +60;32;30.836348;64.088524;-269.205261;3; +60;33;27.731316;64.011429;-268.008179;3; +60;34;24.649385;64.012085;-266.819824;3; +60;35;21.579586;63.995003;-265.624573;3; +60;36;18.642994;63.915340;-264.309814;3; +60;37;15.990804;63.916180;-262.712708;3;{"LinkMode":0,"Links":[[62,14]]} +60;38;13.371603;63.933167;-261.021362;3; +60;39;10.708830;63.922085;-259.288788;3; +60;40;8.001798;63.934479;-257.530823;3; +60;41;5.276906;63.963455;-255.760513;3; +60;42;2.542233;63.953148;-253.987869;3; +60;43;-0.214220;63.948940;-252.201263;3;{"LinkMode":0,"Links":[[61,13]]} +60;44;-2.984634;63.954266;-250.404297;3; +60;45;-5.767445;63.951702;-248.599838;3; +60;46;-8.555714;63.957607;-246.791428;3; +60;47;-11.345318;63.952625;-244.983398;3; +60;48;-14.149580;63.949440;-243.251129;3; +60;49;-16.965820;63.952930;-241.572159;3; +60;50;-19.780378;63.917545;-239.893677;3; +60;51;-22.607826;63.866253;-238.220276;3; +60;52;-25.423784;63.846451;-236.652222;3; +60;53;-28.233673;63.773705;-235.092300;3; +60;54;-31.031090;63.919212;-233.676712;3; +60;55;-33.790348;64.034439;-232.282715;3; +60;56;-36.517185;64.316948;-230.888687;3; +60;57;-39.178757;64.712395;-229.535309;3; +60;58;-41.814312;65.125702;-228.196060;3; +60;59;-44.428898;65.585320;-226.866699;3; +60;60;-46.971397;66.069603;-225.522415;3; +60;61;-49.467022;66.531212;-224.163071;3; +60;62;-51.923714;66.978790;-222.787796;3; +60;63;-54.262688;67.420563;-221.316391;3; +60;64;-56.506454;67.848984;-219.775177;3; +60;65;-58.674400;68.277527;-218.144257;3; +60;66;-60.870789;68.699043;-216.489578;3; +60;67;-63.068295;69.126480;-214.809280;3; +60;68;-65.224617;69.576958;-213.086517;3; +60;69;-67.342247;69.993683;-211.338638;3; +60;70;-69.347374;70.324364;-209.512527;3; +60;71;-71.253235;70.593445;-207.587677;3; +60;72;-73.161209;70.811821;-205.575424;3; +60;73;-75.112350;70.946419;-203.511368;3; +60;74;-77.072502;70.996101;-201.375534;3; +60;75;-78.995804;70.985092;-199.128387;3; +60;76;-80.839294;70.979836;-196.736694;3; +60;77;-82.603554;70.958885;-194.240448;3; +60;78;-84.241867;70.922913;-191.645325;3; +60;79;-85.531982;70.904442;-189.001007;3; +60;80;-86.337105;70.891129;-186.241776;3; +60;81;-87.034523;70.891693;-183.355453;3; +60;82;-87.670784;70.892632;-180.376358;3; +60;83;-88.221069;70.901794;-177.339554;3; +60;84;-88.700966;70.927612;-174.260483;3; +60;85;-89.061501;70.923286;-171.156387;3; +60;86;-89.431061;70.945190;-167.991486;3; +60;87;-89.785095;70.956146;-164.798599;3; +60;88;-89.993294;70.931465;-161.618637;3; +60;89;-90.075539;70.943710;-158.452713;3; +60;90;-90.031013;70.923454;-155.287735;3; +60;91;-89.806808;70.861969;-152.155380;3; +60;92;-89.435043;70.771172;-149.069687;2; +60;93;-88.849251;70.662552;-146.407852;3; +60;94;-87.953514;70.548721;-144.194687;2; +60;95;-86.994041;70.424873;-142.503815;2; +60;96;-86.275726;70.364380;-141.357117;2; +60;97;-85.767014;70.350731;-140.552216;2; +60;98;-85.502991;70.322838;-140.143112;2;{"LinkMode":0,"Links":[[46,107],[47,102]]} +61;1;-10.705719;63.968113;-270.590271;3;{"Vehicles":["land"]} +61;2;-10.395246;63.970486;-270.000732;3; +61;3;-9.941528;63.966511;-269.166992;3; +61;4;-9.309872;63.935722;-268.005005;3; +61;5;-8.508322;63.924114;-266.554047;2; +61;6;-7.896991;63.935696;-265.473450;2; +61;7;-7.366364;63.971138;-264.533203;3; +61;8;-6.883820;63.955132;-263.677826;3; +61;9;-6.360105;63.968025;-262.749420;3; +61;10;-5.951732;63.961742;-262.024139;2; +61;11;-5.762553;63.971043;-261.687531;2; +61;12;-5.249835;63.984283;-260.778900;2; +61;13;-4.962545;63.974747;-260.268372;2;{"LinkMode":0,"Links":[[60,43]]} +62;1;2.565412;63.971424;-281.672852;3;{"Vehicles":["land"]} +62;2;2.744966;63.970833;-281.362823;3; +62;3;3.216818;63.969059;-280.629364;3; +62;4;3.883267;63.952923;-279.598755;3; +62;5;4.742545;63.921402;-278.271881;3; +62;6;5.788274;63.931591;-276.656036;3; +62;7;6.986832;63.929234;-274.762634;3; +62;8;8.111597;63.919449;-272.985443;2; +62;9;8.832701;63.929516;-271.845215;3; +62;10;9.573666;63.938393;-270.673889;2; +62;11;10.077775;63.960659;-269.877014;3; +62;12;10.515843;63.965691;-269.184509;2; +62;13;10.849285;63.965618;-268.657379;2; +62;14;11.057862;63.964825;-268.327850;2;{"LinkMode":0,"Links":[[60,37]]} diff --git a/mapfiles/XP5_002_ConquestLarge0.map b/mapfiles/XP5_002_ConquestLarge0.map index 64017f78..9d0eabb5 100644 --- a/mapfiles/XP5_002_ConquestLarge0.map +++ b/mapfiles/XP5_002_ConquestLarge0.map @@ -1,5 +1,5 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data -0;0;0.000000;0.000000;0.000000;0;{"Authors":["Beschutzer"],"CompIndex":1,"Date":"2025-09-02 20:59:15"} +0;0;0.000000;0.000000;0.000000;0;{"Authors":["Beschutzer"],"CompIndex":1,"Date":"2025-09-08 00:11:45"} 1;1;-2028.572144;59.313404;-217.071259;3;{"Objectives":["a"]} 1;2;-2027.839233;59.313404;-215.848938;4; 1;3;-2026.834229;59.317257;-214.231445;4; @@ -248,7 +248,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 4;12;-2039.856934;48.500740;-63.185493;4; 4;13;-2040.153076;48.500740;-61.259041;4; 4;14;-2040.229980;48.514038;-58.668568;4; -4;15;-2040.089966;48.502598;-57.164349;4;{"LinkMode":0,"Links":[[60,1]]} +4;15;-2040.089966;48.502598;-57.164349;4; 4;16;-2039.404541;48.495987;-55.363693;4; 4;17;-2038.343384;48.503113;-53.740330;4; 4;18;-2036.712646;48.501259;-52.010891;4; @@ -933,7 +933,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 11;14;-1630.437866;63.819981;-9.922654;4; 11;15;-1628.951660;63.776081;-11.076719;4; 11;16;-1627.559082;63.777836;-12.433124;4; -11;17;-1626.512817;63.779118;-14.012741;4;{"LinkMode":0,"Links":[[61,1]]} +11;17;-1626.512817;63.779118;-14.012741;4; 11;18;-1626.314941;63.780025;-15.912737;4; 11;19;-1626.522461;63.780670;-17.843010;4; 11;20;-1626.968994;63.781124;-19.734486;4; @@ -3204,7 +3204,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 27;14;-2034.346680;48.500740;-62.660553;4; 27;15;-2035.710083;48.500740;-61.004711;4; 27;16;-2036.914673;48.500740;-59.526920;4; -27;17;-2038.620239;48.500740;-58.019379;4;{"LinkMode":0,"Links":[[60,1]]} +27;17;-2038.620239;48.500740;-58.019379;4; 27;18;-2039.114868;48.500740;-56.186024;4; 27;19;-2038.712280;48.500740;-54.118031;4; 27;20;-2038.246338;48.500740;-52.027290;4; @@ -3508,7 +3508,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 31;23;-2075.087402;69.428398;-383.202820;3; 31;24;-2069.361084;69.354126;-381.316864;3; 31;25;-2063.506348;69.303421;-379.404846;3; -31;26;-2057.710449;69.319206;-377.006897;3;{"LinkMode":0,"Links":[[47,34]]} +31;26;-2057.710449;69.319206;-377.006897;3; 31;27;-2052.022949;69.073563;-374.053009;3; 31;28;-2046.270386;69.450607;-371.013824;3; 31;29;-2040.423950;69.208000;-367.918823;3; @@ -3707,7 +3707,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 37;1;-2235.624023;63.129288;-509.662384;3;{"Objectives":["spawn vehicle chopper1 us"]} 37;2;-2234.731689;63.118843;-510.496002;3; 37;3;-2233.963379;63.090748;-511.359558;3;{"Action":{"inputs":[35],"pitch":-0.065927095711231,"time":0.5,"type":"vehicle","yaw":3.8674263954163}} -38;1;-2202.360840;66.597015;-458.892975;65283;{"Vehicles":["land"]} +38;1;-2202.360840;66.597015;-458.892975;65283;{"Objectives":["base us"],"Vehicles":["land"]} 38;2;-2201.813721;66.658806;-458.083374;4; 38;3;-2201.056641;66.709549;-456.962402;4; 38;4;-2200.044922;66.796921;-455.460815;4; @@ -3766,8 +3766,8 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 38;57;-2043.208984;66.628418;-333.206635;2; 38;58;-2041.986816;66.415092;-330.809845;3; 38;59;-2040.727051;66.217697;-328.333893;2; -38;60;-2039.736572;66.013954;-326.385895;2;{"LinkMode":0,"Links":[[41,1],[39,1]]} -39;1;-2026.961060;63.358215;-302.468323;65283;{"LinkMode":0,"Links":[[38,60],[40,257]],"Objectives":["a","d","g","vehicle chopper1 ru"],"Vehicles":["land"]} +38;60;-2039.736572;66.013954;-326.385895;2;{"LinkMode":0,"Links":[[39,1],[41,1]]} +39;1;-2026.961060;63.358215;-302.468323;65283;{"LinkMode":0,"Links":[[40,257],[38,60]],"Objectives":["a","d","g"],"Vehicles":["land"]} 39;2;-2026.772461;63.318199;-302.121033;3; 39;3;-2026.280518;63.196754;-301.223328;3; 39;4;-2025.521851;62.965523;-299.839813;4; @@ -3928,7 +3928,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 40;30;-1837.538696;54.123215;177.869720;2; 40;31;-1839.612427;53.813774;178.369736;2; 40;32;-1841.485352;53.589085;178.782928;3; -40;33;-1843.615479;53.321224;179.199387;2;{"LinkMode":0,"Links":[[62,116]]} +40;33;-1843.615479;53.321224;179.199387;2; 40;34;-1845.130493;53.095024;179.503891;2; 40;35;-1846.054077;53.008640;179.690231;2; 40;36;-1847.083130;52.850693;179.922394;3; @@ -4153,7 +4153,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 40;255;-2036.945312;61.134708;-267.321167;2; 40;256;-2035.841187;61.071800;-267.997009;2; 40;257;-2035.297974;61.070457;-268.324280;2;{"LinkMode":0,"Links":[[39,1]]} -41;1;-2015.304443;65.795677;-319.729370;65283;{"LinkMode":0,"Links":[[38,60]],"Objectives":["a","b","e","g"],"Vehicles":["land"]} +41;1;-2015.304443;65.795677;-319.729370;65283;{"LinkMode":0,"Links":[[38,60],[60,41]],"Objectives":["a","b","e","g"],"Vehicles":["land"]} 41;2;-2014.619141;65.742996;-319.287567;3; 41;3;-2013.534302;65.614365;-318.704926;3; 41;4;-2012.099976;65.490341;-317.914124;3; @@ -4483,40 +4483,6 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 46;5;-2194.315430;66.094154;-466.662415;3; 46;6;-2193.630615;66.129616;-466.036316;3; 46;7;-2193.229736;66.164871;-465.636627;3;{"Action":{"inputs":[35],"pitch":-0.34610217809677,"time":0.5,"type":"vehicle","yaw":5.0885906219482}} -47;1;-2192.321533;66.391586;-464.768555;65283;{"Objectives":["base us"],"Vehicles":["land"]} -47;2;-2191.813477;66.478561;-463.950317;3; -47;3;-2191.307861;66.566246;-463.078278;3; -47;4;-2190.540771;66.711136;-461.748627;4; -47;5;-2189.347900;67.064842;-459.797546;4; -47;6;-2187.719727;67.328560;-457.223114;4; -47;7;-2185.660645;67.378159;-454.067383;4; -47;8;-2183.275635;67.891724;-450.697266;4; -47;9;-2180.593262;68.204956;-447.115112;4; -47;10;-2177.612793;68.607971;-443.594482;3; -47;11;-2174.312256;68.726387;-439.969666;3; -47;12;-2170.522949;69.035202;-436.951996;3; -47;13;-2166.532227;69.682762;-433.903900;4; -47;14;-2162.299072;70.048439;-430.683960;4; -47;15;-2157.894775;70.557510;-427.363586;4; -47;16;-2153.354004;71.052742;-423.974243;4; -47;17;-2148.786377;71.309364;-420.621918;3; -47;18;-2144.046387;71.296730;-417.237823;3; -47;19;-2139.250000;71.378151;-413.928253;3; -47;20;-2133.718018;71.484283;-411.955200;3; -47;21;-2127.885498;71.347931;-410.543915;3; -47;22;-2122.052734;71.215553;-408.706329;3; -47;23;-2116.750000;70.933708;-405.511078;3; -47;24;-2111.690430;70.728462;-401.707886;3; -47;25;-2106.035645;70.552025;-398.634033;2; -47;26;-2100.462158;70.399979;-395.766785;2; -47;27;-2095.218750;70.276581;-393.081635;2; -47;28;-2090.018311;70.154968;-391.271790;2; -47;29;-2085.112793;70.141747;-389.756866;2; -47;30;-2080.568115;70.015831;-388.357239;2; -47;31;-2076.380371;69.902779;-387.071167;2; -47;32;-2072.572754;69.594429;-385.793671;1; -47;33;-2069.854736;69.528351;-384.494080;1; -47;34;-2068.731445;69.516220;-383.711029;1;{"LinkMode":0,"Links":[[31,26]]} 48;1;-1658.538818;73.878212;472.340454;3;{"LinkMode":0,"Links":[[21,6]],"Objectives":["vehicle tank2 ru"]} 48;2;-1658.442139;73.871376;471.519287;3; 48;3;-1658.255981;73.836426;470.342560;3; @@ -4851,129 +4817,44 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 59;3;-1679.830688;75.418274;530.288635;3; 59;4;-1680.868408;75.424713;530.080017;3; 59;5;-1681.488037;75.428093;529.945557;3;{"Action":{"inputs":[35],"pitch":-0.23931823670864,"time":0.5,"type":"vehicle","yaw":1.4365153312683}} -60;1;-2054.074707;48.705528;-69.766319;3;{"LinkMode":0,"Links":[[4,15],[27,17]]} -60;2;-2053.630615;48.706406;-68.231560;3; -60;3;-2053.353760;48.695351;-67.626564;3; -60;4;-2053.144775;48.675682;-67.211060;3;{"Action":{"inputs":[35],"pitch":-0.26438924670219,"time":0.5,"type":"vehicle","yaw":5.7712831497192}} -61;1;-1620.093018;64.123055;-11.551053;3;{"LinkMode":0,"Links":[[11,17]],"Objectives":["vehicle tank4 both"]} -61;2;-1618.750977;64.165001;-11.716261;3; -61;3;-1617.713013;64.197449;-11.949014;3; -61;4;-1616.611694;64.222466;-12.409034;3; -61;5;-1615.667969;64.211761;-13.138802;3; -61;6;-1615.146118;64.253624;-13.650847;3;{"Action":{"inputs":[35],"pitch":-0.2337459474802,"time":0.5,"type":"vehicle","yaw":3.6695308685303}} -62;1;-2050.196777;48.774853;-63.334782;65283;{"Objectives":["c","f"],"Vehicles":["land"]} -62;2;-2049.666748;48.781998;-62.581501;3; -62;3;-2049.046387;48.734882;-61.664227;3; -62;4;-2048.190430;48.723621;-60.396790;3; -62;5;-2047.142578;48.700912;-58.844597;3; -62;6;-2045.912476;48.657333;-57.062778;4; -62;7;-2044.429199;48.691624;-54.896927;4; -62;8;-2042.665161;48.683983;-52.322231;4; -62;9;-2040.628418;48.709354;-49.337006;4; -62;10;-2038.427490;48.715206;-46.125748;3; -62;11;-2036.417480;48.725540;-43.016384;3; -62;12;-2034.561768;48.815491;-40.070713;3; -62;13;-2032.922485;48.898682;-37.224197;3; -62;14;-2031.359985;49.026463;-34.431351;3; -62;15;-2029.821899;49.164055;-31.681177;3; -62;16;-2028.264404;49.347347;-28.976871;3; -62;17;-2026.716553;49.595772;-26.309519;3; -62;18;-2025.179199;49.871708;-23.699553;3; -62;19;-2023.631714;50.140038;-21.136129;3; -62;20;-2022.080566;50.415024;-18.556190;3; -62;21;-2020.530396;50.682007;-15.989964;3; -62;22;-2018.892822;50.913067;-13.513840;3; -62;23;-2017.214233;51.153282;-11.040144;3; -62;24;-2015.576782;51.344769;-8.545149;3; -62;25;-2013.959351;51.536263;-5.996058;3; -62;26;-2012.436279;51.691223;-3.431856;3; -62;27;-2010.907715;51.827042;-0.807086;3; -62;28;-2009.358398;51.973175;1.841633;3; -62;29;-2007.799072;52.088360;4.497762;3; -62;30;-2006.225830;52.163723;7.157035;3; -62;31;-2004.634888;52.188404;9.839300;3; -62;32;-2003.054077;52.124821;12.516721;3; -62;33;-2001.451660;51.947495;15.220379;3; -62;34;-1999.821167;51.688320;17.972494;3; -62;35;-1998.151733;51.375336;20.805019;3; -62;36;-1996.401733;51.032272;23.630585;3; -62;37;-1994.599731;50.732735;26.498119;3; -62;38;-1992.800537;50.541084;29.343779;3; -62;39;-1991.110107;50.381367;32.215740;3; -62;40;-1989.543579;50.402714;35.098515;3; -62;41;-1988.064087;50.510666;37.919800;3; -62;42;-1986.600830;50.702400;40.662514;3; -62;43;-1985.125122;50.932655;43.349644;3; -62;44;-1983.654419;51.280571;45.988274;3; -62;45;-1982.263550;51.662018;48.560184;3; -62;46;-1980.875977;52.023914;51.124954;3; -62;47;-1979.420166;52.314262;53.590866;3; -62;48;-1977.900269;52.555752;56.048607;3; -62;49;-1976.368896;52.670597;58.521317;3; -62;50;-1974.892822;52.688961;60.916550;3; -62;51;-1973.411987;52.537945;63.319221;3; -62;52;-1971.810791;52.332912;65.928093;3; -62;53;-1970.147827;52.079517;68.652756;3; -62;54;-1968.435547;51.806374;71.456978;3; -62;55;-1966.673828;51.579666;74.318398;3; -62;56;-1964.917603;51.454323;77.181908;3; -62;57;-1963.184326;51.403484;80.011887;3; -62;58;-1961.467773;51.458694;82.803833;3; -62;59;-1959.798218;51.562206;85.514954;3; -62;60;-1958.134644;51.671177;88.204773;3; -62;61;-1956.485596;51.827785;90.880142;3; -62;62;-1954.788330;52.004761;93.439690;3; -62;63;-1953.037842;52.182232;95.943359;3; -62;64;-1951.279053;52.339828;98.291397;2; -62;65;-1949.939209;52.428349;100.081947;2; -62;66;-1949.067993;52.493881;101.237869;3; -62;67;-1948.166260;52.550247;102.444366;3; -62;68;-1947.112671;52.589428;103.839172;3; -62;69;-1945.892090;52.612236;105.448036;3; -62;70;-1944.534668;52.596577;107.249924;3; -62;71;-1942.996460;52.550816;109.284477;3; -62;72;-1941.308472;52.484890;111.531990;3; -62;73;-1939.477661;52.436573;113.951004;3; -62;74;-1937.591919;52.397850;116.379440;3; -62;75;-1935.589722;52.374969;118.825745;3; -62;76;-1933.588257;52.398933;121.239220;3; -62;77;-1931.543457;52.438808;123.663803;3; -62;78;-1929.498657;52.513596;125.996941;3; -62;79;-1927.397827;52.507507;128.243011;3; -62;80;-1925.253784;52.452389;130.474380;3; -62;81;-1923.083618;52.286610;132.714935;3; -62;82;-1920.869263;52.042130;135.000992;3; -62;83;-1918.565186;51.725624;137.234222;2; -62;84;-1916.551270;51.447117;139.100784;3; -62;85;-1914.492554;51.181812;140.936081;3; -62;86;-1912.208740;50.899452;142.727783;3; -62;87;-1909.751709;50.632492;144.600082;3; -62;88;-1907.401978;50.399624;146.391296;3; -62;89;-1905.009155;50.293491;148.214798;3; -62;90;-1902.614868;50.296913;150.126755;3; -62;91;-1900.396606;50.353081;152.140991;3; -62;92;-1898.180908;50.357796;154.179367;3; -62;93;-1895.952271;50.357861;156.317627;3; -62;94;-1893.715454;50.359993;158.480469;3; -62;95;-1891.447876;50.357292;160.668091;3; -62;96;-1889.153198;50.359180;162.864716;3; -62;97;-1886.788208;50.356297;164.939377;3; -62;98;-1884.358398;50.357235;166.843277;3; -62;99;-1881.823608;50.359253;168.605972;3; -62;100;-1879.243652;50.356815;170.263397;3; -62;101;-1876.616699;50.355255;171.586716;3; -62;102;-1873.831177;50.360157;172.408234;3; -62;103;-1870.940063;50.358891;173.161011;3; -62;104;-1868.004028;50.358604;173.996689;3; -62;105;-1865.107178;50.357723;174.841354;2; -62;106;-1862.770508;50.345970;175.529297;3; -62;107;-1860.424194;50.377319;176.218323;3; -62;108;-1858.032349;50.573753;176.919678;2; -62;109;-1856.061646;50.877003;177.291992;2; -62;110;-1855.039429;51.126774;177.466354;3; -62;111;-1854.196899;51.328075;177.606964;3; -62;112;-1853.310303;51.549137;177.779282;3; -62;113;-1852.350952;51.798958;177.990021;3; -62;114;-1851.321411;52.051250;178.221222;3; -62;115;-1850.233887;52.307232;178.463821;2; -62;116;-1849.648315;52.438103;178.594910;2;{"LinkMode":0,"Links":[[40,33]]} +60;1;-2196.816650;66.719818;-463.248199;65283;{"Objectives":["base us"],"Vehicles":["land"]} +60;2;-2196.186279;66.786934;-462.482605;3; +60;3;-2195.177979;66.837090;-461.228424;3; +60;4;-2193.637695;67.022285;-459.300964;3; +60;5;-2191.545166;67.207069;-456.696777;3; +60;6;-2188.962158;67.437515;-453.481689;3; +60;7;-2185.998535;67.731644;-449.801361;3; +60;8;-2182.722900;68.059334;-445.880035;3; +60;9;-2179.185547;68.464714;-441.774536;3; +60;10;-2175.346680;68.877365;-437.660339;3; +60;11;-2171.197754;69.317703;-433.645111;3; +60;12;-2166.403809;69.723228;-430.210266;3; +60;13;-2161.241943;70.207237;-427.158447;3; +60;14;-2155.775146;70.612541;-424.511810;3; +60;15;-2150.184326;71.002708;-421.950378;3; +60;16;-2144.525391;71.364410;-419.458649;3; +60;17;-2138.845459;71.490639;-416.938568;3; +60;18;-2133.182129;71.530418;-414.430023;3; +60;19;-2127.557861;71.400520;-411.951477;3; +60;20;-2122.089844;71.258759;-409.578827;2; +60;21;-2117.021240;71.043312;-407.444672;3; +60;22;-2111.771240;70.889854;-405.586731;3; +60;23;-2106.321045;70.639999;-403.699982;3; +60;24;-2100.727539;70.516968;-401.939331;3; +60;25;-2095.156738;70.326317;-399.879608;3; +60;26;-2089.666016;70.190079;-397.480316;3; +60;27;-2084.284180;70.119957;-394.790558;3; +60;28;-2079.026123;70.015366;-391.942139;3; +60;29;-2073.794189;69.995209;-388.934814;3; +60;30;-2068.678955;69.584473;-385.781799;3; +60;31;-2063.793945;69.624680;-382.108887;3; +60;32;-2059.202393;69.445786;-378.235138;3; +60;33;-2054.657227;69.079979;-374.128326;3; +60;34;-2050.711182;69.341286;-369.534882;3; +60;35;-2046.963013;69.099632;-364.767426;3; +60;36;-2043.231812;68.633354;-359.947449;3; +60;37;-2039.199585;68.163559;-355.505280;2; +60;38;-2035.447266;68.034538;-351.331390;2; +60;39;-2032.033325;68.004189;-347.548981;2; +60;40;-2028.807739;68.073128;-343.957825;2; +60;41;-2025.844604;67.809158;-340.668427;2;{"LinkMode":0,"Links":[[41,1]]} From e0e5fbc77110041189a97248dfb59afaef4f9d5c Mon Sep 17 00:00:00 2001 From: MatiasPastori Date: Fri, 12 Sep 2025 01:18:53 -0300 Subject: [PATCH 05/10] Reverting a previous commit with the transitions on each Update method. --- ext/Server/Bot.lua | 2 +- .../BotStates/StateInVehicleAttacking.lua | 26 +++---------------- .../StateInVehicleChopperControl.lua | 15 +---------- .../BotStates/StateInVehicleJetControl.lua | 24 +---------------- .../StateInVehicleStationaryAAControl.lua | 26 +------------------ .../BotStates/StateOnVehicleAttacking.lua | 26 ------------------- ext/Server/BotStates/StateOnVehicleIdle.lua | 25 ------------------ 7 files changed, 8 insertions(+), 136 deletions(-) diff --git a/ext/Server/Bot.lua b/ext/Server/Bot.lua index 7d6059c5..342348de 100644 --- a/ext/Server/Bot.lua +++ b/ext/Server/Bot.lua @@ -790,7 +790,7 @@ function Bot:_CheckShouldExitVehicleIfPassenger() end if s_ShouldExit then - --self:AbortAttack() I understand it should be needed because when _DoExitVehicle gets executed it will also do this too + self:AbortAttack() self:ExitVehicle() end end diff --git a/ext/Server/BotStates/StateInVehicleAttacking.lua b/ext/Server/BotStates/StateInVehicleAttacking.lua index dfc4b21c..1e9064d8 100644 --- a/ext/Server/BotStates/StateInVehicleAttacking.lua +++ b/ext/Server/BotStates/StateInVehicleAttacking.lua @@ -33,16 +33,11 @@ function StateInVehicleAttacking:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Idle) return end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end if p_Bot._ShootPlayer == nil then p_Bot:SetState(g_BotStates.States.InVehicleMoving) return end - -- use state-timer to change vehicle movement during attack if not m_Vehicles:IsGunship(p_Bot.m_ActiveVehicle) then if p_Bot.m_StateTimer == 0.0 or p_Bot.m_StateTimer > 5.0 then @@ -86,11 +81,6 @@ end ---@param p_DeltaTime number function StateInVehicleAttacking:UpdateFast(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) return end @@ -115,26 +105,18 @@ end ---update in every frame ---@param p_Bot Bot function StateInVehicleAttacking:UpdateVeryFast(p_Bot) - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end + end ---slow update-function ---@param p_Bot Bot ---@param p_DeltaTime number function StateInVehicleAttacking:UpdateSlow(p_Bot, p_DeltaTime) - if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) + if p_Bot.m_Player.soldier then + p_Bot:_CheckForVehicleActions(p_DeltaTime, true) + p_Bot:_DoExitVehicle() return end - p_Bot:_CheckForVehicleActions(p_DeltaTime, true) - p_Bot:_DoExitVehicle() end if g_StateInVehicleAttacking == nil then diff --git a/ext/Server/BotStates/StateInVehicleChopperControl.lua b/ext/Server/BotStates/StateInVehicleChopperControl.lua index b4816d9d..48e4d86c 100644 --- a/ext/Server/BotStates/StateInVehicleChopperControl.lua +++ b/ext/Server/BotStates/StateInVehicleChopperControl.lua @@ -22,10 +22,6 @@ function StateInVehicleChopperControl:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Idle) return end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end local s_IsAttacking = p_Bot._ShootPlayer ~= nil -- update state-timer @@ -55,11 +51,6 @@ end ---@param p_DeltaTime number function StateInVehicleChopperControl:UpdateFast(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) return end @@ -83,13 +74,9 @@ end ---@param p_DeltaTime number function StateInVehicleChopperControl:UpdateSlow(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) return end + local s_IsAttacking = p_Bot._ShootPlayer ~= nil p_Bot:_CheckForVehicleActions(p_DeltaTime, true) if not s_IsAttacking then diff --git a/ext/Server/BotStates/StateInVehicleJetControl.lua b/ext/Server/BotStates/StateInVehicleJetControl.lua index be89dcb9..07b4f9c4 100644 --- a/ext/Server/BotStates/StateInVehicleJetControl.lua +++ b/ext/Server/BotStates/StateInVehicleJetControl.lua @@ -23,11 +23,6 @@ function StateInVehicleJetControl:Update(p_Bot, p_DeltaTime) return end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end - local s_IsAttacking = p_Bot._ShootPlayer ~= nil -- update state-timer p_Bot.m_StateTimer = p_Bot.m_StateTimer + p_DeltaTime @@ -55,14 +50,9 @@ end ---@param p_DeltaTime number function StateInVehicleJetControl:UpdateFast(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) return end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end local s_IsAttacking = p_Bot._ShootPlayer ~= nil -- assign new target after some time @@ -92,14 +82,7 @@ end ---update in every frame ---@param p_Bot Bot function StateInVehicleJetControl:UpdateVeryFast(p_Bot) - if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end + end ---slow update-function @@ -107,11 +90,6 @@ end ---@param p_DeltaTime number function StateInVehicleJetControl:UpdateSlow(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) return end -- p_Bot:_CheckForVehicleActions(p_DeltaTime, true) -- don't exit vehicle on low health? diff --git a/ext/Server/BotStates/StateInVehicleStationaryAAControl.lua b/ext/Server/BotStates/StateInVehicleStationaryAAControl.lua index 2d58388d..522cdecb 100644 --- a/ext/Server/BotStates/StateInVehicleStationaryAAControl.lua +++ b/ext/Server/BotStates/StateInVehicleStationaryAAControl.lua @@ -30,10 +30,6 @@ function StateInVehicleStationaryAAControl:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Idle) return end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end local s_IsAttacking = p_Bot._ShootPlayer ~= nil -- update state-timer @@ -60,11 +56,6 @@ end ---@param p_DeltaTime number function StateInVehicleStationaryAAControl:UpdateFast(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) return end @@ -101,28 +92,13 @@ end ---update in every frame ---@param p_Bot Bot function StateInVehicleStationaryAAControl:UpdateVeryFast(p_Bot) - if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end + end ---slow update-function ---@param p_Bot Bot ---@param p_DeltaTime number function StateInVehicleStationaryAAControl:UpdateSlow(p_Bot, p_DeltaTime) - if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end p_Bot:_DoExitVehicle() end diff --git a/ext/Server/BotStates/StateOnVehicleAttacking.lua b/ext/Server/BotStates/StateOnVehicleAttacking.lua index a03d1046..bfa092b5 100644 --- a/ext/Server/BotStates/StateOnVehicleAttacking.lua +++ b/ext/Server/BotStates/StateOnVehicleAttacking.lua @@ -30,15 +30,10 @@ function StateOnVehicleAttacking:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Idle) return end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end if p_Bot._ShootPlayer == nil then p_Bot:SetState(g_BotStates.States.OnVehicleIdle) return end - -- update state-timer p_Bot.m_StateTimer = p_Bot.m_StateTimer + p_DeltaTime @@ -54,28 +49,12 @@ end ---@param p_Bot Bot ---@param p_DeltaTime number function StateOnVehicleAttacking:UpdateFast(p_Bot, p_DeltaTime) - if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end m_BotAiming:UpdateAiming(p_Bot) end ---update in every frame ---@param p_Bot Bot function StateOnVehicleAttacking:UpdateVeryFast(p_Bot) - if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end -- Update yaw of soldier every tick. m_BotMovement:UpdateYaw(p_Bot) end @@ -85,11 +64,6 @@ end ---@param p_DeltaTime number function StateOnVehicleAttacking:UpdateSlow(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) return end p_Bot:_SetActiveVarsSlow() diff --git a/ext/Server/BotStates/StateOnVehicleIdle.lua b/ext/Server/BotStates/StateOnVehicleIdle.lua index 20b27e20..c7e4eda3 100644 --- a/ext/Server/BotStates/StateOnVehicleIdle.lua +++ b/ext/Server/BotStates/StateOnVehicleIdle.lua @@ -28,10 +28,6 @@ function StateOnVehicleIdle:Update(p_Bot, p_DeltaTime) p_Bot:SetState(g_BotStates.States.Idle) return end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end -- update state-timer p_Bot.m_StateTimer = p_Bot.m_StateTimer + p_DeltaTime @@ -51,14 +47,6 @@ end ---@param p_Bot Bot ---@param p_DeltaTime number function StateOnVehicleIdle:UpdateFast(p_Bot, p_DeltaTime) - if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end -- trasition to attack if p_Bot._ShootPlayer ~= nil then p_Bot:SetState(g_BotStates.States.OnVehicleAttacking) @@ -68,14 +56,6 @@ end ---update in every frame ---@param p_Bot Bot function StateOnVehicleIdle:UpdateVeryFast(p_Bot) - if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) - return - end -- Update yaw of soldier every tick. m_BotMovement:UpdateYaw(p_Bot) end @@ -85,11 +65,6 @@ end ---@param p_DeltaTime number function StateOnVehicleIdle:UpdateSlow(p_Bot, p_DeltaTime) if p_Bot.m_Player.soldier == nil then - p_Bot:SetState(g_BotStates.States.Idle) - return - end - if p_Bot.m_Player.controlledControllable == nil and p_Bot.m_Player.attachedControllable == nil then - p_Bot:SetState(g_BotStates.States.Moving) return end p_Bot:_CheckForVehicleActions(p_DeltaTime, false) From 65783d260a9fb8c27b8c3d624f3af69f9425672f Mon Sep 17 00:00:00 2001 From: MatiasPastori Date: Sun, 5 Oct 2025 16:10:42 -0300 Subject: [PATCH 06/10] Bot state fixes, Revert the VehicleMoveWhileShooting, it as ok as it was, my bad. Removed the crossbow as default for the custom weapon sets for recon... it was really annoying to try to test stuff with the recon tending to use that a lot... each user particularly can re-enable them later. Added missing FirstPassengerSeat definition for some vehicles that I think needed it, mainly vehicles with usable guns for their 2nd and 3rd seats. --- ext/Server/Bot.lua | 226 +++++++++--------- .../BotStates/StateInVehicleAttacking.lua | 4 +- ext/Shared/Constants/VehicleData.lua | 6 + .../WeaponLists/CustomWeaponsReconRu.lua | 2 +- .../WeaponLists/CustomWeaponsReconUs.lua | 2 +- 5 files changed, 123 insertions(+), 117 deletions(-) diff --git a/ext/Server/Bot.lua b/ext/Server/Bot.lua index 342348de..811a89c1 100644 --- a/ext/Server/Bot.lua +++ b/ext/Server/Bot.lua @@ -17,186 +17,186 @@ local m_Logger = Logger('Bot', Debug.Server.BOT) function Bot:__init(p_Player) -- Player Object. ---@type Player - self.m_Player = p_Player + self.m_Player = p_Player ---@type string - self.m_Name = p_Player.name + self.m_Name = p_Player.name ---@type integer - self.m_Id = p_Player.id + self.m_Id = p_Player.id -- statemachine-part - self.m_ActiveState = g_BotStates.States.Idle - self.m_StateTimer = 0.0 + self.m_ActiveState = g_BotStates.States.Idle + self.m_StateTimer = 0.0 -- create some character proporties ---@type BotBehavior - self.m_Behavior = nil - self.m_Reaction = 0.0 - self.m_Accuracy = 0.0 - self.m_Skill = 0.0 - self.m_PrefWeapon = "" - self.m_PrefVehicle = "" + self.m_Behavior = nil + self.m_Reaction = 0.0 + self.m_Accuracy = 0.0 + self.m_Skill = 0.0 + self.m_PrefWeapon = "" + self.m_PrefVehicle = "" - self._AttackPosition = Vec3.zero + self._AttackPosition = Vec3.zero -- Common settings. ---@type BotSpawnModes - self._SpawnMode = BotSpawnModes.NoRespawn + self._SpawnMode = BotSpawnModes.NoRespawn ---@type BotMoveModes - self._MoveMode = BotMoveModes.Standstill - self._ForcedMovement = false + self._MoveMode = BotMoveModes.Standstill + self._ForcedMovement = false ---@type BotKits|integer - self.m_Kit = nil + self.m_Kit = nil -- Only used in BotSpawner. ---@type BotColors|integer - self.m_Color = nil + self.m_Color = nil ---@type Weapon|nil - self.m_ActiveWeapon = nil - self.m_ActiveVehicle = nil - self.m_ActiveGmWeaponName = nil + self.m_ActiveWeapon = nil + self.m_ActiveVehicle = nil + self.m_ActiveGmWeaponName = nil ---@type Weapon|nil - self.m_Primary = nil + self.m_Primary = nil ---@type Weapon|nil - self.m_Pistol = nil + self.m_Pistol = nil ---@type Weapon|nil - self.m_PrimaryGadget = nil + self.m_PrimaryGadget = nil ---@type Weapon|nil - self.m_SecondaryGadget = nil + self.m_SecondaryGadget = nil ---@type Weapon|nil - self.m_Grenade = nil + self.m_Grenade = nil ---@type Weapon|nil - self.m_Knife = nil - self._Respawning = false - self.m_HasBeacon = false - self.m_DontRevive = false - self.m_AttackPriority = 1 + self.m_Knife = nil + self._Respawning = false + self.m_HasBeacon = false + self.m_DontRevive = false + self.m_AttackPriority = 1 -- Timers. - self._SpawnDelayTimer = 0.0 - self._WayWaitTimer = 0.0 - self._VehicleWaitTimer = 0.0 - self._VehicleSeatTimer = 0.0 - self._VehicleTakeoffTimer = 0.0 - self._WayWaitYawTimer = 0.0 - self._ObstacleSequenceTimer = 0.0 - self._StuckTimer = 0.0 - self._ShotTimer = 0.0 - self._SoundTimer = 30.0 - self._VehicleSecondaryWeaponTimer = 0.0 - self._ShootModeTimer = 0.0 - self._ReloadTimer = 0.0 - self._DeployTimer = 0.0 - self._AttackModeMoveTimer = 0.0 - self._MeleeCooldownTimer = 0.0 - self._ShootTraceTimer = 0.0 - self._ActionTimer = 0.0 - self._BrakeTimer = 0.0 - self._SpawnProtectionTimer = 0.0 - self._DefendTimer = 0.0 - self._SidewardsTimer = 0.0 - self._KillYourselfTimer = 0.0 - self._RocketCooldownTimer = 0.0 + self._SpawnDelayTimer = 0.0 + self._WayWaitTimer = 0.0 + self._VehicleWaitTimer = 0.0 + self._VehicleSeatTimer = 0.0 + self._VehicleTakeoffTimer = 0.0 + self._WayWaitYawTimer = 0.0 + self._ObstacleSequenceTimer = 0.0 + self._StuckTimer = 0.0 + self._ShotTimer = 0.0 + self._SoundTimer = 30.0 + self._VehicleSecondaryWeaponTimer = 0.0 + self._ShootModeTimer = 0.0 + self._ReloadTimer = 0.0 + self._DeployTimer = 0.0 + self._AttackModeMoveTimer = 0.0 + self._MeleeCooldownTimer = 0.0 + self._ShootTraceTimer = 0.0 + self._ActionTimer = 0.0 + self._BrakeTimer = 0.0 + self._SpawnProtectionTimer = 0.0 + self._DefendTimer = 0.0 + self._SidewardsTimer = 0.0 + self._KillYourselfTimer = 0.0 + self._RocketCooldownTimer = 0.0 -- Shared movement vars. ---@type BotMoveModes - self.m_ActiveMoveMode = BotMoveModes.Standstill + self.m_ActiveMoveMode = BotMoveModes.Standstill ---@type BotMoveSpeeds - self.m_ActiveSpeedValue = BotMoveSpeeds.NoMovement - self.m_KnifeMode = false + self.m_ActiveSpeedValue = BotMoveSpeeds.NoMovement + self.m_KnifeMode = false ---@class ActiveInput ---@field value number ---@field reset boolean ---@type table - self.m_ActiveInputs = {} - self.m_DelayedInputs = {} + self.m_ActiveInputs = {} + self.m_DelayedInputs = {} -- Sidewards movement. - self.m_YawOffset = 0.0 - self.m_StrafeValue = 0.0 + self.m_YawOffset = 0.0 + self.m_StrafeValue = 0.0 -- Advanced movement. ---@type BotAttackModes - self._AttackMode = BotAttackModes.RandomNotSet + self._AttackMode = BotAttackModes.RandomNotSet ---@type BotActionFlags - self._ActiveAction = BotActionFlags.NoActionActive + self._ActiveAction = BotActionFlags.NoActionActive ---@type Waypoint|nil - self._CurrentWayPoint = nil - self._TargetYaw = 0.0 - self._TargetYawMovementVehicle = 0.0 - self._TargetPitch = 0.0 + self._CurrentWayPoint = nil + self._TargetYaw = 0.0 + self._TargetYawMovementVehicle = 0.0 + self._TargetPitch = 0.0 ---@type Waypoint|nil - self._TargetPoint = nil + self._TargetPoint = nil ---@type Waypoint|nil - self._NextTargetPoint = nil - self._PathIndex = 0 - self._LastWayDistance = 0.0 - self._InvertPathDirection = false - self._ExitVehicleActive = false - self._ObstacleRetryCounter = 0 - self._Objective = '' - self._ObjectiveMode = BotObjectiveModes.Default - self._OnSwitch = false - self._ActiveDelay = 0.0 - self._VehicleMoveWhileShooting = false + self._NextTargetPoint = nil + self._PathIndex = 0 + self._LastWayDistance = 0.0 + self._InvertPathDirection = false + self._ExitVehicleActive = false + self._ObstacleRetryCounter = 0 + self._Objective = '' + self._ObjectiveMode = BotObjectiveModes.Default + self._OnSwitch = false + self._ActiveDelay = 0.0 + self._VehicleMoveWhileShooting = false self._OnFootStopMovingWhenAttacking = false - self._FireCycleModifier = 1.0 + self._FireCycleModifier = 1.0 -- Vehicle stuff. ---@type integer|nil - self._VehicleMovableId = -1 - self._LastVehicleYaw = 0.0 - self._VehicleReadyToShoot = false - self._FullVehicleSteering = false - self._VehicleDirBackPositive = false - self._JetAbortAttackActive = false - self._JetTakeoffActive = false - self._ExitVehicleHealth = 0.0 - self._LastVehicleHealth = 0.0 - self._VehicleWeaponSlotToUse = 1 - self._ActiveVehicleWeaponSlot = 0 + self._VehicleMovableId = -1 + self._LastVehicleYaw = 0.0 + self._VehicleReadyToShoot = false + self._FullVehicleSteering = false + self._VehicleDirBackPositive = false + self._JetAbortAttackActive = false + self._JetTakeoffActive = false + self._ExitVehicleHealth = 0.0 + self._LastVehicleHealth = 0.0 + self._VehicleWeaponSlotToUse = 1 + self._ActiveVehicleWeaponSlot = 0 ---@type ControllableEntity|nil - self._RepairVehicleEntity = nil + self._RepairVehicleEntity = nil -- PID Controllers. -- Normal driving. ---@type PidController - self._Pid_Drv_Yaw = PidController(5, 0.05, 0.2, 1.0) + self._Pid_Drv_Yaw = PidController(5, 0.05, 0.2, 1.0) -- Chopper / Plane ---@type PidController - self._Pid_Drv_Throttle = PidController(3, 0.05, 0.2, 1.0) + self._Pid_Drv_Throttle = PidController(3, 0.05, 0.2, 1.0) ---@type PidController - self._Pid_Drv_Tilt = PidController(6, 0.1, 0.2, 1.0) + self._Pid_Drv_Tilt = PidController(6, 0.1, 0.2, 1.0) ---@type PidController - self._Pid_Drv_Roll = PidController(6, 0.1, 0.2, 1.0) + self._Pid_Drv_Roll = PidController(6, 0.1, 0.2, 1.0) -- Guns. ---@type PidController - self._Pid_Att_Yaw = PidController(10, 2.0, 2.0, 1.0) + self._Pid_Att_Yaw = PidController(10, 2.0, 2.0, 1.0) ---@type PidController - self._Pid_Att_Pitch = PidController(10, 2.0, 2.0, 1.0) + self._Pid_Att_Pitch = PidController(10, 2.0, 2.0, 1.0) -- Shooting. - self._Shoot = false + self._Shoot = false ---@type Player|nil - self._ShootPlayer = nil - self._ActiveShootDuration = 0.0 - self._DoneShootDuration = 0.0 - self._DontAttackPlayers = false + self._ShootPlayer = nil + self._ActiveShootDuration = 0.0 + self._DoneShootDuration = 0.0 + self._DontAttackPlayers = false ---@type VehicleTypes - self._ShootPlayerVehicleType = VehicleTypes.NoVehicle - self._ShootPlayerName = '' - self._DistanceToPlayer = 0.0 + self._ShootPlayerVehicleType = VehicleTypes.NoVehicle + self._ShootPlayerName = '' + self._DistanceToPlayer = 0.0 ---@type BotWeapons - self._WeaponToUse = BotWeapons.Primary + self._WeaponToUse = BotWeapons.Primary -- To-do: add emmylua type. - self._ShootWayPoints = {} + self._ShootWayPoints = {} ---@type Vec3[] - self._KnifeWayPositions = {} - self._Accuracy = 0.0 - self._AccuracySniper = 0.0 - self._SkillFound = false + self._KnifeWayPositions = {} + self._Accuracy = 0.0 + self._AccuracySniper = 0.0 + self._SkillFound = false ---@type Player|nil - self._TargetPlayer = nil + self._TargetPlayer = nil end ---@param p_State any diff --git a/ext/Server/BotStates/StateInVehicleAttacking.lua b/ext/Server/BotStates/StateInVehicleAttacking.lua index 1e9064d8..b815f235 100644 --- a/ext/Server/BotStates/StateInVehicleAttacking.lua +++ b/ext/Server/BotStates/StateInVehicleAttacking.lua @@ -43,9 +43,9 @@ function StateInVehicleAttacking:Update(p_Bot, p_DeltaTime) if p_Bot.m_StateTimer == 0.0 or p_Bot.m_StateTimer > 5.0 then p_Bot.m_StateTimer = 0.0 if m_Utilities:CheckProbablity(Registry.VEHICLES.PROBABILITY_VEHICLE_STOP_TO_SHOOT) then - p_Bot._VehicleMoveWhileShooting = true - else p_Bot._VehicleMoveWhileShooting = false + else + p_Bot._VehicleMoveWhileShooting = true end end else diff --git a/ext/Shared/Constants/VehicleData.lua b/ext/Shared/Constants/VehicleData.lua index b5353e54..bdc8523c 100644 --- a/ext/Shared/Constants/VehicleData.lua +++ b/ext/Shared/Constants/VehicleData.lua @@ -258,6 +258,7 @@ VehicleData = { Parts = { -1, 19, -1, -1 }, Speed = { 300, 610, 300, 300 }, Drop = { 0.0, 9.81, 0.0, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(0.252, -0.098, 0.450), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["Humvee"] = { @@ -267,6 +268,7 @@ VehicleData = { Parts = { -1, 19, -1, -1 }, Speed = { 300, 610, 300, 300 }, Drop = { 0.0, 9.81, 0.0, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(0.252, -0.098, 0.450), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["HumveeArmored_hmg"] = { @@ -276,6 +278,7 @@ VehicleData = { Parts = { -1, 19, -1, -1 }, Speed = { 300, 610, 300, 300 }, Drop = { 0.0, 9.81, 0.0, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(0.252, -0.098, 0.450), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["GAZ-3937_Vodnik"] = { @@ -285,6 +288,7 @@ VehicleData = { Parts = { -1, 23, -1, -1 }, Speed = { 300, 600, 300, 300 }, Drop = { 0.0, 9.81, 0.0, 0.0 }, + FirstPassengerSeat = 3, Offset = { Vec3(0, 0, 0), Vec3(0.574, -0.196, 0.302), Vec3(0, 0, 0), Vec3(0, 0, 0) } }, ["VodnikModified_V2"] = { @@ -294,6 +298,7 @@ VehicleData = { Parts = { -1, 6, 16 }, Speed = { 300, 80, 600 }, Drop = { 0.0, 7.0, 9.81 }, + FirstPassengerSeat = 4, Offset = { Vec3(0, 0, 0), Vec3(-0.003, 0.243, -0.492), Vec3(0.0, 0.272, -0.708) } }, ["HumveeModified"] = { @@ -303,6 +308,7 @@ VehicleData = { Parts = { -1, 1, 18 }, Speed = { 300, 600, 80 }, Drop = { 0.0, 15, 7.0 }, + FirstPassengerSeat = 4, Offset = { Vec3(0, 0, 0), Vec3(-0.076, 0.285, -0.933), Vec3(-0.003, 0.243, -0.581) } }, diff --git a/ext/Shared/WeaponLists/CustomWeaponsReconRu.lua b/ext/Shared/WeaponLists/CustomWeaponsReconRu.lua index b59a6ccf..9f324bfe 100644 --- a/ext/Shared/WeaponLists/CustomWeaponsReconRu.lua +++ b/ext/Shared/WeaponLists/CustomWeaponsReconRu.lua @@ -30,7 +30,7 @@ CustomWeaponsReconRu = { -- 'UMP45', -- US -- 'MP5K', -- US -- 'MagpulPDR', -- US - 'Crossbow', -- Both + -- 'Crossbow', -- Both -- Pistols -- 'Glock17', -- US diff --git a/ext/Shared/WeaponLists/CustomWeaponsReconUs.lua b/ext/Shared/WeaponLists/CustomWeaponsReconUs.lua index 3e297438..7263dc74 100644 --- a/ext/Shared/WeaponLists/CustomWeaponsReconUs.lua +++ b/ext/Shared/WeaponLists/CustomWeaponsReconUs.lua @@ -30,7 +30,7 @@ CustomWeaponsReconUs = { -- 'UMP45', -- US -- 'MP5K', -- US -- 'MagpulPDR', -- US - 'Crossbow', -- Both + -- 'Crossbow', -- Both -- Pistols -- 'Glock17', -- US From d9da5e493a722da2ae38bb9bc0163fd1cf55a436 Mon Sep 17 00:00:00 2001 From: MatiasPastori Date: Sun, 5 Oct 2025 16:15:41 -0300 Subject: [PATCH 07/10] A lot of map updates but only some of them are actually significant. Most of them are just product of exporting the traces, and apparently the fun-bots-helper simply rewrote or reordered some lists, nothingm else. However: MP_001 : fixed its vehicle paths., fixed a single lonely node in the middle of C and RU Base. some XP4 maps now have simple vehicle paths in Conquest Large such as Markaz Monolith and Azadi Palace. --- mapfiles/MP_001_ConquestLarge0.map | 102 +- mapfiles/MP_001_RushLarge0.map | 16 +- mapfiles/MP_007_ConquestLarge0.map | 6 +- mapfiles/MP_007_ConquestSmall0.map | 4 +- mapfiles/MP_007_RushLarge0.map | 4 +- mapfiles/MP_011_ConquestLarge0.map | 6 +- mapfiles/MP_011_RushLarge0.map | 2 +- mapfiles/MP_012_ConquestLarge0.map | 14 +- mapfiles/MP_012_ConquestSmall0.map | 2 +- mapfiles/MP_012_RushLarge0.map | 26 +- mapfiles/MP_013_ConquestLarge0.map | 24 +- mapfiles/MP_013_RushLarge0.map | 4 +- mapfiles/MP_017_ConquestLarge0.map | 12 +- mapfiles/MP_017_RushLarge0.map | 10 +- mapfiles/MP_018_ConquestLarge0.map | 4 +- mapfiles/MP_018_ConquestSmall0.map | 8 +- mapfiles/MP_018_RushLarge0.map | 2 +- mapfiles/MP_Subway_ConquestLarge0.map | 6 +- mapfiles/MP_Subway_RushLarge0.map | 8 +- mapfiles/XP1_001_ConquestAssaultSmall0.map | 6 +- mapfiles/XP1_001_ConquestAssaultSmall1.map | 6 +- mapfiles/XP1_002_ConquestSmall0.map | 2 +- mapfiles/XP1_003_ConquestAssaultLarge0.map | 2 +- mapfiles/XP1_003_ConquestAssaultSmall0.map | 16 +- mapfiles/XP1_003_RushLarge0.map | 8 +- mapfiles/XP1_004_RushLarge0.map | 6 +- mapfiles/XP3_Alborz_ConquestSmall0.map | 2 +- mapfiles/XP3_Alborz_RushLarge0.map | 2 +- mapfiles/XP3_Desert_ConquestLarge0.map | 10 +- mapfiles/XP3_Desert_RushLarge0.map | 8 +- mapfiles/XP3_Valley_ConquestLarge0.map | 12 +- mapfiles/XP3_Valley_RushLarge0.map | 10 +- mapfiles/XP4_FD_ConquestSmall0.map | 2 +- mapfiles/XP4_FD_RushLarge0.map | 10 +- mapfiles/XP4_Parl_ConquestLarge0.map | 1338 +++++++++++++++++++- mapfiles/XP4_Parl_RushLarge0.map | 14 +- mapfiles/XP4_Quake_ConquestLarge0.map | 5 +- mapfiles/XP4_Rubble_RushLarge0.map | 12 +- mapfiles/XP5_001_ConquestLarge0.map | 6 +- mapfiles/XP5_001_ConquestSmall0.map | 4 +- mapfiles/XP5_001_RushLarge0.map | 10 +- mapfiles/XP5_002_ConquestSmall0.map | 2 +- mapfiles/XP5_002_RushLarge0.map | 2 +- mapfiles/XP5_003_ConquestLarge0.map | 12 +- mapfiles/XP5_003_ConquestSmall0.map | 2 +- mapfiles/XP5_004_RushLarge0.map | 2 +- 46 files changed, 1554 insertions(+), 217 deletions(-) diff --git a/mapfiles/MP_001_ConquestLarge0.map b/mapfiles/MP_001_ConquestLarge0.map index 6d1cd295..b35dafa9 100644 --- a/mapfiles/MP_001_ConquestLarge0.map +++ b/mapfiles/MP_001_ConquestLarge0.map @@ -1,5 +1,5 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data -0;0;0.000000;0.000000;0.000000;0;{"Authors":["Beschutzer"],"CompIndex":1,"Date":"2025-03-17 22:30:15"} +0;0;0.000000;0.000000;0.000000;0;{"Authors":["Beschutzer"],"CompIndex":1,"Date":"2025-10-04 12:20:50"} 1;1;-46.278130;77.693024;5.952172;3;{"Objectives":["b"]} 1;2;-46.416534;77.702103;7.446137;3; 1;3;-47.492302;77.857811;8.447735;3; @@ -2207,7 +2207,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 15;100;3.159598;73.845505;-74.351410;3; 15;101;2.622530;73.845505;-75.712860;3; 15;102;3.045636;73.845505;-76.886673;3; -16;1;7.664062;73.845505;-58.682617;65283;{"LinkMode":0,"Links":[[15,82]],"Objectives":["b","e","d"]} +16;1;7.664062;73.845505;-58.682617;65283;{"LinkMode":0,"Links":[[15,82]],"Objectives":["b","d","e"]} 16;2;7.225461;73.845505;-57.918865;3; 16;3;6.448646;73.845505;-56.463562;3;{"LinkMode":0,"Links":[[15,76]]} 16;4;5.264587;73.845505;-54.384991;4;{"LinkMode":0,"Links":[[15,2]]} @@ -2522,7 +2522,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 19;2;81.027634;73.844879;144.151855;3; 19;3;81.498573;73.844879;143.354202;3;{"LinkMode":0,"Links":[[11,159]]} 19;4;81.823891;73.844879;142.433578;3;{"Action":{"inputs":[35],"pitch":-0.60356080532074,"time":0.5,"type":"vehicle","yaw":2.7127356529236}} -20;1;-21.356062;73.904015;98.496193;3;{"Objectives":["a","b","c","d","e","base us"],"Vehicles":["land"]} +20;1;-21.356062;73.904015;98.496193;3;{"Objectives":["a","b","base ru","base us","c","d","e"],"Vehicles":["land"]} 20;2;-22.662441;73.908798;98.455544;3; 20;3;-24.283939;73.885582;98.474731;3; 20;4;-26.503101;73.894485;98.506065;3; @@ -2585,13 +2585,13 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 20;61;-143.003540;74.987762;-24.616426;4; 20;62;-143.253342;74.955910;-29.319592;4; 20;63;-143.512985;74.962196;-34.065468;4; -20;64;-143.772171;74.966339;-38.897125;4; +20;64;-143.772171;74.966339;-38.897125;4;{"LinkMode":0,"Links":[[27,47]]} 20;65;-144.024612;74.969505;-43.730095;4;{"LinkMode":0,"Links":[[32,42]]} 20;66;-144.278687;74.930489;-48.582020;4; 20;67;-144.534409;74.754120;-53.435085;3; 20;68;-144.777969;74.405388;-58.097885;2; 20;69;-144.978195;74.135994;-61.945202;2; -20;70;-145.125687;73.999985;-65.578896;3; +20;70;-145.125687;73.999985;-65.578896;3;{"LinkMode":0,"Links":[[27,1]]} 20;71;-143.936676;73.894562;-73.123878;2; 20;72;-142.420471;73.877373;-76.083900;3; 20;73;-140.149994;73.903908;-78.822411;3; @@ -2685,7 +2685,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 20;161;-11.944221;73.905418;98.227310;2; 20;162;-12.532405;73.903763;98.152863;2; 20;163;-12.883000;73.904427;98.108589;2; -21;1;75.317719;74.064392;150.354462;65283;{"Objectives":["base us"],"Vehicles":["land"]} +21;1;75.317719;74.064392;150.354462;65283;{"Objectives":{},"Vehicles":["land"]} 21;2;74.759209;74.070587;149.917770;3; 21;3;73.925369;74.063766;149.293945;3; 21;4;72.719551;74.038155;148.352371;3; @@ -2873,40 +2873,53 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 26;19;-164.588013;74.707260;-60.036911;3; 26;20;-163.924637;74.707260;-60.027813;3; 26;21;-163.471024;74.707260;-60.440346;3; -27;1;-159.562988;74.009987;-153.385513;65283;{"Objectives":["base ru"],"Vehicles":["land"]} -27;2;-159.274170;74.016365;-153.253250;3; -27;3;-158.622955;74.026550;-153.131668;3; -27;4;-157.665100;74.036270;-153.106430;3; -27;5;-156.446304;74.017014;-152.960800;3; -27;6;-155.109055;74.037056;-152.544983;3; -27;7;-153.643234;74.041512;-151.965897;2; -27;8;-152.245972;73.996048;-151.220215;3; -27;9;-150.859543;73.929276;-150.245224;2; -27;10;-149.728729;73.903320;-149.292587;2; -27;11;-148.824982;73.879341;-148.262131;3; -27;12;-148.179733;73.849365;-146.882736;3; -27;13;-147.530182;73.855873;-145.252213;3; -27;14;-146.983292;73.855461;-143.369553;3; -27;15;-146.417786;73.854454;-141.258499;3; -27;16;-145.884827;73.853882;-138.925171;3; -27;17;-145.430511;73.852859;-136.403000;3; -27;18;-144.938049;73.855530;-133.637207;3; -27;19;-144.407364;73.851730;-130.670044;3; -27;20;-143.961121;73.850319;-127.547981;3; -27;21;-143.926239;73.848167;-124.406570;3; -27;22;-144.323257;73.916122;-121.345047;3; -27;23;-145.050873;73.854271;-118.360329;3; -27;24;-145.841568;73.855827;-115.280182;3; -27;25;-146.625153;73.866066;-112.175125;3; -27;26;-147.416428;73.834419;-109.040771;3; -27;27;-148.221741;73.855293;-105.854782;3; -27;28;-150.008102;73.850655;-102.545959;3; -27;29;-151.399429;74.022583;-98.845795;3; -27;30;-151.366974;74.031738;-95.689392;3; -27;31;-151.229721;74.025650;-92.634193;2; -27;32;-151.548584;73.889030;-90.625580;2; -27;33;-150.628571;73.874603;-87.279900;2; -27;34;-148.259537;73.881340;-83.275368;2; +27;1;-159.557770;74.008614;-153.435364;65283;{"Vehicles":["land"]} +27;2;-159.030151;74.033127;-153.060120;3; +27;3;-158.226318;74.026749;-152.538071;3; +27;4;-157.322906;74.025528;-152.118683;2; +27;5;-156.553909;74.041855;-151.789703;3; +27;6;-155.461655;74.046661;-151.320877;3; +27;7;-154.108688;74.033058;-150.702621;3; +27;8;-152.656494;74.033142;-149.831863;3; +27;9;-151.276428;73.984383;-148.628510;3; +27;10;-149.939835;73.885361;-147.328857;2; +27;11;-148.773575;73.866211;-146.004150;3; +27;12;-147.921356;73.864235;-144.363297;3; +27;13;-147.381393;73.846199;-142.445679;3; +27;14;-147.055878;73.854721;-140.319260;3; +27;15;-146.673416;73.857895;-137.998810;3; +27;16;-146.223206;73.850525;-135.489578;3; +27;17;-145.725388;73.855743;-132.727737;3; +27;18;-145.191360;73.852768;-129.760925;3; +27;19;-144.642014;73.849831;-126.688698;2; +27;20;-144.162979;73.838623;-124.004517;3; +27;21;-143.849426;73.925812;-121.310341;2; +27;22;-143.857025;73.858711;-118.834663;2; +27;23;-144.088776;73.851524;-116.536751;3; +27;24;-144.835754;73.879242;-114.442154;3; +27;25;-145.708786;73.833244;-112.285080;3; +27;26;-146.669510;73.862450;-109.908333;3; +27;27;-147.667526;73.856071;-107.348007;3; +27;28;-148.474869;73.844254;-104.616318;3; +27;29;-148.927399;73.855606;-101.733551;3; +27;30;-149.303131;73.852592;-98.720703;2; +27;31;-149.575623;73.838890;-95.854073;3; +27;32;-149.756958;73.858337;-92.907669;3; +27;33;-149.895844;73.948151;-89.876930;2; +27;34;-149.663834;73.833923;-87.107780;2; +27;35;-149.429596;73.862915;-84.809967;3; +27;36;-149.190720;73.869865;-82.628365;3; +27;37;-148.985291;73.838493;-80.310165;3; +27;38;-148.894745;73.857849;-77.789070;3; +27;39;-148.851166;73.857635;-75.068115;3; +27;40;-148.804794;73.848259;-72.144791;3; +27;41;-148.754669;73.856941;-69.032867;3; +27;42;-148.702667;73.931793;-65.788834;3; +27;43;-148.607910;74.075661;-62.578617;2; +27;44;-148.452347;74.166695;-59.868759;2; +27;45;-148.248901;74.352921;-57.730206;2; +27;46;-148.107864;74.450279;-56.551979;2; +27;47;-148.043076;74.503029;-56.014973;2;{"LinkMode":0,"Links":[[20,64]]} 28;1;63.810108;73.844772;113.736153;65283;{"LinkMode":0,"Links":[[12,50],[11,145]],"Objectives":["base us","e"]} 28;2;63.904129;73.844772;112.493889;4; 28;3;64.168167;73.844772;110.645363;4; @@ -3057,7 +3070,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 29;25;-116.295967;73.847374;-117.514542;3; 29;26;-115.581757;73.850960;-117.036423;3; 29;27;-115.292297;73.853531;-116.657623;3;{"LinkMode":0,"Links":[[9,49],[24,1]]} -30;1;82.760925;73.904007;140.648041;65283;{"Objectives":["base us"],"Vehicles":["land"]} +30;1;82.760925;73.904007;140.648041;65283;{"Objectives":{},"Vehicles":["land"]} 30;2;81.929222;73.907707;140.657425;3; 30;3;80.506454;73.884445;140.740189;3; 30;4;78.486298;73.893883;140.800095;3; @@ -3106,7 +3119,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 31;5;-129.868011;73.856995;-171.005875;4; 31;6;-131.380768;73.938911;-171.024765;4; 31;7;-133.010986;74.072182;-171.091980;3;{"Action":{"inputs":[35],"pitch":-0.22935335338116,"time":0.5,"type":"vehicle","yaw":0.88370251655579}} -32;1;-134.823166;74.266846;-171.613297;65283;{"Objectives":["base us"],"Vehicles":["land"]} +32;1;-134.823166;74.266846;-171.613297;65283;{"Objectives":{},"Vehicles":["land"]} 32;2;-135.037216;74.274010;-171.324661;3; 32;3;-135.481659;74.280235;-171.029892;3; 32;4;-136.108749;74.215698;-170.407486;3; @@ -3213,7 +3226,6 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 33;63;-101.113426;74.034302;-76.343658;4; 33;64;-99.394791;74.034302;-76.120209;4; 33;65;-97.977936;74.034302;-75.965965;3;{"LinkMode":0,"Links":[[9,101]]} -34;1;-148.547134;73.921989;-68.926071;2; 35;1;41.672874;74.424644;37.485695;65283;{"LinkMode":0,"Links":[[28,57],[41,59]],"Objectives":["base us","e"]} 35;2;40.938366;74.155106;36.105927;4; 35;3;39.911961;74.293648;34.292450;4; @@ -4152,7 +4164,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 52;2;-109.582047;73.855614;-80.205963;3; 52;3;-108.979591;73.844879;-79.348160;3; 52;4;-108.616722;73.937042;-79.024452;3;{"Action":{"inputs":[35],"pitch":-0.61934703588486,"time":0.5,"type":"vehicle","yaw":5.0673422813416}} -53;1;-108.039261;74.102783;-77.397903;3;{"Objectives":["c"],"Vehicles":["land"]} +53;1;-108.039261;74.102783;-77.397903;3;{"Objectives":{},"Vehicles":["land"]} 53;2;-107.300797;74.045540;-77.719955;3; 53;3;-106.445168;74.057716;-78.025162;3; 53;4;-105.235519;73.962173;-78.389923;3; @@ -4164,7 +4176,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 53;10;-94.474701;73.891167;-82.393311;1; 53;11;-93.599014;74.005310;-82.703308;2; 53;12;-93.144058;73.993698;-82.877190;2;{"LinkMode":0,"Links":[[20,86]]} -54;1;-35.936726;73.971275;93.597420;3;{"Objectives":["a"],"Vehicles":["land"]} +54;1;-35.936726;73.971275;93.597420;3;{"Objectives":{},"Vehicles":["land"]} 54;2;-36.694443;73.970818;94.083359;3; 54;3;-37.594616;73.934685;94.666153;3; 54;4;-39.008652;73.897202;95.378250;3; diff --git a/mapfiles/MP_001_RushLarge0.map b/mapfiles/MP_001_RushLarge0.map index 4a4af144..3909397f 100644 --- a/mapfiles/MP_001_RushLarge0.map +++ b/mapfiles/MP_001_RushLarge0.map @@ -785,7 +785,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 25;31;-91.359627;74.965904;-53.337044;3; 25;32;-91.520523;74.966927;-52.342609;3; 25;33;-91.760788;74.990982;-51.800255;3;{"LinkMode":0,"Links":[[23,74]]} -26;1;-111.967545;77.299599;37.158794;3;{"LinkMode":0,"Links":[[5,61]],"Objectives":["mcom 3","mcom 4","mcom 2"]} +26;1;-111.967545;77.299599;37.158794;3;{"LinkMode":0,"Links":[[5,61]],"Objectives":["mcom 2","mcom 3","mcom 4"]} 26;2;-111.959755;77.298935;37.622940;19; 26;3;-111.434219;77.314529;38.537361;3;{"LinkMode":0,"Links":[[5,57]]} 26;4;-110.547150;77.326691;39.071095;3; @@ -858,7 +858,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 26;71;-62.344601;75.063644;-35.067593;4; 26;72;-61.713936;75.063644;-36.821922;3; 26;73;-61.332363;75.063644;-37.642036;3;{"LinkMode":0,"Links":[[23,4]]} -27;1;-148.319489;76.493179;30.836988;3;{"LinkMode":0,"Links":[[6,3]],"Objectives":["mcom 3","mcom 4","mcom 1","mcom 2"]} +27;1;-148.319489;76.493179;30.836988;3;{"LinkMode":0,"Links":[[6,3]],"Objectives":["mcom 1","mcom 2","mcom 3","mcom 4"]} 27;2;-147.910812;76.510750;30.462128;20; 27;3;-147.245895;76.584373;28.891825;4;{"LinkMode":0,"Links":[[4,18]]} 27;4;-146.655334;76.652740;27.150002;4;{"LinkMode":0,"Links":[[5,35]]} @@ -949,7 +949,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 28;1;-57.373928;75.051857;44.580166;3;{"Objectives":["base us 2"]} 28;2;-57.874149;75.061966;44.365269;3; 28;3;-58.741314;75.079475;43.992718;3;{"LinkMode":0,"Links":[[29,1]]} -29;1;-60.655495;75.045135;43.188957;3;{"LinkMode":0,"Links":[[28,3]],"Objectives":["base us 1","mcom 4","base us 2"]} +29;1;-60.655495;75.045135;43.188957;3;{"LinkMode":0,"Links":[[28,3]],"Objectives":["base us 1","base us 2","mcom 4"]} 29;2;-61.078213;75.034821;42.965935;19; 29;3;-61.947945;75.032616;42.472477;4; 29;4;-62.387627;75.032616;40.562935;4; @@ -2259,7 +2259,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 63;54;38.606609;74.777061;-56.488308;4; 63;55;37.879234;75.093826;-54.956963;4; 63;56;37.020252;75.064934;-54.102085;3;{"LinkMode":0,"Links":[[87,8]]} -64;1;-86.160370;73.844879;-89.221573;3;{"Objectives":["mcom 5","mcom 6","mcom 3","mcom 4"]} +64;1;-86.160370;73.844879;-89.221573;3;{"Objectives":["mcom 3","mcom 4","mcom 5","mcom 6"]} 64;2;-85.795242;73.844879;-89.607224;19; 64;3;-84.659569;74.004486;-90.344498;4;{"LinkMode":0,"Links":[[22,24]]} 64;4;-83.423080;73.923409;-90.040894;4;{"LinkMode":0,"Links":[[22,45]]} @@ -2309,7 +2309,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 64;48;-15.350801;74.016754;-61.831932;4; 64;49;-13.839664;74.016754;-60.420269;4; 64;50;-13.399363;74.016754;-59.570618;3;{"LinkMode":0,"Links":[[62,47]]} -65;1;-76.380890;75.094894;-54.883720;3;{"LinkMode":0,"Links":[[23,18]],"Objectives":["mcom 5","mcom 6","mcom 4"]} +65;1;-76.380890;75.094894;-54.883720;3;{"LinkMode":0,"Links":[[23,18]],"Objectives":["mcom 4","mcom 5","mcom 6"]} 65;2;-77.002090;75.094894;-54.676052;19;{"LinkMode":0,"Links":[[23,61]]} 65;3;-77.249123;75.197517;-53.924252;3; 65;4;-77.098480;74.963608;-52.881462;4;{"LinkMode":0,"Links":[[23,67]]} @@ -3786,7 +3786,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 99;60;-116.365791;73.854370;-117.009987;4; 99;61;-114.595772;73.856041;-116.192841;4; 99;62;-113.304863;73.857231;-115.593903;3;{"LinkMode":0,"Links":[[22,11]]} -100;1;-151.640091;76.783592;13.194283;3;{"LinkMode":0,"Links":[[66,1]],"Objectives":["mcom 5","mcom 6","base us 3"]} +100;1;-151.640091;76.783592;13.194283;3;{"LinkMode":0,"Links":[[66,1]],"Objectives":["base us 3","mcom 5","mcom 6"]} 100;2;-151.726349;76.775932;12.791492;19; 100;3;-151.584473;76.744240;11.152143;4; 100;4;-150.845306;76.667221;9.353100;4; @@ -3876,7 +3876,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 100;88;-45.573071;73.844879;-80.394653;4; 100;89;-44.104061;73.844879;-79.735291;3; 100;90;-43.718632;73.844879;-79.561752;3;{"LinkMode":0,"Links":[[78,17]]} -101;1;-6.115716;74.023293;-36.000450;3;{"LinkMode":0,"Links":[[62,26]],"Objectives":["mcom 7","mcom 8","mcom 5"]} +101;1;-6.115716;74.023293;-36.000450;3;{"LinkMode":0,"Links":[[62,26]],"Objectives":["mcom 5","mcom 7","mcom 8"]} 101;2;-5.314965;74.023293;-36.333889;19;{"LinkMode":0,"Links":[[62,34]]} 101;3;-4.454225;74.023293;-36.424465;3;{"LinkMode":0,"Links":[[62,59]]} 101;4;-2.529687;74.023293;-36.083836;4;{"LinkMode":0,"Links":[[62,55]]} @@ -3933,7 +3933,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 101;55;-1.382878;74.026512;50.298225;4; 101;56;-1.743234;74.026512;51.797375;3; 101;57;-2.160840;74.026512;52.362537;3;{"LinkMode":0,"Links":[[91,1]]} -102;1;31.768021;74.156708;-54.031044;3;{"LinkMode":0,"Links":[[63,9]],"Objectives":["mcom 7","mcom 8","mcom 6"]} +102;1;31.768021;74.156708;-54.031044;3;{"LinkMode":0,"Links":[[63,9]],"Objectives":["mcom 6","mcom 7","mcom 8"]} 102;2;31.326729;74.170761;-53.456802;19; 102;3;31.363186;74.259178;-51.956734;4;{"LinkMode":0,"Links":[[63,41]]} 102;4;31.424555;74.511177;-50.030190;4;{"LinkMode":0,"Links":[[63,14]]} diff --git a/mapfiles/MP_007_ConquestLarge0.map b/mapfiles/MP_007_ConquestLarge0.map index 2d79773c..fbbe104e 100644 --- a/mapfiles/MP_007_ConquestLarge0.map +++ b/mapfiles/MP_007_ConquestLarge0.map @@ -3647,7 +3647,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 19;47;49.681808;132.002731;228.599701;3; 19;48;49.670517;132.002731;232.601822;3;{"LinkMode":0,"Links":[[8,220],[8,211]]} 19;49;49.929226;132.002731;232.013779;3; -20;1;-20.556641;141.002731;772.268555;65283;{"Objectives":["b","base us","a"]} +20;1;-20.556641;141.002731;772.268555;65283;{"Objectives":["a","b","base us"]} 20;2;-20.167080;141.002731;770.861084;3; 20;3;-19.715944;141.002731;769.027283;3; 20;4;-19.871014;141.002731;763.221375;4;{"LinkMode":0,"Links":[[33,1]]} @@ -4196,7 +4196,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 23;111;-64.522438;146.174210;62.090405;3; 23;112;-64.130981;146.174606;62.936771;3; 23;113;-63.893154;146.174606;63.478741;3;{"LinkMode":0,"Links":[[5,10]]} -25;1;-332.948242;148.396286;256.948242;65283;{"LinkMode":0,"Links":[[61,1]],"Objectives":["c","b"]} +25;1;-332.948242;148.396286;256.948242;65283;{"LinkMode":0,"Links":[[61,1]],"Objectives":["b","c"]} 25;2;-332.420135;148.268692;256.244049;3; 25;3;-331.607117;148.099808;255.161682;4; 25;4;-330.723175;147.909470;253.983063;4; @@ -6922,7 +6922,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 53;5;282.106140;173.002731;-343.112640;4; 53;6;279.898163;173.002731;-342.626007;4; 53;7;278.644623;173.002731;-342.375977;3;{"Action":{"inputs":[35],"pitch":-0.21323987841606,"time":0.5,"type":"vehicle","yaw":2.0812892913818},"LinkMode":0,"Links":[[18,7],[18,12],[16,5]]} -54;1;-65.128906;142.997849;643.126953;65283;{"LinkMode":0,"Links":[[10,37]],"Objectives":["b","base ru","a","base us"]} +54;1;-65.128906;142.997849;643.126953;65283;{"LinkMode":0,"Links":[[10,37]],"Objectives":["a","b","base ru","base us"]} 54;2;-65.356689;142.823242;641.344727;4; 54;3;-65.494446;142.655640;639.405640;4; 54;4;-65.596535;142.498352;637.473450;4; diff --git a/mapfiles/MP_007_ConquestSmall0.map b/mapfiles/MP_007_ConquestSmall0.map index f17e60cc..d7950cdc 100644 --- a/mapfiles/MP_007_ConquestSmall0.map +++ b/mapfiles/MP_007_ConquestSmall0.map @@ -1126,7 +1126,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 9;237;4.741068;132.002731;290.317749;4; 9;238;13.403320;132.002731;280.829102;3;{"LinkMode":0,"Links":[[2,9]]} 9;239;12.775391;132.002731;279.467773;3; -10;1;66.365234;132.000824;244.383789;65283;{"LinkMode":0,"Links":[[2,51],[2,51],[2,51]],"Objectives":["base us","a"]} +10;1;66.365234;132.000824;244.383789;65283;{"LinkMode":0,"Links":[[2,51],[2,51],[2,51]],"Objectives":["a","base us"]} 10;2;66.738014;132.000809;244.895828;4; 10;3;68.100632;132.000809;246.290604;4; 10;4;69.463654;132.000809;247.680832;4; @@ -12474,7 +12474,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 91;299;-162.642578;140.108292;-95.730652;4; 91;300;-160.730820;140.121246;-96.468697;4; 91;301;-159.703079;140.123642;-97.017181;3;{"LinkMode":0,"Links":[[5,76]]} -92;1;-175.326111;140.111298;-59.248764;65283;{"Objectives":["a","b","d","c"]} +92;1;-175.326111;140.111298;-59.248764;65283;{"Objectives":["a","b","c","d"]} 92;2;-174.601990;140.111298;-58.554966;3; 92;3;-173.905991;140.111298;-58.194908;3; 92;4;-172.750290;140.111298;-58.281689;3; diff --git a/mapfiles/MP_007_RushLarge0.map b/mapfiles/MP_007_RushLarge0.map index f36740e3..27d0617d 100644 --- a/mapfiles/MP_007_RushLarge0.map +++ b/mapfiles/MP_007_RushLarge0.map @@ -3146,7 +3146,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 42;231;224.929672;173.002731;-344.345459;4; 42;232;226.351562;173.002731;-342.561493;4; 42;233;227.463531;173.002731;-341.278717;3;{"LinkMode":0,"Links":[[34,11]]} -43;1;-204.328125;140.079926;-80.632812;65283;{"LinkMode":0,"Links":[[19,53]],"Objectives":["mcom 4","mcom 3","mcom 5"]} +43;1;-204.328125;140.079926;-80.632812;65283;{"LinkMode":0,"Links":[[19,53]],"Objectives":["mcom 3","mcom 4","mcom 5"]} 43;2;-203.190811;140.085602;-79.604668;4; 43;3;-201.288589;140.105209;-78.458153;4; 43;4;-199.277145;140.077301;-77.807976;4; @@ -3401,7 +3401,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 43;253;226.429138;173.001877;-345.626678;4; 43;254;227.503311;173.001816;-344.119965;3; 43;255;228.000381;173.001770;-343.383240;3;{"LinkMode":0,"Links":[[34,10]]} -44;1;-203.672852;140.079910;-78.442383;65283;{"LinkMode":0,"Links":[[19,54]],"Objectives":["mcom 4","mcom 3","mcom 6"]} +44;1;-203.672852;140.079910;-78.442383;65283;{"LinkMode":0,"Links":[[19,54]],"Objectives":["mcom 3","mcom 4","mcom 6"]} 44;2;-201.720642;140.080856;-77.403290;4; 44;3;-199.714706;140.080856;-76.762894;4; 44;4;-197.682968;140.080856;-76.808319;4; diff --git a/mapfiles/MP_011_ConquestLarge0.map b/mapfiles/MP_011_ConquestLarge0.map index a35a99a5..52630e64 100644 --- a/mapfiles/MP_011_ConquestLarge0.map +++ b/mapfiles/MP_011_ConquestLarge0.map @@ -2254,7 +2254,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 14;270;72.263008;1.120000;-19.002743;3; 14;271;73.247467;1.120000;-19.863277;3; 14;272;74.148819;1.119396;-20.624798;3;{"LinkMode":0,"Links":[[5,42]]} -15;1;-8.612305;1.279124;-53.564453;65283;{"LinkMode":0,"Links":[[7,47]],"Objectives":["a","b","c","e","d"]} +15;1;-8.612305;1.279124;-53.564453;65283;{"LinkMode":0,"Links":[[7,47]],"Objectives":["a","b","c","d","e"]} 15;2;-8.893591;1.279139;-54.282257;3; 15;3;-9.272299;1.279107;-55.482876;3; 15;4;-9.618256;1.279120;-56.814449;4; @@ -3018,7 +3018,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 18;121;2.385724;1.279109;-42.980568;3; 18;122;1.123562;1.279144;-43.162659;3; 18;123;0.178521;1.279104;-43.112118;3;{"LinkMode":0,"Links":[[7,37]]} -19;1;30.127930;6.362086;110.976425;65283;{"LinkMode":0,"Links":[[10,19]],"Objectives":["c","e","d"]} +19;1;30.127930;6.362086;110.976425;65283;{"LinkMode":0,"Links":[[10,19]],"Objectives":["c","d","e"]} 19;2;30.665892;6.155081;110.653427;3;{"LinkMode":0,"Links":[[10,71]]} 19;3;30.939470;5.616187;109.578781;3; 19;4;30.892210;5.039476;108.426033;3; @@ -4793,7 +4793,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 33;154;68.270660;1.269808;-43.490147;3; 33;155;67.833847;1.272645;-43.105076;3; 33;156;67.675156;1.274592;-42.836514;3;{"LinkMode":0,"Links":[[5,93]]} -34;1;73.307976;1.120206;-41.777508;3;{"Objectives":["a","b","c","e","d"]} +34;1;73.307976;1.120206;-41.777508;3;{"Objectives":["a","b","c","d","e"]} 34;2;73.649864;1.120206;-41.405212;3; 34;3;74.023491;1.120206;-41.455029;3; 34;4;74.146149;1.120206;-41.992432;2; diff --git a/mapfiles/MP_011_RushLarge0.map b/mapfiles/MP_011_RushLarge0.map index 5862fbdc..7742b74e 100644 --- a/mapfiles/MP_011_RushLarge0.map +++ b/mapfiles/MP_011_RushLarge0.map @@ -995,7 +995,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 38;50;-50.964687;-5.782800;24.069849;2; 38;51;-51.361984;-5.405163;24.316317;2; 38;52;-51.794937;-5.183330;24.616392;3;{"LinkMode":0,"Links":[[55,71]]} -39;1;27.013466;1.279985;-92.406754;3;{"LinkMode":0,"Links":[[12,50]],"Objectives":["mcom 3","mcom 4","mcom 2"]} +39;1;27.013466;1.279985;-92.406754;3;{"LinkMode":0,"Links":[[12,50]],"Objectives":["mcom 2","mcom 3","mcom 4"]} 39;2;25.764557;1.279995;-91.210320;4;{"LinkMode":0,"Links":[[12,8],[12,16]]} 39;3;24.234365;1.654660;-89.980484;20; 39;4;22.320389;1.876449;-88.424904;4; diff --git a/mapfiles/MP_012_ConquestLarge0.map b/mapfiles/MP_012_ConquestLarge0.map index 1c4016a0..99396cd5 100644 --- a/mapfiles/MP_012_ConquestLarge0.map +++ b/mapfiles/MP_012_ConquestLarge0.map @@ -1062,7 +1062,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 11;48;-270.787842;134.029419;-138.661942;4; 11;49;-270.625671;133.687851;-136.542572;4; 11;50;-270.486633;133.624176;-135.082077;3;{"LinkMode":0,"Links":[[8,67],[16,171]]} -12;1;-292.873779;133.853317;-81.818367;3;{"Objectives":["c","b","a"]} +12;1;-292.873779;133.853317;-81.818367;3;{"Objectives":["a","b","c"]} 12;2;-291.953644;133.866241;-82.697563;4; 12;3;-290.429474;133.887817;-84.154915;4; 12;4;-288.817322;133.930542;-85.746216;4;{"LinkMode":0,"Links":[[10,38]]} @@ -1481,7 +1481,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 15;8;596.982483;110.298561;-225.306396;3; 15;9;597.221069;110.298561;-224.923691;3; 15;10;597.769287;110.298561;-224.004852;3;{"Action":{"inputs":[35],"pitch":-0.25358694791794,"time":0.5,"type":"vehicle","yaw":5.8029894828796}} -16;1;101.330795;120.859161;-164.888672;65283;{"Objectives":["c","b","a"]} +16;1;101.330795;120.859161;-164.888672;65283;{"Objectives":["a","b","c"]} 16;2;100.269051;120.760483;-164.847076;4; 16;3;98.008484;120.542946;-164.758835;4; 16;4;95.729607;120.254570;-164.684052;4; @@ -2315,7 +2315,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 26;62;-152.794296;135.288864;-65.878326;4; 26;63;-150.958115;135.287903;-64.468636;4; 26;64;-149.257065;135.287903;-63.854626;3;{"LinkMode":0,"Links":[[25,69]]} -27;1;-279.435547;133.889465;-84.917000;65283;{"LinkMode":0,"Links":[[10,42]],"Objectives":["a","e","d"]} +27;1;-279.435547;133.889465;-84.917000;65283;{"LinkMode":0,"Links":[[10,42]],"Objectives":["a","d","e"]} 27;2;-278.322052;133.851166;-83.718437;4; 27;3;-277.044281;133.790955;-82.158607;4; 27;4;-275.801483;133.742432;-80.620430;4; @@ -3039,7 +3039,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 29;204;-180.315659;125.191093;38.201687;3; 29;205;-181.521988;125.100517;38.406643;3; 29;206;-182.237579;125.055580;39.313156;3;{"LinkMode":0,"Links":[[29,1]]} -30;1;-179.953110;125.250816;30.093739;65283;{"LinkMode":0,"Links":[[29,181]],"Objectives":["c","b","e","d"]} +30;1;-179.953110;125.250816;30.093739;65283;{"LinkMode":0,"Links":[[29,181]],"Objectives":["b","c","d","e"]} 30;2;-179.295227;125.339836;29.270470;3;{"LinkMode":0,"Links":[[29,2]]} 30;3;-178.444748;125.453506;28.276653;4; 30;4;-177.413605;125.498344;26.663290;4; @@ -24281,7 +24281,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 97;213;-273.544952;134.048126;-99.339249;3; 97;214;-272.992065;134.048126;-99.441322;3; 97;215;-272.561188;134.048126;-99.463295;3;{"LinkMode":0,"Links":[[10,56]]} -98;1;-272.071350;134.048126;-103.441162;65283;{"LinkMode":0,"Links":[[10,58]],"Objectives":["b","a"]} +98;1;-272.071350;134.048126;-103.441162;65283;{"LinkMode":0,"Links":[[10,58]],"Objectives":["a","b"]} 98;2;-272.561707;134.048126;-103.400726;3; 98;3;-273.006165;134.048126;-104.436340;4; 98;4;-272.695282;134.048126;-106.009842;4; @@ -32774,7 +32774,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 152;194;142.913254;121.262672;81.384613;3; 152;195;143.805359;121.315269;80.840363;3; 152;196;144.211868;121.348541;80.466125;3;{"LinkMode":0,"Links":[[28,58]]} -153;1;47.800632;128.695068;-101.303520;65283;{"LinkMode":0,"Links":[[2,49]],"Objectives":["c","b","a","e","d"]} +153;1;47.800632;128.695068;-101.303520;65283;{"LinkMode":0,"Links":[[2,49]],"Objectives":["a","b","c","d","e"]} 153;2;47.819313;128.695068;-101.926468;3; 153;3;47.836864;128.723251;-102.613113;3; 153;4;47.730423;128.724792;-103.180603;3; @@ -34323,7 +34323,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 157;221;115.387352;121.303459;102.054672;3; 157;222;116.422058;121.386383;102.650230;3; 157;223;117.313950;121.441811;103.124535;3;{"LinkMode":0,"Links":[[28,134]]} -158;1;-231.013641;126.833557;49.442326;65283;{"LinkMode":0,"Links":[[29,120]],"Objectives":["c","b","a","e","d"]} +158;1;-231.013641;126.833557;49.442326;65283;{"LinkMode":0,"Links":[[29,120]],"Objectives":["a","b","c","d","e"]} 158;2;-230.099197;126.833557;50.242577;3; 158;3;-229.772430;126.833557;50.580978;3; 158;4;-228.986404;126.833557;49.824047;3; diff --git a/mapfiles/MP_012_ConquestSmall0.map b/mapfiles/MP_012_ConquestSmall0.map index c8d2c122..a079e241 100644 --- a/mapfiles/MP_012_ConquestSmall0.map +++ b/mapfiles/MP_012_ConquestSmall0.map @@ -2409,7 +2409,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 31;86;-269.576843;134.044327;-98.232773;4; 31;87;-271.347137;134.045364;-99.169968;4; 31;88;-272.501587;134.046051;-99.810852;3;{"LinkMode":0,"Links":[[3,41]]} -32;1;-267.570099;134.049469;-118.889160;65283;{"LinkMode":0,"Links":[[3,28]],"Objectives":["b","c","a"]} +32;1;-267.570099;134.049469;-118.889160;65283;{"LinkMode":0,"Links":[[3,28]],"Objectives":["a","b","c"]} 32;2;-267.102966;134.049469;-120.146675;4; 32;3;-267.179352;134.049469;-121.970901;4; 32;4;-269.101074;134.049469;-122.816193;4; diff --git a/mapfiles/MP_012_RushLarge0.map b/mapfiles/MP_012_RushLarge0.map index ca129686..0441293c 100644 --- a/mapfiles/MP_012_RushLarge0.map +++ b/mapfiles/MP_012_RushLarge0.map @@ -2055,7 +2055,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 40;108;-93.594078;125.004868;-133.511627;3; 40;109;-92.645126;125.004868;-133.347931;3; 40;110;-92.336624;125.004868;-133.502792;3;{"LinkMode":0,"Links":[[41,24]]} -41;1;-110.358345;124.999184;-132.159012;3;{"LinkMode":0,"Links":[[40,94]],"Objectives":["mcom 3","mcom 4","mcom 2"]} +41;1;-110.358345;124.999184;-132.159012;3;{"LinkMode":0,"Links":[[40,94]],"Objectives":["mcom 2","mcom 3","mcom 4"]} 41;2;-110.625443;124.999184;-132.549469;19; 41;3;-111.036964;124.999184;-133.740784;3; 41;4;-111.301651;124.999184;-135.100433;4; @@ -2127,7 +2127,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 41;70;-81.670654;125.008896;-70.785522;3; 41;71;-80.819801;125.008896;-71.430977;3; 41;72;-80.110504;125.008896;-72.104874;3;{"LinkMode":0,"Links":[[39,16]]} -42;1;67.577583;121.079895;-160.917938;3;{"LinkMode":0,"Links":[[11,28]],"Objectives":["mcom 3","mcom 4","mcom 2"]} +42;1;67.577583;121.079895;-160.917938;3;{"LinkMode":0,"Links":[[11,28]],"Objectives":["mcom 2","mcom 3","mcom 4"]} 42;2;67.078903;121.018997;-160.709915;19; 42;3;65.552177;120.823982;-160.167801;4; 42;4;63.688808;120.540840;-159.675690;4; @@ -2200,7 +2200,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 42;71;-56.379166;124.734550;-145.346970;4; 42;72;-58.178516;124.750854;-144.596237;4; 42;73;-59.225399;124.786255;-144.159409;3;{"LinkMode":0,"Links":[[40,4]]} -43;1;60.468452;121.205086;-97.085121;3;{"Objectives":["mcom 3","mcom 4","mcom 1"]} +43;1;60.468452;121.205086;-97.085121;3;{"Objectives":["mcom 1","mcom 3","mcom 4"]} 43;2;59.630077;121.205086;-96.854584;19; 43;3;58.806896;121.205086;-96.101433;4; 43;4;57.766739;121.203102;-94.228683;4;{"LinkMode":0,"Links":[[12,88]]} @@ -2953,7 +2953,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 60;5;18.541357;121.251686;-141.171204;3; 60;6;17.379000;121.226547;-141.468140;3; 60;7;16.482859;121.215462;-141.697174;3;{"LinkMode":0,"Links":[[61,1]]} -61;1;12.884048;121.258286;-142.029495;3;{"LinkMode":0,"Links":[[60,7]],"Objectives":["base us 2","mcom 4","mcom 2"]} +61;1;12.884048;121.258286;-142.029495;3;{"LinkMode":0,"Links":[[60,7]],"Objectives":["base us 2","mcom 2","mcom 4"]} 61;2;12.354321;121.258286;-142.333191;19; 61;3;10.737930;121.318466;-143.164047;4; 61;4;8.880249;121.331276;-143.749496;4; @@ -3004,7 +3004,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 62;3;-24.356274;121.447578;-143.070953;3; 62;4;-24.845690;121.585701;-143.988998;3; 62;5;-25.179983;121.692314;-144.431213;3;{"LinkMode":0,"Links":[[63,1]]} -63;1;-26.263346;122.208389;-146.579819;3;{"LinkMode":0,"Links":[[62,5]],"Objectives":["base us 2","mcom 4","mcom 2"]} +63;1;-26.263346;122.208389;-146.579819;3;{"LinkMode":0,"Links":[[62,5]],"Objectives":["base us 2","mcom 2","mcom 4"]} 63;2;-26.311623;122.257080;-147.173355;19; 63;3;-26.563471;122.297226;-148.166306;3; 63;4;-27.288267;122.413277;-148.884613;3; @@ -3184,7 +3184,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 64;5;-20.661972;119.149338;-199.301941;3; 64;6;-21.289799;118.983109;-200.390396;3; 64;7;-21.570467;118.904320;-200.876312;3;{"LinkMode":0,"Links":[[65,1]]} -65;1;-24.008934;118.551430;-203.238434;3;{"LinkMode":0,"Links":[[64,7]],"Objectives":["base us 2","mcom 4","mcom 2"]} +65;1;-24.008934;118.551430;-203.238434;3;{"LinkMode":0,"Links":[[64,7]],"Objectives":["base us 2","mcom 2","mcom 4"]} 65;2;-24.699415;118.543877;-203.592621;19; 65;3;-25.346506;118.405685;-204.418976;4; 65;4;-27.059416;118.602676;-204.829010;4; @@ -3252,7 +3252,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 65;66;-100.758316;125.002594;-149.274292;3;{"LinkMode":0,"Links":[[40,40]]} 66;1;-19.994690;118.298561;-202.291702;3;{"Objectives":["base us 2"]} 66;2;-20.495575;118.300087;-202.543823;3;{"LinkMode":0,"Links":[[67,1]]} -67;1;-22.696711;118.125717;-204.164093;3;{"LinkMode":0,"Links":[[66,2]],"Objectives":["base us 2","mcom 4","mcom 2"]} +67;1;-22.696711;118.125717;-204.164093;3;{"LinkMode":0,"Links":[[66,2]],"Objectives":["base us 2","mcom 2","mcom 4"]} 67;2;-23.042046;117.997719;-204.729874;20; 67;3;-24.314976;117.839607;-205.797913;4; 67;4;-26.053804;117.815353;-206.710083;4; @@ -3381,7 +3381,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 68;3;-4.716278;121.326065;-91.878098;3; 68;4;-5.134332;121.329987;-93.073616;3; 68;5;-5.465725;121.329987;-94.030365;3;{"LinkMode":0,"Links":[[69,1]]} -69;1;-6.282977;121.330490;-97.212616;3;{"LinkMode":0,"Links":[[68,5]],"Objectives":["base us 2","mcom 4","mcom 2"]} +69;1;-6.282977;121.330490;-97.212616;3;{"LinkMode":0,"Links":[[68,5]],"Objectives":["base us 2","mcom 2","mcom 4"]} 69;2;-6.755960;121.330490;-97.933655;20; 69;3;-7.794613;121.330490;-99.520844;4; 69;4;-8.862216;121.306358;-101.151886;4; @@ -5624,7 +5624,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 121;1;-164.540619;124.922501;-110.305443;3;{"Objectives":["base ru 2"]} 121;2;-164.173813;124.931511;-111.246002;3; 121;3;-163.807022;124.939545;-112.189392;3;{"LinkMode":0,"Links":[[122,1]]} -122;1;-163.316010;124.929863;-115.695000;3;{"LinkMode":0,"Links":[[121,3]],"Objectives":["base ru 2","mcom 4","mcom 2"]} +122;1;-163.316010;124.929863;-115.695000;3;{"LinkMode":0,"Links":[[121,3]],"Objectives":["base ru 2","mcom 2","mcom 4"]} 122;2;-163.346634;124.920616;-116.172691;19; 122;3;-162.997650;124.939415;-117.625221;4; 122;4;-161.810059;124.956467;-119.180832;4; @@ -5658,7 +5658,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 123;2;-176.343491;125.664116;-159.634888;3; 123;3;-176.001465;125.665001;-160.714920;3; 123;4;-175.733856;125.679779;-161.669601;3;{"LinkMode":0,"Links":[[124,1]]} -124;1;-174.376511;125.698586;-165.219208;3;{"LinkMode":0,"Links":[[123,4]],"Objectives":["base ru 2","mcom 4","mcom 2"]} +124;1;-174.376511;125.698586;-165.219208;3;{"LinkMode":0,"Links":[[123,4]],"Objectives":["base ru 2","mcom 2","mcom 4"]} 124;2;-173.312057;125.705009;-166.458649;4; 124;3;-171.690735;125.687325;-167.094986;4; 124;4;-169.766205;125.657173;-167.030716;4; @@ -5715,7 +5715,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 124;55;-115.195541;125.000862;-144.731598;3;{"LinkMode":0,"Links":[[40,49]]} 125;1;-175.353104;125.495796;-157.173981;3;{"Objectives":["base ru 2"]} 125;2;-175.179352;125.511993;-158.284988;3; -126;1;-174.740799;125.609207;-161.007324;3;{"Objectives":["base ru 2","mcom 4","mcom 2"]} +126;1;-174.740799;125.609207;-161.007324;3;{"Objectives":["base ru 2","mcom 2","mcom 4"]} 126;2;-174.680542;125.672653;-161.411423;19; 126;3;-174.431915;125.729340;-163.149078;4; 126;4;-173.565384;125.692902;-164.736069;4; @@ -5815,7 +5815,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 127;2;-136.474701;125.048874;-58.132935;3; 127;3;-137.637589;125.048874;-58.428642;3; 127;4;-138.379669;125.048874;-58.621273;3;{"LinkMode":0,"Links":[[128,1]]} -128;1;-140.336624;125.048874;-58.861053;3;{"LinkMode":0,"Links":[[127,4]],"Objectives":["base ru 2","mcom 4","mcom 2"]} +128;1;-140.336624;125.048874;-58.861053;3;{"LinkMode":0,"Links":[[127,4]],"Objectives":["base ru 2","mcom 2","mcom 4"]} 128;2;-140.582123;125.048874;-59.107105;19; 128;3;-141.070541;125.048874;-60.189777;3; 128;4;-141.251694;125.048874;-61.455574;4; @@ -5923,7 +5923,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 131;1;-160.776199;125.048874;-42.769150;3;{"Objectives":["base ru 2"]} 131;2;-160.349548;125.048874;-43.083797;19; 131;3;-159.576843;125.048874;-43.771755;3;{"LinkMode":0,"Links":[[132,1]]} -132;1;-156.231400;125.048874;-43.668568;3;{"LinkMode":0,"Links":[[131,3]],"Objectives":["base ru 2","mcom 4","mcom 2"]} +132;1;-156.231400;125.048874;-43.668568;3;{"LinkMode":0,"Links":[[131,3]],"Objectives":["base ru 2","mcom 2","mcom 4"]} 132;2;-156.093872;125.048874;-43.937881;3; 132;3;-155.304550;125.048874;-44.627792;4; 132;4;-153.469818;125.048874;-44.713696;4; diff --git a/mapfiles/MP_013_ConquestLarge0.map b/mapfiles/MP_013_ConquestLarge0.map index c8cfc804..acc13e21 100644 --- a/mapfiles/MP_013_ConquestLarge0.map +++ b/mapfiles/MP_013_ConquestLarge0.map @@ -1470,7 +1470,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 22;71;-26.268915;214.190414;332.873993;3; 22;72;-25.180943;214.249466;333.230164;3; 22;73;-24.666740;214.293060;333.695435;3;{"LinkMode":0,"Links":[[38,19],[74,67]]} -23;1;-81.369141;221.309372;-7.031249;65283;{"LinkMode":0,"Links":[[1,18],[1,1],[1,12]],"Objectives":["base us","b","c"]} +23;1;-81.369141;221.309372;-7.031249;65283;{"LinkMode":0,"Links":[[1,18],[1,1],[1,12]],"Objectives":["b","base us","c"]} 23;2;-82.000328;221.332275;-6.777128;4; 23;3;-83.036758;221.318176;-5.170909;4; 23;4;-83.938293;221.350266;-3.405126;4; @@ -1645,7 +1645,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 23;173;-18.276791;214.628708;306.555542;4; 23;174;-17.784700;214.628708;308.381744;3; 23;175;-17.570057;214.628708;309.235199;3;{"LinkMode":0,"Links":[[22,29],[25,1],[26,76]]} -24;1;-96.577148;221.507614;-7.585938;65283;{"LinkMode":0,"Links":[[1,10],[1,6]],"Objectives":["base us","c","b"]} +24;1;-96.577148;221.507614;-7.585938;65283;{"LinkMode":0,"Links":[[1,10],[1,6]],"Objectives":["b","base us","c"]} 24;2;-96.756058;221.507614;-7.088726;4; 24;3;-97.114662;221.507614;-5.232889;4; 24;4;-97.545998;221.507614;-3.331136;4; @@ -2141,7 +2141,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 28;50;-28.555628;214.686111;186.903885;4; 28;51;-29.001619;214.687408;185.392914;3; 28;52;-29.085938;214.688354;185.102539;3;{"LinkMode":0,"Links":[[12,22],[23,109]]} -29;1;-18.746094;214.941208;60.461914;65283;{"LinkMode":0,"Links":[[3,44],[2,14]],"Objectives":["a","c","b"]} +29;1;-18.746094;214.941208;60.461914;65283;{"LinkMode":0,"Links":[[3,44],[2,14]],"Objectives":["a","b","c"]} 29;2;-18.969339;214.941208;61.019413;4; 29;3;-19.456757;214.941208;62.864254;4; 29;4;-19.999668;214.941208;64.841774;4; @@ -2591,7 +2591,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 32;105;11.104841;214.628708;320.524628;3; 32;106;11.792597;214.628708;321.533234;3; 32;107;12.010742;214.628708;321.870117;3;{"LinkMode":0,"Links":[[30,34],[40,1],[35,47]]} -33;1;-33.584961;214.878708;-15.647461;65283;{"LinkMode":0,"Links":[[1,46],[1,44]],"Objectives":["base us","b"]} +33;1;-33.584961;214.878708;-15.647461;65283;{"LinkMode":0,"Links":[[1,46],[1,44]],"Objectives":["b","base us"]} 33;2;-33.701527;214.878708;-15.291371;4; 33;3;-34.277027;214.878708;-13.534121;4; 33;4;-34.885593;214.878708;-11.676036;4; @@ -3217,7 +3217,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 35;187;-11.370378;214.941208;65.353706;4; 35;188;-12.486053;214.941208;63.744255;4; 35;189;-13.177999;214.941208;62.706089;3;{"LinkMode":0,"Links":[[5,2],[2,16]]} -36;1;-107.056915;221.506653;-4.698242;65283;{"LinkMode":0,"Links":[[1,5],[1,4],[1,1],[1,10]],"Objectives":["base us","d","c"]} +36;1;-107.056915;221.506653;-4.698242;65283;{"LinkMode":0,"Links":[[1,5],[1,4],[1,1],[1,10]],"Objectives":["base us","c","d"]} 36;2;-106.846657;221.502792;-2.981748;4;{"LinkMode":0,"Links":[[24,7]]} 36;3;-107.026634;221.502792;-1.072858;4; 36;4;-107.517891;221.549774;0.813058;4; @@ -4776,7 +4776,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 52;21;-4.661804;223.936325;548.483521;4; 52;22;-4.545075;223.936325;550.152527;3; 52;23;-4.486328;223.936325;550.540039;3; -53;1;4.189453;220.722458;546.104492;65283;{"LinkMode":0,"Links":[[59,9]],"Objectives":["e","d"]} +53;1;4.189453;220.722458;546.104492;65283;{"LinkMode":0,"Links":[[59,9]],"Objectives":["d","e"]} 53;2;4.911499;220.722458;547.357117;4; 53;3;5.484366;220.722458;549.199768;4; 53;4;5.794016;220.722458;551.123047;4; @@ -7247,7 +7247,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 72;165;16.781429;214.628708;461.666412;4; 72;166;14.875023;214.638947;461.329315;4; 72;167;13.349916;214.684769;461.148163;3;{"LinkMode":0,"Links":[[44,150],[34,17],[92,1]]} -73;1;24.052734;217.107239;742.178528;65283;{"LinkMode":0,"Links":[[66,15],[66,11],[66,17]],"Objectives":["c","base ru"]} +73;1;24.052734;217.107239;742.178528;65283;{"LinkMode":0,"Links":[[66,15],[66,11],[66,17]],"Objectives":["base ru","c"]} 73;2;24.116724;217.071503;741.708069;4; 73;3;25.210800;216.965546;740.197388;4; 73;4;26.449171;216.949448;738.691040;4; @@ -10469,7 +10469,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 94;253;-12.681609;214.884567;170.768280;4; 94;254;-10.876228;214.884567;171.011047;4; 94;255;-8.867376;214.899612;170.772858;4; -95;1;10.550781;217.324997;494.959961;65283;{"LinkMode":0,"Links":[[43,45],[64,52]],"Objectives":["a","b","e","c"]} +95;1;10.550781;217.324997;494.959961;65283;{"LinkMode":0,"Links":[[43,45],[64,52]],"Objectives":["a","b","c","e"]} 95;2;10.274213;217.307587;494.579926;4; 95;3;9.122280;217.104935;493.068787;4; 95;4;7.747033;216.933578;491.710938;4; @@ -10702,7 +10702,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 96;23;-32.942760;214.283951;289.146637;4;{"LinkMode":0,"Links":[[99,96]]} 96;24;-33.939495;214.222458;289.997223;3; 96;25;-34.468327;214.188431;290.752930;3;{"LinkMode":0,"Links":[[63,135],[57,201],[26,4]]} -97;1;9.759766;220.721527;576.094727;65283;{"LinkMode":0,"Links":[[51,61]],"Objectives":["b","e","c"]} +97;1;9.759766;220.721527;576.094727;65283;{"LinkMode":0,"Links":[[51,61]],"Objectives":["b","c","e"]} 97;2;9.746068;220.721527;575.387146;4; 97;3;9.473802;220.721527;573.470398;4; 97;4;9.052472;220.721512;571.674622;4; @@ -10877,7 +10877,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 97;173;-20.064327;214.628708;283.732788;3; 97;174;-19.982759;214.628708;281.912994;3; 97;175;-19.933418;214.628708;281.139709;3;{"LinkMode":0,"Links":[[18,59],[27,9],[96,15]]} -98;1;5.230469;218.698044;739.089844;65283;{"LinkMode":0,"Links":[[66,26],[66,28],[66,31],[66,38]],"Objectives":["b","c","base ru"]} +98;1;5.230469;218.698044;739.089844;65283;{"LinkMode":0,"Links":[[66,26],[66,28],[66,31],[66,38]],"Objectives":["b","base ru","c"]} 98;2;4.775990;218.668732;738.411621;4; 98;3;3.730845;218.596802;736.791199;4; 98;4;3.111535;218.481842;734.942017;4; @@ -12017,7 +12017,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 109;10;4.783957;214.631638;354.298279;4; 109;11;4.904477;214.631638;355.911835;3; 109;12;4.916992;214.631638;356.478516;3;{"LinkMode":0,"Links":[[110,1]]} -110;1;5.306641;214.631638;356.460938;65283;{"LinkMode":0,"Links":[[109,12]],"Objectives":["e","d","c"]} +110;1;5.306641;214.631638;356.460938;65283;{"LinkMode":0,"Links":[[109,12]],"Objectives":["c","d","e"]} 110;2;6.548289;214.631638;357.308441;4; 110;3;8.414520;214.631638;358.108490;4; 110;4;10.272947;214.631638;358.797455;4; @@ -13968,7 +13968,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 127;139;2.973132;220.724899;585.852600;4; 127;140;4.519246;220.722443;586.216919;3; 127;141;5.584285;220.722458;586.551758;3;{"LinkMode":0,"Links":[[54,5]]} -128;1;-8.441406;225.236130;96.257812;65283;{"LinkMode":0,"Links":[[62,16]],"Objectives":["b","a"]} +128;1;-8.441406;225.236130;96.257812;65283;{"LinkMode":0,"Links":[[62,16]],"Objectives":["a","b"]} 128;2;-8.927549;225.287857;97.212822;3; 128;3;-9.120130;225.198273;98.005211;3; 128;4;-8.696620;224.561569;98.466965;3; diff --git a/mapfiles/MP_013_RushLarge0.map b/mapfiles/MP_013_RushLarge0.map index 4d210252..0b87bb2c 100644 --- a/mapfiles/MP_013_RushLarge0.map +++ b/mapfiles/MP_013_RushLarge0.map @@ -1839,7 +1839,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 57;77;-39.067337;214.943573;77.079536;4; 57;78;-38.058239;214.943573;78.529678;3; 57;79;-37.799473;214.943573;78.894516;3;{"LinkMode":0,"Links":[[42,30]]} -58;1;-24.227354;214.940781;104.548615;3;{"LinkMode":0,"Links":[[43,31]],"Objectives":["mcom 7","mcom 8","mcom 6"]} +58;1;-24.227354;214.940781;104.548615;3;{"LinkMode":0,"Links":[[43,31]],"Objectives":["mcom 6","mcom 7","mcom 8"]} 58;2;-24.449251;214.940781;104.762794;19; 58;3;-26.141987;214.940781;105.306030;4; 58;4;-28.018805;214.929016;104.803963;4; @@ -2610,7 +2610,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 79;55;-11.386083;214.563828;280.274872;2; 79;56;-10.394722;214.593552;280.069031;2; 79;57;-9.991256;214.615952;279.985199;2; -80;1;-37.114094;213.745743;320.218445;3;{"LinkMode":0,"Links":[[62,35]],"Objectives":["mcom 10","mcom 9","mcom 8"]} +80;1;-37.114094;213.745743;320.218445;3;{"LinkMode":0,"Links":[[62,35]],"Objectives":["mcom 10","mcom 8","mcom 9"]} 80;2;-37.073124;213.748337;320.523804;19; 80;3;-36.086060;213.871887;321.557281;4; 80;4;-34.393055;213.884949;322.400574;4; diff --git a/mapfiles/MP_017_ConquestLarge0.map b/mapfiles/MP_017_ConquestLarge0.map index cc81d7d9..bf4a5724 100644 --- a/mapfiles/MP_017_ConquestLarge0.map +++ b/mapfiles/MP_017_ConquestLarge0.map @@ -1,5 +1,5 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data -0;0;0.000000;0.000000;0.000000;0;{"Authors":["Beschutzer"],"CompIndex":1,"Date":"2025-09-07 15:24:15"} +0;0;0.000000;0.000000;0.000000;0;{"Authors":["Beschutzer"],"CompIndex":1,"Date":"2025-09-25 21:13:45"} 1;1;-202.944519;69.466530;591.129822;65283;{"LinkMode":0,"Links":[[2,1],[21,1],[35,1],[40,1]],"Objectives":["base us"]} 1;2;-203.091965;69.466530;592.809448;4; 1;3;-203.478302;69.466530;594.683899;4; @@ -34,8 +34,8 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 2;10;-197.766266;67.654060;575.924316;4; 2;11;-197.145538;67.657555;574.075867;4; 2;12;-196.524811;67.660194;572.227417;4; -2;13;-197.021591;67.663307;570.705566;3; -2;14;-197.290451;67.664268;570.325317;3;{"Action":{"inputs":[35],"pitch":-0.68722301721573,"time":0.5,"type":"vehicle","yaw":2.340806722641}} +2;13;-196.651474;67.663307;571.540588;3; +2;14;-196.920334;67.664268;571.160339;3;{"Action":{"inputs":[35],"pitch":-0.68722301721573,"time":0.5,"type":"vehicle","yaw":2.340806722641}} 3;1;-199.163986;66.559372;566.949158;3;{"Vehicles":["water"]} 3;2;-199.046371;66.582146;566.307190;3; 3;3;-198.842957;66.626305;565.186584;3; @@ -1919,8 +1919,8 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 21;4;-202.113708;69.462433;585.685730;4; 21;5;-201.436768;68.485535;583.972900;4; 21;6;-200.786057;67.666641;582.321411;4; -21;7;-200.780594;67.666641;581.430847;3; -21;8;-201.016174;67.666641;580.913269;3;{"Action":{"inputs":[35],"pitch":-0.80881720781326,"time":0.5,"type":"vehicle","yaw":2.2381932735443}} +21;7;-200.581360;67.666641;581.467957;3; +21;8;-200.816940;67.666641;580.950378;3;{"Action":{"inputs":[35],"pitch":-0.80881720781326,"time":0.5,"type":"vehicle","yaw":2.2381932735443}} 22;1;-201.876053;66.568932;574.284119;65283;{"Vehicles":["water"]} 22;2;-202.013901;66.595680;573.745361;3; 22;3;-202.136154;66.612656;572.768188;3; @@ -3337,7 +3337,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 35;12;-194.943451;67.666641;569.996399;4; 35;13;-194.851837;67.666641;568.065247;4; 35;14;-195.196854;67.666641;567.340454;4; -35;15;-195.665375;67.666641;566.370972;3;{"Action":{"inputs":[35],"pitch":-0.60797023773193,"time":0.5,"type":"vehicle","yaw":2.2178936004639}} +35;15;-195.621231;67.666641;566.902405;3;{"Action":{"inputs":[35],"pitch":-0.60797023773193,"time":0.5,"type":"vehicle","yaw":2.2178936004639}} 36;1;-203.570282;66.555084;579.238953;65283;{"Objectives":["vehicle tank1 ru"],"Vehicles":["water"]} 36;2;-203.865158;66.568916;579.111450;3; 36;3;-203.948166;66.592819;578.466003;3; diff --git a/mapfiles/MP_017_RushLarge0.map b/mapfiles/MP_017_RushLarge0.map index 1f4f73fa..78ac212c 100644 --- a/mapfiles/MP_017_RushLarge0.map +++ b/mapfiles/MP_017_RushLarge0.map @@ -1449,7 +1449,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 49;76;-228.166214;71.240761;220.318146;3;{"LinkMode":0,"Links":[[3,63]]} 52;1;-186.514038;83.142662;165.834534;3;{"Objectives":["base ru 1"]} 52;2;-186.184570;83.142662;166.145584;3;{"LinkMode":0,"Links":[[53,1]]} -53;1;-184.247482;83.142456;167.980637;3;{"LinkMode":0,"Links":[[52,2]],"Objectives":["base us 1","mcom 1","base ru 1"]} +53;1;-184.247482;83.142456;167.980637;3;{"LinkMode":0,"Links":[[52,2]],"Objectives":["base ru 1","base us 1","mcom 1"]} 53;2;-183.900711;83.142456;168.310699;19; 53;3;-182.980469;83.142456;169.177338;3; 53;4;-182.096832;83.142456;169.989243;3; @@ -1505,7 +1505,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 53;54;-198.315689;70.428848;216.259811;3; 53;55;-199.449234;70.507431;216.595245;3; 53;56;-200.100220;70.675217;216.783524;3;{"LinkMode":0,"Links":[[3,19]]} -54;1;-232.723160;70.424400;214.242645;3;{"LinkMode":0,"Links":[[3,82]],"Objectives":["mcom 3","mcom 4","mcom 1","mcom 2"]} +54;1;-232.723160;70.424400;214.242645;3;{"LinkMode":0,"Links":[[3,82]],"Objectives":["mcom 1","mcom 2","mcom 3","mcom 4"]} 54;2;-233.046326;70.424400;213.066940;4;{"LinkMode":0,"Links":[[3,68]]} 54;3;-233.390625;70.424400;210.847610;4;{"LinkMode":0,"Links":[[3,32]]} 54;4;-233.658569;70.424400;208.959991;4; @@ -1580,7 +1580,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 54;73;-273.310852;74.438431;125.358948;3; 54;74;-274.400269;74.438431;124.712585;3; 54;75;-274.830292;74.438431;124.457504;3;{"LinkMode":0,"Links":[[57,3]]} -55;1;-260.451019;70.424400;185.692307;3;{"LinkMode":0,"Links":[[4,53]],"Objectives":["mcom 3","mcom 4","mcom 2"]} +55;1;-260.451019;70.424400;185.692307;3;{"LinkMode":0,"Links":[[4,53]],"Objectives":["mcom 2","mcom 3","mcom 4"]} 55;2;-260.351379;70.424400;185.096344;19; 55;3;-260.459961;70.424400;183.903381;3; 55;4;-260.735413;70.424400;181.979172;4; @@ -3443,7 +3443,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 105;75;-452.225739;88.720100;45.201462;4; 105;76;-452.554169;88.720100;46.820877;3; 105;77;-452.607086;88.720100;47.764854;3;{"LinkMode":0,"Links":[[104,4]]} -106;1;-277.858490;74.438637;97.858078;3;{"LinkMode":0,"Links":[[57,41]],"Objectives":["mcom 5","mcom 6","mcom 3"]} +106;1;-277.858490;74.438637;97.858078;3;{"LinkMode":0,"Links":[[57,41]],"Objectives":["mcom 3","mcom 5","mcom 6"]} 106;2;-278.087463;74.438637;97.655289;19; 106;3;-279.249207;74.438637;97.121620;4;{"LinkMode":0,"Links":[[57,19]]} 106;4;-280.102631;74.438637;95.509232;4; @@ -3587,7 +3587,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 108;78;-486.612671;82.555191;57.976540;3; 108;79;-486.280334;82.555328;56.901222;3; 108;80;-486.499756;82.555458;55.993771;3; -109;1;-347.786133;75.781021;129.109802;3;{"LinkMode":0,"Links":[[59,49]],"Objectives":["mcom 5","mcom 6","mcom 4"]} +109;1;-347.786133;75.781021;129.109802;3;{"LinkMode":0,"Links":[[59,49]],"Objectives":["mcom 4","mcom 5","mcom 6"]} 109;2;-347.470978;75.781731;128.691696;19;{"LinkMode":0,"Links":[[59,8]]} 109;3;-348.088196;75.782265;127.692856;3;{"LinkMode":0,"Links":[[59,30]]} 109;4;-349.165985;75.782669;127.190224;3;{"LinkMode":0,"Links":[[59,45]]} diff --git a/mapfiles/MP_018_ConquestLarge0.map b/mapfiles/MP_018_ConquestLarge0.map index 1d099835..0534c82d 100644 --- a/mapfiles/MP_018_ConquestLarge0.map +++ b/mapfiles/MP_018_ConquestLarge0.map @@ -978,7 +978,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 10;298;-541.689148;90.798264;-68.123444;3; 10;299;-541.393555;90.798264;-69.297974;3; 10;300;-541.212402;90.798264;-70.433281;3;{"LinkMode":0,"Links":[[2,40]]} -11;1;-295.259827;91.157639;353.602966;65283;{"LinkMode":0,"Links":[[9,21]],"Objectives":["d","b","e"]} +11;1;-295.259827;91.157639;353.602966;65283;{"LinkMode":0,"Links":[[9,21]],"Objectives":["b","d","e"]} 11;2;-295.737762;91.157639;351.894562;4; 11;3;-296.190643;91.157639;350.251495;4; 11;4;-296.764771;91.157639;348.165436;4; @@ -5731,7 +5731,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 72;2;-224.247009;108.500565;-827.687256;3; 72;3;-225.228867;108.500565;-827.970337;3; 72;4;-225.541779;108.500565;-828.064209;3; -74;1;-232.033875;99.704643;10.467637;65283;{"LinkMode":0,"Links":[[7,21]],"Objectives":["d","b","e"]} +74;1;-232.033875;99.704643;10.467637;65283;{"LinkMode":0,"Links":[[7,21]],"Objectives":["b","d","e"]} 74;2;-232.050827;99.779892;11.550558;18; 74;3;-232.047409;101.182938;11.460623;4; 74;4;-232.095108;100.150764;12.766524;4; diff --git a/mapfiles/MP_018_ConquestSmall0.map b/mapfiles/MP_018_ConquestSmall0.map index df9a27bf..caf73b43 100644 --- a/mapfiles/MP_018_ConquestSmall0.map +++ b/mapfiles/MP_018_ConquestSmall0.map @@ -2342,7 +2342,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 18;392;-514.145813;89.360756;172.647720;3; 18;393;-512.974304;89.392227;172.808746;3; 18;394;-512.661621;89.422829;172.805206;3;{"LinkMode":0,"Links":[[2,78]]} -19;1;-449.888885;88.907379;-451.032867;65283;{"LinkMode":0,"Links":[[22,5]],"Objectives":["base us","c","base_us"]} +19;1;-449.888885;88.907379;-451.032867;65283;{"LinkMode":0,"Links":[[22,5]],"Objectives":["base us","base_us","c"]} 19;2;-450.002563;88.919128;-450.614685;3; 19;3;-450.296967;88.911034;-449.797943;3; 19;4;-450.859467;88.913033;-448.941986;4; @@ -7364,7 +7364,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 73;41;-376.113464;90.720505;194.707794;4; 73;42;-378.288605;90.720505;191.558090;4;{"LinkMode":0,"Links":[[6,5]]} 73;43;-379.646576;90.720505;188.886047;3; -74;1;22.411367;91.157631;477.655975;65283;{"LinkMode":0,"Links":[[23,8]],"Objectives":["base ru","c","base_ru"]} +74;1;22.411367;91.157631;477.655975;65283;{"LinkMode":0,"Links":[[23,8]],"Objectives":["base ru","base_ru","c"]} 74;2;22.266996;91.157631;476.800446;3; 74;3;22.140879;91.157631;475.876862;3; 74;4;21.752005;91.157631;474.540131;4; @@ -8009,7 +8009,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 76;195;-501.121796;89.738716;194.316498;3; 76;196;-501.147125;89.738716;195.136597;3; 76;197;-501.147614;89.738716;195.470200;3;{"LinkMode":0,"Links":[[2,30]]} -77;1;-413.512878;90.075623;-440.027283;65283;{"LinkMode":0,"Links":[[22,26]],"Objectives":["base us","d","base_us"]} +77;1;-413.512878;90.075623;-440.027283;65283;{"LinkMode":0,"Links":[[22,26]],"Objectives":["base us","base_us","d"]} 77;2;-413.720581;90.108635;-439.689209;3; 77;3;-414.464661;90.277710;-438.490784;4; 77;4;-415.402374;90.365211;-436.995667;4; @@ -9225,7 +9225,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 81;150;-492.616821;89.659958;179.852783;2; 81;151;-494.285980;89.658966;180.694046;2; 81;152;-495.224670;89.647064;181.207794;2;{"Action":{"inputs":[35],"onlyPassengers":false,"time":0.5,"type":"exit"}} -82;1;-420.772247;89.563652;-444.612885;65283;{"LinkMode":0,"Links":[[22,22]],"Objectives":["base us","c","base_us"]} +82;1;-420.772247;89.563652;-444.612885;65283;{"LinkMode":0,"Links":[[22,22]],"Objectives":["base us","base_us","c"]} 82;2;-421.454773;89.582664;-443.652435;4; 82;3;-422.088898;89.884232;-441.896210;4; 82;4;-422.875916;90.061455;-440.004486;4; diff --git a/mapfiles/MP_018_RushLarge0.map b/mapfiles/MP_018_RushLarge0.map index da51cae2..813eb4b5 100644 --- a/mapfiles/MP_018_RushLarge0.map +++ b/mapfiles/MP_018_RushLarge0.map @@ -3731,7 +3731,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 107;59;-434.452026;96.320633;175.963150;3;{"LinkMode":0,"Links":[[106,5]]} 108;1;-218.140259;108.500336;-886.040039;3;{"LinkMode":0,"Links":[[109,1]],"Objectives":["base us 3"]} 109;1;-218.584412;108.500336;-889.168823;3;{"Action":{"inputs":[35],"pitch":-0.43669429421425,"time":0.5,"type":"vehicle","yaw":4.7163677215576},"LinkMode":0,"Links":[[108,1]],"Objectives":["vehicle chopper3 us"]} -112;1;-562.604004;90.798264;-68.177650;3;{"LinkMode":0,"Links":[[51,21]],"Objectives":["mcom 5","mcom 6","mcom 4"]} +112;1;-562.604004;90.798264;-68.177650;3;{"LinkMode":0,"Links":[[51,21]],"Objectives":["mcom 4","mcom 5","mcom 6"]} 112;2;-562.279663;90.798264;-68.302200;19; 112;3;-560.905701;90.798264;-68.077454;4; 112;4;-559.286621;90.798264;-67.312904;4; diff --git a/mapfiles/MP_Subway_ConquestLarge0.map b/mapfiles/MP_Subway_ConquestLarge0.map index 765b836e..f0785aa1 100644 --- a/mapfiles/MP_Subway_ConquestLarge0.map +++ b/mapfiles/MP_Subway_ConquestLarge0.map @@ -993,7 +993,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 8;135;-168.939575;59.375458;-285.920715;3;{"LinkMode":0,"Links":[[5,132]]} 8;136;-169.760361;59.259548;-285.764771;3; 8;137;-170.337616;59.259571;-285.656189;3;{"LinkMode":0,"Links":[[6,2]]} -9;1;-191.214844;59.252750;-289.883789;65283;{"Objectives":["c","b"]} +9;1;-191.214844;59.252750;-289.883789;65283;{"Objectives":["b","c"]} 9;2;-191.612518;59.258621;-290.593597;3;{"LinkMode":0,"Links":[[6,22]]} 9;3;-192.019272;59.263947;-291.297943;3; 9;4;-192.581253;59.271091;-292.267609;4; @@ -1810,7 +1810,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 13;137;-176.238464;64.434372;-539.459839;3; 13;138;-177.022339;64.434372;-539.379028;3;{"LinkMode":0,"Links":[[20,96]]} 13;139;-177.362976;64.434372;-539.343384;3;{"LinkMode":0,"Links":[[19,177]]} -14;1;-191.910156;64.433411;-515.757812;65283;{"LinkMode":0,"Links":[[20,131]],"Objectives":["b","a"]} +14;1;-191.910156;64.433411;-515.757812;65283;{"LinkMode":0,"Links":[[20,131]],"Objectives":["a","b"]} 14;2;-191.999588;64.433411;-515.419922;3; 14;3;-192.212540;64.307167;-514.642944;3; 14;4;-192.429703;64.274216;-513.803284;4;{"LinkMode":0,"Links":[[19,3]]} @@ -3370,7 +3370,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 35;20;-182.866516;59.263966;-293.378387;4; 35;21;-182.212143;59.259571;-292.209534;3; 35;22;-181.996002;59.259571;-291.746796;3;{"LinkMode":0,"Links":[[6,10]]} -36;1;-190.324203;59.256943;-290.634216;65283;{"LinkMode":0,"Links":[[6,22]],"Objectives":["c","b","a"]} +36;1;-190.324203;59.256943;-290.634216;65283;{"LinkMode":0,"Links":[[6,22]],"Objectives":["a","b","c"]} 36;2;-188.674927;59.259769;-291.443024;4; 36;3;-187.491684;59.261124;-291.922455;4; 36;4;-185.684174;59.263096;-292.641388;4; diff --git a/mapfiles/MP_Subway_RushLarge0.map b/mapfiles/MP_Subway_RushLarge0.map index 03808626..6cd657d1 100644 --- a/mapfiles/MP_Subway_RushLarge0.map +++ b/mapfiles/MP_Subway_RushLarge0.map @@ -3,7 +3,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 1;2;-128.433060;69.775856;-79.960915;19;{"LinkMode":0,"Links":[[79,1]]} 1;3;-128.088303;69.605591;-78.425804;3; 1;4;-127.822281;69.488739;-77.201775;3;{"LinkMode":0,"Links":[[65,1]]} -2;1;-129.436203;69.982613;-89.868988;4;{"LinkMode":0,"Links":[[20,2]],"Objectives":["mcom 1","base ru 1"]} +2;1;-129.436203;69.982613;-89.868988;4;{"LinkMode":0,"Links":[[20,2]],"Objectives":["base ru 1","mcom 1"]} 2;2;-128.557159;70.103073;-88.993317;4; 2;3;-127.463722;70.193016;-87.994820;4; 2;4;-126.439621;70.242775;-87.128525;4; @@ -2440,7 +2440,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 25;92;-214.409180;64.661171;-543.316406;3; 25;93;-215.042572;64.671730;-543.307983;3; 25;94;-215.440765;64.671692;-543.299744;3; -26;1;-193.385742;64.433449;-527.739258;65283;{"LinkMode":0,"Links":[[25,56],[25,52]],"Objectives":["mcom 7","mcom 8","base ru 3"]} +26;1;-193.385742;64.433449;-527.739258;65283;{"LinkMode":0,"Links":[[25,56],[25,52]],"Objectives":["base ru 3","mcom 7","mcom 8"]} 26;2;-193.050568;64.433403;-528.304382;3; 26;3;-192.598801;64.433418;-529.111755;3;{"LinkMode":0,"Links":[[121,2]]} 26;4;-192.185226;64.433449;-529.954224;4; @@ -2741,7 +2741,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 28;2;-263.962891;62.129044;-582.302429;3;{"LinkMode":0,"Links":[[30,1]]} 28;3;-262.368042;62.129185;-582.313599;3; 28;4;-261.163269;62.129272;-582.401184;3;{"LinkMode":0,"Links":[[165,1]]} -29;1;-190.771149;62.129810;-591.595764;3;{"LinkMode":0,"Links":[[164,1]],"Objectives":["base ru 4","mcom 8","mcom 7"]} +29;1;-190.771149;62.129810;-591.595764;3;{"LinkMode":0,"Links":[[164,1]],"Objectives":["base ru 4","mcom 7","mcom 8"]} 29;2;-189.476440;62.129810;-590.736328;4; 29;3;-187.476318;62.129147;-589.180908;4; 29;4;-185.677032;62.129238;-587.313660;4; @@ -2885,7 +2885,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 30;69;-213.576172;69.587692;-527.791016;3; 30;70;-211.650833;69.612724;-529.410828;3; 30;71;-211.255707;69.612724;-528.969910;3;{"LinkMode":0,"Links":[[25,20]]} -31;1;-176.799805;64.644333;-622.851562;65283;{"LinkMode":0,"Links":[[162,3]],"Objectives":["mcom 7","mcom 8","base ru 4","sniper"]} +31;1;-176.799805;64.644333;-622.851562;65283;{"LinkMode":0,"Links":[[162,3]],"Objectives":["base ru 4","mcom 7","mcom 8","sniper"]} 31;2;-175.995850;64.644333;-622.678894;3; 31;3;-175.205841;64.644333;-622.949585;3; 31;4;-174.455536;64.644333;-623.283875;3; diff --git a/mapfiles/XP1_001_ConquestAssaultSmall0.map b/mapfiles/XP1_001_ConquestAssaultSmall0.map index 35d08882..d1d191ef 100644 --- a/mapfiles/XP1_001_ConquestAssaultSmall0.map +++ b/mapfiles/XP1_001_ConquestAssaultSmall0.map @@ -1114,7 +1114,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 9;94;-170.329498;154.901169;-298.458130;2; 9;95;-170.233627;154.901169;-299.093140;2; 9;96;-170.118179;154.895309;-299.660431;2; -10;1;-189.193359;158.248825;-23.908203;65283;{"LinkMode":0,"Links":[[6,25]],"Objectives":["b","a","d","e"]} +10;1;-189.193359;158.248825;-23.908203;65283;{"LinkMode":0,"Links":[[6,25]],"Objectives":["a","b","d","e"]} 10;2;-188.988937;158.471634;-25.149639;18; 10;3;-188.836029;159.806625;-26.104324;2; 10;4;-188.611954;158.479950;-27.496651;2; @@ -1447,7 +1447,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 11;152;-299.841248;155.921555;-137.274521;3; 11;153;-299.222595;155.979767;-136.166565;3;{"LinkMode":0,"Links":[[7,70]]} 11;154;-298.638855;156.023743;-135.131531;3;{"LinkMode":0,"Links":[[7,40]]} -12;1;-281.012695;155.962723;-118.115234;65283;{"LinkMode":0,"Links":[[7,89]],"Objectives":["b","a","c"]} +12;1;-281.012695;155.962723;-118.115234;65283;{"LinkMode":0,"Links":[[7,89]],"Objectives":["a","b","c"]} 12;2;-280.165985;155.976898;-118.086693;4; 12;3;-278.268494;155.979172;-118.025703;4;{"LinkMode":0,"Links":[[7,10]]} 12;4;-276.331635;155.909164;-117.965820;4; @@ -3194,7 +3194,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 26;112;-175.968491;149.814255;-171.355728;4; 26;113;-177.477646;149.948044;-172.566925;3; 26;114;-177.911133;149.948044;-172.883789;3;{"LinkMode":0,"Links":[[8,31]]} -27;1;-174.055664;149.803528;-179.818359;65283;{"LinkMode":0,"Links":[[8,42]],"Objectives":["b","a","d"]} +27;1;-174.055664;149.803528;-179.818359;65283;{"LinkMode":0,"Links":[[8,42]],"Objectives":["a","b","d"]} 27;2;-171.921143;149.802673;-178.866058;4; 27;3;-169.783081;149.828201;-178.247604;4; 27;4;-167.494537;149.872742;-177.502960;4; diff --git a/mapfiles/XP1_001_ConquestAssaultSmall1.map b/mapfiles/XP1_001_ConquestAssaultSmall1.map index ababac9e..9b5a674b 100644 --- a/mapfiles/XP1_001_ConquestAssaultSmall1.map +++ b/mapfiles/XP1_001_ConquestAssaultSmall1.map @@ -651,7 +651,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 8;108;-208.768692;149.771698;-175.238785;3; 8;109;-209.003906;149.847458;-174.201279;3; 8;110;-209.010452;149.810333;-173.271362;3; -10;1;-189.193359;158.248825;-23.908203;65283;{"LinkMode":0,"Links":[[6,25]],"Objectives":["b","a","d"]} +10;1;-189.193359;158.248825;-23.908203;65283;{"LinkMode":0,"Links":[[6,25]],"Objectives":["a","b","d"]} 10;2;-188.988937;158.471634;-25.149639;18; 10;3;-188.836029;159.806625;-26.104324;2; 10;4;-188.611954;158.479950;-27.496651;2; @@ -772,7 +772,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 10;119;-188.921631;149.977936;-200.695770;4; 10;120;-187.338440;149.977936;-200.694595;4; 10;121;-185.665863;149.977936;-200.548355;4;{"LinkMode":0,"Links":[[13,20]]} -12;1;-188.351288;155.928513;-81.466003;4;{"LinkMode":0,"Links":[[5,11]],"Objectives":["b","a"]} +12;1;-188.351288;155.928513;-81.466003;4;{"LinkMode":0,"Links":[[5,11]],"Objectives":["a","b"]} 12;2;-187.300354;155.927261;-79.709198;4; 12;3;-186.365906;155.777649;-78.042496;4; 12;4;-185.373611;155.807129;-76.268776;4; @@ -1427,7 +1427,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 26;112;-175.968491;149.814255;-171.355728;4; 26;113;-177.477646;149.948044;-172.566925;3; 26;114;-177.911133;149.948044;-172.883789;3;{"LinkMode":0,"Links":[[8,31]]} -27;1;-174.055664;149.803528;-179.818359;65283;{"LinkMode":0,"Links":[[8,42]],"Objectives":["b","a","d"]} +27;1;-174.055664;149.803528;-179.818359;65283;{"LinkMode":0,"Links":[[8,42]],"Objectives":["a","b","d"]} 27;2;-171.921143;149.802673;-178.866058;4; 27;3;-169.783081;149.828201;-178.247604;4; 27;4;-167.494537;149.872742;-177.502960;4; diff --git a/mapfiles/XP1_002_ConquestSmall0.map b/mapfiles/XP1_002_ConquestSmall0.map index 544002e6..bdc4d57b 100644 --- a/mapfiles/XP1_002_ConquestSmall0.map +++ b/mapfiles/XP1_002_ConquestSmall0.map @@ -3771,7 +3771,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 30;8;819.473511;42.825001;-661.205261;4; 30;9;821.435852;42.825001;-660.306274;3;{"Action":{"inputs":[35],"pitch":-0.0044782040640712,"time":0.5,"type":"vehicle","yaw":5.3828673362732}} 31;1;4.900391;33.000782;18.924805;3; -32;1;55.558594;33.188282;-210.306641;65283;{"LinkMode":0,"Links":[[3,9]],"Objectives":["c","b","a","d"]} +32;1;55.558594;33.188282;-210.306641;65283;{"LinkMode":0,"Links":[[3,9]],"Objectives":["a","b","c","d"]} 32;2;54.182980;33.188282;-210.530228;3; 32;3;52.651840;33.175549;-210.804123;4; 32;4;50.617691;33.168972;-211.169601;4; diff --git a/mapfiles/XP1_003_ConquestAssaultLarge0.map b/mapfiles/XP1_003_ConquestAssaultLarge0.map index 1f28fd8a..d93c8081 100644 --- a/mapfiles/XP1_003_ConquestAssaultLarge0.map +++ b/mapfiles/XP1_003_ConquestAssaultLarge0.map @@ -6200,7 +6200,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 85;102;442.167267;79.660454;-265.117889;2; 85;103;441.852692;79.635063;-264.592834;2; 85;104;441.628082;79.623474;-264.234558;2;{"LinkMode":0,"Links":[[86,1]]} -86;1;423.760681;79.390121;-256.577087;3;{"LinkMode":0,"Links":[[85,104]],"Objectives":["a","b","c","d","e","f","g","base ru","base us"],"Vehicles":["land"]} +86;1;423.760681;79.390121;-256.577087;3;{"LinkMode":0,"Links":[[85,104]],"Objectives":["a","b","base ru","base us","c","d","e","f","g"],"Vehicles":["land"]} 86;2;423.233582;79.394836;-256.567963;3; 86;3;422.218567;79.392250;-256.544037;3; 86;4;420.807739;79.369026;-256.509583;4; diff --git a/mapfiles/XP1_003_ConquestAssaultSmall0.map b/mapfiles/XP1_003_ConquestAssaultSmall0.map index 49cab4ca..ae8f8193 100644 --- a/mapfiles/XP1_003_ConquestAssaultSmall0.map +++ b/mapfiles/XP1_003_ConquestAssaultSmall0.map @@ -200,7 +200,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 6;27;365.251984;101.420975;-121.706284;3; 6;28;365.937653;101.384705;-120.701401;3; 6;29;366.787231;101.352348;-119.917191;3;{"LinkMode":0,"Links":[[56,126]]} -7;1;286.203125;81.529099;-209.461914;65283;{"LinkMode":0,"Links":[[60,54]],"Objectives":["c","g","e"]} +7;1;286.203125;81.529099;-209.461914;65283;{"LinkMode":0,"Links":[[60,54]],"Objectives":["c","e","g"]} 7;2;284.629791;81.529099;-210.579285;4; 7;3;282.858154;81.529099;-211.898895;4; 7;4;281.514130;81.600388;-213.433823;4; @@ -327,7 +327,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 7;125;107.231010;104.505623;-131.262909;4; 7;126;109.383148;104.503685;-131.292358;4; 7;127;110.804672;104.503708;-131.296936;3;{"LinkMode":0,"Links":[[64,55]]} -8;1;99.342773;105.112106;-126.493164;65283;{"LinkMode":0,"Links":[[64,85]],"Objectives":["c","g","e"]} +8;1;99.342773;105.112106;-126.493164;65283;{"LinkMode":0,"Links":[[64,85]],"Objectives":["c","e","g"]} 8;2;99.099289;105.090973;-124.566772;4; 8;3;98.678696;103.704926;-122.801888;4; 8;4;98.067482;102.405449;-121.240707;4; @@ -1736,7 +1736,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 24;75;282.719147;102.756592;-108.593834;4; 24;76;280.450195;102.297653;-108.407883;3; 24;77;279.897095;102.297653;-108.366066;3;{"LinkMode":0,"Links":[[62,53]]} -25;1;278.277344;102.297653;-107.622246;65283;{"LinkMode":0,"Links":[[62,2]],"Objectives":["d","g","e"]} +25;1;278.277344;102.297653;-107.622246;65283;{"LinkMode":0,"Links":[[62,2]],"Objectives":["d","e","g"]} 25;2;276.992889;102.297653;-108.010811;3; 25;3;275.775208;102.297653;-108.353508;3; 25;4;274.680328;102.297661;-108.596931;3; @@ -1870,7 +1870,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 25;132;106.585487;104.506104;-131.847031;4; 25;133;108.433487;104.497849;-132.412521;3; 25;134;108.926491;104.497849;-132.556854;3;{"LinkMode":0,"Links":[[64,69]]} -26;1;109.043945;104.498825;-130.050781;65283;{"LinkMode":0,"Links":[[64,55]],"Objectives":["f","g","e"]} +26;1;109.043945;104.498825;-130.050781;65283;{"LinkMode":0,"Links":[[64,55]],"Objectives":["e","f","g"]} 26;2;107.329712;104.498825;-130.335037;4; 26;3;105.187958;104.498825;-130.650833;4; 26;4;103.011833;104.498825;-130.365997;4; @@ -2040,7 +2040,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 27;73;108.378036;104.497849;-131.895660;4; 27;74;110.590248;104.497665;-131.973923;3; 27;75;111.548012;104.491989;-132.009415;3; -28;1;108.924805;104.497849;-128.350586;65283;{"LinkMode":0,"Links":[[64,54]],"Objectives":["d","g","e"]} +28;1;108.924805;104.497849;-128.350586;65283;{"LinkMode":0,"Links":[[64,54]],"Objectives":["d","e","g"]} 28;2;108.312683;104.497849;-128.715363;4; 28;3;106.395210;104.497849;-129.843979;4; 28;4;104.299911;104.497849;-130.634903;4; @@ -2455,7 +2455,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 32;82;281.616577;102.297653;-108.798386;4; 32;83;279.717865;102.297653;-108.725410;3; 32;84;278.482666;102.297653;-108.706970;3;{"LinkMode":0,"Links":[[62,51]]} -33;1;275.010742;102.297676;-106.925781;65283;{"LinkMode":0,"Links":[[62,7]],"Objectives":["d","g","e"]} +33;1;275.010742;102.297676;-106.925781;65283;{"LinkMode":0,"Links":[[62,7]],"Objectives":["d","e","g"]} 33;2;274.895935;102.297684;-107.251785;4; 33;3;273.478271;102.297638;-108.748024;4; 33;4;271.496979;102.297676;-109.545937;4; @@ -3091,7 +3091,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 38;92;153.117783;91.199966;-31.770575;4; 38;93;150.968552;91.199966;-31.471039;4; 38;94;149.262466;91.199997;-31.209303;3;{"LinkMode":0,"Links":[[63,62]]} -39;1;146.582031;91.199997;-31.625000;65283;{"LinkMode":0,"Links":[[63,69]],"Objectives":["f","g","e"]} +39;1;146.582031;91.199997;-31.625000;65283;{"LinkMode":0,"Links":[[63,69]],"Objectives":["e","f","g"]} 39;2;146.792358;91.199997;-32.419724;4; 39;3;147.340179;91.199997;-34.539501;4; 39;4;147.475037;91.199997;-36.748348;4; @@ -3388,7 +3388,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 43;46;145.950180;91.196106;-33.299595;4; 43;47;145.295425;91.196114;-31.252439;4; 43;48;144.832397;91.196114;-29.832994;3;{"LinkMode":0,"Links":[[63,62]]} -44;1;139.676758;91.199997;-48.167969;65283;{"LinkMode":0,"Links":[[63,38]],"Objectives":["f","g","e"]} +44;1;139.676758;91.199997;-48.167969;65283;{"LinkMode":0,"Links":[[63,38]],"Objectives":["e","f","g"]} 44;2;138.365234;91.199997;-46.332386;4; 44;3;136.930283;91.199997;-44.600105;4; 44;4;135.515259;91.202301;-42.982365;4; diff --git a/mapfiles/XP1_003_RushLarge0.map b/mapfiles/XP1_003_RushLarge0.map index cebe3907..edc83f39 100644 --- a/mapfiles/XP1_003_RushLarge0.map +++ b/mapfiles/XP1_003_RushLarge0.map @@ -1811,7 +1811,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 47;104;269.327759;98.944283;-137.329041;3; 47;105;268.512299;98.944283;-137.904510;3;{"LinkMode":0,"Links":[[78,4]]} 47;106;268.253113;98.944283;-138.514908;3;{"LinkMode":0,"Links":[[46,5]]} -48;1;457.029938;99.555832;-54.681732;3;{"LinkMode":0,"Links":[[2,46]],"Objectives":["mcom 3","mcom 4","mcom 1"]} +48;1;457.029938;99.555832;-54.681732;3;{"LinkMode":0,"Links":[[2,46]],"Objectives":["mcom 1","mcom 3","mcom 4"]} 48;2;456.635315;99.546524;-54.313900;20;{"LinkMode":0,"Links":[[2,41]]} 48;3;455.233093;99.599617;-53.015564;4; 48;4;453.690857;99.678802;-51.836590;4; @@ -1907,7 +1907,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 48;94;311.462769;92.019524;-109.951500;3; 48;95;310.375122;92.167274;-110.383827;3; 48;96;309.434509;91.972038;-110.744080;3;{"LinkMode":0,"Links":[[45,61]]} -49;1;390.918274;102.208252;-77.039864;3;{"LinkMode":0,"Links":[[4,43]],"Objectives":["mcom 3","mcom 4","mcom 2"]} +49;1;390.918274;102.208252;-77.039864;3;{"LinkMode":0,"Links":[[4,43]],"Objectives":["mcom 2","mcom 3","mcom 4"]} 49;2;390.756409;102.208252;-77.559647;19; 49;3;390.313934;102.208252;-78.908104;4; 49;4;389.752197;102.208252;-80.761658;4; @@ -3459,7 +3459,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 90;116;105.035522;104.501266;-149.601105;3;{"LinkMode":0,"Links":[[117,66]]} 90;117;105.811302;104.498299;-148.910706;3; 90;118;106.084602;104.498299;-148.493347;3;{"LinkMode":0,"Links":[[89,2]]} -91;1;283.653778;91.206223;-119.830429;3;{"LinkMode":0,"Links":[[45,27]],"Objectives":["mcom 5","mcom 6","mcom 3","mcom 4"]} +91;1;283.653778;91.206223;-119.830429;3;{"LinkMode":0,"Links":[[45,27]],"Objectives":["mcom 3","mcom 4","mcom 5","mcom 6"]} 91;2;283.150787;91.206223;-120.176430;19;{"LinkMode":0,"Links":[[45,83]]} 91;3;282.154907;91.206223;-120.844009;3; 91;4;280.637451;91.209518;-121.859146;4; @@ -3540,7 +3540,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 91;79;165.030899;99.309875;-151.747421;3; 91;80;164.060272;99.096352;-151.073883;3; 91;81;163.481049;98.965942;-150.703201;3;{"LinkMode":0,"Links":[[88,103]]} -92;1;275.719818;95.644196;-140.080887;3;{"LinkMode":0,"Links":[[47,15]],"Objectives":["mcom 5","mcom 6","mcom 4"]} +92;1;275.719818;95.644196;-140.080887;3;{"LinkMode":0,"Links":[[47,15]],"Objectives":["mcom 4","mcom 5","mcom 6"]} 92;2;275.155548;95.644196;-139.315323;3; 92;3;274.227722;95.445923;-139.073029;3; 92;4;273.922485;94.639877;-139.937973;3; diff --git a/mapfiles/XP1_004_RushLarge0.map b/mapfiles/XP1_004_RushLarge0.map index dfef10e9..ed1b97f5 100644 --- a/mapfiles/XP1_004_RushLarge0.map +++ b/mapfiles/XP1_004_RushLarge0.map @@ -915,7 +915,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 13;110;-9.561062;100.620110;-193.946350;3; 13;111;-9.333404;100.667976;-194.990051;3; 13;112;-9.264771;100.681129;-195.306305;3;{"LinkMode":0,"Links":[[7,42]]} -14;1;27.053087;102.479729;-209.075577;65283;{"LinkMode":0,"Links":[[4,73]],"Objectives":["base us 2","mcom 3","mcom 2"]} +14;1;27.053087;102.479729;-209.075577;65283;{"LinkMode":0,"Links":[[4,73]],"Objectives":["base us 2","mcom 2","mcom 3"]} 14;2;26.788328;102.277817;-207.982712;3; 14;3;26.704496;101.981224;-206.195938;4; 14;4;27.171703;101.793518;-204.317169;4; @@ -1443,7 +1443,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 21;136;245.212662;99.047134;-146.003510;4; 21;137;247.242584;99.048340;-146.342941;4; 21;138;248.483322;99.080643;-146.548462;3;{"LinkMode":0,"Links":[[19,20]]} -22;1;280.180847;99.491417;-178.219955;65283;{"Objectives":["mcom 2","mcom 1"]} +22;1;280.180847;99.491417;-178.219955;65283;{"Objectives":["mcom 1","mcom 2"]} 22;2;279.648102;99.504364;-178.117310;3; 22;3;279.055054;99.518822;-177.647842;3; 22;4;277.283936;99.585091;-177.559860;4; @@ -2403,7 +2403,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 33;166;324.941315;109.500160;-66.494804;3; 33;167;324.571167;109.513000;-67.416641;3; 33;168;324.179718;109.483215;-68.375862;3;{"LinkMode":0,"Links":[[31,5]]} -34;1;322.980377;109.398460;-68.881752;65283;{"LinkMode":0,"Links":[[31,4]],"Objectives":["mcom 6","mcom 5","base us 3"]} +34;1;322.980377;109.398460;-68.881752;65283;{"LinkMode":0,"Links":[[31,4]],"Objectives":["base us 3","mcom 5","mcom 6"]} 34;2;322.900543;109.394623;-68.265076;4; 34;3;322.573883;109.212875;-66.518570;4; 34;4;321.914062;108.983437;-64.263451;4; diff --git a/mapfiles/XP3_Alborz_ConquestSmall0.map b/mapfiles/XP3_Alborz_ConquestSmall0.map index 396f5e6c..0baea0a4 100644 --- a/mapfiles/XP3_Alborz_ConquestSmall0.map +++ b/mapfiles/XP3_Alborz_ConquestSmall0.map @@ -10947,7 +10947,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 98;817;557.635742;549.305542;-95.580818;3; 98;818;558.019836;549.325134;-95.532822;3; 98;819;558.076660;549.358826;-95.854477;3;{"LinkMode":0,"Links":[[14,35]]} -99;1;89.526932;457.191864;546.491333;65283;{"LinkMode":0,"Links":[[90,4]],"Objectives":["a","base us","base ru"]} +99;1;89.526932;457.191864;546.491333;65283;{"LinkMode":0,"Links":[[90,4]],"Objectives":["a","base ru","base us"]} 99;2;88.458984;457.378204;545.819275;4; 99;3;86.678658;457.745758;544.750671;4; 99;4;85.197327;457.860992;543.866577;4; diff --git a/mapfiles/XP3_Alborz_RushLarge0.map b/mapfiles/XP3_Alborz_RushLarge0.map index c3412909..d45e0c0c 100644 --- a/mapfiles/XP3_Alborz_RushLarge0.map +++ b/mapfiles/XP3_Alborz_RushLarge0.map @@ -2119,7 +2119,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 63;22;607.742737;434.489716;261.998657;2; 63;23;608.046204;434.503448;262.072388;2; 64;1;467.685547;327.408417;-1220.237061;3;{"Action":{"inputs":[35],"pitch":-0.4997949898243,"time":0.5,"type":"vehicle","yaw":1.3075134754181},"Objectives":["base ru 2","vehicle plane2 ru"]} -67;1;478.789062;421.099121;572.252502;3;{"LinkMode":0,"Links":[[4,59]],"Objectives":["mcom 3","mcom 4","mcom 2"]} +67;1;478.789062;421.099121;572.252502;3;{"LinkMode":0,"Links":[[4,59]],"Objectives":["mcom 2","mcom 3","mcom 4"]} 67;2;478.569641;421.092194;571.499878;20; 67;3;478.004608;420.999176;569.549194;4; 67;4;477.466339;420.807434;567.694946;4; diff --git a/mapfiles/XP3_Desert_ConquestLarge0.map b/mapfiles/XP3_Desert_ConquestLarge0.map index 416fa8c0..e1a8e69a 100644 --- a/mapfiles/XP3_Desert_ConquestLarge0.map +++ b/mapfiles/XP3_Desert_ConquestLarge0.map @@ -1117,7 +1117,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 26;132;-182.531006;64.078857;77.000015;2; 26;133;-182.963425;64.084419;77.618866;2; 26;134;-183.231781;64.083839;78.002892;2;{"Action":{"inputs":[35],"onlyPassengers":false,"time":0.5,"type":"exit"}} -27;1;-18.557976;65.649124;183.547668;65283;{"LinkMode":0,"Links":[[8,61]],"Objectives":["d","a"]} +27;1;-18.557976;65.649124;183.547668;65283;{"LinkMode":0,"Links":[[8,61]],"Objectives":["a","d"]} 27;2;-18.407692;65.685280;183.192490;3; 27;3;-17.926380;65.758781;182.536346;3; 27;4;-17.308020;65.790894;181.981644;3; @@ -16975,7 +16975,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 43;73;-178.161331;64.068115;71.111076;3; 43;74;-178.144165;64.068115;72.014679;3; 43;75;-178.150879;64.068115;72.597878;3;{"LinkMode":0,"Links":[[6,8]]} -44;1;-69.080956;64.626907;86.851768;65283;{"LinkMode":0,"Links":[[7,27]],"Objectives":["d","g","f","e","c","b","a"]} +44;1;-69.080956;64.626907;86.851768;65283;{"LinkMode":0,"Links":[[7,27]],"Objectives":["a","b","c","d","e","f","g"]} 44;2;-69.572510;64.626907;87.309486;3; 44;3;-70.212456;64.626907;87.931931;3; 44;4;-70.884247;64.626907;88.603149;3; @@ -22538,7 +22538,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 51;680;481.167023;73.733978;-405.065155;3; 51;681;480.816467;73.714005;-405.187531;3; 51;682;479.940796;73.672928;-405.528625;3;{"LinkMode":0,"Links":[[3,29]]} -52;1;478.472534;73.665710;-409.983917;65283;{"LinkMode":0,"Links":[[3,31]],"Objectives":["g","e","c"]} +52;1;478.472534;73.665710;-409.983917;65283;{"LinkMode":0,"Links":[[3,31]],"Objectives":["c","e","g"]} 52;2;477.257446;73.673096;-409.981903;3; 52;3;476.636871;73.678665;-409.946625;3; 52;4;475.485718;73.680595;-409.615540;4; @@ -23411,7 +23411,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 52;871;-204.040833;64.962357;64.671280;3; 52;872;-203.533234;64.942795;64.484039;3; 52;873;-203.144852;64.903938;64.616142;3;{"LinkMode":0,"Links":[[6,42]]} -53;1;-19.309868;64.167229;210.640915;65283;{"LinkMode":0,"Links":[[8,11]],"Objectives":["d","g","a"]} +53;1;-19.309868;64.167229;210.640915;65283;{"LinkMode":0,"Links":[[8,11]],"Objectives":["a","d","g"]} 53;2;-18.930185;64.163826;210.431503;3; 53;3;-18.114977;64.146400;209.981888;3; 53;4;-17.450264;64.123848;209.572159;3; @@ -52973,7 +52973,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 150;217;286.534271;65.563309;-243.249039;3; 150;218;284.838043;65.624458;-241.401901;3; 150;219;283.987701;65.792931;-240.437225;3;{"LinkMode":0,"Links":[[4,30]]} -151;1;0.977258;65.854591;201.332947;3;{"LinkMode":0,"Links":[[8,39]],"Objectives":["c","b","a"]} +151;1;0.977258;65.854591;201.332947;3;{"LinkMode":0,"Links":[[8,39]],"Objectives":["a","b","c"]} 151;2;1.626231;65.887871;201.502640;3; 151;3;3.215311;66.000214;201.899216;3; 151;4;2.189414;66.058411;203.464996;3; diff --git a/mapfiles/XP3_Desert_RushLarge0.map b/mapfiles/XP3_Desert_RushLarge0.map index 126d9a1b..856cffb2 100644 --- a/mapfiles/XP3_Desert_RushLarge0.map +++ b/mapfiles/XP3_Desert_RushLarge0.map @@ -1806,7 +1806,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 33;33;46.276810;64.910454;-4.159749;4; 33;34;44.620770;64.910454;-4.709882;3; 33;35;43.755745;64.910454;-4.991975;3; -34;1;-153.140137;64.081932;75.354805;3;{"LinkMode":0,"Links":[[13,100]],"Objectives":["mcom 3","mcom 4","mcom 1"]} +34;1;-153.140137;64.081932;75.354805;3;{"LinkMode":0,"Links":[[13,100]],"Objectives":["mcom 1","mcom 3","mcom 4"]} 34;2;-152.958420;64.078758;76.013161;20;{"LinkMode":0,"Links":[[28,70],[3,39]]} 34;3;-152.090836;64.068901;77.710007;4;{"LinkMode":0,"Links":[[11,89]]} 34;4;-151.057465;64.058197;79.362343;4; @@ -1933,7 +1933,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 34;125;26.838478;64.935844;1.763263;4; 34;126;28.211510;64.907242;0.523201;4; 34;127;29.755587;64.907242;0.157596;3;{"LinkMode":0,"Links":[[31,5]]} -35;1;-61.601589;62.564774;149.714005;3;{"LinkMode":0,"Links":[[4,34]],"Objectives":["mcom 3","mcom 4","mcom 2"]} +35;1;-61.601589;62.564774;149.714005;3;{"LinkMode":0,"Links":[[4,34]],"Objectives":["mcom 2","mcom 3","mcom 4"]} 35;2;-62.148655;62.548134;149.058731;20;{"LinkMode":0,"Links":[[9,115]]} 35;3;-63.385666;62.525158;147.577026;4; 35;4;-64.635269;62.516193;146.080261;4;{"LinkMode":0,"Links":[[4,40]]} @@ -3842,7 +3842,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 76;98;253.350357;65.563957;-308.885132;3; 76;99;254.479782;65.563957;-308.483368;3; 76;100;255.572327;65.572205;-308.098877;3;{"LinkMode":0,"Links":[[50,68]]} -77;1;271.855896;65.557068;-323.459137;3;{"Objectives":["mcom 7","mcom 8","mcom 6"]} +77;1;271.855896;65.557068;-323.459137;3;{"Objectives":["mcom 6","mcom 7","mcom 8"]} 77;2;273.736877;65.513290;-322.720947;4; 77;3;275.674133;65.499397;-322.574493;4; 77;4;277.622040;65.428261;-322.525482;4; @@ -3961,7 +3961,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 77;117;444.747894;73.714264;-409.870239;4; 77;118;446.247925;73.660744;-410.469604;3; 77;119;446.574341;73.656593;-410.600128;3;{"LinkMode":0,"Links":[[81,1]]} -78;1;322.916687;65.555267;-233.487762;3;{"Objectives":["mcom 7","mcom 8","mcom 5"]} +78;1;322.916687;65.555267;-233.487762;3;{"Objectives":["mcom 5","mcom 7","mcom 8"]} 78;2;323.307587;65.559875;-233.781387;20; 78;3;324.737274;65.556877;-234.958237;4; 78;4;326.235565;65.551720;-236.205185;4; diff --git a/mapfiles/XP3_Valley_ConquestLarge0.map b/mapfiles/XP3_Valley_ConquestLarge0.map index 97b11035..709479c2 100644 --- a/mapfiles/XP3_Valley_ConquestLarge0.map +++ b/mapfiles/XP3_Valley_ConquestLarge0.map @@ -1678,7 +1678,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 13;264;-191.999222;137.937592;347.604065;4; 13;265;-190.584061;137.938187;348.945435;4; 13;266;-189.723206;137.938538;349.762848;3;{"LinkMode":0,"Links":[[2,48]]} -14;1;-332.328125;138.829147;-140.301285;65283;{"LinkMode":0,"Links":[[7,41]],"Objectives":["e","g","f"]} +14;1;-332.328125;138.829147;-140.301285;65283;{"LinkMode":0,"Links":[[7,41]],"Objectives":["e","f","g"]} 14;2;-331.915894;138.346786;-141.455566;4; 14;3;-331.347748;138.023865;-142.999359;4; 14;4;-330.448334;137.971130;-144.638016;4; @@ -2029,7 +2029,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 16;68;-213.298950;131.961411;-288.827332;3; 16;69;-213.203690;131.987228;-290.033966;3; 16;70;-213.162201;131.978287;-290.632233;3; -17;1;-154.387131;151.940033;-40.986256;65283;{"LinkMode":0,"Links":[[9,30]],"Objectives":["d","g","f"]} +17;1;-154.387131;151.940033;-40.986256;65283;{"LinkMode":0,"Links":[[9,30]],"Objectives":["d","f","g"]} 17;2;-154.448532;151.938828;-41.823490;4; 17;3;-154.643219;151.939072;-43.442299;4; 17;4;-154.908600;152.014877;-45.576893;4; @@ -2781,7 +2781,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 18;502;-286.994843;150.570847;425.222931;3; 18;503;-286.033447;150.570847;425.645508;3; 18;504;-285.711456;150.570847;425.782654;3;{"LinkMode":0,"Links":[[1,19]]} -19;1;-286.107513;121.501747;-444.651611;65283;{"LinkMode":0,"Links":[[15,69]],"Objectives":["a","b","d","g","f"]} +19;1;-286.107513;121.501747;-444.651611;65283;{"LinkMode":0,"Links":[[15,69]],"Objectives":["a","b","d","f","g"]} 19;2;-285.481628;121.501747;-443.310577;4; 19;3;-284.493622;121.501747;-441.683960;4; 19;4;-283.328003;121.501747;-440.126068;4; @@ -3640,7 +3640,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 21;310;-196.335571;139.458405;373.517639;3; 21;311;-195.135300;139.214981;372.983459;3; 21;312;-194.200958;139.057587;372.572174;3;{"LinkMode":0,"Links":[[2,60]]} -22;1;-415.340942;147.074539;860.114014;65283;{"LinkMode":0,"Links":[[20,1]],"Objectives":["a","c","base us"]} +22;1;-415.340942;147.074539;860.114014;65283;{"LinkMode":0,"Links":[[20,1]],"Objectives":["a","base us","c"]} 22;2;-415.544189;147.104965;858.605530;4; 22;3;-416.030304;147.152710;856.533691;4; 22;4;-416.307617;147.255493;854.619263;4; @@ -4050,7 +4050,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 23;35;-475.179810;114.595406;-828.506531;4; 23;36;-473.789825;114.595406;-827.482361;3; 23;37;-473.402039;114.595406;-827.196716;3;{"LinkMode":0,"Links":[[24,1],[25,1]]} -24;1;-473.419006;114.595406;-825.135193;65283;{"LinkMode":0,"Links":[[23,37]],"Objectives":["g","f","base ru"]} +24;1;-473.419006;114.595406;-825.135193;65283;{"LinkMode":0,"Links":[[23,37]],"Objectives":["base ru","f","g"]} 24;2;-473.158661;114.595406;-823.469543;4; 24;3;-472.482513;114.595406;-821.687622;4; 24;4;-471.756500;114.595406;-819.920471;4; @@ -4369,7 +4369,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 24;317;-203.583572;131.818207;-307.858124;3; 24;318;-203.685364;131.818207;-306.657715;3; 24;319;-203.752289;131.818207;-305.709930;3;{"LinkMode":0,"Links":[[16,9]]} -25;1;-474.712830;114.595413;-825.426941;65283;{"LinkMode":0,"Links":[[23,37]],"Objectives":["e","g","base ru"]} +25;1;-474.712830;114.595413;-825.426941;65283;{"LinkMode":0,"Links":[[23,37]],"Objectives":["base ru","e","g"]} 25;2;-474.561768;114.595413;-824.782104;4; 25;3;-474.161194;114.595413;-823.017456;4; 25;4;-473.818573;114.595413;-821.329041;4; diff --git a/mapfiles/XP3_Valley_RushLarge0.map b/mapfiles/XP3_Valley_RushLarge0.map index f3ae5bb6..2688ea34 100644 --- a/mapfiles/XP3_Valley_RushLarge0.map +++ b/mapfiles/XP3_Valley_RushLarge0.map @@ -1331,7 +1331,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 30;22;-332.920502;134.033310;219.612823;3; 30;23;-332.299225;134.033310;220.431839;3; 30;24;-330.751740;134.033310;220.938522;3;{"LinkMode":0,"Links":[[28,4]]} -31;1;-292.835449;150.564804;427.940796;3;{"Objectives":["mcom 3","mcom 4","mcom 1","mcom 2"]} +31;1;-292.835449;150.564804;427.940796;3;{"Objectives":["mcom 1","mcom 2","mcom 3","mcom 4"]} 31;2;-292.835449;151.162857;427.940796;3; 31;3;-292.882904;150.564804;427.839325;3; 31;4;-293.543793;150.564804;426.622498;4;{"LinkMode":0,"Links":[[3,57]]} @@ -1987,7 +1987,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 46;1;-368.482971;151.391739;308.637421;3;{"Objectives":["base us 2"]} 46;2;-367.363281;151.661850;308.351685;3; 46;3;-366.412689;151.843903;308.004181;3;{"LinkMode":0,"Links":[[47,1]]} -47;1;-363.962433;152.226837;306.462860;3;{"LinkMode":0,"Links":[[46,3]],"Objectives":["base us 2","mcom 4","mcom 3"]} +47;1;-363.962433;152.226837;306.462860;3;{"LinkMode":0,"Links":[[46,3]],"Objectives":["base us 2","mcom 3","mcom 4"]} 47;2;-363.447937;152.282440;306.139893;19; 47;3;-362.096893;152.461014;304.993835;4; 47;4;-360.973419;152.534424;303.420776;4; @@ -3168,7 +3168,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 73;83;-182.351059;153.344177;47.358334;3; 73;84;-182.988052;153.486008;47.949432;3; 73;85;-183.155243;153.486008;48.887413;3;{"LinkMode":0,"Links":[[52,25]]} -74;1;-168.836426;152.200562;36.998184;3;{"LinkMode":0,"Links":[[52,52]],"Objectives":["mcom 7","mcom 8","mcom 5","mcom 6"]} +74;1;-168.836426;152.200562;36.998184;3;{"LinkMode":0,"Links":[[52,52]],"Objectives":["mcom 5","mcom 6","mcom 7","mcom 8"]} 74;2;-169.044540;152.223846;35.942368;4;{"LinkMode":0,"Links":[[52,6]]} 74;3;-169.399033;152.264633;34.144241;4; 74;4;-169.671234;152.282639;32.762917;4; @@ -4367,7 +4367,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 100;71;-280.418152;121.541855;-464.994202;4; 100;72;-281.072632;121.541855;-462.862885;3; 100;73;-281.550323;121.541855;-462.049316;3;{"LinkMode":0,"Links":[[121,22]]} -101;1;-127.011856;123.093994;-335.914154;3;{"LinkMode":0,"Links":[[78,49]],"Objectives":["mcom 10","mcom 9","mcom 8"]} +101;1;-127.011856;123.093994;-335.914154;3;{"LinkMode":0,"Links":[[78,49]],"Objectives":["mcom 10","mcom 8","mcom 9"]} 101;2;-126.352966;123.059387;-336.741180;20; 101;3;-125.136108;122.985222;-338.036285;4; 101;4;-123.613525;122.847641;-339.252899;4; @@ -4445,7 +4445,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 101;76;-273.352386;121.501854;-470.669891;3; 101;77;-274.711823;121.501854;-470.613800;3; 101;78;-275.794830;121.501854;-470.583099;3;{"LinkMode":0,"Links":[[100,68]]} -102;1;-183.405609;131.793961;-289.062653;3;{"LinkMode":0,"Links":[[77,56]],"Objectives":["mcom 10","mcom 9","mcom 7"]} +102;1;-183.405609;131.793961;-289.062653;3;{"LinkMode":0,"Links":[[77,56]],"Objectives":["mcom 10","mcom 7","mcom 9"]} 102;2;-184.210846;131.827271;-288.802582;20; 102;3;-186.037155;131.847412;-289.257782;4;{"LinkMode":0,"Links":[[77,13]]} 102;4;-187.206421;131.845764;-290.392487;4;{"LinkMode":0,"Links":[[77,77]]} diff --git a/mapfiles/XP4_FD_ConquestSmall0.map b/mapfiles/XP4_FD_ConquestSmall0.map index 811e2443..1bce82f6 100644 --- a/mapfiles/XP4_FD_ConquestSmall0.map +++ b/mapfiles/XP4_FD_ConquestSmall0.map @@ -1270,7 +1270,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 19;43;-30.791565;70.473434;-94.546120;4; 19;44;-32.565395;70.473434;-93.817291;4;{"LinkMode":0,"Links":[[36,2]]} 19;45;-33.593487;70.473434;-93.186539;3;{"LinkMode":0,"Links":[[22,56]]} -20;1;-50.126953;71.778122;175.973633;65283;{"LinkMode":0,"Links":[[14,15]],"Objectives":["base rus","d","base ru"]} +20;1;-50.126953;71.778122;175.973633;65283;{"LinkMode":0,"Links":[[14,15]],"Objectives":["base ru","base rus","d"]} 20;2;-50.474964;71.749229;175.385971;4; 20;3;-51.394951;71.673798;173.754425;4; 20;4;-52.434170;71.628769;172.262650;4; diff --git a/mapfiles/XP4_FD_RushLarge0.map b/mapfiles/XP4_FD_RushLarge0.map index 726a3b57..4a357da2 100644 --- a/mapfiles/XP4_FD_RushLarge0.map +++ b/mapfiles/XP4_FD_RushLarge0.map @@ -147,7 +147,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 9;4;225.874664;67.680222;-136.009109;3; 9;5;224.821457;67.685066;-136.127075;3; 9;6;223.904480;67.729752;-136.344986;3;{"LinkMode":0,"Links":[[10,1]]} -10;1;222.669815;68.094940;-138.090271;65283;{"LinkMode":0,"Links":[[9,6]],"Objectives":["mcom 1","base us 1"]} +10;1;222.669815;68.094940;-138.090271;65283;{"LinkMode":0,"Links":[[9,6]],"Objectives":["base us 1","mcom 1"]} 10;2;222.523224;68.239845;-138.665894;20; 10;3;222.072586;68.693710;-140.468994;4; 10;4;221.656113;68.708794;-142.352280;4; @@ -1042,7 +1042,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 31;113;96.339035;64.032013;-26.851887;4; 31;114;98.180099;64.032013;-26.853769;4; 31;115;99.586014;64.032013;-26.856541;3; -32;1;130.730942;65.833511;-127.612053;65283;{"LinkMode":0,"Links":[[14,28]],"Objectives":["mcom 3","mcom 4","mcom 2"]} +32;1;130.730942;65.833511;-127.612053;65283;{"LinkMode":0,"Links":[[14,28]],"Objectives":["mcom 2","mcom 3","mcom 4"]} 32;2;130.763550;65.833511;-126.860703;20; 32;3;130.836395;65.867584;-124.939232;4; 32;4;130.788712;65.646957;-123.135689;4; @@ -1299,7 +1299,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 37;59;87.119949;74.511749;-50.182091;3;{"LinkMode":0,"Links":[[28,52]]} 38;1;165.707932;63.858601;-102.837067;3;{"Objectives":["base us 2"]} 38;2;166.246887;63.877098;-101.962082;3;{"LinkMode":0,"Links":[[39,1]]} -39;1;167.811203;63.923405;-100.362320;65283;{"LinkMode":0,"Links":[[38,2]],"Objectives":["mcom 4","base us 2"]} +39;1;167.811203;63.923405;-100.362320;65283;{"LinkMode":0,"Links":[[38,2]],"Objectives":["base us 2","mcom 4"]} 39;2;168.113922;63.967457;-98.840828;4; 39;3;168.015778;64.035294;-96.886139;4; 39;4;168.232941;63.960079;-95.059158;4; @@ -2347,7 +2347,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 67;27;-35.757915;70.550140;-89.598854;4; 67;28;-35.721813;70.469826;-91.163460;3; 67;29;-35.698200;70.469826;-91.553932;3;{"LinkMode":0,"Links":[[49,54]]} -68;1;-29.640680;70.589096;-93.056946;3;{"LinkMode":0,"Links":[[47,2]],"Objectives":["mcom 5","mcom 6","mcom 5 interact"]} +68;1;-29.640680;70.589096;-93.056946;3;{"LinkMode":0,"Links":[[47,2]],"Objectives":["mcom 5","mcom 5 interact","mcom 6"]} 68;2;-29.862843;70.522873;-93.399307;19; 68;3;-30.834829;70.459961;-94.928795;4; 68;4;-31.802332;70.462524;-96.494865;4; @@ -2479,7 +2479,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 72;74;11.299994;70.207954;3.237638;3;{"LinkMode":0,"Links":[[70,3]]} 72;75;11.148977;70.207954;4.327987;3;{"LinkMode":0,"Links":[[73,93]]} 72;76;11.105741;70.207954;5.251940;3;{"LinkMode":0,"Links":[[70,2],[79,44]]} -73;1;-34.695465;70.469826;-92.888870;65283;{"LinkMode":0,"Links":[[68,7]],"Objectives":["mcom 7","mcom 8","mcom 5"]} +73;1;-34.695465;70.469826;-92.888870;65283;{"LinkMode":0,"Links":[[68,7]],"Objectives":["mcom 5","mcom 7","mcom 8"]} 73;2;-35.096554;70.469826;-92.147308;20; 73;3;-35.988735;70.469826;-90.431107;4; 73;4;-36.862995;70.654770;-88.801781;4; diff --git a/mapfiles/XP4_Parl_ConquestLarge0.map b/mapfiles/XP4_Parl_ConquestLarge0.map index 8c884598..1f850ed1 100644 --- a/mapfiles/XP4_Parl_ConquestLarge0.map +++ b/mapfiles/XP4_Parl_ConquestLarge0.map @@ -1,4 +1,5 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data +0;0;0.000000;0.000000;0.000000;0;{"Authors":["Beschutzer"],"CompIndex":1,"Date":"2025-09-28 23:56:55"} 1;1;-334.297852;77.313332;357.779297;3;{"LinkMode":0,"Links":[[9,1]],"Objectives":["base us"]} 1;2;-335.365784;77.313354;357.766571;3; 1;3;-336.553497;77.328941;357.752472;3; @@ -818,7 +819,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 11;169;-375.393433;66.446205;124.228210;4; 11;170;-373.944092;66.284111;122.957054;4; 11;171;-372.258728;66.206474;122.250877;3;{"LinkMode":0,"Links":[[10,25]]} -12;1;-355.199219;77.533005;357.566406;65283;{"LinkMode":0,"Links":[[1,16]],"Objectives":["a","base us"]} +12;1;-355.199219;77.533005;357.566406;65283;{"LinkMode":0,"Links":[[1,16]],"Objectives":["a","b","base us","c","d","e","f","g"],"Vehicles":["land"]} 12;2;-356.170929;77.533005;357.562683;4; 12;3;-357.996216;77.533005;357.555023;4; 12;4;-359.945007;77.533005;357.534027;4; @@ -1239,6 +1240,16 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 18;39;-352.447052;70.746536;-68.062691;4; 18;40;-352.428925;70.220505;-69.744385;4; 18;41;-352.366333;70.220505;-71.534515;3; +19;1;-349.408295;77.501076;363.501740;3;{"Objectives":["spawn vehicle other1 us"]} +19;2;-350.087067;77.501076;363.340210;3; +19;3;-351.233307;77.533577;363.031433;3; +19;4;-352.297852;77.533577;362.758026;3;{"Action":{"inputs":[35],"pitch":-0.086106657981873,"time":0.5,"type":"vehicle","yaw":1.7171020507812}} +20;1;-358.724823;77.568069;379.105499;3;{"Objectives":["spawn vehicle tank1 us"]} +20;2;-358.922638;77.568069;378.168640;3; +20;3;-359.096924;77.567894;377.285736;3;{"Action":{"inputs":[35],"pitch":-0.074963577091694,"time":0.5,"type":"vehicle","yaw":2.7292275428772}} +21;1;-379.529816;76.814217;372.020599;3;{"Objectives":["spawn vehicle tank2 us"]} +21;2;-379.416382;76.812996;371.069855;3; +21;3;-379.375641;76.792274;370.098450;3;{"Action":{"inputs":[35],"pitch":-0.23003233969212,"time":0.5,"type":"vehicle","yaw":3.0607216358185}} 22;1;-216.816177;66.796562;-82.807274;4;{"LinkMode":0,"Links":[[39,17]],"Objectives":["d","g"]} 22;2;-218.184875;66.886444;-84.168022;4; 22;3;-219.279816;66.939987;-85.776726;4; @@ -1920,7 +1931,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 29;90;-487.643677;65.275368;2.835638;4; 29;91;-488.539459;65.329903;4.556917;4; 29;92;-489.360260;65.345505;6.312419;4; -29;93;-490.021454;65.345505;8.162559;4; +29;93;-490.021454;65.345505;8.162559;4;{"LinkMode":0,"Links":[[63,1]]} 29;94;-490.509216;65.276085;10.031771;4; 29;95;-490.939484;65.164024;11.961469;4; 29;96;-491.341278;65.040504;13.867166;4; @@ -2701,7 +2712,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 40;77;-444.533936;69.271385;-9.795186;4; 40;78;-445.134003;69.560577;-8.024268;3; 40;79;-445.653442;69.643921;-7.036994;3;{"LinkMode":0,"Links":[[36,60]]} -41;1;-353.591797;70.226364;-71.998047;65283;{"LinkMode":0,"Links":[[17,6]],"Objectives":["e","g","f"]} +41;1;-353.591797;70.226364;-71.998047;65283;{"LinkMode":0,"Links":[[17,6]],"Objectives":["e","f","g"]} 41;2;-353.591644;70.226364;-70.876106;4; 41;3;-353.590637;70.226364;-68.955482;4; 41;4;-353.592072;71.158066;-67.439796;4; @@ -3245,7 +3256,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 47;109;-491.515167;65.066116;13.092635;4; 47;110;-491.307129;65.185303;11.171227;4; 47;111;-490.977814;65.295776;9.270487;4; -47;112;-490.475647;65.340050;7.362459;4; +47;112;-490.475647;65.340050;7.362459;4;{"LinkMode":0,"Links":[[63,1]]} 47;113;-489.718628;65.341705;5.344811;4; 47;114;-488.907257;65.302376;3.578435;4; 47;115;-487.996857;65.245972;1.831959;4; @@ -3342,7 +3353,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 47;206;-357.411194;69.889084;-74.047935;4; 47;207;-356.540375;70.028938;-74.763931;3; 47;208;-355.450378;70.225647;-75.384796;3;{"LinkMode":0,"Links":[[17,4]]} -48;1;-468.841797;66.125786;90.679688;65283;{"LinkMode":0,"Links":[[8,14]],"Objectives":["b","g","f"]} +48;1;-468.841797;66.125786;90.679688;65283;{"LinkMode":0,"Links":[[8,14]],"Objectives":["b","f","g"]} 48;2;-469.773407;66.125801;89.446320;4; 48;3;-470.949005;66.137138;87.968254;4; 48;4;-471.694427;66.138474;86.177017;4; @@ -3393,7 +3404,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 48;49;-495.067810;65.173103;11.214562;4; 48;50;-495.026764;65.271744;9.240943;4; 48;51;-494.734619;65.332268;7.358219;4; -48;52;-494.326813;65.346481;5.427385;4; +48;52;-494.326813;65.346481;5.427385;4;{"LinkMode":0,"Links":[[63,1]]} 48;53;-493.893585;65.346481;3.550764;4; 48;54;-493.397400;65.311722;1.651009;4; 48;55;-492.856659;65.248344;-0.209413;4; @@ -3510,7 +3521,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 48;166;-356.000061;67.820084;-132.316864;4; 48;167;-354.644836;67.921631;-133.663971;4; 48;168;-353.140808;68.123077;-135.226944;4; -48;169;-351.792145;68.424240;-136.631699;4; +48;169;-351.792145;68.424240;-136.631699;4;{"LinkMode":0,"Links":[[64,1]]} 48;170;-350.489075;68.804642;-137.977310;4; 48;171;-349.071259;69.419075;-139.179214;4; 48;172;-347.463470;69.687813;-140.194351;4; @@ -3616,3 +3627,1316 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 48;272;-222.354279;66.910576;-85.982979;4; 48;273;-222.063126;66.802429;-83.839630;3; 48;274;-221.861664;66.747520;-81.885979;3;{"LinkMode":0,"Links":[[39,12]]} +49;1;-428.400391;75.657394;352.506989;3;{"Objectives":["spawn vehicle other2 us"]} +49;2;-427.960114;75.657394;352.425385;3; +49;3;-426.813080;75.657394;352.190308;3; +49;4;-426.215179;75.657394;352.028290;3;{"Action":{"inputs":[35],"pitch":-0.1891762316227,"time":0.5,"type":"vehicle","yaw":4.1629166603088}} +50;1;-379.938141;76.688766;365.553528;3;{"Vehicles":["land"]} +50;2;-380.101196;76.660583;364.568512;3; +50;3;-380.305908;76.593513;363.370697;3; +50;4;-380.574310;76.501579;361.883362;3; +50;5;-380.926880;76.419373;360.231812;3; +50;6;-381.362976;76.299507;358.304657;3; +50;7;-381.913177;76.136383;356.268036;3; +50;8;-382.633514;75.941765;354.068390;3; +50;9;-383.561707;75.688835;351.787842;3; +50;10;-384.785522;75.389809;349.408600;3; +50;11;-386.143463;75.047867;346.789337;3; +50;12;-387.611908;74.678398;343.988098;3; +50;13;-389.178284;74.271996;341.093201;3; +50;14;-390.817474;73.784363;338.149658;3; +50;15;-392.525635;73.276390;335.131989;3; +50;16;-394.310638;72.907753;332.098022;3; +50;17;-396.119568;72.648720;329.122375;3; +50;18;-397.907745;72.465012;326.214508;3; +50;19;-399.576477;72.336441;323.513428;3; +50;20;-401.299164;72.227448;320.870605;2; +50;21;-402.905945;72.154465;318.500641;3; +50;22;-404.409668;72.115364;316.239105;3; +50;23;-405.922546;72.074631;313.933075;2; +50;24;-407.245483;72.022324;311.625610;3; +50;25;-408.299774;71.951157;309.204041;2; +50;26;-409.029388;71.859077;307.187958;2; +50;27;-409.592468;71.783257;305.352905;3; +50;28;-410.166046;71.681053;303.278809;2; +50;29;-410.498657;71.557159;301.383942;2; +50;30;-410.537079;71.508942;300.082184;2; +50;31;-410.534882;71.491493;299.278778;3; +50;32;-410.527985;71.424324;298.128113;3; +50;33;-410.527405;71.354698;297.029633;2; +50;34;-410.529968;71.331993;296.318604;2; +50;35;-410.532379;71.322922;295.954712;2;{"LinkMode":0,"Links":[[51,1],[51,545]]} +51;1;-410.597168;70.998535;286.615662;3;{"LinkMode":0,"Links":[[50,35]],"Objectives":["a","b","c","d","e","f","g"],"Vehicles":["land"]} +51;2;-410.621277;70.978081;285.778412;3; +51;3;-410.691711;70.946709;284.749786;2; +51;4;-410.877747;70.929878;283.819275;3; +51;5;-411.244568;70.913208;282.823578;3; +51;6;-411.846039;70.890564;281.803406;3; +51;7;-412.717621;70.829422;280.817993;3; +51;8;-413.774841;70.832420;280.025696;3; +51;9;-414.994202;70.827171;279.460205;3; +51;10;-416.384583;70.822754;279.132843;3; +51;11;-417.836884;70.817612;279.099426;3; +51;12;-419.437378;70.850372;279.231964;3; +51;13;-421.321106;70.904533;279.402863;3; +51;14;-423.500641;70.971512;279.604736;3; +51;15;-425.947266;71.064659;279.828308;3; +51;16;-428.593445;71.160851;279.994293;3; +51;17;-431.379791;71.254189;280.144714;3; +51;18;-434.266815;71.354874;280.199982;3; +51;19;-437.246246;71.464157;280.257782;3; +51;20;-440.284332;71.493538;280.316406;3; +51;21;-443.386047;71.482315;280.364136;2; +51;22;-446.280334;71.477386;280.238525;3; +51;23;-449.021881;71.486588;279.802460;2; +51;24;-451.338654;71.483475;279.093292;2; +51;25;-453.189972;71.517715;278.146606;2; +51;26;-454.557007;71.561089;277.082672;2; +51;27;-455.489685;71.578064;276.013214;3; +51;28;-456.111267;71.580528;274.766663;3; +51;29;-456.435272;71.577721;273.370911;3; +51;30;-456.449036;71.567276;271.765381;3; +51;31;-456.427155;71.531471;269.842468;3; +51;32;-456.433655;71.462303;267.591614;3; +51;33;-456.445160;71.345856;265.018707;3; +51;34;-456.465668;71.190704;262.203186;3; +51;35;-456.469025;71.005562;259.192078;3; +51;36;-456.434143;70.823357;256.042847;2; +51;37;-456.339081;70.657280;253.077286;3; +51;38;-456.209351;70.572845;250.069290;3; +51;39;-456.067383;70.388878;246.986832;3; +51;40;-455.942871;70.288742;243.825241;3; +51;41;-455.881775;70.256996;240.641846;3; +51;42;-455.814972;70.176758;237.408035;3; +51;43;-455.746826;70.157539;234.127319;3; +51;44;-455.679596;70.179306;230.846466;3; +51;45;-455.624451;70.162270;227.850006;2; +51;46;-455.744080;70.166428;225.297943;2; +51;47;-456.137665;70.174080;223.134201;2; +51;48;-456.746613;70.172188;221.374939;2; +51;49;-457.505707;70.175453;220.022888;3; +51;50;-458.489014;70.179367;218.952469;3; +51;51;-459.722351;70.178902;218.128448;3; +51;52;-461.123962;70.177368;217.607529;3; +51;53;-462.613098;70.178474;217.420670;3; +51;54;-464.185394;70.179352;217.542770;3; +51;55;-466.037964;70.181007;217.750839;3; +51;56;-468.230682;70.179291;218.000153;3; +51;57;-470.752472;70.178139;218.285187;3; +51;58;-473.508179;70.175293;218.588486;3; +51;59;-476.388031;70.173576;218.865494;2; +51;60;-478.983032;70.164795;218.944885;3; +51;61;-481.399841;70.175026;218.718903;3; +51;62;-483.585052;70.172379;218.252319;2; +51;63;-485.401947;70.171967;217.541611;3; +51;64;-487.057434;70.193756;216.527374;3; +51;65;-488.470917;70.199310;215.248566;3; +51;66;-489.598236;70.189102;213.757904;3; +51;67;-490.407440;70.184822;212.092972;3; +51;68;-490.831390;70.179657;210.333466;3; +51;69;-490.334045;70.194298;209.105499;2; +51;70;-490.106964;70.214043;208.352310;3; +51;71;-489.996155;70.215179;207.730865;3; +51;72;-489.863281;70.218376;207.004608;3; +51;73;-489.663239;70.214943;205.888901;3; +51;74;-489.478271;70.170403;204.481171;3; +51;75;-489.413696;70.187592;202.863525;3; +51;76;-489.335175;70.244675;200.987442;3; +51;77;-489.294281;70.236374;198.908264;3; +51;78;-489.302277;70.210648;196.553574;3; +51;79;-489.482941;70.163025;194.004669;3; +51;80;-489.954071;70.170860;191.445969;3; +51;81;-490.508423;70.104950;188.704941;3; +51;82;-491.084106;70.024414;185.793930;3; +51;83;-491.635040;69.999481;182.766296;3; +51;84;-492.093628;69.954903;179.682983;3; +51;85;-492.461914;69.932304;176.547195;3; +51;86;-492.698181;69.910492;173.395569;3; +51;87;-492.879395;69.868599;170.203049;3;{"LinkMode":0,"Links":[[62,178]]} +51;88;-492.855682;69.859665;167.067413;3; +51;89;-492.715759;69.816917;163.928162;3; +51;90;-492.705963;69.810333;160.779327;3; +51;91;-492.702240;69.841103;157.604492;3; +51;92;-492.696747;69.837959;154.394196;3; +51;93;-492.687347;69.806480;151.160385;3; +51;94;-492.621552;69.677383;148.254654;3;{"LinkMode":0,"Links":[[54,91]]} +51;95;-492.532318;69.392944;145.378906;3; +51;96;-492.439301;68.937050;142.373291;3; +51;97;-492.352448;68.428482;139.172089;3; +51;98;-492.258942;67.784554;135.868347;3; +51;99;-492.158203;67.141449;132.415390;3; +51;100;-492.058868;66.573509;128.854156;3; +51;101;-491.959625;66.127831;125.268990;3; +51;102;-491.828430;65.845993;121.687263;3; +51;103;-491.618530;65.844078;118.236015;3; +51;104;-491.391510;65.886459;114.886879;3; +51;105;-491.166748;65.893105;111.558510;3; +51;106;-490.924652;65.908051;108.244667;3; +51;107;-490.679535;65.916061;104.945473;2; +51;108;-490.462158;65.913857;102.109840;3; +51;109;-490.327484;65.931541;99.420578;3; +51;110;-490.458618;65.951538;96.825821;3; +51;111;-491.025818;66.027466;94.329910;3; +51;112;-491.808502;66.085228;91.774071;3; +51;113;-492.615479;66.041344;89.147377;3; +51;114;-493.415863;65.922569;86.385132;3; +51;115;-494.056671;65.912537;83.531670;3; +51;116;-494.367828;65.930893;80.701027;3; +51;117;-494.429993;65.919853;77.822327;3; +51;118;-494.151031;65.921959;74.980087;3; +51;119;-493.791840;65.926140;72.037331;3; +51;120;-493.593781;65.917206;69.057388;3; +51;121;-493.496094;65.748184;66.059166;3; +51;122;-493.422333;65.201904;63.098904;3; +51;123;-493.407410;64.540207;59.956497;3; +51;124;-493.416962;64.202797;56.607819;3; +51;125;-493.453583;64.277733;53.353230;3; +51;126;-493.596069;64.279709;50.196877;3; +51;127;-493.819397;64.243355;47.029408;3; +51;128;-494.057709;64.228683;43.826962;3; +51;129;-494.302612;64.224731;40.602940;3; +51;130;-494.644348;64.189354;37.409012;3; +51;131;-495.007599;64.181580;34.184513;3; +51;132;-495.372009;64.299812;30.960167;3; +51;133;-495.701569;64.471283;27.809790;3; +51;134;-495.919678;64.542015;24.699673;3;{"LinkMode":0,"Links":[[66,12]]} +51;135;-496.075500;64.642754;21.570421;3; +51;136;-496.135468;64.742043;18.452692;3; +51;137;-496.039154;64.842628;15.376921;3; +51;138;-495.590881;65.035614;12.517897;3; +51;139;-494.866425;65.194008;9.743258;3; +51;140;-494.042847;65.289925;6.936564;3; +51;141;-493.203888;65.310242;4.075975;3;{"LinkMode":0,"Links":[[66,12]]} +51;142;-492.217957;65.249153;1.259820;3; +51;143;-491.013367;65.141449;-1.509002;3; +51;144;-489.577087;65.027756;-4.101482;3; +51;145;-487.815247;64.959877;-6.490015;3; +51;146;-485.989563;64.906334;-8.932610;3; +51;147;-484.264984;64.850517;-11.483926;3; +51;148;-482.794128;64.800491;-14.105208;3; +51;149;-481.736603;64.749397;-16.845718;3; +51;150;-480.754211;64.679436;-19.692377;3; +51;151;-479.832672;64.533600;-22.628435;3; +51;152;-478.984894;64.349052;-25.658447;3; +51;153;-478.227081;64.112457;-28.753775;3; +51;154;-477.808441;63.838924;-31.838448;3; +51;155;-477.704041;63.591961;-34.966206;3; +51;156;-477.919739;63.340046;-38.081692;3; +51;157;-478.157410;63.080158;-41.291897;3; +51;158;-478.348419;62.804470;-44.576992;3; +51;159;-478.394165;62.532864;-47.882030;3; +51;160;-478.421906;62.244507;-51.239819;3; +51;161;-478.329926;61.929058;-54.604591;3; +51;162;-478.172760;61.633373;-58.001480;3; +51;163;-477.887329;61.410042;-61.382832;3; +51;164;-477.525330;61.285442;-64.743759;3; +51;165;-476.929718;61.255581;-67.939392;3; +51;166;-475.984253;61.276539;-70.820549;3; +51;167;-474.678741;61.321041;-73.522720;3; +51;168;-473.319305;61.390568;-76.281860;4; +51;169;-471.789185;61.504299;-79.226662;4; +51;170;-470.043091;61.634380;-82.345886;4; +51;171;-468.065613;61.792683;-85.566628;4; +51;172;-465.776276;61.988342;-88.680130;4; +51;173;-463.287170;62.216724;-91.532356;3; +51;174;-460.803101;62.478683;-93.944252;3; +51;175;-458.315735;62.794598;-95.907898;3; +51;176;-455.847626;63.173866;-97.404701;3; +51;177;-453.336761;63.620319;-98.297363;4; +51;178;-450.660858;64.105591;-98.984703;4; +51;179;-447.825409;64.564613;-99.631187;4; +51;180;-444.818634;65.037743;-100.297562;4; +51;181;-441.695251;65.531746;-100.804749;4; +51;182;-438.427643;65.990944;-101.136497;4; +51;183;-434.966064;66.388634;-101.492134;4; +51;184;-431.288910;66.755547;-101.877243;4; +51;185;-427.433746;67.133713;-102.303596;4; +51;186;-423.462860;67.518188;-102.825844;4; +51;187;-419.387146;67.908066;-103.361870;4; +51;188;-415.231445;68.302818;-103.908691;4; +51;189;-411.087860;68.731384;-104.456375;3; +51;190;-407.380432;69.184586;-104.944481;3; +51;191;-403.966766;69.667763;-105.413033;3; +51;192;-400.827301;69.987770;-106.038521;3; +51;193;-397.877289;70.154106;-106.799850;2; +51;194;-395.311646;70.147476;-107.724495;3; +51;195;-392.968109;70.142754;-109.038353;3; +51;196;-390.628754;70.119415;-110.619354;3; +51;197;-388.158661;70.059128;-112.200912;3; +51;198;-385.550873;69.989594;-113.516304;3; +51;199;-382.794403;69.916145;-114.788437;3; +51;200;-379.933014;69.859169;-116.083527;3; +51;201;-377.014587;69.796478;-117.361160;3; +51;202;-374.037231;69.704643;-118.565834;3; +51;203;-371.059906;69.786957;-119.604156;3; +51;204;-368.288971;69.758347;-120.232834;3; +51;205;-365.635345;69.624130;-120.378746;3; +51;206;-362.947601;69.592384;-120.037048;3; +51;207;-360.133453;69.497643;-119.539017;3; +51;208;-357.182465;69.353813;-119.000626;3; +51;209;-354.133972;69.183014;-118.427612;3; +51;210;-351.045471;68.958008;-117.842743;3; +51;211;-347.859283;68.833168;-117.267189;3; +51;212;-344.701324;68.940819;-116.730019;3;{"LinkMode":0,"Links":[[65,14]]} +51;213;-341.593231;69.082123;-116.185791;3; +51;214;-338.538361;69.327278;-115.651176;3; +51;215;-335.576782;69.764633;-115.225510;3; +51;216;-332.791412;70.379410;-114.987083;3; +51;217;-330.238190;71.087532;-114.841209;3; +51;218;-327.826508;71.647789;-114.759842;3; +51;219;-325.514496;72.021614;-114.756187;3; +51;220;-323.161591;72.238617;-114.764206;3; +51;221;-320.783966;72.285240;-114.737312;2; +51;222;-318.742889;72.249191;-114.715210;3; +51;223;-316.442047;72.164337;-114.744507;2; +51;224;-314.371735;72.013939;-114.785355;3; +51;225;-312.007599;71.829521;-114.807587;2; +51;226;-309.945953;71.567665;-114.746231;2; +51;227;-308.034668;71.289726;-114.564552;3; +51;228;-305.960968;70.895699;-114.161102;3; +51;229;-303.663940;70.271973;-113.492149;3; +51;230;-301.014709;69.509338;-112.603859;3; +51;231;-298.075592;68.670776;-111.548981;3; +51;232;-294.860382;67.983337;-110.412964;3; +51;233;-291.640137;67.841461;-109.277466;3;{"LinkMode":0,"Links":[[61,77],[59,80]]} +51;234;-288.805023;67.976509;-108.259102;2; +51;235;-286.553802;67.990196;-107.428757;2; +51;236;-284.489655;67.872704;-106.576088;3; +51;237;-282.570251;67.688553;-105.564056;3; +51;238;-280.730621;67.603600;-104.257629;3; +51;239;-279.192780;67.579231;-102.635300;3; +51;240;-278.017578;67.580879;-100.769104;3; +51;241;-277.265961;67.581429;-98.748573;3; +51;242;-276.970337;67.580383;-96.691559;3; +51;243;-277.221649;67.582588;-94.683159;3; +51;244;-277.885010;67.586334;-92.567528;3; +51;245;-278.564575;67.583328;-90.197311;3;{"LinkMode":0,"Links":[[59,80]]} +51;246;-278.988770;67.578491;-87.716187;3; +51;247;-279.049683;67.673149;-85.279289;4; +51;248;-279.021942;67.799171;-82.722359;4; +51;249;-279.133026;67.980362;-79.965759;4; +51;250;-279.240112;67.785393;-77.177139;4; +51;251;-279.307983;67.479996;-74.097969;4; +51;252;-279.419067;67.627037;-70.862656;4; +51;253;-279.520813;67.581505;-67.339706;4; +51;254;-279.569092;67.640259;-63.507618;4; +51;255;-279.627167;67.710167;-59.587318;4; +51;256;-279.705933;67.513229;-55.537884;4; +51;257;-279.693085;67.600616;-51.396973;4; +51;258;-279.699951;67.576904;-47.142559;4; +51;259;-279.795654;67.546806;-42.815830;4; +51;260;-279.806335;67.644005;-38.575035;4; +51;261;-279.865051;68.003189;-34.597351;4; +51;262;-279.965881;67.576576;-30.623735;4; +51;263;-280.098450;67.636330;-26.584488;4; +51;264;-280.264679;67.673340;-22.575674;3; +51;265;-280.420258;67.593620;-18.859751;3; +51;266;-280.567932;67.603828;-15.252907;3; +51;267;-280.712128;67.608467;-11.775412;2; +51;268;-280.828705;67.594902;-8.953472;2;{"LinkMode":0,"Links":[[60,120]]} +51;269;-280.917419;67.606216;-6.814867;3; +51;270;-281.011719;67.622314;-4.560215;3; +51;271;-281.168060;67.612823;-2.137707;2; +51;272;-281.513000;67.616493;-0.044808;2; +51;273;-282.086548;67.642159;1.655852;2; +51;274;-282.864655;67.640961;2.989127;3; +51;275;-283.943604;67.648514;4.196168;3; +51;276;-285.249268;67.622818;5.599813;3; +51;277;-286.689606;67.597229;7.267690;3; +51;278;-288.261047;67.604477;9.196604;3; +51;279;-289.807770;67.573776;11.339274;3;{"LinkMode":0,"Links":[[60,120]]} +51;280;-291.353149;67.281250;13.620481;2; +51;281;-292.583679;66.775810;15.765903;3; +51;282;-293.638641;66.254837;18.114870;3; +51;283;-294.773712;65.660500;20.803246;3; +51;284;-296.011841;65.025879;23.743166;2; +51;285;-297.209778;64.437569;26.516594;3; +51;286;-298.587311;63.925617;29.105818;3; +51;287;-300.237000;63.653645;31.721706;3; +51;288;-301.922913;63.677711;34.325161;3; +51;289;-303.596588;63.846634;36.897350;3; +51;290;-305.051056;64.011337;39.132580;2; +51;291;-306.355957;64.118523;41.089394;3; +51;292;-307.846558;64.183769;43.157642;3; +51;293;-309.454407;64.193230;45.094856;2; +51;294;-310.957855;64.175926;46.637844;2; +51;295;-312.563141;64.145248;47.811687;3; +51;296;-314.383820;64.083633;48.727333;3; +51;297;-316.393829;64.017067;49.333817;3; +51;298;-318.722717;63.975658;49.765923;3; +51;299;-321.260132;63.944073;50.048733;3; +51;300;-323.944855;63.956390;50.098125;3; +51;301;-326.770905;64.018272;50.088520;3; +51;302;-329.642426;64.058273;49.951004;3; +51;303;-332.480927;64.047318;49.523544;3; +51;304;-335.418976;64.009087;49.042419;3; +51;305;-338.463074;64.012604;48.579048;3; +51;306;-341.452728;64.062416;48.234253;3; +51;307;-344.298462;64.060013;48.177689;3; +51;308;-347.225677;64.114212;48.352768;3; +51;309;-350.205475;64.134666;48.602352;3; +51;310;-353.215515;64.106384;48.917469;3; +51;311;-356.278656;64.106270;49.100838;3; +51;312;-359.381714;64.112885;49.235241;3; +51;313;-362.546143;64.148605;49.320171;3; +51;314;-365.646027;64.253738;49.379978;3; +51;315;-368.688263;64.105980;49.417431;3; +51;316;-371.787201;64.096901;49.432358;3; +51;317;-374.855713;64.108521;49.366432;3; +51;318;-377.855713;64.054237;49.017849;3; +51;319;-380.863068;64.044083;48.527126;3; +51;320;-383.794281;64.014763;47.760201;3; +51;321;-386.653717;64.002289;46.820469;3; +51;322;-389.341248;63.980980;45.576862;3;{"LinkMode":0,"Links":[[53,92]]} +51;323;-392.087555;63.981747;44.232128;3; +51;324;-394.901978;63.968407;42.870945;3; +51;325;-397.756226;63.974373;41.737488;3; +51;326;-400.588623;63.988804;41.032482;3; +51;327;-403.508881;64.005791;40.590260;3; +51;328;-406.500916;64.002914;40.242249;3; +51;329;-409.578278;63.975765;39.897686;3; +51;330;-412.721344;63.946102;39.554455;3; +51;331;-415.905151;63.953106;39.216648;3; +51;332;-419.052094;63.990665;39.065392;3; +51;333;-422.142120;64.172058;38.970001;3; +51;334;-425.130798;64.235992;38.912617;3; +51;335;-428.127411;64.143143;38.885143;3; +51;336;-431.148865;64.198479;38.791756;3; +51;337;-434.204010;64.279892;38.683167;3; +51;338;-437.308624;64.324615;38.582199;3; +51;339;-440.444183;64.373413;38.539330;3; +51;340;-443.626648;64.410820;38.491493;3; +51;341;-446.843018;64.425606;38.443550;3; +51;342;-450.091278;64.435936;38.394878;3; +51;343;-453.357788;64.456818;38.348660;3; +51;344;-456.606842;64.420944;38.371273;3; +51;345;-459.881622;64.413109;38.401073;3; +51;346;-463.165283;64.424187;38.442856;3; +51;347;-466.362732;64.389832;38.645710;3; +51;348;-469.387177;64.379410;39.209621;3; +51;349;-472.383789;64.367310;39.924133;3; +51;350;-475.226105;64.342651;40.881950;3; +51;351;-477.798157;64.397644;42.248871;3; +51;352;-480.198639;64.563858;43.827850;3; +51;353;-482.267029;64.451950;45.605320;3; +51;354;-484.262177;64.319702;47.541157;3; +51;355;-486.100586;64.327759;49.714561;3; +51;356;-487.718292;64.269821;51.871269;2; +51;357;-488.948425;64.264290;54.031120;3; +51;358;-489.708679;64.276787;56.287300;3; +51;359;-490.117737;64.405357;58.628860;3; +51;360;-490.298462;64.785912;61.033268;3; +51;361;-490.453125;65.256325;63.442772;3; +51;362;-490.575592;65.696487;65.910126;3; +51;363;-490.702637;65.914154;68.369835;3; +51;364;-490.825623;65.931808;70.852242;3; +51;365;-490.929871;65.917267;73.514755;3; +51;366;-491.003540;65.925133;76.208443;3; +51;367;-490.892273;65.916618;78.546432;2; +51;368;-490.702301;65.922165;80.454872;2; +51;369;-490.343445;65.925606;81.980103;2; +51;370;-489.790466;65.927101;83.205040;3; +51;371;-488.971680;65.930969;84.352768;3; +51;372;-487.906860;65.923477;85.337723;3; +51;373;-486.632935;65.945038;86.092018;3; +51;374;-485.236176;65.996696;86.579803;3; +51;375;-483.758911;66.041924;86.811516;3; +51;376;-482.087036;66.172424;87.045822;3; +51;377;-480.251892;66.226685;87.277634;3; +51;378;-478.198090;66.171562;87.533676;3; +51;379;-475.874420;66.096115;87.824272;3; +51;380;-473.309265;66.072830;88.137787;2; +51;381;-470.974670;66.093376;88.395798;3; +51;382;-468.424835;66.151268;88.641678;3; +51;383;-465.738617;66.121796;88.803452;2; +51;384;-463.341949;66.073723;88.721016;3; +51;385;-460.733490;66.086342;88.583214;3; +51;386;-457.934509;66.083694;88.416504;3; +51;387;-454.971497;66.162918;88.216202;3; +51;388;-452.057587;66.262138;88.033676;3; +51;389;-449.145050;66.128716;87.880386;3; +51;390;-446.124359;66.090988;87.676025;3; +51;391;-443.107117;66.123909;87.363968;3; +51;392;-440.005463;66.105995;87.039528;3; +51;393;-436.843292;66.110779;86.708733;2; +51;394;-434.075134;66.108025;86.424011;3; +51;395;-431.295135;66.138519;86.254761;2; +51;396;-428.989380;66.104340;86.311066;3; +51;397;-426.486298;66.063622;86.443123;3; +51;398;-423.835907;65.820465;86.616333;3; +51;399;-421.041046;65.331512;86.824646;3; +51;400;-417.977112;64.770309;87.051208;3; +51;401;-414.691071;64.394043;87.278725;3; +51;402;-411.422455;64.384598;87.422791;3; +51;403;-408.249573;64.445808;87.563194;3; +51;404;-405.299225;64.401192;87.650513;2; +51;405;-403.011871;64.401840;87.705544;3; +51;406;-400.638031;64.439011;87.711983;2; +51;407;-398.781891;64.410126;87.654785;2; +51;408;-397.030701;64.393402;87.586662;3; +51;409;-395.031616;64.413383;87.490540;3; +51;410;-392.754120;64.387604;87.302498;3; +51;411;-390.388458;64.372971;86.895500;3; +51;412;-387.974731;64.395607;86.148033;3; +51;413;-385.459442;64.404167;85.291084;3; +51;414;-382.962677;64.347008;84.487343;2; +51;415;-380.551605;64.315414;83.817825;3; +51;416;-378.056854;64.342598;83.544418;3; +51;417;-375.453613;64.365547;83.518585;3; +51;418;-372.751434;64.319717;83.635803;3; +51;419;-369.954529;64.312485;83.990036;3; +51;420;-367.051941;64.328506;84.323280;2; +51;421;-364.522552;64.306473;84.505280;3; +51;422;-362.015564;64.394905;84.587997;3; +51;423;-359.691376;64.497383;84.635422;3; +51;424;-357.452850;64.533455;84.666054;3; +51;425;-355.017914;64.517845;84.664238;3; +51;426;-352.405151;64.389481;84.716789;3; +51;427;-349.650391;64.234116;84.821411;3; +51;428;-346.776367;64.210617;84.857384;3; +51;429;-343.825317;64.207878;84.780136;3; +51;430;-341.013062;64.197456;84.571007;3; +51;431;-338.391174;64.198708;84.150978;3; +51;432;-335.781616;64.179550;83.722992;2; +51;433;-333.670227;64.161545;83.386177;2; +51;434;-331.850708;64.178680;83.229858;3; +51;435;-330.104858;64.160805;83.336777;2; +51;436;-328.697723;64.152367;83.701904;2; +51;437;-327.506714;64.166389;84.316521;3; +51;438;-326.393616;64.132156;85.222000;3; +51;439;-325.433899;64.080177;86.302521;2; +51;440;-324.734772;64.073654;87.450554;3; +51;441;-324.184784;64.108749;88.681168;3; +51;442;-323.841461;64.109390;89.982323;3; +51;443;-323.723907;64.174644;91.457199;3; +51;444;-323.625732;64.361053;93.103210;3; +51;445;-323.529633;64.661697;94.839233;3; +51;446;-323.445709;64.967728;96.605370;3; +51;447;-324.035706;65.858627;100.073715;4; +51;448;-324.275818;66.081139;100.918427;3; +51;449;-324.494751;66.417564;102.090988;3; +51;450;-324.683136;66.764389;103.766518;3; +51;451;-324.887146;67.065559;105.751709;2; +51;452;-325.110016;67.172852;107.730888;3; +51;453;-325.251068;67.179543;109.930733;4; +51;454;-325.401917;67.176888;112.533691;3; +51;455;-325.530212;67.032433;115.318886;3; +51;456;-325.437714;66.547615;118.025070;3; +51;457;-325.012634;65.969177;120.910454;3; +51;458;-324.492157;65.840004;123.798271;3; +51;459;-324.052307;65.997215;126.616402;3; +51;460;-323.578064;65.865509;129.376877;3; +51;461;-323.274628;65.746689;132.273361;3; +51;462;-323.183777;65.819283;135.182114;3; +51;463;-323.139343;65.923157;138.176529;3; +51;464;-323.360596;65.972038;141.041519;3; +51;465;-323.571991;65.946442;143.995743;3; +51;466;-323.810608;65.954132;147.044296;3; +51;467;-324.175598;65.954559;150.116882;3; +51;468;-324.549042;66.028572;153.246582;3; +51;469;-325.005127;66.129257;156.337509;3; +51;470;-325.577484;66.163078;159.311691;2; +51;471;-326.304016;66.171875;161.817444;3; +51;472;-327.378082;66.183578;164.077026;3; +51;473;-328.808533;66.148514;166.275894;3; +51;474;-330.410248;66.076080;168.564209;3; +51;475;-332.170563;65.937828;170.903198;3; +51;476;-334.038757;65.776047;173.357544;3; +51;477;-335.988007;65.621704;175.898911;3; +51;478;-338.055389;65.452049;178.303818;3; +51;479;-340.200043;65.299301;180.428238;2; +51;480;-342.035980;65.186180;182.476944;2; +51;481;-343.522949;65.088715;184.616135;3; +51;482;-344.623810;64.990746;187.003738;3; +51;483;-345.518311;64.930351;189.650620;3; +51;484;-346.457001;64.919106;192.454376;3; +51;485;-347.448944;64.940948;195.346848;3; +51;486;-348.526886;64.999115;198.254211;3; +51;487;-349.707977;65.113304;201.092850;3; +51;488;-351.150543;65.278236;203.666092;3; +51;489;-352.653351;65.461143;206.221451;3; +51;490;-354.082062;65.653755;208.820099;3; +51;491;-355.505646;65.948029;211.419342;3; +51;492;-356.943420;66.297623;213.960403;3; +51;493;-358.492737;66.610260;216.226639;3; +51;494;-360.290680;66.848167;218.257324;3; +51;495;-362.181213;67.020439;220.293381;3; +51;496;-364.140900;67.167580;222.393311;3; +51;497;-366.210388;67.295830;224.456741;3; +51;498;-368.352325;67.435417;226.543030;3; +51;499;-370.587036;67.574730;228.445663;3; +51;500;-372.973480;67.743927;230.010666;3; +51;501;-375.449005;67.936752;231.534592;3; +51;502;-378.005371;68.141228;232.974869;3; +51;503;-380.602295;68.351013;234.419800;3; +51;504;-383.257782;68.553322;235.674835;3; +51;505;-385.966492;68.762520;236.803360;3; +51;506;-388.543365;68.945053;237.830109;2; +51;507;-390.461334;69.063866;238.554825;3; +51;508;-392.111969;69.191513;239.168869;2; +51;509;-393.245880;69.289673;239.589035;3; +51;510;-394.292297;69.380913;239.951019;2; +51;511;-395.058167;69.438698;240.190079;2; +51;512;-395.744843;69.487274;240.402313;3; +51;513;-396.744049;69.565338;240.707550;3; +51;514;-397.981445;69.634430;241.093735;3; +51;515;-399.425720;69.697418;241.566666;3; +51;516;-400.893707;69.785049;242.094482;3; +51;517;-402.339294;69.911957;242.807297;3; +51;518;-403.660370;70.047638;243.763809;3; +51;519;-404.990509;70.132195;244.897308;3; +51;520;-406.332214;70.165756;246.236237;3; +51;521;-407.484344;70.181824;247.766510;2; +51;522;-408.340790;70.194725;249.309647;2; +51;523;-408.915253;70.194855;250.858002;3; +51;524;-409.207520;70.219856;252.555756;3; +51;525;-409.198334;70.239792;254.239502;3; +51;526;-409.108063;70.293480;256.106506;3; +51;527;-408.973816;70.335030;258.262421;3; +51;528;-408.828796;70.394272;260.623383;2;{"LinkMode":0,"Links":[[52,39]]} +51;529;-408.562531;70.484230;262.812866;3; +51;530;-408.074341;70.643669;265.120148;3; +51;531;-407.649200;70.726570;267.445831;3; +51;532;-407.230865;70.744560;269.854889;3; +51;533;-406.648224;70.783478;272.345154;3; +51;534;-405.970337;70.788177;274.682068;2; +51;535;-405.411682;70.748192;276.731689;3; +51;536;-404.846558;70.707108;278.896545;3; +51;537;-404.264862;70.769394;280.973633;2; +51;538;-403.785400;70.874298;282.705536;2; +51;539;-403.473907;70.865067;283.909149;2; +51;540;-403.297821;70.930794;284.953033;3; +51;541;-403.316162;70.879433;285.953003;2; +51;542;-403.334839;70.901894;286.655243;3; +51;543;-403.550415;70.886398;287.200134;3; +51;544;-404.051453;70.846245;287.542053;3; +51;545;-404.437103;70.852463;287.937378;2;{"LinkMode":0,"Links":[[50,35]]} +52;1;-360.681549;77.622810;373.892853;65283;{"Vehicles":["land"]} +52;2;-361.119995;77.627304;373.038269;3; +52;3;-361.714539;77.607117;371.879395;3; +52;4;-362.701782;77.603363;370.512604;3; +52;5;-363.980225;77.579994;368.661896;3; +52;6;-365.728668;77.486694;366.472229;3; +52;7;-367.686127;77.186111;364.250397;3; +52;8;-369.865631;76.650436;361.813538;3; +52;9;-372.135132;76.347366;359.090271;2; +52;10;-374.244110;76.253174;356.462891;3; +52;11;-376.313904;76.091812;353.468292;3; +52;12;-378.367889;75.813843;350.171722;3; +52;13;-380.518219;75.371376;346.712097;3; +52;14;-382.857544;74.906578;343.203644;3; +52;15;-385.281555;74.399879;339.627838;3; +52;16;-387.672211;73.819557;335.948975;3; +52;17;-390.086639;73.212158;332.157013;3; +52;18;-392.430054;72.830612;328.218384;3; +52;19;-394.731537;72.576149;324.301025;3; +52;20;-396.972809;72.389198;320.398193;3; +52;21;-398.975281;72.247589;316.768494;2; +52;22;-400.650543;72.205605;313.287659;3; +52;23;-402.127716;72.137489;309.910614;2; +52;24;-403.427460;72.043579;306.708740;3; +52;25;-404.579193;71.862701;303.160217;3; +52;26;-405.651184;71.612282;299.337646;3; +52;27;-406.714142;71.369995;295.365387;3; +52;28;-407.589661;71.171074;291.273529;2; +52;29;-408.225189;71.055504;287.620575;3; +52;30;-408.810272;70.987404;283.954224;2; +52;31;-409.284149;70.908760;280.836853;2; +52;32;-409.681793;70.891632;278.173187;2; +52;33;-409.952301;70.882195;275.982544;3; +52;34;-409.997345;70.886742;273.943085;2; +52;35;-410.032043;70.862900;272.476105;2; +52;36;-410.061523;70.873520;271.498230;2; +52;37;-410.046844;70.856041;270.865723;3; +52;38;-410.043671;70.848145;270.307343;2; +52;39;-410.046600;70.841209;269.952576;2;{"LinkMode":0,"Links":[[51,528]]} +53;1;-423.785492;75.655449;350.631866;65283;{"Vehicles":["land"]} +53;2;-423.171387;75.657249;350.164795;3; +53;3;-422.493744;75.655952;349.372681;3; +53;4;-421.858887;75.622826;348.081970;3; +53;5;-420.717834;75.642708;346.357758;3; +53;6;-419.161652;75.631248;344.252167;3; +53;7;-417.524872;75.638145;341.736664;3; +53;8;-415.825470;75.634781;338.891144;3; +53;9;-414.129913;75.631577;335.917084;4; +53;10;-412.558167;75.331253;332.865997;4; +53;11;-410.965607;74.464195;329.582581;3; +53;12;-409.304626;73.334816;325.974640;3; +53;13;-407.971191;72.651337;322.136841;3; +53;14;-407.130890;72.433411;318.211792;4; +53;15;-406.423096;71.965874;314.312317;4; +53;16;-406.216187;72.125786;310.565308;4; +53;17;-406.101105;71.876175;306.941711;4; +53;18;-406.164642;71.802887;303.393372;4; +53;19;-406.277344;71.540215;299.644440;4; +53;20;-406.403137;71.331009;295.678589;4; +53;21;-406.670166;71.117203;291.540100;4; +53;22;-406.980469;70.994278;287.491425;4; +53;23;-407.280182;70.902092;283.558868;4; +53;24;-407.512115;70.840363;279.765747;4; +53;25;-407.738922;70.817703;276.115234;4; +53;26;-407.959229;70.813835;272.576111;4; +53;27;-408.187683;70.734596;268.904907;4; +53;28;-408.428558;70.638367;265.049713;4; +53;29;-408.600586;70.414459;261.022614;4; +53;30;-408.732025;70.301674;256.893799;4; +53;31;-408.884186;70.155548;252.872070;4; +53;32;-409.029022;70.236801;249.013092;4; +53;33;-409.196320;69.997482;245.290085;4; +53;34;-409.371674;69.954994;241.695694;4; +53;35;-409.536072;69.663658;238.144302;4; +53;36;-409.676300;69.556198;234.369125;4; +53;37;-409.771179;69.365578;230.413284;4; +53;38;-409.867462;69.221107;226.277893;4; +53;39;-409.897156;69.035362;222.193573;4; +53;40;-409.891327;68.931717;218.216400;4; +53;41;-409.750000;68.818451;214.374695;4; +53;42;-409.591034;68.729233;210.679474;4; +53;43;-409.414642;68.564850;207.110275;4; +53;44;-409.218903;68.447418;203.522842;4; +53;45;-409.009186;68.207909;199.753265;4; +53;46;-408.866241;67.941650;195.750427;4; +53;47;-408.938354;67.697960;191.621109;4; +53;48;-409.597931;67.614143;187.667007;4; +53;49;-410.206635;67.497047;183.849579;4; +53;50;-410.486359;67.428970;180.329819;4; +53;51;-410.522064;67.551643;179.584778;4; +53;52;-410.641266;67.455162;178.002396;4; +53;53;-410.826202;67.401321;175.593552;4; +53;54;-410.943481;67.389137;172.685898;4; +53;55;-410.938812;67.391800;169.446701;4; +53;56;-410.785675;67.350060;166.084015;4; +53;57;-410.360016;67.355125;162.774139;4; +53;58;-409.698730;67.376740;159.517639;4; +53;59;-408.596558;67.391647;156.366150;4; +53;60;-407.448853;67.312347;153.161865;4; +53;61;-406.277161;67.140999;149.875977;4; +53;62;-404.967041;66.856865;146.526047;4; +53;63;-403.348328;66.507828;143.168976;4; +53;64;-401.577789;66.134377;139.734741;4; +53;65;-399.756683;65.753548;136.196701;4; +53;66;-397.885895;65.356857;132.564987;4; +53;67;-396.113159;65.009003;128.879471;4; +53;68;-394.561523;64.735519;125.193237;4; +53;69;-393.598907;64.506706;121.441711;4; +53;70;-393.328949;64.316238;117.648277;4; +53;71;-393.275787;64.154541;113.941566;4; +53;72;-393.005066;64.601128;110.292152;4; +53;73;-392.632202;65.107323;107.038521;4; +53;74;-392.290863;64.342674;103.681938;4; +53;75;-391.917877;64.334991;99.643150;4; +53;76;-391.580139;64.653427;95.901199;4; +53;77;-391.208313;64.264740;92.145721;4; +53;78;-390.931580;64.509781;88.604202;4; +53;79;-390.728363;64.322563;84.934402;4; +53;80;-390.755432;64.393501;81.130043;4; +53;81;-390.840302;64.342049;77.162849;4; +53;82;-390.783203;64.286575;73.097160;4; +53;83;-390.635437;64.202888;68.958633;3; +53;84;-390.535736;64.210716;64.982971;2; +53;85;-390.483948;64.281380;61.487617;2; +53;86;-390.444519;64.558777;58.832653;2; +53;87;-390.426636;64.505333;57.108387;2; +53;88;-390.393799;63.888939;55.500370;2; +53;89;-390.494934;64.088242;53.655422;2; +53;90;-390.794159;63.976162;52.476219;2; +53;91;-390.957367;64.023193;51.681435;2; +53;92;-391.085358;64.014610;51.196033;2;{"LinkMode":0,"Links":[[51,322]]} +54;1;-355.388947;77.680710;362.231903;65283;{"Vehicles":["land"]} +54;2;-356.210022;77.690056;362.111176;3; +54;3;-357.309937;77.672943;361.949585;3; +54;4;-358.911682;77.661720;361.586639;4; +54;5;-361.014648;77.657349;361.003815;4; +54;6;-363.474304;77.559280;360.028229;4; +54;7;-365.936493;77.137184;358.334900;4; +54;8;-368.616608;76.459053;356.030487;4; +54;9;-371.598999;75.971878;353.250854;4; +54;10;-374.477844;75.781715;350.157867;4; +54;11;-377.234497;75.607048;346.874542;4; +54;12;-379.897400;75.113922;343.436462;4; +54;13;-382.093445;74.634491;339.549927;4; +54;14;-384.071014;74.070877;335.464905;4; +54;15;-386.245697;73.433823;331.413300;4; +54;16;-388.558350;73.003448;327.318848;4; +54;17;-390.856537;72.696274;323.258057;4; +54;18;-393.244110;72.445015;319.279602;4; +54;19;-395.571930;72.258675;315.277679;4; +54;20;-397.700745;72.276558;311.194275;4; +54;21;-399.707977;72.194611;307.175812;4; +54;22;-401.638580;71.879395;303.119110;4; +54;23;-403.461884;71.606369;298.904968;4; +54;24;-404.983826;71.365860;294.628082;4; +54;25;-406.289215;71.223595;290.239807;4; +54;26;-407.420441;71.114182;285.870819;4; +54;27;-408.153870;71.009804;281.424316;4; +54;28;-408.651367;70.971283;276.948792;4; +54;29;-408.739105;70.961090;272.495941;4; +54;30;-408.621307;70.863976;268.050751;4; +54;31;-408.479034;70.714928;263.581696;4; +54;32;-408.531555;70.487953;259.092194;4; +54;33;-408.848419;70.397400;254.590622;4; +54;34;-409.325623;70.324371;250.092331;4; +54;35;-410.046722;70.233597;245.678253;4; +54;36;-410.881714;70.273117;241.217270;4; +54;37;-411.543976;69.911491;236.770248;3; +54;38;-412.026489;69.602379;232.223877;3; +54;39;-412.229279;69.427765;227.699783;3; +54;40;-412.377960;69.229141;223.195404;2; +54;41;-412.512848;69.084175;219.024597;2; +54;42;-412.407501;69.002945;215.249283;3; +54;43;-412.296051;68.900047;211.521713;2; +54;44;-412.674438;68.754051;208.119385;2; +54;45;-413.764954;68.647575;205.093994;2; +54;46;-414.959808;68.517349;202.210983;2; +54;47;-416.421051;68.338585;199.682602;2; +54;48;-418.167664;68.153648;197.794327;3; +54;49;-420.602478;68.272209;196.643814;3; +54;50;-423.358887;68.178856;196.146820;3; +54;51;-426.451935;67.848816;196.391754;3; +54;52;-430.187256;68.193901;196.779297;3; +54;53;-430.940521;68.668327;197.016769;3; +54;54;-430.866394;68.271820;197.413177;3; +54;55;-431.845978;68.057480;197.461243;3; +54;56;-433.236328;68.115280;197.594757;3; +54;57;-435.371735;68.046501;197.981369;2; +54;58;-437.863342;67.930023;198.388657;2; +54;59;-440.564667;67.891647;198.723358;3; +54;60;-443.763214;67.915359;198.522385;3; +54;61;-447.080048;67.836456;198.215958;3; +54;62;-450.447662;67.866997;197.750702;2; +54;63;-453.365753;67.834564;196.761215;2; +54;64;-455.621918;67.848518;195.038895;3; +54;65;-457.251282;67.860252;192.427963;3; +54;66;-457.923370;67.839767;189.129486;3; +54;67;-458.220917;67.853333;185.417587;3; +54;68;-458.519257;67.841873;181.484253;3; +54;69;-458.757904;67.846931;177.424088;2; +54;70;-458.951965;67.838249;173.672745;2; +54;71;-459.120392;67.846092;170.306763;2; +54;72;-459.266968;67.841690;167.339706;2; +54;73;-459.332611;67.842941;164.504562;2; +54;74;-459.342010;67.838646;161.980042;3; +54;75;-459.395050;67.859230;159.431885;3; +54;76;-459.876953;67.842819;157.061935;2; +54;77;-460.811646;67.847435;155.393417;3; +54;78;-462.323303;67.859711;154.089142;3; +54;79;-464.563293;67.854218;153.106735;3; +54;80;-467.514160;68.050819;152.711090;3; +54;81;-470.827881;68.400047;152.969635;3; +54;82;-474.270355;68.742661;153.602173;2; +54;83;-477.623779;69.272957;154.278976;2; +54;84;-480.400940;69.642731;154.747604;2; +54;85;-482.633698;69.903244;154.740845;2; +54;86;-484.079987;69.983612;154.285583;1; +54;87;-484.659973;70.024483;153.973969;2; +54;88;-484.983337;70.038048;153.853195;3; +54;89;-485.276367;70.046806;153.690750;3; +54;90;-485.692230;70.061195;153.394135;3; +54;91;-486.179260;70.067360;153.123444;1;{"LinkMode":0,"Links":[[51,94]]} +55;1;-77.126755;77.938690;-122.779007;3;{"Objectives":["spawn vehicle tank1 ru"]} +55;2;-78.180008;77.937279;-123.055862;3; +55;3;-79.319092;77.906288;-123.361824;3;{"Action":{"inputs":[35],"pitch":-0.22842532396317,"time":0.5,"type":"vehicle","yaw":1.8974705934525}} +56;1;-84.878197;77.852554;-115.659454;3;{"Objectives":["spawn vehicle tank2 ru"]} +56;2;-85.760155;77.819138;-116.030380;3; +56;3;-86.422203;77.812134;-116.305428;3;{"Action":{"inputs":[35],"pitch":-0.28599566221237,"time":0.5,"type":"vehicle","yaw":2.0200400352478}} +57;1;-80.726425;77.268806;-140.187775;3;{"Objectives":["spawn vehicle other1 ru"]} +57;2;-81.737740;77.274948;-139.881577;3; +57;3;-82.753311;77.276993;-140.232254;3;{"Action":{"inputs":[35],"pitch":-0.015785846859217,"time":0.5,"type":"vehicle","yaw":1.9782547950745}} +58;1;-89.720055;77.282318;-152.840836;3;{"Objectives":["spawn vehicle other2 ru"]} +58;2;-90.388428;77.282318;-152.640305;3; +58;3;-91.474098;77.282318;-152.299835;3;{"Action":{"inputs":[35],"pitch":-0.1467120051384,"time":0.5,"type":"vehicle","yaw":1.2159119844437}} +59;1;-83.320892;77.994118;-124.700905;65283;{"Vehicles":["land"]} +59;2;-84.228920;77.972534;-125.052673;3; +59;3;-85.395142;77.929657;-125.496078;3; +59;4;-86.900963;77.899963;-126.068756;3; +59;5;-88.711357;77.851425;-126.751251;3; +59;6;-90.829536;77.812103;-127.554672;3; +59;7;-93.211853;77.756882;-128.479797;3; +59;8;-95.857460;77.708824;-129.518173;3; +59;9;-98.648544;77.653236;-130.662750;3; +59;10;-101.550217;77.608353;-131.856598;3; +59;11;-104.472374;77.571877;-133.101089;3; +59;12;-107.362312;77.496834;-134.405823;3; +59;13;-110.291100;77.467255;-135.727051;3; +59;14;-113.223282;77.407555;-137.048828;3; +59;15;-116.163414;77.362389;-138.301224;3; +59;16;-119.108192;77.313866;-139.236816;3; +59;17;-122.041092;77.277710;-139.762466;3; +59;18;-124.851379;77.227386;-139.856720;3; +59;19;-127.497292;77.205795;-139.358826;3; +59;20;-130.061996;77.171730;-138.374207;3; +59;21;-132.402786;77.097130;-137.292679;2; +59;22;-134.456940;77.013840;-136.130142;3; +59;23;-136.322937;76.844917;-134.564545;3; +59;24;-137.883438;76.612076;-132.661575;3; +59;25;-139.125534;76.408310;-130.388382;2; +59;26;-139.765320;76.193039;-128.116074;3; +59;27;-139.926926;75.988800;-125.886566;3; +59;28;-139.887299;75.745728;-123.403099;3; +59;29;-140.051971;75.502914;-120.707329;3; +59;30;-140.286346;75.256416;-117.990608;2; +59;31;-140.663071;75.120529;-115.325768;3; +59;32;-141.358017;75.032722;-112.848076;2; +59;33;-142.378876;74.963181;-110.742889;3; +59;34;-143.676147;74.926254;-109.051758;2; +59;35;-145.012589;74.867233;-107.884613;3; +59;36;-146.599762;74.836838;-107.099785;3; +59;37;-148.378571;74.766548;-106.754265;3; +59;38;-150.420151;74.693954;-106.741394;3; +59;39;-152.745056;74.555435;-106.763374;3; +59;40;-155.346375;74.314339;-106.778030;3; +59;41;-158.226364;73.914162;-106.796921;3; +59;42;-161.614044;73.391502;-106.824753;4; +59;43;-165.546478;72.747078;-106.860474;4; +59;44;-169.890732;71.875687;-106.879768;4; +59;45;-174.613571;71.059334;-106.957901;4; +59;46;-179.463562;70.212006;-107.079346;4; +59;47;-184.420898;69.320015;-107.179947;4; +59;48;-189.427383;68.772949;-107.270966;4; +59;49;-194.356003;68.275513;-107.383316;4; +59;50;-199.281357;67.970085;-107.483170;4; +59;51;-204.116577;67.849869;-107.613388;4; +59;52;-208.849335;67.817497;-107.756531;4; +59;53;-213.514374;67.833611;-107.875275;4; +59;54;-218.069351;67.813095;-107.899857;4; +59;55;-222.621735;67.676697;-107.905548;4; +59;56;-227.144211;67.725571;-107.844437;4; +59;57;-231.606873;67.590157;-107.812920;4; +59;58;-236.223297;67.641159;-107.750916;4; +59;59;-240.450684;67.834229;-107.671799;3; +59;60;-244.226013;67.844505;-107.605583;2; +59;61;-247.108887;67.895096;-107.506599;2; +59;62;-249.408890;67.893440;-107.442673;3; +59;63;-251.658752;67.855003;-107.581238;2; +59;64;-253.457504;67.811707;-107.843132;2; +59;65;-254.459045;67.817314;-107.981659;2; +59;66;-255.283478;67.814651;-108.103470;3; +59;67;-256.462616;67.809036;-108.270966;3; +59;68;-257.989777;67.795433;-108.488708;3; +59;69;-259.450409;67.791283;-108.696312;3; +59;70;-260.894623;67.799316;-108.897644;3; +59;71;-262.583405;67.798882;-109.133179;3; +59;72;-264.572662;67.796394;-109.395935;3; +59;73;-266.509521;67.791801;-109.528687;2; +59;74;-268.242920;67.794594;-109.363197;3; +59;75;-269.820526;67.795273;-108.890549;2; +59;76;-271.098633;67.792381;-108.196724;2; +59;77;-272.049316;67.802635;-107.360382;2; +59;78;-272.792999;67.803177;-106.373802;2; +59;79;-273.196136;67.810822;-105.720833;2; +59;80;-273.406982;67.812469;-105.383194;2;{"LinkMode":0,"Links":[[51,233],[51,245]]} +60;1;-94.152634;77.660217;-121.279587;65283;{"Vehicles":["land"]} +60;2;-94.619560;77.656784;-121.529488;3; +60;3;-95.501701;77.633476;-122.000305;3; +60;4;-96.728325;77.578865;-122.654419;3; +60;5;-98.285629;77.553558;-123.455971;3; +60;6;-100.127579;77.509361;-124.399673;3; +60;7;-102.211212;77.474976;-125.330162;2; +60;8;-104.358528;77.450645;-125.918243;3; +60;9;-106.682701;77.440269;-126.157486;3; +60;10;-109.224716;77.469025;-126.237534;3; +60;11;-111.814499;77.395622;-126.109184;3; +60;12;-114.429680;77.301331;-125.757835;3; +60;13;-117.101593;77.268326;-125.341705;2; +60;14;-119.147308;77.144783;-125.056183;3; +60;15;-121.293587;76.966042;-124.783043;3; +60;16;-123.731697;76.835251;-124.445526;2; +60;17;-125.973038;76.712700;-123.987732;3; +60;18;-128.257843;76.533913;-123.336273;3; +60;19;-130.546600;76.217690;-122.532738;3; +60;20;-132.735611;75.701996;-121.434494;2; +60;21;-135.192230;75.422630;-120.156799;3; +60;22;-137.333084;75.317474;-118.527145;3; +60;23;-139.272446;74.945381;-116.857368;2; +60;24;-141.026733;74.989395;-115.250519;3; +60;25;-142.904922;74.940575;-113.745079;2; +60;26;-144.702499;74.935104;-112.509163;3; +60;27;-146.729721;74.955528;-111.496994;2; +60;28;-148.758087;74.781715;-110.692261;3; +60;29;-150.943848;74.630226;-110.056732;2; +60;30;-153.069977;74.387711;-109.455864;3; +60;31;-155.318954;74.152786;-108.654350;2; +60;32;-157.030579;73.914551;-107.801613;2; +60;33;-158.414261;73.720604;-107.051674;2; +60;34;-159.693604;73.526337;-106.195671;3; +60;35;-160.768784;73.365540;-105.272743;3; +60;36;-161.820648;73.295868;-104.328888;2; +60;37;-162.556046;73.216675;-103.661964;3; +60;38;-163.503235;73.122574;-102.724075;3; +60;39;-164.529816;73.002304;-101.748489;2; +60;40;-165.464127;72.816124;-100.828018;2; +60;41;-166.457108;72.590096;-99.841873;2; +60;42;-167.315247;72.217484;-99.042946;2; +60;43;-168.087540;71.908844;-98.277138;2; +60;44;-168.840225;71.516434;-97.505547;3; +60;45;-169.964096;70.936920;-96.376656;3; +60;46;-171.127121;70.314323;-95.207626;2; +60;47;-172.240005;69.796379;-94.080116;3; +60;48;-173.680740;69.173294;-92.639397;3; +60;49;-175.466248;68.465599;-90.870613;3; +60;50;-177.725281;67.932182;-88.851608;3; +60;51;-180.192947;67.827370;-86.752182;2; +60;52;-182.340561;67.924271;-84.989098;2; +60;53;-184.092163;67.951263;-83.637108;2; +60;54;-185.644913;67.965988;-82.514542;2; +60;55;-187.253265;67.985756;-81.730911;3; +60;56;-189.031738;67.935226;-81.193130;3; +60;57;-191.021545;67.794807;-80.700951;3; +60;58;-193.298645;67.604240;-80.198235;3; +60;59;-195.797028;67.547783;-79.651543;2; +60;60;-197.869720;67.527901;-79.197090;2; +60;61;-199.817490;67.433777;-78.683769;2; +60;62;-201.582809;67.249588;-78.032196;2; +60;63;-203.204391;67.030716;-77.197708;2; +60;64;-204.563461;66.743736;-76.088898;2; +60;65;-205.700226;66.436676;-74.792969;3; +60;66;-206.726135;66.213760;-73.204628;3; +60;67;-207.533005;66.162270;-71.183044;3; +60;68;-208.283203;66.163887;-69.175461;2; +60;69;-209.030441;66.256683;-67.322525;2; +60;70;-209.991043;66.362038;-65.699066;3; +60;71;-211.293350;66.494026;-64.295639;3; +60;72;-212.826172;66.721039;-63.112343;3; +60;73;-214.510651;67.004654;-61.980057;3; +60;74;-216.250473;67.227844;-60.867313;3; +60;75;-218.031967;67.298523;-59.686676;3; +60;76;-219.988205;67.339287;-58.352497;3; +60;77;-222.127777;67.321556;-56.909042;3; +60;78;-224.511902;67.546173;-55.435478;2; +60;79;-226.745300;67.803795;-54.178795;2; +60;80;-228.817413;67.937675;-53.269882;3; +60;81;-230.695251;68.013496;-52.576290;3; +60;82;-232.885071;68.057838;-52.022900;3; +60;83;-235.202362;68.024979;-51.578880;3; +60;84;-237.612869;67.840843;-51.244465;3; +60;85;-240.309219;67.684731;-50.905598;3; +60;86;-242.949081;67.683418;-50.677879;2; +60;87;-245.124512;67.614937;-50.491135;2; +60;88;-247.289261;67.635574;-50.268528;3; +60;89;-249.396011;67.722565;-49.704514;3; +60;90;-251.412842;67.822968;-48.931683;2; +60;91;-253.201584;67.757851;-47.855614;3; +60;92;-254.854233;67.655365;-46.952724;3; +60;93;-256.264923;67.671684;-45.534889;3; +60;94;-257.381287;67.617439;-43.977291;3; +60;95;-258.542236;67.639732;-42.132584;3; +60;96;-259.522186;67.642181;-40.172710;3; +60;97;-260.402618;67.623596;-38.152054;3; +60;98;-261.198120;67.640686;-35.920139;3; +60;99;-261.764038;67.632690;-33.524624;3; +60;100;-262.293518;67.632973;-30.937136;3; +60;101;-262.696320;67.636810;-28.141428;3; +60;102;-263.001068;67.630806;-25.190329;3; +60;103;-263.306305;67.633911;-22.075876;3; +60;104;-263.462341;67.630928;-18.868708;3; +60;105;-263.484192;67.620277;-15.900098;3; +60;106;-263.447052;67.636230;-13.002820;3; +60;107;-263.405273;67.635956;-10.095481;2; +60;108;-263.374756;67.645767;-7.584032;2; +60;109;-263.585510;67.676353;-5.311025;2; +60;110;-264.067688;67.650360;-3.386116;2; +60;111;-264.831970;67.669609;-1.638521;2; +60;112;-265.937927;67.666847;-0.148065;3; +60;113;-267.415039;67.663544;1.168922;2; +60;114;-268.900085;67.671265;2.264871;2; +60;115;-270.120636;67.660278;3.131464;2; +60;116;-271.183990;67.729385;3.689659;2; +60;117;-272.178467;67.655533;4.150893;2; +60;118;-272.860229;67.673019;4.316041;3; +60;119;-273.674438;67.666069;4.485984;2; +60;120;-274.167877;67.666885;4.571237;2;{"LinkMode":0,"Links":[[51,279],[51,268]]} +61;1;-85.703537;77.459717;-141.437347;65283;{"Vehicles":["land"]} +61;2;-86.207054;77.466873;-141.669968;3; +61;3;-87.114868;77.464676;-142.110825;3; +61;4;-88.467255;77.422440;-142.746582;3; +61;5;-90.303116;77.456429;-143.615845;3; +61;6;-92.563622;77.440140;-144.677841;3; +61;7;-95.077675;77.420456;-145.535416;3; +61;8;-97.958145;77.406776;-145.749069;2; +61;9;-100.650192;77.409439;-144.951874;3; +61;10;-103.314568;77.400261;-143.301926;3; +61;11;-106.248390;77.443184;-141.557922;3; +61;12;-109.463448;77.417831;-140.093658;2; +61;13;-112.698204;77.369751;-139.287933;3; +61;14;-116.102623;77.340157;-139.550522;3; +61;15;-119.234573;77.294289;-141.026047;3; +61;16;-122.341888;77.218910;-142.872864;3; +61;17;-125.725975;77.166817;-144.370728;3; +61;18;-129.220795;77.121902;-145.830566;3; +61;19;-132.736649;77.004738;-147.395828;3; +61;20;-136.356445;76.939262;-149.030670;4; +61;21;-140.037537;76.858841;-150.689133;4; +61;22;-143.758652;76.789093;-152.369415;4; +61;23;-147.544083;76.749947;-154.077805;4; +61;24;-151.345001;76.635658;-155.792603;4; +61;25;-155.199493;76.578369;-157.533920;3; +61;26;-159.086929;76.504318;-159.281128;3; +61;27;-163.029587;76.454628;-160.913284;3; +61;28;-167.076187;76.413780;-162.270447;3; +61;29;-171.219986;76.386665;-163.245132;3; +61;30;-175.436020;76.350494;-163.657700;3; +61;31;-179.683197;76.329498;-163.708984;3; +61;32;-183.935104;76.407410;-163.487625;3; +61;33;-188.131012;76.572578;-163.093872;3; +61;34;-192.240295;76.364273;-162.688797;3; +61;35;-196.520233;76.126549;-162.329224;3; +61;36;-200.778030;75.858162;-162.037262;2; +61;37;-204.878479;75.292648;-161.878235;3; +61;38;-209.223465;74.922844;-161.877350;3; +61;39;-213.725342;74.859894;-161.494339;3; +61;40;-218.067017;74.819946;-160.799789;3; +61;41;-222.139572;74.841415;-159.367493;3; +61;42;-226.014709;74.947021;-157.412003;3; +61;43;-229.688248;73.862801;-155.292465;2; +61;44;-233.248444;71.925484;-153.533127;3; +61;45;-237.346970;70.053421;-151.688904;3; +61;46;-241.263580;67.971947;-150.642654;3; +61;47;-242.852493;67.847610;-150.342316;2; +61;48;-244.458801;67.998093;-149.992355;3; +61;49;-245.854675;67.816368;-149.434006;3; +61;50;-247.696503;67.751945;-148.740784;3; +61;51;-249.931335;67.796616;-147.125839;3; +61;52;-252.227692;67.828049;-145.242004;3; +61;53;-254.472092;67.738083;-142.858932;3; +61;54;-256.212708;67.774208;-139.781128;3; +61;55;-257.769470;67.801392;-136.496765;3; +61;56;-259.178680;67.761208;-133.105957;3; +61;57;-260.571655;67.772499;-129.574066;2; +61;58;-261.900146;67.774483;-126.273827;2; +61;59;-263.439545;67.755859;-123.534355;2; +61;60;-265.388824;67.778976;-121.612785;2; +61;61;-267.295258;67.773399;-120.174751;2; +61;62;-268.983459;67.769783;-119.000168;2; +61;63;-270.045044;67.784843;-118.384468;1; +61;64;-270.536438;67.797913;-118.074562;2; +61;65;-270.868591;67.809479;-117.903961;2; +61;66;-271.438934;67.809410;-117.468300;3; +61;67;-272.083710;67.804573;-116.794991;3; +61;68;-273.208282;67.772026;-115.919228;3; +61;69;-274.495972;67.789833;-114.990410;2; +61;70;-275.512909;67.781815;-114.408073;2; +61;71;-276.683746;67.788567;-113.702835;3; +61;72;-277.995636;67.795090;-113.145355;2; +61;73;-279.017395;67.779305;-112.692162;3; +61;74;-280.164734;67.822708;-112.266441;2; +61;75;-280.915649;67.816818;-112.004631;2; +61;76;-281.481689;67.831703;-111.819466;2; +61;77;-281.872192;67.856148;-111.723221;2;{"LinkMode":0,"Links":[[51,233]]} +62;1;-94.228004;77.280479;-151.456238;65283;{"Vehicles":["land"]} +62;2;-95.241989;77.282677;-151.040375;3; +62;3;-96.368752;77.266167;-150.564026;3; +62;4;-97.976189;77.258560;-149.827194;3; +62;5;-100.145912;77.237206;-148.849960;3; +62;6;-102.657791;77.229141;-147.571320;3; +62;7;-105.473137;77.233360;-146.079590;3; +62;8;-108.493134;77.225090;-144.500168;3; +62;9;-111.660721;77.226120;-143.059769;3; +62;10;-114.920769;77.196716;-141.637863;3; +62;11;-118.220200;77.132622;-140.154053;3; +62;12;-121.506325;77.101036;-138.487686;2; +62;13;-124.450256;77.055328;-136.841583;3; +62;14;-127.159111;77.063850;-135.077499;3; +62;15;-129.484955;77.024796;-133.002579;3; +62;16;-131.688339;76.567390;-130.713379;3; +62;17;-133.927872;76.097855;-127.976768;3; +62;18;-136.259628;75.804932;-125.138039;3; +62;19;-138.608383;75.375534;-122.055214;3; +62;20;-140.995682;75.161903;-118.925735;3; +62;21;-143.743912;74.984932;-115.911003;3; +62;22;-146.582260;75.073441;-113.258606;3; +62;23;-149.665695;74.827599;-111.367821;3; +62;24;-152.966568;74.484749;-110.016068;3; +62;25;-156.544922;74.019432;-109.938103;3; +62;26;-160.303558;73.465744;-109.973022;3; +62;27;-164.235855;72.809471;-109.853218;3; +62;28;-168.283310;72.097122;-109.737778;3; +62;29;-172.370865;71.256721;-109.699158;3; +62;30;-176.527954;70.588440;-109.772018;3; +62;31;-180.667221;69.877663;-109.854874;3; +62;32;-184.865204;69.156372;-109.930550;3; +62;33;-189.081482;68.638542;-109.920296;3; +62;34;-193.263321;68.261902;-109.951950;3; +62;35;-197.360153;67.926056;-110.003059;3; +62;36;-201.388870;67.792107;-110.049026;3; +62;37;-205.259705;67.702431;-110.096565;4; +62;38;-208.986115;67.713287;-110.130539;4; +62;39;-212.537994;67.680389;-110.183693;4; +62;40;-216.166290;67.637138;-110.239365;3; +62;41;-219.979874;67.474098;-110.216232;3; +62;42;-223.976501;67.546242;-110.087975;3; +62;43;-228.026474;67.426300;-109.783974;3; +62;44;-232.201050;67.407738;-109.502762;3; +62;45;-236.160492;67.604912;-109.146309;3; +62;46;-239.957047;67.527649;-108.769821;3; +62;47;-243.568420;67.640045;-108.392731;3; +62;48;-247.015991;67.615257;-107.640602;2; +62;49;-249.880234;67.802986;-106.237602;3; +62;50;-252.116364;68.050003;-104.110855;3; +62;51;-254.354691;68.596626;-102.447342;3; +62;52;-256.365753;68.367882;-100.480896;3; +62;53;-258.659454;67.401657;-98.316887;2; +62;54;-260.860291;67.794006;-95.790596;3; +62;55;-262.391266;67.568787;-92.813690;3; +62;56;-262.579071;67.703423;-89.483131;3; +62;57;-262.320343;67.662712;-86.033417;3; +62;58;-261.958923;68.321907;-82.625237;3; +62;59;-261.624420;68.788017;-79.561333;3; +62;60;-261.273132;68.015221;-76.494629;3; +62;61;-260.710358;67.474953;-72.633011;3; +62;62;-260.170319;67.723282;-68.750496;3; +62;63;-259.796783;67.514854;-64.736282;3; +62;64;-259.662842;67.779610;-60.702129;3; +62;65;-259.564362;67.507195;-56.627308;3; +62;66;-259.340057;67.681396;-52.676403;3; +62;67;-259.057709;67.546143;-48.895039;3; +62;68;-258.802490;67.641479;-45.269180;3; +62;69;-258.566620;67.578781;-41.709476;3; +62;70;-258.329559;67.620552;-38.014503;3; +62;71;-258.230072;67.594933;-34.152100;3; +62;72;-258.133148;67.609711;-30.167984;3; +62;73;-258.064270;67.601578;-26.102959;3; +62;74;-258.373291;67.605125;-22.022707;3; +62;75;-258.960693;67.604012;-17.963289;3; +62;76;-260.277588;67.603531;-14.131139;3; +62;77;-262.595581;67.603935;-10.879597;3; +62;78;-265.177124;67.623444;-7.834062;3; +62;79;-267.975952;67.641441;-5.077547;3; +62;80;-270.914337;67.629875;-2.501426;3; +62;81;-273.859009;67.638344;0.012069;3; +62;82;-276.844910;67.555458;2.397290;3; +62;83;-279.870300;67.303856;4.763427;3; +62;84;-282.745697;67.941925;6.890206;3; +62;85;-285.377014;67.923759;8.883513;2; +62;86;-287.958313;67.549110;11.162912;3; +62;87;-290.147461;67.688744;13.428332;3; +62;88;-292.402496;66.788498;15.876617;3; +62;89;-293.893158;66.065689;19.303471;3; +62;90;-295.553558;65.201614;22.889076;3; +62;91;-297.328400;64.472099;26.559477;3; +62;92;-299.126007;63.720898;30.295580;3; +62;93;-300.968323;63.689457;34.075481;3; +62;94;-303.016205;63.864178;37.472511;3; +62;95;-305.220612;64.109825;40.457722;2; +62;96;-307.483521;64.181564;42.977154;3; +62;97;-310.004913;64.231354;45.372440;3; +62;98;-312.662994;64.163887;47.837887;3; +62;99;-315.461670;64.043373;50.439659;3; +62;100;-318.385559;63.966667;53.157024;3; +62;101;-321.317200;64.006523;55.964928;3; +62;102;-323.842834;64.052200;59.147106;3; +62;103;-325.302917;64.078255;62.611042;2; +62;104;-325.405640;64.042320;66.093910;3; +62;105;-325.196594;64.086235;69.638107;3; +62;106;-325.200195;64.108444;73.209503;3; +62;107;-325.559357;64.142891;76.651802;2; +62;108;-326.665741;64.125740;79.681511;2; +62;109;-328.497589;64.156624;81.891090;2; +62;110;-330.868866;64.192017;83.321732;3; +62;111;-333.788147;64.201118;83.972824;3; +62;112;-337.027039;64.207932;83.832794;3; +62;113;-340.377258;64.230026;83.647987;3; +62;114;-343.751770;64.225433;83.464935;3; +62;115;-347.168182;64.241623;83.420792;3; +62;116;-350.627380;64.296776;83.486130;3; +62;117;-354.061035;64.738556;83.665192;3; +62;118;-357.439301;64.655952;84.031082;3; +62;119;-361.012146;64.439651;84.422798;3; +62;120;-364.616180;64.319374;84.519775;3; +62;121;-368.405518;64.349854;84.527420;3; +62;122;-372.158783;64.344788;84.529060;3; +62;123;-375.979950;64.331871;84.519463;3; +62;124;-379.798248;64.354263;84.507339;3; +62;125;-383.614044;64.354073;84.655037;3; +62;126;-387.138672;64.362053;85.262451;2; +62;127;-390.084564;64.401688;86.588379;2; +62;128;-392.057770;64.405670;88.508347;3; +62;129;-393.307220;64.418991;90.926117;3; +62;130;-393.800293;64.416962;93.854324;3; +62;131;-394.078644;64.415131;97.052406;3; +62;132;-394.500214;64.404846;100.358841;3; +62;133;-394.932861;64.382301;103.696991;3; +62;134;-395.370178;64.543571;107.077499;3; +62;135;-395.859497;64.793755;110.379242;3; +62;136;-396.448151;64.647339;113.650864;3; +62;137;-397.086945;64.315727;117.232544;3; +62;138;-397.909790;64.524368;120.822990;3; +62;139;-398.696198;64.670280;124.464470;3; +62;140;-399.642822;65.173965;127.790665;3; +62;141;-400.765015;65.346344;131.329666;3; +62;142;-401.984924;65.790070;134.672867;3; +62;143;-403.297760;66.062294;138.044067;3; +62;144;-404.649109;66.423340;141.341049;3; +62;145;-406.033752;66.744690;144.575943;3; +62;146;-407.414825;67.020767;147.546249;2; +62;147;-408.624573;67.194405;150.008438;2; +62;148;-409.916931;67.283783;152.020340;3; +62;149;-411.564484;67.358528;153.637344;3; +62;150;-413.647949;67.430527;154.705032;3; +62;151;-416.232239;67.474007;155.348892;3; +62;152;-419.227234;67.329659;155.898819;3; +62;153;-422.407837;67.417534;156.320496;3; +62;154;-425.719940;67.401115;156.718857;3; +62;155;-429.032715;67.479935;156.816101;3; +62;156;-432.378662;67.503883;156.771912;3; +62;157;-435.750793;67.554756;156.495972;3; +62;158;-439.173981;67.605522;156.219177;3; +62;159;-442.638489;67.642853;155.945770;3; +62;160;-446.152740;67.658798;155.551437;3; +62;161;-449.532013;67.684494;155.029984;2; +62;162;-452.519379;67.674828;154.566696;3; +62;163;-455.542908;67.688408;154.098831;3; +62;164;-458.692413;67.677429;153.705887;3; +62;165;-461.959869;67.690430;153.319672;3; +62;166;-465.329163;67.715981;152.925476;3; +62;167;-468.780212;67.981712;152.388535;3; +62;168;-472.075562;68.422470;151.831680;3; +62;169;-475.486450;68.719604;151.671661;2; +62;170;-478.364441;69.247948;152.225052;3; +62;171;-480.892975;69.525894;153.654388;3; +62;172;-483.275055;69.862045;155.412750;2; +62;173;-485.396484;69.912666;157.122437;2; +62;174;-486.854889;69.969276;158.858612;2; +62;175;-487.406921;70.017609;160.372711;2; +62;176;-487.672974;69.923416;161.438995;2; +62;177;-487.929932;69.973305;162.146317;2; +62;178;-488.128662;70.128082;162.715851;2;{"LinkMode":0,"Links":[[51,87]]} +63;1;-501.087280;64.721306;4.033357;3;{"LinkMode":0,"Links":[[48,52],[47,112],[29,93]],"Objectives":["vehicle tank3 both"]} +63;2;-501.961823;64.615700;3.993819;20; +63;3;-503.531921;64.321686;3.923541;4; +63;4;-505.442139;63.802567;3.855012;4; +63;5;-507.374084;63.535000;3.796571;4; +63;6;-509.316833;63.394970;3.820984;4; +63;7;-511.253235;63.377361;3.994700;4; +63;8;-513.109619;63.389324;4.563648;4; +63;9;-514.916321;63.389969;5.291848;4; +63;10;-515.894714;63.389950;5.760978;3;{"Action":{"inputs":[35],"pitch":-0.16806827485561,"time":0.5,"type":"vehicle","yaw":0.51176464557648}} +64;1;-349.683502;68.646034;-134.641144;3;{"LinkMode":0,"Links":[[48,169]],"Objectives":["vehicle other3 both"]} +64;2;-349.788818;68.521004;-133.962738;3; +64;3;-350.066376;68.243515;-132.857880;3; +64;4;-350.802399;67.950172;-132.127518;3;{"Action":{"inputs":[35],"pitch":-0.18924027681351,"time":0.5,"type":"vehicle","yaw":1.1688791513443}} +65;1;-352.546326;67.978279;-131.275681;3;{"Vehicles":["land"]} +65;2;-352.431152;67.968155;-130.364822;3; +65;3;-352.302612;67.985321;-129.384735;3; +65;4;-352.098877;68.015007;-128.028687;3; +65;5;-351.881165;68.154099;-126.671494;2; +65;6;-351.641449;68.265450;-125.824852;2; +65;7;-351.495392;68.316383;-125.298416;3; +65;8;-351.242462;68.370171;-124.711174;3; +65;9;-350.747864;68.406479;-124.051102;3; +65;10;-350.112061;68.469597;-123.076256;3; +65;11;-349.320648;68.559502;-121.819756;2; +65;12;-348.648254;68.664268;-121.006180;2; +65;13;-348.246002;68.721962;-120.451248;2; +65;14;-347.994171;68.744003;-120.149788;2;{"LinkMode":0,"Links":[[51,212]]} +66;1;-518.378479;63.394676;8.202371;3;{"Vehicles":["land"]} +66;2;-517.430237;63.399845;8.165556;3; +66;3;-516.261230;63.397003;8.128891;3; +66;4;-514.983215;63.386292;8.094768;3; +66;5;-513.672729;63.419071;8.116199;2; +66;6;-512.436462;63.455982;8.285847;3; +66;7;-511.134216;63.525085;8.653714;3; +66;8;-509.638763;63.647549;9.105729;3; +66;9;-507.960175;63.806759;9.598249;2; +66;10;-506.600006;63.910336;9.950130;2; +66;11;-505.506622;64.017433;10.097048;3; +66;12;-504.764313;64.073677;10.138865;2;{"LinkMode":0,"Links":[[51,134],[51,141]]} diff --git a/mapfiles/XP4_Parl_RushLarge0.map b/mapfiles/XP4_Parl_RushLarge0.map index 079195e7..c3af97fd 100644 --- a/mapfiles/XP4_Parl_RushLarge0.map +++ b/mapfiles/XP4_Parl_RushLarge0.map @@ -970,7 +970,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 28;29;-358.052246;66.206474;105.705307;4;{"LinkMode":0,"Links":[[27,28]]} 28;30;-356.426208;66.206474;105.104881;4; 28;31;-355.424255;66.206474;104.732574;3;{"LinkMode":0,"Links":[[27,14]]} -29;1;-455.067596;67.719780;188.667923;3;{"LinkMode":0,"Links":[[3,3]],"Objectives":["mcom 3","mcom 4","mcom 1"]} +29;1;-455.067596;67.719780;188.667923;3;{"LinkMode":0,"Links":[[3,3]],"Objectives":["mcom 1","mcom 3","mcom 4"]} 29;2;-454.834442;67.763695;187.949600;19; 29;3;-455.321869;67.719780;186.567337;4;{"LinkMode":0,"Links":[[3,17]]} 29;4;-456.142242;67.719780;184.801987;4;{"LinkMode":0,"Links":[[3,37]]} @@ -1048,7 +1048,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 29;76;-415.330658;64.719734;99.553093;4; 29;77;-415.027924;64.719734;101.495888;4; 29;78;-414.764557;64.719734;102.484253;3;{"LinkMode":0,"Links":[[26,35]]} -30;1;-414.284119;67.407280;169.659653;3;{"Objectives":["mcom 3","mcom 4","mcom 2"]} +30;1;-414.284119;67.407280;169.659653;3;{"Objectives":["mcom 2","mcom 3","mcom 4"]} 30;2;-413.985565;67.407280;169.372452;19; 30;3;-413.745209;67.407280;168.357620;3;{"LinkMode":0,"Links":[[4,28]]} 30;4;-413.661865;67.387871;167.213150;4; @@ -2083,7 +2083,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 52;99;-331.954773;68.077522;-40.239513;4; 52;100;-333.208435;68.082024;-41.472008;4;{"LinkMode":0,"Links":[[62,81]]} 52;101;-334.059296;68.087105;-42.108356;3;{"LinkMode":0,"Links":[[64,79]]} -53;1;-387.404144;64.364609;110.081055;3;{"Objectives":["mcom 5","mcom 6","mcom 3","mcom 4"]} +53;1;-387.404144;64.364609;110.081055;3;{"Objectives":["mcom 3","mcom 4","mcom 5","mcom 6"]} 53;2;-387.443787;64.323853;109.473572;19; 53;3;-387.506714;64.279503;108.211067;3; 53;4;-387.554260;64.243423;107.013870;3; @@ -2190,7 +2190,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 53;105;-322.065979;68.091148;-34.988922;4; 53;106;-322.255096;68.092079;-36.317406;3; 53;107;-322.221100;68.092827;-37.058010;3;{"LinkMode":0,"Links":[[52,2]]} -54;1;-366.656372;64.312469;82.538368;3;{"Objectives":["mcom 5","mcom 6","mcom 4"]} +54;1;-366.656372;64.312469;82.538368;3;{"Objectives":["mcom 4","mcom 5","mcom 6"]} 54;2;-366.012756;64.363739;82.824005;19; 54;3;-364.461670;64.336960;83.380089;4;{"LinkMode":0,"Links":[[27,37]]} 54;4;-362.622955;64.366173;83.660797;4; @@ -5661,7 +5661,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 158;86;-364.681671;69.761154;-121.397903;2; 158;87;-362.851624;69.712914;-121.479454;2; 158;88;-361.818909;69.705238;-121.475800;2; -159;1;-358.524506;78.966789;-45.196953;3;{"Objectives":["mcom 7","mcom 8","mcom 6"]} +159;1;-358.524506;78.966789;-45.196953;3;{"Objectives":["mcom 6","mcom 7","mcom 8"]} 159;2;-358.341644;78.966789;-44.643738;20; 159;3;-356.951263;78.934853;-43.528297;4;{"LinkMode":0,"Links":[[52,44]]} 159;4;-355.325623;78.934853;-42.638222;4; @@ -5768,7 +5768,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 159;105;-222.626877;67.436974;-94.436615;4; 159;106;-220.759995;67.302544;-93.928223;4; 159;107;-219.638290;67.323601;-93.645576;3;{"LinkMode":0,"Links":[[77,10]]} -160;1;-319.040497;78.934853;-12.808618;3;{"Objectives":["mcom 7","mcom 8","mcom 5"]} +160;1;-319.040497;78.934853;-12.808618;3;{"Objectives":["mcom 5","mcom 7","mcom 8"]} 160;2;-319.416992;78.934853;-13.253961;19; 160;3;-320.617615;78.934853;-13.644136;4;{"LinkMode":0,"Links":[[50,61]]} 160;4;-322.415833;78.934853;-14.170369;4; @@ -5856,7 +5856,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 160;86;-220.547287;67.352661;-53.940865;4; 160;87;-219.352570;67.417908;-54.765892;3; 160;88;-219.080826;67.422073;-54.962273;3;{"LinkMode":0,"Links":[[76,38]]} -161;1;-317.455658;68.157852;9.519414;3;{"LinkMode":0,"Links":[[50,10]],"Objectives":["mcom 7","mcom 8","mcom 5"]} +161;1;-317.455658;68.157852;9.519414;3;{"LinkMode":0,"Links":[[50,10]],"Objectives":["mcom 5","mcom 7","mcom 8"]} 161;2;-316.880615;68.170197;9.803729;19; 161;3;-316.032379;68.130981;11.055107;4; 161;4;-315.311462;68.161018;12.770967;4; diff --git a/mapfiles/XP4_Quake_ConquestLarge0.map b/mapfiles/XP4_Quake_ConquestLarge0.map index f4061332..f1d0ffa4 100644 --- a/mapfiles/XP4_Quake_ConquestLarge0.map +++ b/mapfiles/XP4_Quake_ConquestLarge0.map @@ -1,4 +1,5 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data +0;0;0.000000;0.000000;0.000000;0;{"Authors":["Beschutzer"],"CompIndex":1,"Date":"2025-09-26 00:36:03"} 1;1;-292.461914;187.144333;147.644531;3;{"Objectives":["base us"]} 1;2;-292.511597;187.144333;146.442245;3; 1;3;-292.561127;187.134399;145.234772;3; @@ -86,7 +87,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 2;72;-201.998077;181.926422;112.107033;4; 2;73;-199.873947;181.876236;111.756081;4; 2;74;-197.946030;181.874969;111.440720;4; -2;75;-196.466980;181.875946;110.998657;4; +2;75;-196.466980;181.875946;110.998657;4;{"LinkMode":0,"Links":[[3,60]]} 3;1;-194.196060;181.862106;105.736176;3;{"Objectives":["a"]} 3;2;-193.889755;181.863083;104.948296;3; 3;3;-193.544800;181.867813;103.994087;3; @@ -146,7 +147,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 3;57;-192.563232;181.831833;112.632347;3; 3;58;-194.179092;181.831833;112.616432;3;{"LinkMode":0,"Links":[[32,13],[61,10]]} 3;59;-194.928848;181.868622;111.855453;3;{"LinkMode":0,"Links":[[5,1]]} -3;60;-195.327744;181.864014;110.606125;3; +3;60;-195.327744;181.864014;110.606125;3;{"LinkMode":0,"Links":[[2,75]]} 3;61;-195.213120;181.863083;109.050896;3; 3;62;-194.963455;181.863083;107.696068;3;{"LinkMode":0,"Links":[[38,18]]} 3;63;-194.537842;181.863083;106.637993;3; diff --git a/mapfiles/XP4_Rubble_RushLarge0.map b/mapfiles/XP4_Rubble_RushLarge0.map index b701057a..aab57659 100644 --- a/mapfiles/XP4_Rubble_RushLarge0.map +++ b/mapfiles/XP4_Rubble_RushLarge0.map @@ -386,7 +386,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 11;49;58.007618;68.602722;61.066936;3; 11;50;57.425526;69.190094;61.234833;3; 11;51;56.834999;68.600174;61.405159;3;{"LinkMode":0,"Links":[[6,13]]} -12;1;49.095890;68.480247;60.234783;65283;{"Objectives":["mcom 4","mcom 3"]} +12;1;49.095890;68.480247;60.234783;65283;{"Objectives":["mcom 3","mcom 4"]} 12;2;49.069237;68.480247;58.681736;4; 12;3;49.037220;68.480247;56.825245;4; 12;4;48.946095;68.477272;54.878567;4; @@ -859,7 +859,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 23;18;19.510126;67.675056;0.662442;4; 23;19;20.806080;67.675056;0.455253;3; 23;20;21.796846;67.675056;0.319569;3;{"LinkMode":0,"Links":[[14,17]]} -24;1;-26.839268;64.265633;-61.563030;65283;{"LinkMode":0,"Links":[[20,5]],"Objectives":["mcom 4","mcom 3","base ru 2"]} +24;1;-26.839268;64.265633;-61.563030;65283;{"LinkMode":0,"Links":[[20,5]],"Objectives":["base ru 2","mcom 3","mcom 4"]} 24;2;-26.426935;64.268463;-61.547245;19; 24;3;-24.963240;64.293747;-61.449554;4; 24;4;-23.078859;64.364014;-61.969570;4; @@ -1029,7 +1029,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 28;43;-30.779930;64.844742;-98.559654;3; 28;44;-30.140352;64.844742;-97.791321;3; 28;45;-29.990877;64.844742;-97.096832;3;{"LinkMode":0,"Links":[[27,4]]} -29;1;-3.922804;64.848061;-87.918213;65283;{"LinkMode":0,"Links":[[26,32]],"Objectives":["mcom 4","mcom 3","mcom 5","mcom 6"]} +29;1;-3.922804;64.848061;-87.918213;65283;{"LinkMode":0,"Links":[[26,32]],"Objectives":["mcom 3","mcom 4","mcom 5","mcom 6"]} 29;2;-5.368840;64.845024;-88.162201;4; 29;3;-7.304351;64.845024;-88.294891;4; 29;4;-9.252694;64.845024;-88.373550;4; @@ -1112,7 +1112,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 30;4;-1.258604;65.723434;7.237366;4; 30;5;0.427648;65.805862;7.407945;3;{"LinkMode":0,"Links":[[32,1]]} 30;6;1.252251;65.849274;6.700120;3; -31;1;-5.504767;65.723640;4.757767;65283;{"LinkMode":0,"Links":[[30,2]],"Objectives":["mcom 5","mcom 6","base us 3"]} +31;1;-5.504767;65.723640;4.757767;65283;{"LinkMode":0,"Links":[[30,2]],"Objectives":["base us 3","mcom 5","mcom 6"]} 31;2;-5.876393;65.723640;3.819201;3; 31;3;-6.483199;65.723640;2.104166;4; 31;4;-6.519927;65.723640;0.271208;4; @@ -1181,7 +1181,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 31;67;-16.676085;64.845413;-86.911011;4; 31;68;-18.165150;64.845413;-87.486420;3; 31;69;-18.700006;64.845413;-87.691414;3;{"LinkMode":0,"Links":[[28,19]]} -32;1;0.678993;65.723808;4.928296;65283;{"LinkMode":0,"Links":[[30,5]],"Objectives":["mcom 5","mcom 6","base us 3"]} +32;1;0.678993;65.723808;4.928296;65283;{"LinkMode":0,"Links":[[30,5]],"Objectives":["base us 3","mcom 5","mcom 6"]} 32;2;0.887588;65.723808;4.497385;3; 32;3;1.570463;65.723808;2.958597;4; 32;4;2.238258;65.728233;1.132263;4; @@ -1326,7 +1326,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 36;6;22.755146;67.004913;-131.420944;3; 36;7;23.733660;67.013985;-131.835846;3;{"LinkMode":0,"Links":[[37,1]]} 36;8;24.293896;67.016815;-132.011185;3; -37;1;25.326344;66.987587;-130.426971;65283;{"LinkMode":0,"Links":[[36,7]],"Objectives":["mcom 5","mcom 6","base ru 3"]} +37;1;25.326344;66.987587;-130.426971;65283;{"LinkMode":0,"Links":[[36,7]],"Objectives":["base ru 3","mcom 5","mcom 6"]} 37;2;26.145294;66.953735;-129.346069;4; 37;3;27.382648;66.985092;-127.730057;4; 37;4;28.397915;67.111000;-126.230881;4; diff --git a/mapfiles/XP5_001_ConquestLarge0.map b/mapfiles/XP5_001_ConquestLarge0.map index 440d9bc1..bf6a7296 100644 --- a/mapfiles/XP5_001_ConquestLarge0.map +++ b/mapfiles/XP5_001_ConquestLarge0.map @@ -1,5 +1,5 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data -1;1;-252.041016;125.676559;108.987305;65283;{"Objectives":["e","d","c","b","a"]} +1;1;-252.041016;125.676559;108.987305;65283;{"Objectives":["a","b","c","d","e"]} 1;2;-251.751144;125.755455;111.140106;4; 1;3;-251.487503;125.873817;113.251099;4; 1;4;-251.218521;126.033638;115.372047;4; @@ -996,7 +996,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 9;29;158.408493;111.688278;-29.002014;3; 9;30;158.816162;111.688278;-29.693884;3;{"LinkMode":0,"Links":[[8,31]]} 9;31;159.665543;111.688271;-29.989676;3;{"LinkMode":0,"Links":[[8,11]]} -10;1;147.243164;110.938309;-45.419922;65283;{"LinkMode":0,"Links":[[1,258],[1,255]],"Objectives":["d","c"]} +10;1;147.243164;110.938309;-45.419922;65283;{"LinkMode":0,"Links":[[1,258],[1,255]],"Objectives":["c","d"]} 10;2;146.993393;110.938316;-47.466602;4; 10;3;146.971802;110.938301;-49.865055;4; 10;4;147.132355;110.938309;-52.092030;4; @@ -22912,7 +22912,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 118;410;-196.783234;126.036049;131.524246;3; 118;411;-197.171188;126.045578;131.363251;3; 118;412;-197.540054;126.065552;131.326904;3;{"LinkMode":0,"Links":[[22,5]]} -119;1;404.093262;125.782997;-146.587692;3;{"LinkMode":0,"Links":[[3,46]],"Objectives":["e","d","c","b","a"]} +119;1;404.093262;125.782997;-146.587692;3;{"LinkMode":0,"Links":[[3,46]],"Objectives":["a","b","c","d","e"]} 119;2;404.006287;125.782997;-145.875458;3; 119;3;403.801025;125.782997;-145.212784;3; 119;4;403.226624;125.784958;-144.847168;4; diff --git a/mapfiles/XP5_001_ConquestSmall0.map b/mapfiles/XP5_001_ConquestSmall0.map index 9c3686b8..feb38a95 100644 --- a/mapfiles/XP5_001_ConquestSmall0.map +++ b/mapfiles/XP5_001_ConquestSmall0.map @@ -1,5 +1,5 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data -1;1;-252.041016;125.676559;108.987305;65283;{"Objectives":["e","d","c","b","a"]} +1;1;-252.041016;125.676559;108.987305;65283;{"Objectives":["a","b","c","d","e"]} 1;2;-251.751144;125.755455;111.140106;4; 1;3;-251.487503;125.873817;113.251099;4; 1;4;-251.218521;126.033638;115.372047;4; @@ -996,7 +996,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 9;29;158.408493;111.688278;-29.002014;3; 9;30;158.816162;111.688278;-29.693884;3;{"LinkMode":0,"Links":[[8,31]]} 9;31;159.665543;111.688271;-29.989676;3;{"LinkMode":0,"Links":[[8,11]]} -10;1;147.243164;110.938309;-45.419922;65283;{"LinkMode":0,"Links":[[1,258],[1,255]],"Objectives":["d","c"]} +10;1;147.243164;110.938309;-45.419922;65283;{"LinkMode":0,"Links":[[1,258],[1,255]],"Objectives":["c","d"]} 10;2;146.993393;110.938316;-47.466602;4; 10;3;146.971802;110.938301;-49.865055;4; 10;4;147.132355;110.938309;-52.092030;4; diff --git a/mapfiles/XP5_001_RushLarge0.map b/mapfiles/XP5_001_RushLarge0.map index 88fecf16..cf4a49b0 100644 --- a/mapfiles/XP5_001_RushLarge0.map +++ b/mapfiles/XP5_001_RushLarge0.map @@ -2966,7 +2966,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 91;17;153.995422;111.455750;-49.582977;18; 91;18;154.670029;111.688057;-50.599922;2; 91;19;155.461136;111.688057;-51.792877;3;{"LinkMode":0,"Links":[[89,64]]} -92;1;-16.054741;108.507736;57.152874;3;{"LinkMode":0,"Links":[[46,49]],"Objectives":["mcom 5","mcom 6","mcom 4"]} +92;1;-16.054741;108.507736;57.152874;3;{"LinkMode":0,"Links":[[46,49]],"Objectives":["mcom 4","mcom 5","mcom 6"]} 92;2;-13.915721;108.476379;55.931328;4;{"LinkMode":0,"Links":[[46,13]]} 92;3;-11.390965;108.443855;56.301357;4; 92;4;-8.940039;108.446724;57.121113;4; @@ -4340,7 +4340,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 142;44;369.639252;107.236206;15.225955;3; 142;45;370.747772;107.252533;13.992552;3;{"LinkMode":0,"Links":[[167,24]]} 142;46;370.535980;107.252533;12.510472;3;{"LinkMode":0,"Links":[[141,4]]} -143;1;180.482422;110.939194;-40.403282;3;{"LinkMode":0,"Links":[[89,11]],"Objectives":["mcom 7","mcom 8","mcom 6"]} +143;1;180.482422;110.939194;-40.403282;3;{"LinkMode":0,"Links":[[89,11]],"Objectives":["mcom 6","mcom 7","mcom 8"]} 143;2;181.060562;110.939194;-39.725132;19; 143;3;181.419785;110.939194;-37.913635;3; 143;4;181.123398;110.939194;-35.806885;4; @@ -5490,7 +5490,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 192;11;428.941101;125.792191;-149.422043;4; 192;12;432.029663;125.820709;-149.326767;3; 192;13;432.797058;125.822838;-149.256378;3;{"LinkMode":0,"Links":[[190,32]]} -193;1;392.197235;107.126633;-7.037675;3;{"LinkMode":0,"Links":[[142,8]],"Objectives":["mcom 10","mcom 9","mcom 8"]} +193;1;392.197235;107.126633;-7.037675;3;{"LinkMode":0,"Links":[[142,8]],"Objectives":["mcom 10","mcom 8","mcom 9"]} 193;2;394.201935;107.126633;-8.182519;20; 193;3;396.832886;107.126633;-9.981560;4; 193;4;399.506317;107.126633;-11.508152;4; @@ -5523,7 +5523,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 193;31;448.767120;126.789429;-138.199387;4; 193;32;446.796112;126.614464;-140.640411;4; 193;33;445.104248;126.428177;-142.638824;3;{"LinkMode":0,"Links":[[190,31]]} -194;1;319.074341;107.658936;-56.097393;3;{"LinkMode":0,"Links":[[140,22]],"Objectives":["mcom 10","mcom 9","mcom 7"]} +194;1;319.074341;107.658936;-56.097393;3;{"LinkMode":0,"Links":[[140,22]],"Objectives":["mcom 10","mcom 7","mcom 9"]} 194;2;318.169525;107.811684;-58.539513;4; 194;3;317.144287;107.119316;-61.548817;4; 194;4;316.523102;107.523811;-65.182991;20; @@ -6219,7 +6219,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 224;34;381.898499;107.163208;10.859057;2; 224;35;381.471497;107.192833;13.228415;2; 224;36;381.228668;107.227303;14.453427;2; -225;1;399.826416;107.126633;-15.944702;65283;{"LinkMode":0,"Links":[[224,7]],"Objectives":["mcom 10","mcom 9","mcom 8"],"Vehicles":["land"]} +225;1;399.826416;107.126633;-15.944702;65283;{"LinkMode":0,"Links":[[224,7]],"Objectives":["mcom 10","mcom 8","mcom 9"],"Vehicles":["land"]} 225;2;401.031219;107.126633;-17.286457;20;{"LinkMode":0,"Links":[[161,24]]} 225;3;403.273865;107.105255;-19.636118;4; 225;4;405.596375;107.173569;-22.055229;4; diff --git a/mapfiles/XP5_002_ConquestSmall0.map b/mapfiles/XP5_002_ConquestSmall0.map index 54e583d4..5d8a308c 100644 --- a/mapfiles/XP5_002_ConquestSmall0.map +++ b/mapfiles/XP5_002_ConquestSmall0.map @@ -1288,7 +1288,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 22;15;-1673.985962;72.999092;458.558563;3; 22;16;-1672.808594;73.028885;458.454254;3; 22;17;-1672.250732;73.046486;458.468292;3;{"Action":{"inputs":[35],"pitch":-0.34304958581924,"time":0.5,"type":"vehicle","yaw":4.6118803024292}} -23;1;-2013.686523;59.313282;-215.672852;65283;{"LinkMode":0,"Links":[[19,30]],"Objectives":["a","b","c","e","d"]} +23;1;-2013.686523;59.313282;-215.672852;65283;{"LinkMode":0,"Links":[[19,30]],"Objectives":["a","b","c","d","e"]} 23;2;-2013.470581;59.313305;-215.070374;3;{"LinkMode":0,"Links":[[18,49],[3,16]]} 23;3;-2012.902588;59.063923;-213.483932;4; 23;4;-2012.466675;58.831020;-211.587967;4; diff --git a/mapfiles/XP5_002_RushLarge0.map b/mapfiles/XP5_002_RushLarge0.map index d9af48a2..e62cb5f1 100644 --- a/mapfiles/XP5_002_RushLarge0.map +++ b/mapfiles/XP5_002_RushLarge0.map @@ -3838,7 +3838,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 89;109;-1910.862183;50.188267;192.174683;4;{"LinkMode":0,"Links":[[110,10]]} 89;110;-1910.015747;50.188267;193.007294;3; 89;111;-1909.195557;50.212688;193.414352;3;{"LinkMode":0,"Links":[[119,62]]} -90;1;-1865.901489;56.896622;-36.578999;3;{"LinkMode":0,"Links":[[42,76]],"Objectives":["mcom 5","mcom 6","mcom 3","mcom 4"]} +90;1;-1865.901489;56.896622;-36.578999;3;{"LinkMode":0,"Links":[[42,76]],"Objectives":["mcom 3","mcom 4","mcom 5","mcom 6"]} 90;2;-1865.707397;56.896690;-36.288979;19; 90;3;-1865.020508;56.896755;-35.256474;4; 90;4;-1864.282104;56.896870;-33.643127;4; diff --git a/mapfiles/XP5_003_ConquestLarge0.map b/mapfiles/XP5_003_ConquestLarge0.map index 8c65da27..a686a4e0 100644 --- a/mapfiles/XP5_003_ConquestLarge0.map +++ b/mapfiles/XP5_003_ConquestLarge0.map @@ -8025,7 +8025,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 47;192;-219.562195;155.002365;-881.245361;3; 47;193;-220.181244;155.054962;-880.249268;3; 47;194;-220.422913;155.064468;-879.833984;3;{"LinkMode":0,"Links":[[17,56]]} -48;1;-233.867569;155.002365;-881.139099;3;{"LinkMode":0,"Links":[[17,49]],"Objectives":["a","f","g","e","d","b"]} +48;1;-233.867569;155.002365;-881.139099;3;{"LinkMode":0,"Links":[[17,49]],"Objectives":["a","b","d","e","f","g"]} 48;2;-234.023499;155.002365;-882.180603;3; 48;3;-233.797379;155.002365;-882.537476;4; 48;4;-232.430466;155.002365;-883.278076;4; @@ -9837,7 +9837,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 50;8;-377.440765;190.004822;-1177.827026;3; 50;9;-378.460419;190.004822;-1178.373291;3; 50;10;-379.430023;190.004822;-1178.845581;3;{"Action":{"inputs":[35],"pitch":-0.349654763937,"time":0.5,"type":"vehicle","yaw":1.9495226144791}} -51;1;-383.360474;190.004822;-1171.590454;3;{"LinkMode":0,"Links":[[49,26]],"Objectives":["vehicle other1 ru","vehicle other2 ru","base ru"]} +51;1;-383.360474;190.004822;-1171.590454;3;{"LinkMode":0,"Links":[[49,26]],"Objectives":["base ru","vehicle other1 ru","vehicle other2 ru"]} 51;2;-383.489990;190.004822;-1172.052490;3; 51;3;-383.708588;190.004822;-1172.734131;3; 51;4;-383.737579;190.004822;-1173.112793;3; @@ -12669,7 +12669,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 74;246;-75.616425;171.315002;-1062.611938;3; 74;247;-76.046341;171.315002;-1063.483276;3; 74;248;-76.223618;171.315002;-1063.893555;3;{"LinkMode":0,"Links":[[16,28]]} -75;1;-87.804298;171.290939;-1082.436157;3;{"LinkMode":0,"Links":[[16,42]],"Objectives":["a","f","g","e","d","b"]} +75;1;-87.804298;171.290939;-1082.436157;3;{"LinkMode":0,"Links":[[16,42]],"Objectives":["a","b","d","e","f","g"]} 75;2;-88.352150;171.324280;-1082.607666;3; 75;3;-89.187904;171.384705;-1082.864868;3; 75;4;-89.638618;171.409088;-1082.739868;3; @@ -23781,7 +23781,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 100;297;293.508392;164.127502;-1019.596375;3; 100;298;293.738892;164.148193;-1020.703003;3; 100;299;293.830475;164.171005;-1021.192993;3;{"LinkMode":0,"Links":[[15,62]]} -101;1;277.137665;164.850250;-1031.682251;65283;{"LinkMode":0,"Links":[[15,52]],"Objectives":["c","f","e","b"]} +101;1;277.137665;164.850250;-1031.682251;65283;{"LinkMode":0,"Links":[[15,52]],"Objectives":["b","c","e","f"]} 101;2;277.112396;164.947845;-1032.148926;3; 101;3;277.063690;165.204681;-1032.993164;3; 101;4;277.031891;165.359802;-1033.329224;3; @@ -24775,7 +24775,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 103;187;118.744843;155.042343;-867.750488;3; 103;188;118.087204;155.024323;-868.129944;3; 103;189;117.528862;155.013428;-868.382751;3;{"LinkMode":0,"Links":[[19,43]]} -104;1;115.594505;154.952957;-872.407104;65283;{"LinkMode":0,"Links":[[19,41]],"Objectives":["e","d","b"]} +104;1;115.594505;154.952957;-872.407104;65283;{"LinkMode":0,"Links":[[19,41]],"Objectives":["b","d","e"]} 104;2;115.254311;154.956665;-872.365540;3; 104;3;114.337418;154.968933;-872.267334;3; 104;4;113.721245;154.977234;-872.266357;3; @@ -26814,7 +26814,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 114;221;264.291382;143.845947;-659.528015;3; 114;222;264.679199;143.845947;-658.945312;3; 114;223;264.954956;143.845947;-658.566589;3;{"LinkMode":0,"Links":[[20,35]]} -115;1;268.804810;143.933578;-659.531555;3;{"LinkMode":0,"Links":[[20,33]],"Objectives":["a","c","f","g","e","d","b"]} +115;1;268.804810;143.933578;-659.531555;3;{"LinkMode":0,"Links":[[20,33]],"Objectives":["a","b","c","d","e","f","g"]} 115;2;268.747925;143.931808;-660.200867;3; 115;3;268.669159;143.929291;-661.115295;3; 115;4;269.473145;143.954468;-661.918762;4; diff --git a/mapfiles/XP5_003_ConquestSmall0.map b/mapfiles/XP5_003_ConquestSmall0.map index a4be2d21..d4391fed 100644 --- a/mapfiles/XP5_003_ConquestSmall0.map +++ b/mapfiles/XP5_003_ConquestSmall0.map @@ -313,7 +313,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 6;42;-63.968876;140.002731;-712.174011;3;{"LinkMode":0,"Links":[[7,429]]} 6;43;-64.169899;140.002731;-713.426819;3; 6;44;-64.358917;140.002731;-714.465515;3;{"LinkMode":0,"Links":[[5,44],[5,17]]} -7;1;265.454102;143.760544;-629.354492;3;{"Objectives":["a","c","b","e","d"]} +7;1;265.454102;143.760544;-629.354492;3;{"Objectives":["a","b","c","d","e"]} 7;2;264.437103;143.982864;-630.596191;4; 7;3;263.079224;143.907120;-632.269287;4; 7;4;261.722229;143.907120;-633.953125;4; diff --git a/mapfiles/XP5_004_RushLarge0.map b/mapfiles/XP5_004_RushLarge0.map index 5fa979a2..6adee7a5 100644 --- a/mapfiles/XP5_004_RushLarge0.map +++ b/mapfiles/XP5_004_RushLarge0.map @@ -5568,7 +5568,7 @@ pathIndex;pointIndex;transX;transY;transZ;inputVar;data 102;5;-726.883423;136.246887;-947.277039;4; 102;6;-727.337036;136.424484;-945.241821;3; 102;7;-727.565369;136.510101;-944.266174;3;{"LinkMode":0,"Links":[[103,1]]} -103;1;-728.617188;136.546692;-943.970642;3;{"LinkMode":0,"Links":[[102,7]],"Objectives":["mcom 6","base ru 3"]} +103;1;-728.617188;136.546692;-943.970642;3;{"LinkMode":0,"Links":[[102,7]],"Objectives":["base ru 3","mcom 6"]} 103;2;-728.872864;136.566727;-943.526123;4; 103;3;-729.928711;136.702179;-941.856873;4; 103;4;-731.400757;136.871567;-940.239441;4; From 09b05c1425becb3ed0f5931887eefad377ee33de Mon Sep 17 00:00:00 2001 From: MatiasPastori Date: Sun, 5 Oct 2025 16:20:53 -0300 Subject: [PATCH 08/10] This commit can be cherry picked to another branch if needed maybe. The bots now have the random chance of calculating an offset on the fly while transiting the original path nodes, this helps to avoid them getting clumped and serves the purpose of giving them some more spacing and avoiding the feeling of them always following the same line like dumbs. Added a lot of different checks and safety fallbacks for different scenarios ( them getting stuck being in the offset path, and so on ) Seems to be working flawlessly so far with the SideMovement disabled and the Jump While moving / shooting configs. ( I simply don't like it too much but its a personal decission ) --- ext/Server/Bot/BotMovement.lua | 213 ++++++++++++++++++++++++++++++--- 1 file changed, 197 insertions(+), 16 deletions(-) diff --git a/ext/Server/Bot/BotMovement.lua b/ext/Server/Bot/BotMovement.lua index df3d3741..ea477989 100644 --- a/ext/Server/Bot/BotMovement.lua +++ b/ext/Server/Bot/BotMovement.lua @@ -15,6 +15,143 @@ function BotMovement:__init() -- Nothing to do. end +local flags = RayCastFlags.DontCheckWater | + RayCastFlags.DontCheckCharacter | + RayCastFlags.DontCheckRagdoll | + RayCastFlags.DontCheckTerrain + +-- >>> SMART PATH OFFSET (with zig-zag and stairs fixes) +local function ApplyPathOffset(p_Bot, p_OriginalPoint, p_NextPoint) + -- PRIORITY 1: Recovery mode - disable offset + if p_Bot.m_PathSide == 0 and p_Bot.m_OffsetRecoveryNodes and p_Bot.m_OffsetRecoveryNodes > 0 then + p_Bot.m_OffsetRecoveryNodes = p_Bot.m_OffsetRecoveryNodes - 1 + if p_Bot.m_OffsetRecoveryNodes == 0 then + p_Bot.m_PathSide = math.random(-1, 1) + end + return p_OriginalPoint + end + + -- PRIORITY 2: Validate inputs + if not p_OriginalPoint or not p_NextPoint or + (p_OriginalPoint.Data and (p_OriginalPoint.Data.Action or p_OriginalPoint.Data.Links)) then + return p_OriginalPoint + end + + -- Initialize side once per path + if not p_Bot.m_PathSide or p_Bot.m_LastPathIndex ~= p_Bot._PathIndex then + p_Bot.m_PathSide = math.random(-1, 1) -- -1 left, 0 center, 1 right + p_Bot.m_LastPathIndex = p_Bot._PathIndex + p_Bot.m_OffsetDistance = 0.8 + (math.random() * 0.4) -- 0.8-1.2m + p_Bot.m_LastStuckCheck = 0 + p_Bot.m_ForceCenter = false + p_Bot.m_OffsetRight = nil + end + + -- Emergency fallback + if p_Bot._ObstacleSequenceTimer ~= 0 and p_Bot.m_PathSide ~= 0 then + p_Bot.m_ForceCenter = true + return p_OriginalPoint + end + if p_Bot.m_ForceCenter and p_Bot._ObstacleSequenceTimer == 0 then + p_Bot.m_ForceCenter = false + end + if p_Bot.m_PathSide == 0 or p_Bot.m_ForceCenter then + return p_OriginalPoint + end + + -- Calculate delta and direction + local delta = p_NextPoint.Position - p_OriginalPoint.Position + local length2D = math.sqrt(delta.x * delta.x + delta.z * delta.z) + if length2D < 0.1 then return p_OriginalPoint end + + local dir = Vec3(delta.x / length2D, 0, delta.z / length2D) + local right = Vec3(dir.z, 0, -dir.x) + + -- >>> FIX 1: soften lateral direction (avoid zig-zag) + if not p_Bot.m_OffsetRight then + p_Bot.m_OffsetRight = right + else + local smoothed = Vec3( + p_Bot.m_OffsetRight.x * 0.8 + right.x * 0.2, + 0, + p_Bot.m_OffsetRight.z * 0.8 + right.z * 0.2 + ) + smoothed:Normalize() + p_Bot.m_OffsetRight = smoothed + end + right = p_Bot.m_OffsetRight + + -- >>> FIX 2: stairs/passages vertical → center + local verticalDelta = math.abs(p_NextPoint.Position.y - p_OriginalPoint.Position.y) + if verticalDelta > 0.5 then + p_Bot.m_OffsetRecoveryNodes = 3 -- force center for 3 nodes + return p_OriginalPoint + end + + + -- >>> Smart check width (once per node or every 1s) + local currentTime = SharedUtils:GetTimeMS() + if currentTime - (p_Bot.m_LastStuckCheck or 0) > 1000 then + p_Bot.m_LastStuckCheck = currentTime + + local rayOrigin = p_OriginalPoint.Position + Vec3(0, 0.5, 0) + + local leftHits = RaycastManager:CollisionRaycast( + rayOrigin - right * 1.5, + rayOrigin - right * 0.5, + 1, 0, flags + ) + local rightHits = RaycastManager:CollisionRaycast( + rayOrigin + right * 0.5, + rayOrigin + right * 1.5, + 1, 0, flags + ) + + if #leftHits > 0 and #rightHits > 0 then + return p_OriginalPoint -- narrow corridor → center + end + + -- >>> FIX 3: limit offset based on free space + local leftClear = (#leftHits > 0) and leftHits[1].distance or 2.0 + local rightClear = (#rightHits > 0) and rightHits[1].distance or 2.0 + local maxOffset = math.min(leftClear, rightClear) - 0.3 + if maxOffset < p_Bot.m_OffsetDistance then + p_Bot.m_OffsetDistance = math.max(0.3, maxOffset) + end + end + + -- Calculate offset position + local offsetPosition = p_OriginalPoint.Position + right * (p_Bot.m_PathSide * p_Bot.m_OffsetDistance) + + -- >>> FIX 4: check ground under the offset (avoid falling) + local footOrigin = offsetPosition + Vec3(0, 0.2, 0) + local footTarget = offsetPosition - Vec3(0, 2.0, 0) + local downHits = RaycastManager:CollisionRaycast(footOrigin, footTarget, 1, 0, flags) + if #downHits == 0 then + p_Bot.m_OffsetRecoveryNodes = 2 + return p_OriginalPoint + end + + -- Wall-slide check + local sideCheck = RaycastManager:CollisionRaycast( + p_OriginalPoint.Position + right * (p_Bot.m_PathSide * 0.3), + offsetPosition, + 1, 0, + flags + ) + if #sideCheck > 0 and sideCheck[1].position then + local comfortableDistance = 0.4 + offsetPosition = p_OriginalPoint.Position + right * (p_Bot.m_PathSide * comfortableDistance) + end + + return { + Position = offsetPosition, + SpeedMode = p_OriginalPoint.SpeedMode, + ExtraMode = p_OriginalPoint.ExtraMode, + OptValue = p_OriginalPoint.OptValue, + Data = p_OriginalPoint.Data + } +end ---comment ---@param p_DeltaTime number ---@param p_Bot Bot @@ -63,6 +200,9 @@ function BotMovement:UpdateNormalMovement(p_DeltaTime, p_Bot) return end + if s_Point and s_NextPoint then + s_Point = ApplyPathOffset(p_Bot, s_Point, s_NextPoint) or s_Point + end -- Do defense, if needed if p_Bot._ObjectiveMode == BotObjectiveModes.Defend and g_GameDirector:IsAtTargetObjective(p_Bot._PathIndex, p_Bot._Objective) then @@ -236,6 +376,30 @@ function BotMovement:UpdateNormalMovement(p_DeltaTime, p_Bot) -- Detect obstacle and move over or around. To-do: Move before normal jump. local s_CurrentWayPointDistance = p_Bot.m_Player.soldier.worldTransform.trans:Distance(s_Point.Position) + -- >>> OFFSET-AWARE STUCK RECOVERY (improved) + -- >>> PATCH: Hard reroute when stuck + if p_Bot._StuckTimer > 6.0 then + local soldier = p_Bot.m_Player.soldier + if soldier ~= nil then + local s_Node = g_GameDirector:FindClosestPath(soldier.worldTransform.trans, false, true, nil) + + if s_Node ~= nil then + p_Bot._InvertPathDirection = false + p_Bot._PathIndex = s_Node.PathIndex + p_Bot._CurrentWayPoint = s_Node.PointIndex + p_Bot._LastWayDistance = 1000.0 + end + + p_Bot.m_PathSide = 0 -- reset offset + p_Bot.m_OffsetRecoveryNodes = 10 -- lock center for a while + p_Bot._StuckTimer = 0.0 + + -- print("Bot rerouted " .. p_Bot.m_Name) + return + end + end + -- >>> END OFFSET RECOVERY + if s_CurrentWayPointDistance > p_Bot._LastWayDistance + 0.02 and p_Bot._ObstacleSequenceTimer == 0 then -- Skip one point. s_DistanceFromTarget = 0 @@ -284,6 +448,13 @@ function BotMovement:UpdateNormalMovement(p_DeltaTime, p_Bot) p_Bot._ObstacleSequenceTimer = p_Bot._ObstacleSequenceTimer + p_DeltaTime p_Bot._StuckTimer = p_Bot._StuckTimer + p_DeltaTime + -- >>> PATCH 2: vertical stuck acceleration + local soldierPos = p_Bot.m_Player.soldier.worldTransform.trans + if s_Point and (s_Point.Position.y - soldierPos.y > 1.5) then + -- If bot is too low compared to target (stairs/roof cases), speed up stuck timer + p_Bot._StuckTimer = p_Bot._StuckTimer + (p_DeltaTime * 2.0) + end + -- <<< END PATCH 2 if p_Bot._ObstacleRetryCounter >= 2 then -- Try next waypoint. p_Bot._ObstacleRetryCounter = 0 @@ -502,7 +673,8 @@ function BotMovement:UpdateShootMovement(p_DeltaTime, p_Bot) if (p_Bot.m_ActiveWeapon and (p_Bot.m_ActiveWeapon.type == WeaponTypes.Sniper or p_Bot.m_ActiveWeapon.type == WeaponTypes.MissileAir or - p_Bot.m_ActiveWeapon.type == WeaponTypes.MissileLand) and + p_Bot.m_ActiveWeapon.type == WeaponTypes.MissileLand or + p_Bot.m_ActiveWeapon.type == WeaponTypes.LMG) and not p_Bot.m_KnifeMode) then -- Don't move while shooting some weapons. if p_Bot._AttackMode == BotAttackModes.Crouch then if p_Bot.m_Player.soldier.pose ~= CharacterPoseType.CharacterPoseType_Crouch then @@ -548,21 +720,30 @@ function BotMovement:UpdateShootMovement(p_DeltaTime, p_Bot) -- Do some sidewards movement from time to time. local movementIntensity = Config.SpeedFactorAttack - -- More frequent but still substantial movements (every 2.5 seconds, move for 1.0s) - if p_Bot._AttackModeMoveTimer > 15.0 then - p_Bot._AttackModeMoveTimer = 0.0 - elseif p_Bot._AttackModeMoveTimer > 14.0 and p_Bot._AttackModeMoveTimer <= 15.0 then - p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, -movementIntensity) - elseif p_Bot._AttackModeMoveTimer > 12.0 and p_Bot._AttackModeMoveTimer <= 13.0 then - p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, movementIntensity) - elseif p_Bot._AttackModeMoveTimer > 9.5 and p_Bot._AttackModeMoveTimer <= 10.5 then - p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, -movementIntensity) - elseif p_Bot._AttackModeMoveTimer > 7.0 and p_Bot._AttackModeMoveTimer <= 8.0 then - p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, movementIntensity) - elseif p_Bot._AttackModeMoveTimer > 4.5 and p_Bot._AttackModeMoveTimer <= 5.5 then - p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, -movementIntensity) - elseif p_Bot._AttackModeMoveTimer > 2.0 and p_Bot._AttackModeMoveTimer <= 3.0 then - p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, movementIntensity) + -- wrap timer every 15 s (keeps the old behaviour) + if p_Bot._AttackModeMoveTimer >= 15.0 then + p_Bot._AttackModeMoveTimer = p_Bot._AttackModeMoveTimer - 15.0 + end + + -- which 2.5-second sub-cycle are we in? (0-2.499, 2.5-4.999 …) + local cycle = p_Bot._AttackModeMoveTimer % 2.5 + local inMove = (cycle <= 1.0) -- we move for the first 1 s + + -- store the direction for the whole 1-second window + if p_Bot._MoveDirection == nil then + p_Bot._MoveDirection = 1 -- init once + end + + -- entering a new 1-second window? pick a new random direction + local justEntered = (cycle - p_DeltaTime <= 0.0) + if justEntered then + p_Bot._MoveDirection = (math.random() < 0.5) and 1 or -1 + end + + -- apply movement + if inMove then + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, + p_Bot._MoveDirection * movementIntensity) end p_Bot._AttackModeMoveTimer = p_Bot._AttackModeMoveTimer + p_DeltaTime end From 78e6bd3cc2c0ce6bdf60e2c3d0f6173e3f0b4219 Mon Sep 17 00:00:00 2001 From: MatiasPastori Date: Mon, 6 Oct 2025 23:50:13 -0300 Subject: [PATCH 09/10] Initial attempt of Follow command/order --- WebUI/classes/BotEditor.js | 2 + ext/Server/Bot.lua | 14 ++ ext/Server/Bot/BotMovement.lua | 257 ++++++++++++++++++++++++ ext/Server/BotManager.lua | 130 ++++++++++++ ext/Server/BotStates/BotStates.lua | 1 + ext/Server/BotStates/StateFollowing.lua | 89 ++++++++ ext/Server/UIServer.lua | 26 ++- ui.vuic | Bin 123678 -> 123689 bytes 8 files changed, 518 insertions(+), 1 deletion(-) create mode 100644 ext/Server/BotStates/StateFollowing.lua diff --git a/WebUI/classes/BotEditor.js b/WebUI/classes/BotEditor.js index 18f77996..089caaeb 100644 --- a/WebUI/classes/BotEditor.js +++ b/WebUI/classes/BotEditor.js @@ -394,6 +394,8 @@ const BotEditor = (new function BotEditor() { case 'defend_g': case 'defend_h': case 'back_to_comm': + case 'follow_me': + case 'stop_follow': WebUI.Call('DispatchEventLocal', 'BotEditor', JSON.stringify({ action: parent.dataset.action })); diff --git a/ext/Server/Bot.lua b/ext/Server/Bot.lua index 811a89c1..fe1e067c 100644 --- a/ext/Server/Bot.lua +++ b/ext/Server/Bot.lua @@ -197,6 +197,17 @@ function Bot:__init(p_Player) ---@type Player|nil self._TargetPlayer = nil + + + -- Following player functionality + self._FollowTargetPlayer = nil + self._PersistentFollowTarget = nil + self._FollowDistance = 3.0 + self._FollowAngle = 0 + self._FollowStrafeTimer = 0.0 + self._FollowLookTimer = 0.0 + self._FollowReturnTimer = 0.0 + self._FollowLastDist = 0.0 end ---@param p_State any @@ -1063,6 +1074,9 @@ function Bot:ResetSpawnVars() } self.m_Player.input:SetLevel(l_EIA, 0.0) end + + self._FollowReturnTimer = 0.0 + self._PersistentFollowTarget = nil end ---@param p_Player Player diff --git a/ext/Server/Bot/BotMovement.lua b/ext/Server/Bot/BotMovement.lua index ea477989..e550d019 100644 --- a/ext/Server/Bot/BotMovement.lua +++ b/ext/Server/Bot/BotMovement.lua @@ -924,6 +924,263 @@ function BotMovement:UpdateStaticMovement(p_Bot) end end +-- VU-safe 3-D distance (squared-root is already provided by MathUtils) +local function GetDistance3D(v1, v2) + local dx = v1.x - v2.x + local dy = v1.y - v2.y + local dz = v1.z - v2.z + return math.sqrt(dx * dx + dy * dy + dz * dz) +end + +local function GetDistance2D(a, b) + local dx = a.x - b.x + local dz = a.z - b.z + return math.sqrt(dx * dx + dz * dz) +end + +local NARROW_RADIUS = 0.7 +local DOOR_THRESHOLD = 0.8 +local CAPSULE_H = 0.2 +local RAYS = 8 + +local function MeasureFreeRadius(botPos) + local CAPSULE_H = 0.2 + local RAYS = 8 -- cardinal + diagonal + local minFree = 999 + + for i = 0, RAYS - 1 do + local ang = math.rad(i * 360 / RAYS) + local dir = Vec3(math.sin(ang), 0, math.cos(ang)) + local from = botPos + Vec3(0, CAPSULE_H, 0) + local to = from + dir * 5.0 + local hits = RaycastManager:CollisionRaycast(from, to, 0.2, 0, + RayCastFlags.DontCheckWater | RayCastFlags.DontCheckCharacter) + local dist = #hits > 0 and GetDistance2D(from, hits[1].position) or 5.0 + minFree = math.min(minFree, dist) + end + + return minFree +end + +---@param p_DeltaTime number +---@param p_Bot Bot +function BotMovement:UpdateFollowingMovement(p_DeltaTime, p_Bot) + if p_Bot._FollowTargetPlayer == nil or + p_Bot._FollowTargetPlayer.id == nil or + p_Bot._FollowTargetPlayer.alive == false or + p_Bot._FollowTargetPlayer.soldier == nil then + return + end + + local s_TargetPlayer = p_Bot._FollowTargetPlayer + local s_BotPosition = p_Bot.m_Player.soldier.worldTransform.trans + local s_PlayerPosition = s_TargetPlayer.soldier.worldTransform.trans + + -- initialize anchor if needed + p_Bot._FollowAnchor = p_Bot._FollowAnchor or Vec3(s_PlayerPosition.x, s_PlayerPosition.y, s_PlayerPosition.z) + p_Bot._FollowAnchorTime = p_Bot._FollowAnchorTime or SharedUtils:GetTime() + + local ANCHOR_TIMEOUT = 5.0 + local PLAYER_MOVE_THRESHOLD = 3.0 + + local playerMoved = GetDistance2D(s_PlayerPosition, p_Bot._FollowAnchor) > PLAYER_MOVE_THRESHOLD + local anchorExpired = (SharedUtils:GetTime() - p_Bot._FollowAnchorTime) >= ANCHOR_TIMEOUT + + if playerMoved or anchorExpired then + p_Bot._FollowAnchor = Vec3(s_PlayerPosition.x, s_PlayerPosition.y, s_PlayerPosition.z) + p_Bot._FollowAnchorTime = SharedUtils:GetTime() + p_Bot._FollowAngle = math.random() * 360 + end + + -- measure free space + local freeRadius = MeasureFreeRadius(s_BotPosition) + + -- desired follow radius + local desiredRadius = p_Bot._FollowDistance or (2.5 + math.random() * 3.0) + local clampedRadius = math.min(desiredRadius, freeRadius - 0.3) + + local s_TargetPosition = nil + + -- Tight corridor / door snap + local DOOR_THRESHOLD = 0.8 + if clampedRadius < DOOR_THRESHOLD then + local plyYaw = s_TargetPlayer.input.authoritativeAimingYaw + local back = Vec3(-math.sin(plyYaw), 0, math.cos(plyYaw)) + + -- side offset so multiple bots don’t stack + local sideOffset = 0 + if p_Bot._FollowAngle then + sideOffset = math.cos(math.rad(p_Bot._FollowAngle)) * 0.3 + end + + s_TargetPosition = s_PlayerPosition + back * 0.9 + Vec3(sideOffset, 0, 0) + p_Bot._FollowDistance = 0.6 + else + local angleRad = math.rad(p_Bot._FollowAngle or math.random() * 360) + s_TargetPosition = Vec3( + p_Bot._FollowAnchor.x + math.cos(angleRad) * clampedRadius, + p_Bot._FollowAnchor.y, + p_Bot._FollowAnchor.z + math.sin(angleRad) * clampedRadius + ) + p_Bot._FollowDistance = clampedRadius + end + + local s_Direction = s_TargetPosition - s_BotPosition + local s_Distance = math.sqrt(s_Direction.x ^ 2 + s_Direction.y ^ 2 + s_Direction.z ^ 2) + + -- defensive if close + if s_Distance <= 0.8 then + p_Bot.m_ActiveSpeedValue = BotMoveSpeeds.NoMovement + self:UpdateFollowingDefensive(p_Bot, p_DeltaTime) + return + end + + if s_Distance > 0.1 then + s_Direction.x = s_Direction.x / s_Distance + s_Direction.y = s_Direction.y / s_Distance + s_Direction.z = s_Direction.z / s_Distance + + -- speed + if s_Distance > 8.0 then + p_Bot.m_ActiveSpeedValue = BotMoveSpeeds.Sprint + elseif s_Distance > 3.0 then + p_Bot.m_ActiveSpeedValue = BotMoveSpeeds.Normal + else + p_Bot.m_ActiveSpeedValue = BotMoveSpeeds.SlowCrouch + end + + -- obstacle check + local flags = RayCastFlags.DontCheckWater | RayCastFlags.DontCheckCharacter | + RayCastFlags.DontCheckRagdoll | RayCastFlags.DontCheckTerrain + local rayOrigin = s_BotPosition + Vec3(0, 0.5, 0) + local rayTarget = s_TargetPosition + Vec3(0, 0.5, 0) + local s_ObstacleHits = RaycastManager:CollisionRaycast(rayOrigin, rayTarget, 1, 0, flags) + + -- jump only when appropriate + local canJump = false + if #s_ObstacleHits > 0 then + local firstHit = s_ObstacleHits[1] + local distToHit = GetDistance2D(s_BotPosition, firstHit.position) + local heightDiff = firstHit.position.y - s_BotPosition.y + if distToHit < 1.0 and heightDiff < 0.7 then + canJump = true + end + end + + if canJump or math.abs(s_TargetPosition.y - s_BotPosition.y) > 1.5 or p_Bot._ObstacleSequenceTimer ~= 0 then + p_Bot._ObstacleSequenceTimer = p_Bot._ObstacleSequenceTimer + p_DeltaTime + p_Bot._StuckTimer = p_Bot._StuckTimer + p_DeltaTime + + -- quick jump + if p_Bot._ObstacleSequenceTimer <= 0.2 then + p_Bot:_SetInput(EntryInputActionEnum.EIAQuicktimeJumpClimb, 1) + p_Bot:_SetInput(EntryInputActionEnum.EIAJump, 1) + p_Bot.m_ActiveSpeedValue = BotMoveSpeeds.Sprint + elseif p_Bot._ObstacleSequenceTimer <= 1.0 then + p_Bot._TargetPitch = 0 + if MathUtils:GetRandomInt(0, 1) == 1 then + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, 1.0 * Config.SpeedFactor) + else + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, -1.0 * Config.SpeedFactor) + end + elseif p_Bot._ObstacleSequenceTimer <= 0.8 then + if p_Bot._ObstacleRetryCounter == 0 then + p_Bot:_SetInput(EntryInputActionEnum.EIAQuicktimeFastMelee, 1) + p_Bot:_SetInput(EntryInputActionEnum.EIAMeleeAttack, 1) + p_Bot.m_ActiveWeapon = p_Bot.m_Knife + else + p_Bot:_SetInput(EntryInputActionEnum.EIAFire, 1) + end + end + + p_Bot.m_ActiveSpeedValue = BotMoveSpeeds.Sprint + + if p_Bot._ObstacleSequenceTimer > 0.8 then + p_Bot._ObstacleSequenceTimer = 0 + p_Bot:_ResetActionFlag(BotActionFlags.MeleeActive) + p_Bot._ObstacleRetryCounter = p_Bot._ObstacleRetryCounter + 1 + end + + return + else + -- clear obstacle state + p_Bot._ObstacleSequenceTimer = 0 + p_Bot:_ResetActionFlag(BotActionFlags.MeleeActive) + p_Bot._ObstacleRetryCounter = 0 + p_Bot._StuckTimer = 0 + end + + -- compute yaw + local s_AtanDzDx = math.atan(s_TargetPosition.z - s_BotPosition.z, s_TargetPosition.x - s_BotPosition.x) + p_Bot._TargetYaw = (s_AtanDzDx > math.pi / 2) and (s_AtanDzDx - math.pi / 2) or (s_AtanDzDx + 3 * math.pi / 2) + + -- alive behaviors + self:UpdateFollowingBehaviors(p_Bot, p_DeltaTime, s_Distance) + else + -- defensive if in place + p_Bot.m_ActiveSpeedValue = BotMoveSpeeds.NoMovement + self:UpdateFollowingDefensive(p_Bot, p_DeltaTime) + end +end + +---@param p_Bot Bot +---@param p_DeltaTime number +---@param p_Distance number +function BotMovement:UpdateFollowingBehaviors(p_Bot, p_DeltaTime, p_Distance) + -- Strafing behavior + p_Bot._FollowStrafeTimer = (p_Bot._FollowStrafeTimer or 0) + p_DeltaTime + + if p_Distance < 3.0 and p_Bot._FollowStrafeTimer > 3.0 then + p_Bot._FollowStrafeTimer = 0.0 + + -- Random strafe for variety + if math.random() < 0.3 then + local s_StrafeDirection = (math.random() < 0.5) and 1.0 or -1.0 + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, s_StrafeDirection) + + -- Update follow angle + p_Bot._FollowAngle = ((p_Bot._FollowAngle or 0) + (s_StrafeDirection * 15)) % 360 + end + end + + -- Look around behavior + p_Bot._FollowLookTimer = (p_Bot._FollowLookTimer or 0) + p_DeltaTime + + if p_Bot._FollowLookTimer > 5.0 then + p_Bot._FollowLookTimer = 0.0 + + -- Random look around + if math.random() < 0.4 then + local s_LookOffset = (math.random() - 0.5) * 1.0 + p_Bot._TargetYaw = p_Bot._TargetYaw + s_LookOffset + end + end +end + +---@param p_Bot Bot +---@param p_DeltaTime number +function BotMovement:UpdateFollowingDefensive(p_Bot, p_DeltaTime) + -- Defensive behaviors when in position + + -- Occasional stance changes + if math.random() < 0.005 then + local s_RandomPose = math.random(0, 2) + if s_RandomPose == 0 then + p_Bot.m_Player.soldier:SetPose(CharacterPoseType.CharacterPoseType_Stand, true, true) + elseif s_RandomPose == 1 then + p_Bot.m_Player.soldier:SetPose(CharacterPoseType.CharacterPoseType_Crouch, true, true) + else + p_Bot.m_Player.soldier:SetPose(CharacterPoseType.CharacterPoseType_Prone, true, true) + end + end + + -- Periodic scanning + if math.random() < 0.003 then + local s_ScanOffset = (math.random() - 0.5) * 2.0 + p_Bot._TargetYaw = p_Bot._TargetYaw + s_ScanOffset + end +end + if g_BotMovement == nil then ---@type BotMovement g_BotMovement = BotMovement() diff --git a/ext/Server/BotManager.lua b/ext/Server/BotManager.lua index b4b7c8f5..f3ba2701 100644 --- a/ext/Server/BotManager.lua +++ b/ext/Server/BotManager.lua @@ -199,6 +199,47 @@ function BotManager:OnUpdateManagerUpdate(p_DeltaTime, p_UpdatePass) self._DestroyBotsTimer = self._DestroyBotsTimer + p_DeltaTime end + + -- Check for followers that should return to following (runs every 2 seconds) + if self._FollowerReturnTimer == nil then + self._FollowerReturnTimer = 0.0 + end + + self._FollowerReturnTimer = self._FollowerReturnTimer + p_DeltaTime + + if self._FollowerReturnTimer > 2.0 then + self._FollowerReturnTimer = 0.0 + + -- Check all bots for ones that should return to following + for i = 1, #self._Bots do + local s_Bot = self._Bots[i] + + -- Check if bot was following someone and is now in attacking state with no target + if s_Bot._PersistentFollowTarget and + s_Bot.m_ActiveState == g_BotStates.States.Attacking and + s_Bot._ShootPlayer == nil and + s_Bot._FollowReturnTimer then + s_Bot._FollowReturnTimer = s_Bot._FollowReturnTimer + 2.0 -- Add the 2 second interval + + if s_Bot._FollowReturnTimer > 3.0 then -- 3 seconds of no combat + local s_TargetPlayer = s_Bot._PersistentFollowTarget + + -- Verify target is still valid + if s_TargetPlayer.soldier and + s_TargetPlayer.teamId == s_Bot.m_Player.teamId then + -- Return to following + s_Bot._FollowTargetPlayer = s_TargetPlayer + s_Bot:SetState(g_BotStates.States.Following) + s_Bot._FollowReturnTimer = 0.0 + else + -- Target no longer valid, clear follow memory + s_Bot._PersistentFollowTarget = nil + s_Bot._FollowReturnTimer = nil + end + end + end + end + end -- g_Profiler:End("Botmanager:Update") end @@ -1648,6 +1689,95 @@ function BotManager:_GetDamageValue(p_Damage, p_Bot, p_Soldier) return p_Damage * s_DamageFactor end +---@param p_Player Player +function BotManager:CommandBotsToFollow(p_Player) + if not p_Player or not p_Player.soldier then + return + end + + local s_NearbyBots = {} + local s_PlayerPosition = p_Player.soldier.worldTransform.trans + local s_MaxFollowers = 2 + local s_MaxDistance = 30 + + -- Get bots on same team + local s_BotsOnTeam = self._BotsByTeam[p_Player.teamId + 1] + + for i = 1, #s_BotsOnTeam do + local s_Bot = s_BotsOnTeam[i] + if s_Bot.m_Player.soldier and + s_Bot.m_ActiveState ~= g_BotStates.States.Following and + not g_BotStates:IsInVehicleState(s_Bot.m_ActiveState) then + local s_BotPosition = s_Bot.m_Player.soldier.worldTransform.trans + local s_Distance = s_BotPosition:Distance(s_PlayerPosition) + + if s_Distance < s_MaxDistance then + table.insert(s_NearbyBots, { + Bot = s_Bot, + Distance = s_Distance + }) + end + end + end + + -- Sort by distance and take closest + table.sort(s_NearbyBots, function(a, b) return a.Distance < b.Distance end) + + local s_FollowersAssigned = 0 + for i = 1, math.min(#s_NearbyBots, s_MaxFollowers) do + local s_BotData = s_NearbyBots[i] + local s_Bot = s_BotData.Bot + + -- Set up following + self:SetupBotFollowing(s_Bot, p_Player, i) + s_FollowersAssigned = s_FollowersAssigned + 1 + end + + if s_FollowersAssigned > 0 then + ChatManager:SendMessage(string.format('%d bot(s) are now following you!', s_FollowersAssigned), p_Player) + else + ChatManager:SendMessage('No nearby bots available to follow you.', p_Player) + end +end + +---@param p_Player Player +function BotManager:CommandBotsToStopFollowing(p_Player) + local s_FollowersStopped = 0 + local s_BotsOnTeam = self._BotsByTeam[p_Player.teamId + 1] + + for i = 1, #s_BotsOnTeam do + local s_Bot = s_BotsOnTeam[i] + if s_Bot.m_ActiveState == g_BotStates.States.Following and + s_Bot._FollowTargetPlayer == p_Player then + s_Bot:SetState(g_BotStates.States.Moving) + s_Bot._FollowTargetPlayer = nil + s_Bot._PersistentFollowTarget = nil + s_FollowersStopped = s_FollowersStopped + 1 + end + end + + if s_FollowersStopped > 0 then + ChatManager:SendMessage(string.format('%d bot(s) stopped following you.', s_FollowersStopped), p_Player) + else + ChatManager:SendMessage('No bots were following you.', p_Player) + end +end + +---@param p_Bot Bot +---@param p_Player Player +---@param p_Index integer +function BotManager:SetupBotFollowing(p_Bot, p_Player, p_Index) + p_Bot._FollowTargetPlayer = p_Player + p_Bot._PersistentFollowTarget = p_Player + p_Bot._FollowDistance = 3.0 + math.random() * 2.0 -- 3-5 meters + p_Bot._FollowAngle = (p_Index - 1) * (180 / 2) + math.random(-30, 30) -- Spread them in front + p_Bot._FollowStrafeTimer = 0.0 + p_Bot._FollowLookTimer = 0.0 + p_Bot._FollowReturnTimer = 0.0 + + p_Bot:SetState(g_BotStates.States.Following) +end + if g_BotManager == nil then ---@type BotManager g_BotManager = BotManager() diff --git a/ext/Server/BotStates/BotStates.lua b/ext/Server/BotStates/BotStates.lua index 72dc0fef..0b451951 100644 --- a/ext/Server/BotStates/BotStates.lua +++ b/ext/Server/BotStates/BotStates.lua @@ -9,6 +9,7 @@ function BotStates:__init() Attacking = require('BotStates/StateAttacking'), Reviving = nil, Repairing = nil, + Following = require('BotStates/StateFollowing'), -- InVehicleIdle = require('BotStates/StateInVehicleIdle'), InVehicleMoving = require('BotStates/StateInVehicleMoving'), diff --git a/ext/Server/BotStates/StateFollowing.lua b/ext/Server/BotStates/StateFollowing.lua new file mode 100644 index 00000000..794ee275 --- /dev/null +++ b/ext/Server/BotStates/StateFollowing.lua @@ -0,0 +1,89 @@ +---@class StateFollowing +---@overload fun():StateFollowing +StateFollowing = class('StateFollowing') + +-- this class handles the following things: +-- - following a player in formation +-- - providing cover fire +-- - defensive behaviors when stationary + +-- transitions to: +-- - attacking (if enemy spotted) +-- - moving (if follow target lost) +-- - idle (on death) + +-- bot-methods +local m_BotMovement = require('Bot/BotMovement') +local m_BotWeaponHandling = require('Bot/BotWeaponHandling') + +function StateFollowing:__init() + -- Nothing to do. +end + +---default update-function +---@param p_Bot Bot +---@param p_DeltaTime number +function StateFollowing:Update(p_Bot, p_DeltaTime) + -- transition to other states: + if p_Bot.m_Player.soldier == nil then + p_Bot:SetState(g_BotStates.States.Idle) + return + end + + -- Check if follow target is still valid + -- destroyed / disconnected / team-swap / not spawned + if p_Bot._FollowTargetPlayer == nil or + p_Bot._FollowTargetPlayer.id == nil or + p_Bot._FollowTargetPlayer.alive == false or + p_Bot._FollowTargetPlayer.soldier == nil or + p_Bot._FollowTargetPlayer.teamId ~= p_Bot.m_Player.teamId then + p_Bot._FollowTargetPlayer = nil -- clear ref + p_Bot:SetState(g_BotStates.States.Moving) + return + end + + -- transition to attacking if enemy spotted + if p_Bot._ShootPlayer ~= nil then + p_Bot:SetState(g_BotStates.States.Attacking) + return + end + + -- update state-timer + p_Bot.m_StateTimer = p_Bot.m_StateTimer + p_DeltaTime + + -- default-handling + m_BotWeaponHandling:UpdateWeaponSelection(p_DeltaTime, p_Bot) + + -- Use the existing BotMovement following logic + m_BotMovement:UpdateFollowingMovement(p_DeltaTime, p_Bot) + m_BotMovement:UpdateSpeedOfMovement(p_Bot) + + p_Bot:_UpdateInputs(p_DeltaTime) +end + +---fast update-function +---@param p_Bot Bot +---@param p_DeltaTime number +function StateFollowing:UpdateFast(p_Bot, p_DeltaTime) +end + +---update in every frame +---@param p_Bot Bot +function StateFollowing:UpdateVeryFast(p_Bot) + -- Update yaw of soldier every tick. + m_BotMovement:UpdateYaw(p_Bot) +end + +---slow update-function +---@param p_Bot Bot +---@param p_DeltaTime number +function StateFollowing:UpdateSlow(p_Bot, p_DeltaTime) + m_BotWeaponHandling:UpdateDeployAndReload(p_DeltaTime, p_Bot, true) +end + +if g_StateFollowing == nil then + ---@type StateFollowing + g_StateFollowing = StateFollowing() +end + +return g_StateFollowing diff --git a/ext/Server/UIServer.lua b/ext/Server/UIServer.lua index 42129706..458cfe06 100644 --- a/ext/Server/UIServer.lua +++ b/ext/Server/UIServer.lua @@ -85,6 +85,14 @@ function FunBotUIServer:_onBotEditorEvent(p_Player, p_Data) BotManager:RepairVehicle(p_Player) NetEvents:SendTo('UI_CommoRose', p_Player, "false") return + elseif request.action == 'follow_me' then + if not Config.AllowCommForAll and PermissionManager:HasPermission(p_Player, 'Comm') == false then + ChatManager:SendMessage('You have no permissions for this action.', p_Player) + return + end + BotManager:CommandBotsToFollow(p_Player) + NetEvents:SendTo('UI_CommoRose', p_Player, "false") + return elseif request.action == 'attack_objective' then if not Config.AllowCommForAll and PermissionManager:HasPermission(p_Player, 'Comm') == false then ChatManager:SendMessage('You have no permissions for this action.', p_Player) @@ -200,6 +208,14 @@ function FunBotUIServer:_onBotEditorEvent(p_Player, p_Data) } }) return + elseif request.action == 'stop_follow' then + if not Config.AllowCommForAll and PermissionManager:HasPermission(p_Player, 'Comm') == false then + ChatManager:SendMessage('You have no permissions for this action.', p_Player) + return + end + BotManager:CommandBotsToStopFollowing(p_Player) + NetEvents:SendTo('UI_CommoRose', p_Player, "false") + return elseif string.find(request.action, 'attack_') ~= nil then if not Config.AllowCommForAll and PermissionManager:HasPermission(p_Player, 'Comm') == false then ChatManager:SendMessage('You have no permissions for this action.', p_Player) @@ -510,7 +526,11 @@ function FunBotUIServer:_onUIRequestCommoRoseShow(p_Player, p_Data) { Action = 'drop_medkit', Label = Language:I18N('Drop Medkit') - } + }, + { + Action = 'follow_me', + Label = Language:I18N('Follow Me') + }, }, Center = { Action = 'not_implemented', @@ -529,6 +549,10 @@ function FunBotUIServer:_onUIRequestCommoRoseShow(p_Player, p_Data) Action = 'repair_vehicle', Label = Language:I18N('Repair Vehicle') }, + { + Action = 'stop_follow', + Label = Language:I18N('Stop Follow') + }, { Action = 'not_implemented', Label = Language:I18N('') diff --git a/ui.vuic b/ui.vuic index d88affc933bf3dbf9a59542328f6e229a63f4e69..466d1fea3dcae33549da6b0aacd5935c56cf9123 100644 GIT binary patch delta 6195 zcmV-37|iFM#s{g!2e7mP3`J-F0HhZH09TH`jFZ3u7%7?~0RROS002t`000$(2Gk~> zYk`d<0RTG#003_R003WAHpv_*YkSy}0Rs~~M=JpU83Ob}j(`bN~PVX#fBKANEB#MHw_zu9Hy%6FnC(0RZ|0006cD z002l&XKZ1eHK58e0RYx5003MG000+^1sOD(@m_#50RTJ^001cj0026VmRPQ3pIqFN zp#u{=1wsJ;$1VT>@dy9_1v4AA*vF(ApG5%xx&{CMH~|0vD9j??mc&ytkWK*rM+pD` zM*;u<3fC-vVOXqh$dmB{6Fm=70RVvq008I$000(Q3^!El`9So?0RU7M006BB006Z? z>))k_V8qbfcv| zS?)KSkSv9Tun2Rg4bK4t77EZ<2&&?nPn|gH_iUQU4O^RUuN2W=PMMizf;w5~1s;-mH(dNiIOqQ>HUG z^kZ8tnpW4~;+rl>#y?iitp;VxQp+y(Mq3kCu4lV_*BI=9eM?XKI6IQIwk3$&-#XK za7eKkl=d4o2M|nP{B1$9;92lYu#Glj!(>C_qQiuykg0!-wg3(b7Z%L{1Pm<1iT=LD zO6{eiv(Zlf=PuqY?9=G&0D=PuCVVik(RRhPij1+}Fm7GkY70|#D9yIarV{=5TxR$p zb>sPsC&i=jKlg<2c|gb)_e&n_dAQhbQWG2PvlJ1E#>r6c$=I-Az(!aFV)k^^2obf+ ze8*QA-&TJhAR?!Flj4OXmENa!3mXBkjUqSwLMhA5OqYI^S=+XI);4{Y+178^2&mcU zZAae>jK0*{4D4?xFK^q_VZ}y3%||04(KO9Q3AQhet3W|)=@Py4voxF@eU`qQF7?)< zwN4&-42&nPko|9wYly869^Jys9WZRTm(>$z9wOjwCT_IZ* zLf)SKv^6#Yvf953h1?v&YR{5B3+6z`70-lYY7Y=5RgjvxhF_OgND~g`SpPiGpZxTB z87d|i6%m%8_nJ;^PLoelcfu?57XI@sn{rL0A>36FpX78*O~mn;R(g+2E`jZJRV6Jt9Y) z+JeD?iHQjb5dv_rAv|yZAva(QF1Xl|wto8=)&{w)i@cBNxc>WHty?&SfQ2B(Jxzbt z`Tyd38jDAJ5MsaK?2i`_Q1wiEFbfqZ5oRG#X~MxM7!{-p7L$i&IzzW-X$z}8>#_|r zuv8WSOxo-rflTd;f0ONuKMHT>BFE8gEj(eqsR0|Tj7T8 z7M6lysbsh`0bz|( zrA@T_?DiX8)2WU2noeEQFYLeRsv94e&akRCt3OLm4$&W~VbAA0Y|zlCAenGnXl$Tt zTxdup9N&Tj&P`lWYGl|q=)fj){RLaX@xdqa}`^pY+Pp;J~xwQG}AQSE=)W7*Ti zrrLS9zWlmal0IGRo^3;NU0$I3!=DlS|HVjeSY{>}qTc66=|Rdls7- zPE4O;HNKDDT6)@5fu0f%6ioyo>WgDX1AF3*57J8$AQ0!Hn!J$=l#-XH5&_SD!|3fb z5H7HdHq##5M3(e%W9CH5(_2rBPfo?R-_XV0NCo2g`Kc4D#&3i|~ApsL4h^5$4Y}60wa$ScTHD9hHt|-S0Qdh%hl>m=R%OQbmUJ>BIEC$5kM? z@X10ViG@1E5YxStDK*Yx%>4(_TBP_$Zme-3MP`m_& zL6@%-0UiN>m(COc7k_97C!hfE<{F!5xVzE%M|#7qoOI{wDP#v~as>FGuFBDOvayg>B8sD{5;9X5sw zK<{=D9Q?iv3D*9UDsyTxfe9>pO8CsUWfFtcTB~zkiKtW+}TvXPT-Mv)2_h z3N9z&i8Z|k!_Jv>Ws|waBqdOzGs?=;hIK2|M4VQ{q#sgZn++Fs#SyeOQjPx}YWM)> zb|bokkfK*F*c*oJ0nBlhx%c7Dkwjlz<{x6_X+eo{iyfsceZQx3@e|-0pDVwWB4S|; zNoCS49v(<+VSjcZcQ&HlS2anOx*OfLb=BKcgpa~JN7mHuW94TBd&=1)0&b`lP1eom zO%jg}C1fD4-Q@SEaifh0q4x)=Smi$T5rFM{pG*Z#KK0)4teoXVKI4W+)|F7)Q{boo z(J;d;CXvLl&>bE2^WHVJ*1aKtC1Ozx*_NEK;^TG}!hbx8NpUqF^ncQaiA5EU{n)<5 zo*N^9s-xuAWkE6?kKodrSQzGLDa1x@slvRW)F%mY4TG!k-Rwr!FqaTmUTyrbz^Qe& z{#pK16$heKm>zG(Lxi$vbN+axh01m*Afjf?KH*6+a6;sSnLZpqal4%na#sci5f=JI z7eV=A1bV-+jhL!zB`3&Q6$M4xjtwN-q!k3qCpM5I@%bRq-NH!vw@)>cGkZwv^OV;h$)!k` zjcgF|4x|Z3+Z6_dhItlO)f@XE9t!9K8b2uK>3`p_b@P%NVxu|hPCPdUwYbgK%9)LK20y@!} z@qdYW?WBGHK_K&bW-s!AxEwYOBsoY!m8GhSRvXcSnKzM-ARYbAhU|~aCT4URpDmB) zC534FUKLV?2Ioad+-m`H(FY``hZ=+gQdV1|p?`xect_AIQksD;5F$SDW$~ zGEAVLd(bf#brV4 zfH-Jxtyjgi-qe#pj?0j@XsESM`FsI&;Do9$OeBE%_I=S*JuJLZc~b3bHlo+BNPn^{ zM^=3ECf+;@sIX{Tax@N=h#x24{V3ytQbeLepDYg{+;LUVb9>~|#YOXqm$=H&th8jh z8jG&3TNNvV)F~zy@{eQ=TnP$$!_PUPWf7mmpIHWi7Cuy6Lb(T5#$hE_U~PdblBGA< z!jR=aXb1KQ5Gs`K!*EyGK6+sO6n|w2>h1M$Qb$6dPBeNbo&7b!MfcSTrygMXOxwao## zN2fvciN+G$l(}nm2E}x4^x_W%OV0vyzgf_3(T5rIcuB5gbVu~>qeWy-3MY(IiyIm|&KxsZ@(OX$>Kcikg&M8;iR_M0N#mId(k&DuYuE}EJPy(4Skl!5e+qF-Jd&vG z#3uwuV3H<8_Wwni0eod%Kqtf)vOupJ7s6XeB4deBk^1V~(?nfMffabG)oqh_XBU$f z!i#5`Nxw9MNV9km8S42974Af44i-2lgGQ#*_g~<~6jP;IuW$)|JbwYrt$Yh6$r2oU zBp8g|f(_=TV;PzODfOJV&^5|{*Y8K;noFt0XiKEN@2?)Lg~Sm>h24~dWj%x2pDG#m8jq}Nbc-bo3d~+?l@yQO<<-}-HtwXFUXMgMeUAk z=G3)RopQQHq0oPPZz(INjLd`dYgQonWBOqOD#-__qXT_6zJJBQe&roD&Tp6O~x<(zRPeP$_yyU_)mNBYxRd3iXa5yqoFO2WteGw9= zs|bN6422~&*MBsIY}fz>p4nhEKj|}#@T)Li2$p7#804q-3Y|f71c=N5Z;hi$v{enz zE&&D8lw*Lgt~X z6n@8|2Lhl8Dd}FS7gbc{ZexMxRhU#;Td5S}t7n8+0Rj+-I4oOb<*O3g5wQXU!3{7B zUl%bjbc#aQ>e1coVcg37%f?kx=XrH~&ns_$HKVv0g(nm$=4mwwF~2Dnf(aZDt#lYi z28YK94S)GTDF)1BB!8;VEnfK`LEe~<9TZV>DMRv*D_>*-GU`p6^iT5qihZYKYq>63 zxLR6~1SDNj(bmMLP^`fog2*(AveHV4T(PxqHakX^01c9>cAsvU1nv8FLkN8_I}?9G zu%I|Y^nIo&I0+O92E|5w71b%L3^e8S5e*p$mw)Qp*@Ed$2qimi_{qw0WW#^7`vKFFN-^>XKp{#>uBnz7@%PsWT+!>p zTt7>h?M8(~s0CJm5+)VC7kV&Al)87N5as+Vc!$0Xv+KOz_74JA3zO_QOkE!B^M%_3 z_@^USS$*V3e?ARm0)HUTcB1%Y@24an;qT~?QQtko0NxqR+LjOq ziv9psA|B*PX%GUFo{cjX!RWn+Z#Y`rV!J@?@lQgRt$^1KI6RbISMu%$7^%p@U!`7mOY}K~jEqZIA1?+wsju|WUh6ka3$6G*|)yQ+C&kVl$S4BU9etS0Nw!5LX z!W<2Aqe&K#VT;-(54N3yjqy9gi$47e6M`wj(LU+Y9igt%fF02OHpCnR8RQ*8xkkRc zy^;Qg&Q31Wks$!}JZ7bMxAero&VLaM6%MjsQTqXDCpJ^Tc)B2L*rog-Ofhrc#LXPZ zjf8RHP^o0L{6R@>-M;EdM2m8d2)Kwm-(l<}+9lD9&xP@bNgGGRJm{K8ryCBNQk%}1dS&UyG;TEtf)jZ&a0f7Vn4_bY+F>E zmnbx--fFN=*z(c?YPxv=HmvAS1FA13&4SAvmQ0xodyktk*_%%0S>5fyt2ixW8D)h5 z4vn)2fNbMN^7F`!-TrK01%F882qA*>CmJF0tgsXii8dhBrZw?41a1c0$B$@z-Jx|l ztW%t_hFM@~VtpgPiW33@catoH!VH3?u}2N=goITDr?9cWKRIHaE&- zcJ+@OSeJzAASi3S&xT*hu&hUW{>E~7$GNxgLFvI=KxsuTjy#d$27isu9Onvs_h;RV z$r{59Bm9UJZX2y6F@ZjZ%eSzQxuMyB3-K|waFUr2d&~2Bfsra(ODI-bIkI3!qQ~{k5gXM#}PkR0G9Bn?HkuN+h@%k-{#30 zYf~AC>=qEg%lA@!vH^bSL%merJ*OUkau!V{cieK71d~5AQai+inYRvXG>4!P*$LY! z$3!~G-2)hGRSwU4=c11>S(gIPrDqC*gnhFEG=Ze?PKO8Z|9}2@fc^$C+v?Q9U*eu8 zfcm0nqm8{%z!EH)NyP?0oy21#W({USdN_B^k6B1Ug39;ww0p4)^b{3OmRo+xb!}o} z6^m&VvH^cYv5Z^ANM|!(u1Z_)eU-*H-T-H z7)6KD|Ko(kd4D@q6xFbdH7coRbST^w-uMae!$ip%xdjj}%wT{J5x4k`r}{tcF+|6U z#Z?z(G{zya*pS@JkfSQ9=Ev-H@wWdx9%Gnx_{&C4EH)rvz)>7%M%(B8lbGxM{KFLG zkKy2y;15qoWC=m5tz)Kbr`wsc*tghiaNW>Mk-Wq^8BVrY)uz=8R}Y#P17RTt|8p%? z)?>0`(+1ddxRCU*n}a}f7hU!qZ$%-5(fdKLC8)W^e>R?Y%-01KQyi+7whW&Z1djH4 R@uyViYKFV|w~r$MkG~a4d~yH) delta 6228 zcmV-a7^~;0#s{9p2e7mP3>9bq0GSs603Si8F_XXo7%7h<0RROS002t`000$(2Gk~> zYk`6!0RTG#003_R003WAHpv_*YkSR;0Rs~~JSzbJ83OYc2r*bN~PVX#fBKANEB#MHw_zqmxks6Fm$u0RZ|0006cD z002l&XKZ1eHK4yT0RYx5003MG000+^1sOD(@m_T_0RTJ^001cj0026VmRPQ3pIp(C zp#u{=`auBz$1VT>@dy9_1v4AA*vF(Altlpmx&{CMH~|0vD9j??mc&ytg-!tgM+pD` zM*;u<3fC-vVOXqhy_4|+6Fme{0RVvq008I$000(Q3^!El`9SH%0RU7M006BB006Z? z>))k_V8qeN0RUsw|xWwe+LGIyZ~y%sFwl^0W^On0ucfz0+)^( zEu7W)kXQ!50T&n+g4n?}g}on{7JIU!ktapMmV_17`sZOGsF|wCwt=(M`v)c6Xz5Ru z`wb@~OJN}_!W?SDa{z&b0yGwas`%zpC(imkn`Uyu)jVB1XO`f3pGpF6N+C2>I9)=Ie;U@c(=?o72 z*p`c?)it>Irj0NsKL2n{o`#vH55}ja`Dh?)C3Yp2IdE3iWah_qti~79si$%9)oH&W zeOPHvXEt<^F?>KO3_2`Y<?}g+QcF>9of5({rPBoNa&jtV=`NYR^}tW22?7 zf*=V@Bmfy8;&BFmR3KP~<0JrQg*MurUGeoKE>@qFN8^b(T_JbK{A}ry!*}&SFg`gA zGr!^btGvA8yLv9};=63L(x=?X7@sgcRq;)SUIC%cddI~#Js-`*E&6;@es<5LpQULo z{VYxd!Y=(Rl2?D317U^f-x~HtW_DHJ`Pf%&?i>iYJ(91d($O>r5I_-2Fa0_!=3Uqb zsDZGD);W2BX92prJyW&*RS-l$<-fI=X(4PSB$ip6op8K3VNT`nY3Qv^NqXqBzF`|2 zQfvmL{f5l}1QQs4TaYYx7CaMdqs`bb+0eM?Frg`AYNLNGfWyLtMRNcF0}FAYzi+Wp zd+F$GwA25&i+2nAG(IOkk$TODCFiCR(qE8Suh7eu6QOKQ+t3gse;thHT=4~LYix5`AG*B?i zj`4pz5XM}`N41NUZ4`OS%vYknmv1)OPQuTwgKgxyn*7hxrVinIj*a%41kO_LV_VvZ z7q^JcW?Q^z^@};PV?TWuj-QP43BsxW`DB4}(4o+6b_X9@8If zg&VqCSPF`zk_kt&l@1E4K*1)6kCT6yA1}VjIEh|?h*TgR)6X`-q;3pl&*$N1*EG!s zgf&i;Hqr94+i!SHr#9MaI(1FIu>Yp3ZhT-m!>Zn_{wzH?M1QD;J)iTiK|`a0WWsTw zv4OI2p&^-Yd_#(=zp?V_m)XLd4XdKswaKcecI~n3>0*CV?L1sx zeqAg{pDuRKwjsGLuh5{Vu{BuF9DKUCU-Fkcn)MzTN-5oHk>5FfJp1{=P?}xErj(^5 zImZvv((I2dGcQ@sQu?M6A_M^8frADN8op+=MXIyTI_s?SfrAFLLW$|GI zfbhUU0|pBwBt!@R!UG2l7)*aim$&PiKD(c7iBGyi2>DqywJNGzn^?UI~hsb_u3 zty;8BsVPsFH>qKJR$JQQ7wy>}pG3LzzV(O6CFi)tz9fEjHMRzc^~}LNi%ktDrq8h& z-$!pPJ?*MMPl*SLCIS)l#j&G-J#ohe>BX&!2NNI==cAgukqnfQpU0Q05&_MBL+MZ1 zMsKfyaDi>KnfBl&vZRk2GbdV}-g;tuaw@+4hA#F-DiF`lPn}pbek05|E%MW6QGt-W z8etBmoipiYCu{UaO*R6GFn_j@h;1aoDwK}xsB|>ze!pQxgoz2mj0h8xDl()`AEx&` zt^&!0j|PI?0t>uJLf$YoE+BR=><*Zx&cd>3;zdb*~3*@lnWpdTK# z5(`lVi7<+WkJ>6e#}3zjtN1dL;@IIubcZec0eVb7+h{jJX}4CXL?h(8avXeCg^MjE zQ(&4xAAI^So<5AHWrou5AN+T5hRpoaGDG>MPxDoN_5Frk^>ce5qK!6xdUX21p_F0k znE3hGV&%5QuhxJjH~iR0JJaXv=C&VACrkRF$;|Irt4D1GB0l~|Kg5s;z$~5{D06>W*($PGYCrOUOD5V%8%8(fV009vJ zFl-1Xpa8(;BAaFUMRUr34i-H9)`P>^{N>2ryA|xnP{DrD>|_B*11~j{hE5aHK1PEu zN&x8bU+WPbVkQPK9e?9tdy)*f^z;Jz4?CY;ULbm4RO4@!hBe{>(7Rm(2fxokg0(-z zOPg9IaJz+%2%jNt4g-)?(;x%C#o_bmZ-AP?lxLtbO;wNC>slIrHJ6+5#6s_cVf&o4 zvdLVtk`k%WA!X&&#&#=VqChL!q!%fH%|;b=!r|JRtH$|WYWTo&ixHiL(4to**t^5_ zM&{Vo-1~LsAfZ>0`DZcuw4gz`-Hy@Vlr{LfSlL{`o^m#cfETJ&ljSpNli*`d2^q+1NBKSK zZWIt<>GvRQR-8{s1U)<7CsTowPrWxht7f^8&#WPmbtM%46gVnC7z}W$Bqp&;bcctH zymw74b#F*uiC9!awK^VRkj1o89PY<`#h^sf|BoI7RKIKZ`h3#(@A8w#OlO zh(tD>ou681QaL>ZENXV>`&ogNU?H{KA|PK_;QB$K>Twy* zgIWJWKC3Z*SIt*}q0gl0yo2v!IUhaIjSrH?{_?~!u)5>O$-1@JsHR(x5wprra)7Lr zQP67Jw}He>+Aml>v4J>=&kZ6S6-Ls&efp&wu!qDuPYDc?B8r4#6oZg-Af9kEFkw(= zn5S`7t+5~RP(UAu_(3^O=Z3DEm)sB=wTWNbd^6R5iN6K3ZTJ6b4{qFD^nO9dbAh_3 z7rFhD!CB##P4o@m8H~HrDWolc#N7+d;Ge|2Nijvn*qXQ)&N7ci`zJiAMbtY`uoL*O zeO3LlGOK(DvrI)#Iw*LDkdJx41dOnnG`@gZNC8yv0O9~n=tO14N9q+ObpQmh%+WJj z5e@`@cGa|!L?sPXkg6_PXT&CE-bDU`MD#lwvOg}Hl2LAas4yOv6r$~YRhSG7hFg++ zuNBCJAF!Z43J@YlT5Z{d{yiq8HXcNd|1|)>YERn*Y`V%#W)$57bd4@jDBLX^wx)mf zE;o@^Wzk^%0D2P`6@aW}PMJ0--U~566Pr?h#Fn6I5rB8-_zLLHER@}=Y1LM{rDsvh zWdma5nt8M9`aV|Kcfn8il?@*gJ-mRR7DYLkf>Y<2*A|@!V&94bl-8nEY}cki85p<> zpNL8=e1gwcqz9c)x?xfTD7TLbMb+!!74!FWzhL*gevBk*Ii^CJAMuvMXj(?wfbh02GU%KJf?@ke z?!cA2@HUK`Gh3GVB#z878m@3a)hU!ia8(>`xk73Su%cI5lP!QOhrl^dPnu9cd>_KQ z#`e(z=C3GAtX=^hCv_wQ>VyRn8p@)7XQ>l3ks(Q3BClob4OMl)h!I|;%vnd7KOuL*glaKB zgV&iOqcQIfPpux4^_i==dY=gHNz?g*tASDlJl!N8p`KZX>ei!Y!ns`!<@^=A#vGmd zhJM2q#cS4#lr)~XAl-z5u!fC)P{I8WeT^ksO~6kb$3!EE_)c>|kOU@aLVEvSq#M9r z<^^;@j3Ep3YU4s+3rl7!u_}_Uj(VEXwJES7Z$+JNGS}>AazS``_G$Dra}WuOKk`DA zf1|>MNXo3RQvrc#Lp!_xtVXlko>?^&jXv$U9gXT-1L^AFd)Hh z6A`*b1917B)U7oNA}_Yn!|^J58F)0WWA8x$)#4Z70p-bFjrBR;#DdidHaJiWND=-z zv*SZKhU0FlKZlPl8u=j&2|`&Q9)_q8ks6#_2?@5rt{@XUK+5~_skv>~9d9HJA)<4_ z)^Vo=UBc5aGecFh)|j{!JciME0;hmh>DR14lE?7#rj?QRQ0D?2Zv2IT|4uTIuaB_|5x$H-vG3-8K`C7rLjtf?nQ6A7 zE-a$PWFGI)MgIj#Ro59JA#Gn#j7bohdB_>%+i41n5IYh~j7=w{J54sI$cJGE;hm|N z(6lDRPIQ?%&KZMZ;|R%xYb@hZ=c?PVUEn}uu3i}5LHZ&zQpXnpjSYo4H>YR}Ii&#% zJexsje!6Ey;Zb3KzThj8Jt~+@ZzOJp&9Rb~L;N(FDrr(RwEY26sDgHxl22D7Ix>a+ zMJ--~c6Mn*BDO=e z2F;!HB2e<0%;ciDNG;UX#<&H)N;BcQjt~F<(DyciflOV0SL6JSVh_|moRoGi)zMW{ zyn5vyd{*&+e@MD!}5X$7Sk{0OlE{J;$v=3W;W7;lQ=)#Mr7y!mbw z|AqLZH6}Sy|4u4#fH_gm3}mMgL$-;HqOl(oEW(Hckhy3eASc7)tp{V>QpMH;r&gvR zAAINp3Ych(6t17ssSNAo>2VD$2{RS9%X|q>h#5Bog;Lai@vruO%L^bM2F>`k#+*dK-R78Y1qjHy zA5SAO9CC8978x)f;Ct}tJxz3c8BlPMl546ZM*RJC0$23Hj{`Xd$=Qh_4Qd;a%`5P6?Dj$2W1tZy@IB9 z8FXb>VKT9-Z@?ObWgfn=(5QF9e87uGjq-meY{IMZn`SsQ-j%&5r`tBKq`_4dr*0aP%P;>^kHSv`vvq1|?8eW`P1h@Ah zX2a2EkHyL?^p?lMwCq~YmU7F%0*fG@z=6Dt_vRow)E=%)gHR}*o2YSS%gt%yb zI>xLF8lIB+OK$;XHX~1xJ~R00R2BUQ`t8}6+wO+m3Uf4!h$2};W+-Y4Jl}S%H^%P} zFZ%Q_ObDh7NBg8pABDO|0~VmY+7NRVWPo=F1$O36Ve+uSnR=;%A=GRe8fofs zZ4(B^hBH`FvaMVNbK+p*F_aMCDJeO;e(BCpE}=D_+1xCX*wsIBKwJ{i!K$nUJ{x~2YqB2g z`ESeR9p~1<2T2d*0!pj72=zo>5i|~SoNMX3pLH`z)&Mii$`Za~6XEw7|v>RkjW zy8sF`&|h16Y@{szM>SA9xcM_kutcIe+!kB4YTZ|i1lpXW<(Wk;_lP-T^v&awA}fuK zEQkhh;lLFE2VWi=${W0YHuW_pYr+GG)HEmk{%xLYw>FiLNN)iVJby3KCllb4KC5^2 z-FfOUD9@tFq`=Kr>EQ4;Mry&Bn0e{Ij^+?iBD=8Fa!7P1xpe@+q{^YZe=hWxlXWiu z#qj$sNNv{txnDOOWw}}&@YNE+PznQ%2>{#iB!Y@Fq8O< zM6AI~NDK$g@i9wDNKpBnp5`pJhMuD8N#T~9a;FV!tb8%2LUh0r5vPKIY6-ZH{>L4U zr|8g<+gS^kne$YKgr+B_sv<>Ey7Z!zRC$9=^#46!d0wE3A~Y;(jhf^c z9tyXGH-5tZG!e6ZMrZ-%3j-KnM8q||=c)P^J%&hlu}IZb8G+G@tTUvW8RDo#)zp|h zP`s_YhinXU9r>~m5Q`opJaCNzmC^WlUnJ(5pMRR7;4y4C75w!RGFU>yYU>zi+wXR6 z7K1Hz8@wAlQ#3E}P6laKwrO?5)rBTTL0HQ{|6JRZ` Date: Wed, 8 Oct 2025 16:59:44 -0300 Subject: [PATCH 10/10] Attempt of Bots follow --- ext/Server/Bot/BotMovement.lua | 70 +++++++++++++++++++++++----------- ext/Server/BotManager.lua | 29 +++++--------- 2 files changed, 56 insertions(+), 43 deletions(-) diff --git a/ext/Server/Bot/BotMovement.lua b/ext/Server/Bot/BotMovement.lua index e550d019..7f437ee1 100644 --- a/ext/Server/Bot/BotMovement.lua +++ b/ext/Server/Bot/BotMovement.lua @@ -939,12 +939,12 @@ local function GetDistance2D(a, b) end local NARROW_RADIUS = 0.7 -local DOOR_THRESHOLD = 0.8 +local DOOR_THRESHOLD = 0.4 local CAPSULE_H = 0.2 local RAYS = 8 local function MeasureFreeRadius(botPos) - local CAPSULE_H = 0.2 + local CAPSULE_H = 0.1 local RAYS = 8 -- cardinal + diagonal local minFree = 999 @@ -952,10 +952,10 @@ local function MeasureFreeRadius(botPos) local ang = math.rad(i * 360 / RAYS) local dir = Vec3(math.sin(ang), 0, math.cos(ang)) local from = botPos + Vec3(0, CAPSULE_H, 0) - local to = from + dir * 5.0 + local to = from + dir * 2.0 local hits = RaycastManager:CollisionRaycast(from, to, 0.2, 0, RayCastFlags.DontCheckWater | RayCastFlags.DontCheckCharacter) - local dist = #hits > 0 and GetDistance2D(from, hits[1].position) or 5.0 + local dist = #hits > 0 and GetDistance2D(from, hits[1].position) or 2.0 minFree = math.min(minFree, dist) end @@ -996,25 +996,20 @@ function BotMovement:UpdateFollowingMovement(p_DeltaTime, p_Bot) local freeRadius = MeasureFreeRadius(s_BotPosition) -- desired follow radius - local desiredRadius = p_Bot._FollowDistance or (2.5 + math.random() * 3.0) + local desiredRadius = p_Bot._FollowDistance or (1 + math.random() * 3.0) local clampedRadius = math.min(desiredRadius, freeRadius - 0.3) local s_TargetPosition = nil - -- Tight corridor / door snap - local DOOR_THRESHOLD = 0.8 + -- 🔹 IMPROVED DOOR / TIGHT AREA HANDLING if clampedRadius < DOOR_THRESHOLD then local plyYaw = s_TargetPlayer.input.authoritativeAimingYaw local back = Vec3(-math.sin(plyYaw), 0, math.cos(plyYaw)) + local sideOffset = (p_Bot._FollowAngle or 0) % 2 == 0 and 0.4 or -0.4 - -- side offset so multiple bots don’t stack - local sideOffset = 0 - if p_Bot._FollowAngle then - sideOffset = math.cos(math.rad(p_Bot._FollowAngle)) * 0.3 - end - - s_TargetPosition = s_PlayerPosition + back * 0.9 + Vec3(sideOffset, 0, 0) - p_Bot._FollowDistance = 0.6 + -- stay behind player in tight spaces + s_TargetPosition = s_PlayerPosition + back * (1.2 + math.random() * 0.2) + Vec3(sideOffset, 0, 0) + p_Bot._FollowDistance = 0.4 else local angleRad = math.rad(p_Bot._FollowAngle or math.random() * 360) s_TargetPosition = Vec3( @@ -1040,6 +1035,11 @@ function BotMovement:UpdateFollowingMovement(p_DeltaTime, p_Bot) s_Direction.y = s_Direction.y / s_Distance s_Direction.z = s_Direction.z / s_Distance + -- 🔹 reset stuck timer when moving properly + if s_Distance > 1.0 then + p_Bot._StuckTimer = 0.0 + end + -- speed if s_Distance > 8.0 then p_Bot.m_ActiveSpeedValue = BotMoveSpeeds.Sprint @@ -1056,7 +1056,6 @@ function BotMovement:UpdateFollowingMovement(p_DeltaTime, p_Bot) local rayTarget = s_TargetPosition + Vec3(0, 0.5, 0) local s_ObstacleHits = RaycastManager:CollisionRaycast(rayOrigin, rayTarget, 1, 0, flags) - -- jump only when appropriate local canJump = false if #s_ObstacleHits > 0 then local firstHit = s_ObstacleHits[1] @@ -1067,11 +1066,26 @@ function BotMovement:UpdateFollowingMovement(p_DeltaTime, p_Bot) end end + -- 🔹 Prevent infinite retries + if p_Bot._ObstacleRetryCounter and p_Bot._ObstacleRetryCounter > 3 then + p_Bot._ObstacleSequenceTimer = 0 + p_Bot._ObstacleRetryCounter = 0 + p_Bot._StuckTimer = (p_Bot._StuckTimer or 0) + p_DeltaTime + + if MathUtils:GetRandomInt(0, 1) == 1 then + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, 1.0) + else + p_Bot:_SetInput(EntryInputActionEnum.EIAStrafe, -1.0) + end + + return + end + + -- 🔹 JUMP / OBSTACLE HANDLING if canJump or math.abs(s_TargetPosition.y - s_BotPosition.y) > 1.5 or p_Bot._ObstacleSequenceTimer ~= 0 then p_Bot._ObstacleSequenceTimer = p_Bot._ObstacleSequenceTimer + p_DeltaTime - p_Bot._StuckTimer = p_Bot._StuckTimer + p_DeltaTime + p_Bot._StuckTimer = (p_Bot._StuckTimer or 0) + p_DeltaTime - -- quick jump if p_Bot._ObstacleSequenceTimer <= 0.2 then p_Bot:_SetInput(EntryInputActionEnum.EIAQuicktimeJumpClimb, 1) p_Bot:_SetInput(EntryInputActionEnum.EIAJump, 1) @@ -1098,26 +1112,36 @@ function BotMovement:UpdateFollowingMovement(p_DeltaTime, p_Bot) if p_Bot._ObstacleSequenceTimer > 0.8 then p_Bot._ObstacleSequenceTimer = 0 p_Bot:_ResetActionFlag(BotActionFlags.MeleeActive) - p_Bot._ObstacleRetryCounter = p_Bot._ObstacleRetryCounter + 1 + p_Bot._ObstacleRetryCounter = (p_Bot._ObstacleRetryCounter or 0) + 1 end return else - -- clear obstacle state p_Bot._ObstacleSequenceTimer = 0 p_Bot:_ResetActionFlag(BotActionFlags.MeleeActive) p_Bot._ObstacleRetryCounter = 0 - p_Bot._StuckTimer = 0 end -- compute yaw local s_AtanDzDx = math.atan(s_TargetPosition.z - s_BotPosition.z, s_TargetPosition.x - s_BotPosition.x) p_Bot._TargetYaw = (s_AtanDzDx > math.pi / 2) and (s_AtanDzDx - math.pi / 2) or (s_AtanDzDx + 3 * math.pi / 2) - -- alive behaviors self:UpdateFollowingBehaviors(p_Bot, p_DeltaTime, s_Distance) + + -- 🔹 STUCK HANDLING (final fallback) + p_Bot._StuckTimer = (p_Bot._StuckTimer or 0.0) + p_DeltaTime + if p_Bot._StuckTimer > 3.0 then + local plyYaw = s_TargetPlayer.input.authoritativeAimingYaw + local back = Vec3(-math.sin(plyYaw), 0, math.cos(plyYaw)) + local safePos = s_PlayerPosition + back * (1.5 + math.random() * 0.5) + + p_Bot.m_Player.soldier:SetPosition(safePos) + p_Bot._StuckTimer = 0.0 + p_Bot._ObstacleSequenceTimer = 0 + p_Bot._ObstacleRetryCounter = 0 + return + end else - -- defensive if in place p_Bot.m_ActiveSpeedValue = BotMoveSpeeds.NoMovement self:UpdateFollowingDefensive(p_Bot, p_DeltaTime) end diff --git a/ext/Server/BotManager.lua b/ext/Server/BotManager.lua index f3ba2701..1792a441 100644 --- a/ext/Server/BotManager.lua +++ b/ext/Server/BotManager.lua @@ -201,41 +201,30 @@ function BotManager:OnUpdateManagerUpdate(p_DeltaTime, p_UpdatePass) end -- Check for followers that should return to following (runs every 2 seconds) - if self._FollowerReturnTimer == nil then - self._FollowerReturnTimer = 0.0 - end - - self._FollowerReturnTimer = self._FollowerReturnTimer + p_DeltaTime - + self._FollowerReturnTimer = (self._FollowerReturnTimer or 0.0) + p_DeltaTime if self._FollowerReturnTimer > 2.0 then self._FollowerReturnTimer = 0.0 - -- Check all bots for ones that should return to following for i = 1, #self._Bots do local s_Bot = self._Bots[i] - -- Check if bot was following someone and is now in attacking state with no target if s_Bot._PersistentFollowTarget and - s_Bot.m_ActiveState == g_BotStates.States.Attacking and - s_Bot._ShootPlayer == nil and - s_Bot._FollowReturnTimer then - s_Bot._FollowReturnTimer = s_Bot._FollowReturnTimer + 2.0 -- Add the 2 second interval + s_Bot._ShootPlayer == nil then + s_Bot._FollowReturnTimer = (s_Bot._FollowReturnTimer or 0.0) + 2.0 - if s_Bot._FollowReturnTimer > 3.0 then -- 3 seconds of no combat + if s_Bot._FollowReturnTimer > 3.0 then local s_TargetPlayer = s_Bot._PersistentFollowTarget - -- Verify target is still valid - if s_TargetPlayer.soldier and - s_TargetPlayer.teamId == s_Bot.m_Player.teamId then - -- Return to following + if s_TargetPlayer.soldier and s_TargetPlayer.teamId == s_Bot.m_Player.teamId then s_Bot._FollowTargetPlayer = s_TargetPlayer + s_Bot._ShootPlayer = nil s_Bot:SetState(g_BotStates.States.Following) - s_Bot._FollowReturnTimer = 0.0 else - -- Target no longer valid, clear follow memory + -- target invalid, clear memory s_Bot._PersistentFollowTarget = nil - s_Bot._FollowReturnTimer = nil end + + s_Bot._FollowReturnTimer = 0.0 end end end