diff --git a/ReallifeGamemode.Client/index.ts b/ReallifeGamemode.Client/index.ts index e1b91d2d..f37eaec0 100644 --- a/ReallifeGamemode.Client/index.ts +++ b/ReallifeGamemode.Client/index.ts @@ -177,6 +177,9 @@ vehicleIndicators(); import vehicleDoor from './vehiclesync/door'; vehicleDoor(); +import vehicleInWater from './vehiclesync/vehicleinwater'; +vehicleInWater() + import freeze from './util/freeze'; freeze(); diff --git a/ReallifeGamemode.Client/vehiclesync/vehicleinwater.ts b/ReallifeGamemode.Client/vehiclesync/vehicleinwater.ts new file mode 100644 index 00000000..62659896 --- /dev/null +++ b/ReallifeGamemode.Client/vehiclesync/vehicleinwater.ts @@ -0,0 +1,11 @@ +export default function vehicleInWater() { + + mp.events.add('CheckWaterCrash', (vehicle) => { + + if (!vehicle.isInWater() && vehicle.getIsEngineRunning()) { + return; + } + mp.gui.chat.push("Das Auto ist im Wasser"); + mp.events.callRemote("CheckWater", vehicle.id); + }); +} \ No newline at end of file diff --git a/ReallifeGamemode.Server/Events/ExitVehicle.cs b/ReallifeGamemode.Server/Events/ExitVehicle.cs index de493cbe..431ac5c0 100644 --- a/ReallifeGamemode.Server/Events/ExitVehicle.cs +++ b/ReallifeGamemode.Server/Events/ExitVehicle.cs @@ -43,6 +43,7 @@ namespace ReallifeGamemode.Server.Events { client.TriggerEvent("SERVER:setMarkerBehindVehicle", vehicle); } + client.TriggerEvent("CheckWaterCrash", vehicle); } if (vehicle.GetServerVehicle() is SchoolVehicle vehS) { @@ -80,13 +81,11 @@ namespace ReallifeGamemode.Server.Events sV.PositionZ = pos.Z; sV.Heading = vehicle.Heading; - dbContext.SaveChanges(); + dbContext.SaveChanges(); + client.TriggerEvent("CheckWaterCrash", vehicle); } } - - - - } + } private static void Timer600000_Elapsed(object sender, ElapsedEventArgs e) { //ExitVehicle c = new ExitVehicle(); diff --git a/ReallifeGamemode.Server/Managers/VehicleManager.cs b/ReallifeGamemode.Server/Managers/VehicleManager.cs index 341437a4..bbcd38fc 100644 --- a/ReallifeGamemode.Server/Managers/VehicleManager.cs +++ b/ReallifeGamemode.Server/Managers/VehicleManager.cs @@ -3,6 +3,7 @@ using Microsoft.Extensions.Logging; using Newtonsoft.Json; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; +using ReallifeGamemode.Server.Core.API; using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Log; using ReallifeGamemode.Server.Services; @@ -1091,6 +1092,7 @@ namespace ReallifeGamemode.Server.Managers InventoryManager.RemoveAllItemsfromVehicleInventory(vehicle); serverVehicle.Spawn(vehicle); + vehicle.Repair(); } [RemoteEvent("CLIENT:setMarkerBehindVehicle")] @@ -1100,5 +1102,233 @@ namespace ReallifeGamemode.Server.Managers Vector3 vector3 = new Vector3(Convert.ToSingle((double)JsonConvert.DeserializeObject(jsonX)), Convert.ToSingle((double)JsonConvert.DeserializeObject(jsonY)), Convert.ToSingle((double)JsonConvert.DeserializeObject(jsonZ))); vehicle.AddMarkerBehind(vector3); } + #region spawnpositions-vehicleInWater + + public static List VehicleRespawnPoints = new List (); + + VehicleRespawnPoint pos1 = new VehicleRespawnPoint() + { + Position = new Vector3(-307.84, -909.04, 31.07), + heading = 167.46f + }; + VehicleRespawnPoint pos2 = new VehicleRespawnPoint() + { + Position = new Vector3(-311.52, -908.40, 31.07), + heading = 170.40f + }; + VehicleRespawnPoint pos3 = new VehicleRespawnPoint() + { + Position = new Vector3(-315.18, -907.68, 31.07), + heading = 167.17f + }; + VehicleRespawnPoint pos4 = new VehicleRespawnPoint() + { + Position = new Vector3(-319.09, -906.68, 31.07), + heading = 168.41f + }; + VehicleRespawnPoint pos5 = new VehicleRespawnPoint() + { + Position = new Vector3(-322.48, -905.95, 31.07), + heading = 169.00f + }; + VehicleRespawnPoint pos6 = new VehicleRespawnPoint() + { + Position = new Vector3(-322.48, -905.95, 31.07), + heading = 169.00f + }; + VehicleRespawnPoint pos7 = new VehicleRespawnPoint() + { + Position = new Vector3(-325.95, -905.17, 31.07), + heading = 168.26f + }; + VehicleRespawnPoint pos8 = new VehicleRespawnPoint() + { + Position = new Vector3(-329.77, -904.33, 31.07), + heading = 168.17f + }; + VehicleRespawnPoint pos9 = new VehicleRespawnPoint() + { + Position = new Vector3(-333.31, -903.61, 31.07), + heading = 169.17f + }; + VehicleRespawnPoint pos10 = new VehicleRespawnPoint() + { + Position = new Vector3(-336.86, -902.80, 31.07), + heading = 167.65f + }; + VehicleRespawnPoint pos11 = new VehicleRespawnPoint() + { + Position = new Vector3(-340.41, -902.12, 31.07), + heading = 162.65f + }; + VehicleRespawnPoint pos12 = new VehicleRespawnPoint() + { + Position = new Vector3(-360.96, -893.13, 31.07), + heading = -88.49f + }; + VehicleRespawnPoint pos13 = new VehicleRespawnPoint() + { + Position = new Vector3(-360.80, -896.62, 31.07), + heading = -88.13f + }; + VehicleRespawnPoint pos14 = new VehicleRespawnPoint() + { + Position = new Vector3(-359.50, -944.78, 31.08), + heading = -89.30f + }; + VehicleRespawnPoint pos15 = new VehicleRespawnPoint() + { + Position = new Vector3(-361.17, -948.58, 31.08), + heading = -85.58f + }; + VehicleRespawnPoint pos16 = new VehicleRespawnPoint() + { + Position = new Vector3(-361.00, -952.27, 31.08), + heading = -89.86f + }; + VehicleRespawnPoint pos17 = new VehicleRespawnPoint() + { + Position = new Vector3(-360.99, -955.92, 31.08), + heading = -87.21f + }; + VehicleRespawnPoint pos18 = new VehicleRespawnPoint() + { + Position = new Vector3(-350.26, -972.01, 31.08), + heading = -18.13f + }; + VehicleRespawnPoint pos19 = new VehicleRespawnPoint() + { + Position = new Vector3(-346.58, -973.31, 31.08), + }; + VehicleRespawnPoint pos20 = new VehicleRespawnPoint() + { + Position = new Vector3(-343.31, -974.59, 31.08), + heading = -20.22f + }; +/* + private readonly IReadOnlyCollection vector3s = new List + { + + new Vector3(-343.31, -974.59, 31.08), //Heading -20.22 + new Vector3(-339.67, -975.69, 31.08), //Heading -16.76 + new Vector3(-336.38, -976.95, 31.08), //Heading -19.30 + new Vector3(-332.50, -978.28, 31.08), //Heading -18.82 + new Vector3(-329.48, -979.39, 31.08), //Heading -26.22 + new Vector3(-325.96, -980.70, 31.08), //Heading -19.74 + new Vector3(-360.85, -900.53, 31.07), //Heading -88.64 + new Vector3(-360.71, -904.02, 31.07), //Heading -88.04 + new Vector3(-360.56, -907.78, 31.07), //Heading -88.41 + new Vector3(-360.41, -911.79, 31.08), //Heading -86.13 + new Vector3(-360.30, -915.26, 31.08), //Heading -134.60 + new Vector3(-360.12, -919.21, 31.08), //Heading -82.35 + new Vector3(-360.03, -922.63, 31.08), //Heading -89.27 + new Vector3(-359.78, -926.58, 31.08), //Heading -84.04 + new Vector3(-359.73, -929.89, 31.08), //Heading -88.67 + new Vector3(-359.66, -933.50, 31.08), //Heading -88.67 + new Vector3(-359.54, -937.61, 31.08), //Heading -86.68 + new Vector3(-359.48, -941.17, 31.08), //Heading -90.07 + new Vector3(-336.84, -952.54, 31.08), //Heading 68.74 + new Vector3(-355.55, -949.08, 31.08), //Heading 71.85 + new Vector3(-334.47, -945.95, 31.08), //Heading 70.89 + new Vector3(-333.11, -942.11, 31.08), //Heading 70.18 + new Vector3(-331.90, -938.98, 31.08), //Heading 68.07 + new Vector3(-330.65, -935.58, 31.08), //Heading 70.98 + new Vector3(-329.24, -931.58, 31.08), //Heading 73.91 + new Vector3(-328.12, -928.44, 31.08), //Heading 69.17 + new Vector3(-326.67, -924.60, 31.08), //Heading 46.89 + new Vector3(-322.36, -982.02, 31.08), //Heading -21.25059 + new Vector3(-318.92, -983.19, 31.08), //Heading -20.580233 + new Vector3(-315.42, -984.40, 31.08), //Heading -21.508415 + new Vector3(-311.97, 985.60, 31.080), //Heading -20.866705 + new Vector3(-308.43, -986.83, 31.08), //Heading -21.050055 + new Vector3(-305.03, -988.07, 31.08), //Heading -21.021408 + new Vector3(-301.48, -989.31, 31.08), //Heading -22.333475 + new Vector3(-298.04, -990.48, 31.08), //Heading -26.02332 + new Vector3(-342.30, -921.35, 31.0), //Heading-109.20534 + new Vector3(-343.37, -925.01, 31.08), //Heading -111.86385 + new Vector3(-344.68, -928.18, 31.08), //Heading -109.97883 + new Vector3(-345.78, -931.86, 31.08), //Heading -110.89556 + }.AsReadOnly(); + */ + #endregion spawnpositions-vehicleInWater + + [RemoteEvent("CheckWater")] + public void CheckWater(Player player, int id) + { + #region add_VehicleRespawnPoints + VehicleRespawnPoints.Add(pos1); + VehicleRespawnPoints.Add(pos2); + VehicleRespawnPoints.Add(pos3); + VehicleRespawnPoints.Add(pos4); + VehicleRespawnPoints.Add(pos5); + VehicleRespawnPoints.Add(pos6); + VehicleRespawnPoints.Add(pos7); + VehicleRespawnPoints.Add(pos8); + VehicleRespawnPoints.Add(pos9); + VehicleRespawnPoints.Add(pos10); + VehicleRespawnPoints.Add(pos11); + VehicleRespawnPoints.Add(pos12); + VehicleRespawnPoints.Add(pos13); + VehicleRespawnPoints.Add(pos14); + VehicleRespawnPoints.Add(pos15); + VehicleRespawnPoints.Add(pos16); + VehicleRespawnPoints.Add(pos17); + VehicleRespawnPoints.Add(pos18); + VehicleRespawnPoints.Add(pos19); + VehicleRespawnPoints.Add(pos20); + #endregion add_VehicleRespawnPoints + + using (var dbContext = new DatabaseContext()) + { + + Vehicle vehicle = NAPI.Pools.GetAllVehicles().Find(v => v.Id == id); + ServerVehicle sV = vehicle.GetServerVehicle(dbContext); + + if (sV is UserVehicle) + { + + foreach (VehicleRespawnPoint point in VehicleRespawnPoints) + { + if (NAPI.Pools.GetAllVehicles().Any(v => v.Position.DistanceTo(point.Position) < 1)) + { + ChatService.Broadcast("Fahrzeug zu nah"); + } + else + { + sV.PositionX = point.Position.X; + sV.PositionY = point.Position.Y; + sV.PositionZ = point.Position.Z; + sV.Heading = point.heading; + dbContext.SaveChanges(); + } + } + /* Vector3 pos = new Vector3(-344.02, -928.72, 31.08); + + sV.PositionX = pos.X; + sV.PositionY = pos.Y; + sV.PositionZ = pos.Z; + sV.Heading = -109; + + dbContext.SaveChanges(); */ + vehicle.Delete(); + Vehicle newVeh = sV.Spawn(vehicle); + newVeh.Repair(); + newVeh.Rotation = new Vector3(0, 0, sV.Heading); + } + + if (sV is FactionVehicle || sV is GroupVehicle) + { + vehicle.Delete(); + Vehicle newVeh = sV.Spawn(vehicle); + newVeh.Repair(); + newVeh.Rotation = new Vector3(0, 0, sV.Heading); + } + } + } } } +public class VehicleRespawnPoint +{ + public Vector3 Position { get; set; } + public float heading { get; set; } +}