diff --git a/ReallifeGamemode.Server/Managers/VehicleManager.cs b/ReallifeGamemode.Server/Managers/VehicleManager.cs index 923a6112..2ccc52a5 100644 --- a/ReallifeGamemode.Server/Managers/VehicleManager.cs +++ b/ReallifeGamemode.Server/Managers/VehicleManager.cs @@ -774,7 +774,7 @@ namespace ReallifeGamemode.Server.Managers }; - private static readonly Dictionary _serverVehicles = new Dictionary(); + private static readonly Dictionary _serverVehicles = new Dictionary(); private static readonly Dictionary lastPositions = new Dictionary(); private static DateTime lastSave = DateTime.UtcNow; @@ -855,17 +855,23 @@ namespace ReallifeGamemode.Server.Managers { if (_serverVehicles.ContainsKey(serverVehicle.Id)) { - logger.LogCritical("Server Vehicle {Id} already has a spawned vehicle", serverVehicle.Id); - _serverVehicles[serverVehicle.Id].Entity().Delete(); + var spawnedHandle = _serverVehicles.Where(s => s.Key == serverVehicle.Id).First().Value; + logger.LogCritical("Server Vehicle {Id} already has a spawned vehicle with handle {spawnedHandle}", serverVehicle.Id, spawnedHandle); + new NetHandle(_serverVehicles[serverVehicle.Id], EntityType.Vehicle).Entity().Delete(); } - if (_serverVehicles.ContainsValue(vehicle.Handle)) + if (_serverVehicles.ContainsValue(vehicle.Handle.Value)) { - logger.LogCritical("Vehicle handle {Handle} already belongs"); + var dbId = _serverVehicles.Where(v => v.Value == vehicle.Handle.Value).First().Key; + var dbIdHandle = vehicle.Handle.Value; + logger.LogCritical("Vehicle handle {handle} already belongs to server vehicle {dbIdHandle}", dbIdHandle, dbId); return; } - _serverVehicles[serverVehicle.Id] = vehicle.Handle; + var id = serverVehicle.Id; + var handle = vehicle.Handle.Value; + logger.LogInformation("Mapping server vehicle id {id} to vehicle {handle}", id, handle); + _serverVehicles[serverVehicle.Id] = vehicle.Handle.Value; } internal static void DeleteVehicle(Vehicle veh) @@ -873,15 +879,18 @@ namespace ReallifeGamemode.Server.Managers ServerVehicle sVeh; if ((sVeh = GetServerVehicleFromVehicle(veh)) != null) { + var id = sVeh.Id; + var handle = veh.Handle.Value; + logger.LogInformation("Deleting server vehicle {id} mapping to spawned veh {handle}", id, handle); _serverVehicles.Remove(sVeh.Id); } veh?.Delete(); } - public static Vehicle GetVehicleFromHandle(NetHandle handle) + public static Vehicle GetVehicleFromHandle(ushort handle) { - return NAPI.Pools.GetAllVehicles().Find(v => v.Handle == handle); + return NAPI.Pools.GetAllVehicles().Find(v => v.Handle.Value == handle); } public static Vehicle GetVehicleFromId(int id) @@ -917,9 +926,9 @@ namespace ReallifeGamemode.Server.Managers dbContext = dbContext ?? new DatabaseContext(); - foreach (KeyValuePair pair in _serverVehicles) + foreach (KeyValuePair pair in _serverVehicles) { - if (pair.Value == veh.Handle) + if (pair.Value == veh.Handle.Value) { return dbContext.ServerVehicles.Find(pair.Key); }