From 3851d404b9aacb9b31fd37572ef3d7aef1a59c52 Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 29 Nov 2018 20:55:35 +0100 Subject: [PATCH] Vehicle tuning is saved now --- Model/DatabaseContext.cs | 4 +++ Server/Entities/VehicleMod.cs | 22 ++++++++++++++++ Server/Managers/LoadManager.cs | 8 ++---- Server/Managers/TuningManager.cs | 43 ++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 Server/Entities/VehicleMod.cs diff --git a/Model/DatabaseContext.cs b/Model/DatabaseContext.cs index b90f80fa..da6f835b 100644 --- a/Model/DatabaseContext.cs +++ b/Model/DatabaseContext.cs @@ -41,6 +41,9 @@ namespace reallife_gamemode.Model modelBuilder.Entity() .Property(sv => sv.Active) .HasDefaultValue(true); + + modelBuilder.Entity() + .HasIndex(vM => new { vM.ServerVehicleId, vM.Slot }).IsUnique(); } //User @@ -87,5 +90,6 @@ namespace reallife_gamemode.Model // Server Vehicles public DbSet ServerVehicles { get; set; } + public DbSet VehicleMods { get; set; } } } diff --git a/Server/Entities/VehicleMod.cs b/Server/Entities/VehicleMod.cs new file mode 100644 index 00000000..45a49b59 --- /dev/null +++ b/Server/Entities/VehicleMod.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace reallife_gamemode.Server.Entities +{ + public class VehicleMod + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + + [ForeignKey("Vehicle")] + public int ServerVehicleId { get; set; } + public ServerVehicle Vehicle { get; set; } + + public int Slot { get; set; } + public int ModId { get; set; } + } +} diff --git a/Server/Managers/LoadManager.cs b/Server/Managers/LoadManager.cs index 101c342f..7d7737e6 100644 --- a/Server/Managers/LoadManager.cs +++ b/Server/Managers/LoadManager.cs @@ -36,13 +36,9 @@ namespace reallife_gamemode.Server.Managers if (!veh.Active) continue; Vehicle current = veh.Spawn(); + TuningManager.ApplyTuningToServerVehicle(veh); - if (veh is Saves.SavedVehicle savedV) - { - NAPI.Vehicle.CreateVehicle((uint)savedV.Model, new Vector3(savedV.PositionX, savedV.PositionY, savedV.PositionZ), savedV.Heading, savedV.PrimaryColor, - savedV.SecondaryColor, savedV.NumberPlate, 255, savedV.Locked); - } - else if (veh is ShopVehicle shopV) + if (veh is ShopVehicle shopV) { string displayName = NAPI.Vehicle.GetVehicleDisplayName(shopV.Model); NAPI.Vehicle.SetVehicleEngineHealth(current, 0); diff --git a/Server/Managers/TuningManager.cs b/Server/Managers/TuningManager.cs index 5e5c6259..e3bbd02e 100644 --- a/Server/Managers/TuningManager.cs +++ b/Server/Managers/TuningManager.cs @@ -1,7 +1,9 @@ using GTANetworkAPI; +using reallife_gamemode.Model; using reallife_gamemode.Server.Entities; using reallife_gamemode.Server.Extensions; using System.Collections.Generic; +using System.Linq; namespace reallife_gamemode.Server.Managers { @@ -38,6 +40,20 @@ namespace reallife_gamemode.Server.Managers tuningGarages.Add(colShape); } + public static void ApplyTuningToServerVehicle(ServerVehicle sVeh) + { + Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(sVeh); + if (veh == null) return; + + using(var dbContext = new DatabaseContext()) + { + foreach(VehicleMod vMod in dbContext.VehicleMods.ToList().FindAll(vM => vM.ServerVehicleId == sVeh.Id)) + { + veh.SetMod(vMod.Slot, vMod.ModId - 1); + } + } + } + [RemoteEvent("startPlayerTuning")] public void StartPlayerTuning(Client player) { @@ -51,6 +67,33 @@ namespace reallife_gamemode.Server.Managers { if (index == 0) index--; player.Vehicle.SetMod(slot, index - 1); + + ServerVehicle sV = player.Vehicle.GetServerVehicle(); + if (sV == null) return; + + using (var dbContext = new DatabaseContext()) + { + VehicleMod vMod = dbContext.VehicleMods.FirstOrDefault(m => m.ServerVehicleId == sV.Id && m.Slot == slot); + if(vMod == null && index != -1) + { + vMod = new VehicleMod + { + ServerVehicleId = sV.Id, + Slot = slot, + ModId = index + }; + dbContext.VehicleMods.Add(vMod); + } + else if(vMod != null && index == -1) + { + dbContext.VehicleMods.Remove(vMod); + } + else + { + vMod.ModId = index; + } + dbContext.SaveChanges(); + } } } }