diff --git a/project/Aki.Debugging/BTR/BTRManager.cs b/project/Aki.Debugging/BTR/BTRManager.cs index 0f973cd..2e5f8c3 100644 --- a/project/Aki.Debugging/BTR/BTRManager.cs +++ b/project/Aki.Debugging/BTR/BTRManager.cs @@ -28,6 +28,7 @@ namespace Aki.Debugging.BTR private BotOwner btrBotShooter; private BTRDataPacket btrDataPacket = default; private bool btrBotShooterInitialized = false; + private float coverFireTime = 90f; private EPlayerBtrState previousPlayerBtrState; private BTRSide lastInteractedBtrSide; @@ -149,6 +150,9 @@ namespace Aki.Debugging.BTR private void InitBTR() { + // Fetch config from the server + var serverConfig = BTRUtil.GetConfigFromServer(); + // Initial setup botEventHandler = Singleton.Instance; var botsController = Singleton.Instance.BotsController; @@ -159,7 +163,14 @@ namespace Aki.Debugging.BTR // Initial BTR configuration btrServerSide = btrController.BtrVehicle; btrServerSide.transform.Find("KillBox").gameObject.AddComponent(); - btrServerSide.moveSpeed = 20f; + + // Update values from server side config + btrServerSide.moveSpeed = serverConfig.MoveSpeed; + btrServerSide.pauseDurationRange.x = serverConfig.PointWaitTime.Min; + btrServerSide.pauseDurationRange.y = serverConfig.PointWaitTime.Max; + btrServerSide.readyToDeparture = serverConfig.TaxiWaitTime; + coverFireTime = serverConfig.CoverFireTime; + var btrMapConfig = btrController.MapPathsConfiguration; btrServerSide.CurrentPathConfig = btrMapConfig.PathsConfiguration.pathsConfigurations.RandomElement(); btrServerSide.Initialization(btrMapConfig); @@ -230,7 +241,7 @@ namespace Aki.Debugging.BTR { case ETraderServiceType.BtrBotCover: botEventHandler.ApplyTraderServiceBtrSupport(passengers); - StartCoverFireTimer(90f); + StartCoverFireTimer(coverFireTime); break; case ETraderServiceType.PlayerTaxi: btrController.BtrVehicle.IsPaid = true; diff --git a/project/Aki.Debugging/BTR/Models/BtrConfigModel.cs b/project/Aki.Debugging/BTR/Models/BtrConfigModel.cs new file mode 100644 index 0000000..437ca8d --- /dev/null +++ b/project/Aki.Debugging/BTR/Models/BtrConfigModel.cs @@ -0,0 +1,29 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace Aki.Debugging.BTR.Models +{ + public class BtrConfigModel + { + [JsonProperty("moveSpeed")] + public float MoveSpeed { get; set; } + + [JsonProperty("coverFireTime")] + public float CoverFireTime { get; set; } + + [JsonProperty("pointWaitTime")] + public BtrMinMaxValue PointWaitTime { get; set; } + + [JsonProperty("taxiWaitTime")] + public float TaxiWaitTime { get; set; } + } + + public class BtrMinMaxValue + { + [JsonProperty("min")] + public float Min { get; set; } + + [JsonProperty("max")] + public float Max { get; set; } + } +} diff --git a/project/Aki.Debugging/BTR/Patches/BTRPatch.cs b/project/Aki.Debugging/BTR/Patches/BTRPatch.cs index 95bd280..b532ec6 100644 --- a/project/Aki.Debugging/BTR/Patches/BTRPatch.cs +++ b/project/Aki.Debugging/BTR/Patches/BTRPatch.cs @@ -1,3 +1,4 @@ +using System.Linq; using System.Reflection; using Aki.Reflection.Patching; using Comfort.Common; @@ -24,17 +25,14 @@ namespace Aki.Debugging.BTR.Patches { try { + var btrSettings = Singleton.Instance.BTRSettings; var gameWorld = Singleton.Instance; - if (gameWorld.MainPlayer.Location.ToLower() != "tarkovstreets") - { - // only run patch on streets - return; - } - if (gameWorld.LocationId.IsNullOrEmpty()) + // Only run on maps that have the BTR enabled + string location = gameWorld.MainPlayer.Location; + if (!btrSettings.LocationsWithBTR.Contains(location)) { - // GameWorld's LocationId needs to be set otherwise BTR doesn't get spawned in automatically - gameWorld.LocationId = gameWorld.MainPlayer.Location; + return; } var btrManager = gameWorld.gameObject.AddComponent(); diff --git a/project/Aki.Debugging/BTR/Utils/BTRUtil.cs b/project/Aki.Debugging/BTR/Utils/BTRUtil.cs index 01dae05..540548a 100644 --- a/project/Aki.Debugging/BTR/Utils/BTRUtil.cs +++ b/project/Aki.Debugging/BTR/Utils/BTRUtil.cs @@ -1,6 +1,9 @@ -using Comfort.Common; +using Aki.Common.Http; +using Aki.Debugging.BTR.Models; +using Comfort.Common; using EFT; using EFT.InventoryLogic; +using Newtonsoft.Json; using System; namespace Aki.Debugging.BTR.Utils @@ -19,5 +22,11 @@ namespace Aki.Debugging.BTR.Utils var id = Guid.NewGuid().ToString("N").Substring(0, 24); return Singleton.Instance.CreateItem(id, tplId, null); } + + public static BtrConfigModel GetConfigFromServer() + { + string json = RequestHandler.GetJson("/singleplayer/btr/config"); + return JsonConvert.DeserializeObject(json); + } } }