From fab3f055754a38a491b66efe9d79aa06d33d68f6 Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 29 Nov 2018 20:04:40 +0100 Subject: [PATCH] Adapted Save- and LoadManager to new Vehicle System --- Server/Commands/Admin.cs | 48 +++++++++++++++------------ Server/Entities/FactionVehicles.cs | 10 ++++++ Server/Entities/ServerVehicle.cs | 9 ++++- Server/Extensions/VehicleExtension.cs | 17 ++++++++++ Server/Managers/LoadManager.cs | 27 ++------------- Server/Managers/SaveManager.cs | 43 ++++++++++++++---------- Server/Managers/TuningManager.cs | 9 ++++- Server/Managers/VehicleManager.cs | 17 +++++++++- 8 files changed, 114 insertions(+), 66 deletions(-) create mode 100644 Server/Extensions/VehicleExtension.cs diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index 03cef8da..3da48bca 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -255,11 +255,14 @@ namespace reallife_gamemode.Server.Commands return; } var gotoString = ""; - foreach (GotoPoint point in LoadManager.GotoPointList) + using(var dbContext = new DatabaseContext()) { - if (point.Active) + foreach (GotoPoint point in dbContext.GotoPoints) { - gotoString += point.Description + ", "; + if (point.Active) + { + gotoString += point.Description + ", "; + } } } player.SendChatMessage(gotoString); @@ -787,7 +790,7 @@ namespace reallife_gamemode.Server.Commands } [Command("vdestroy")] - public void CmdAdminDelveh(Client player) + public void CmdAdminVdestroy(Client player) { if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) { @@ -810,7 +813,7 @@ namespace reallife_gamemode.Server.Commands return; } - playerVeh.Delete(); + VehicleManager.DeleteVehicle(playerVeh); } [Command("vcolor", "~m~Benutzung: ~s~/vcolor [Farb-ID1] [Farb-ID2]")] @@ -1297,17 +1300,18 @@ namespace reallife_gamemode.Server.Commands if (player.IsInVehicle) { Vehicle vehicle = player.Vehicle; - SaveManager.SaveVehicleData((VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, - Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked, vehicle.EngineStatus, Convert.ToByte(vehicle.Dimension)); + int playerSeat = player.VehicleSeat; + vehicle = SaveManager.SaveVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, + Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked); player.SendNotification("Fahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); - + player.SetIntoVehicle(vehicle, playerSeat); } else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!"); break; case "FVehicle": if (player.IsInVehicle) { - if (player.GetUser().FactionId == null) + if (player.GetUser().GetFaction() == null) { player.SendChatMessage("~m~Du bist in keiner Fraktion! Invite dich erst mit ~y~/ainvite"); return; @@ -1315,11 +1319,12 @@ namespace reallife_gamemode.Server.Commands else { Vehicle vehicle = player.Vehicle; - SaveManager.SaveFactionVehicleData((VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, - Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked, vehicle.EngineStatus, Convert.ToByte(vehicle.Dimension), player.GetUser().FactionId); - vehicle.SetData("factionId", player.GetUser().FactionId); - LoadManager.FactionVehicleList.Add(vehicle); + player.SendChatMessage("second color: " + vehicle.SecondaryColor); + int playerSeat = player.VehicleSeat; + vehicle = SaveManager.SaveFactionVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, + vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, player.GetUser().FactionId); player.SendNotification("Fraktionsfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); + player.SetIntoVehicle(vehicle, playerSeat); } } else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!"); @@ -1328,10 +1333,11 @@ namespace reallife_gamemode.Server.Commands if (player.IsInVehicle) { Vehicle vehicle = player.Vehicle; - SaveManager.SaveShopVehicleData((VehicleHash)vehicle.Model, vehicle.DisplayName, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, - Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), Convert.ToByte(vehicle.Dimension), player.GetUser().FactionId); - LoadManager.ShopVehicleList.Add(vehicle); + int playerSeat = player.VehicleSeat; + vehicle = SaveManager.SaveShopVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.DisplayName, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, + Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor)); player.SendNotification("Shopfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); + player.SetIntoVehicle(vehicle, playerSeat); } else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!"); break; @@ -1795,7 +1801,7 @@ namespace reallife_gamemode.Server.Commands } } - [Command("givebusinessbankbalance", "~m~Benutzung: ~s~/givebusinessbankbalance [Business ID] [Menge]")] + [Command("setbusinessbankbalance", "~m~Benutzung: ~s~/setbusinessbankbalance [Business ID] [Menge]")] public void CmdAdminGivebusinessbankbalance(Client player, int businessid, int amount) { if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) @@ -1811,7 +1817,7 @@ namespace reallife_gamemode.Server.Commands return; } - BankManager.TransferMoney(null, business, amount, "Admin"); + BankManager.SetMoney(player, business, amount, "Admin"); } #endregion @@ -1834,7 +1840,6 @@ namespace reallife_gamemode.Server.Commands if (player.IsInVehicle) { Vehicle playerVehicle = player.Vehicle; - LoadManager.UserVehicleList.Add(playerVehicle); using (var saveVehicle = new DatabaseContext()) { var dataSet = new UserVehicle @@ -1846,12 +1851,11 @@ namespace reallife_gamemode.Server.Commands PositionZ = playerVehicle.Position.Z, Heading = playerVehicle.Heading, NumberPlate = playerVehicle.NumberPlate, - PrimaryColor = Convert.ToByte(playerVehicle.PrimaryColor), - SecondaryColor = Convert.ToByte(playerVehicle.SecondaryColor), + PrimaryColor = playerVehicle.PrimaryColor, + SecondaryColor = playerVehicle.SecondaryColor, Locked = playerVehicle.Locked, Active = true }; - playerVehicle.SetData("ownerId",player.GetUser().Id); saveVehicle.UserVehicles.Add(dataSet); saveVehicle.SaveChanges(); } diff --git a/Server/Entities/FactionVehicles.cs b/Server/Entities/FactionVehicles.cs index dc9c77d6..8cb88532 100644 --- a/Server/Entities/FactionVehicles.cs +++ b/Server/Entities/FactionVehicles.cs @@ -1,9 +1,11 @@ using GTANetworkAPI; +using reallife_gamemode.Model; using reallife_gamemode.Server.Util; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; using System.Text; /** @@ -20,5 +22,13 @@ namespace reallife_gamemode.Server.Entities [ForeignKey("Faction")] public int? FactionId { get; set; } public Faction Faction { get; set; } + + public Faction GetFaction() + { + using (var context = new DatabaseContext()) + { + return context.Factions.FirstOrDefault(f => f.Id == FactionId); + } + } } } diff --git a/Server/Entities/ServerVehicle.cs b/Server/Entities/ServerVehicle.cs index 8d614f17..5c58010c 100644 --- a/Server/Entities/ServerVehicle.cs +++ b/Server/Entities/ServerVehicle.cs @@ -30,10 +30,17 @@ namespace reallife_gamemode.Server.Entities [NotMapped] public Vector3 Position => new Vector3(PositionX, PositionY, PositionZ); - public Vehicle Spawn() + public Vehicle Spawn(Vehicle currentVeh = null) { + if (currentVeh != null) VehicleManager.DeleteVehicle(currentVeh); Vehicle veh = NAPI.Vehicle.CreateVehicle(this.Model, this.Position, this.Heading, this.PrimaryColor, this.SecondaryColor, this.NumberPlate, locked: this.Locked, engine: false); VehicleManager.AddVehicle(this, veh); + + if(this is FactionVehicle fV) + { + veh.NumberPlate = fV.GetFaction().Name; + } + return veh; } } diff --git a/Server/Extensions/VehicleExtension.cs b/Server/Extensions/VehicleExtension.cs new file mode 100644 index 00000000..be9c98b0 --- /dev/null +++ b/Server/Extensions/VehicleExtension.cs @@ -0,0 +1,17 @@ +using GTANetworkAPI; +using reallife_gamemode.Server.Entities; +using reallife_gamemode.Server.Managers; +using System; +using System.Collections.Generic; +using System.Text; + +namespace reallife_gamemode.Server.Extensions +{ + public static class VehicleExtension + { + public static ServerVehicle GetServerVehicle(this Vehicle veh) + { + return VehicleManager.GetServerVehicleFromVehicle(veh); + } + } +} diff --git a/Server/Managers/LoadManager.cs b/Server/Managers/LoadManager.cs index fa0125b3..101c342f 100644 --- a/Server/Managers/LoadManager.cs +++ b/Server/Managers/LoadManager.cs @@ -4,6 +4,7 @@ using System.Text; using GTANetworkAPI; using reallife_gamemode.Model; using reallife_gamemode.Server.Entities; +using reallife_gamemode.Server.Extensions; /** * @overview Life of German Reallife - Managers LoadManager (LoadManager.cs) @@ -15,10 +16,6 @@ namespace reallife_gamemode.Server.Managers { public class LoadManager : Script { - public static List GotoPointList = new List(); - public static List FactionVehicleList = new List(); - public static List ShopVehicleList = new List(); - public static List UserVehicleList = new List(); [ServerEvent(Event.ResourceStart)] public void OnResourceStart() @@ -33,13 +30,6 @@ namespace reallife_gamemode.Server.Managers b.Color, b.Name, b.Alpha, b.DrawDistance, b.ShortRange, (short) b.Rotation, b.Dimension); } } - foreach (GotoPoint g in loadData.GotoPoints) - { - if (g.Active == true) - { - GotoPointList.Add(g); - } - } foreach(ServerVehicle veh in loadData.ServerVehicles) { @@ -52,24 +42,13 @@ namespace reallife_gamemode.Server.Managers 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); } - if (veh is FactionVehicle factionV) - { - current.SetData("factionId", factionV.FactionId); - FactionVehicleList.Add(current); - } - if (veh is ShopVehicle shopV) + else if (veh is ShopVehicle shopV) { string displayName = NAPI.Vehicle.GetVehicleDisplayName(shopV.Model); - ShopVehicleList.Add(current); NAPI.Vehicle.SetVehicleEngineHealth(current, 0); - var tLabel = NAPI.TextLabel.CreateTextLabel(displayName + " | " + shopV.Price + "~g~$", new Vector3(shopV.PositionX, shopV.PositionY, shopV.PositionZ + 1.5), 10, 1, 0, new Color(255, 255, 255), false); - current.SetData("shopVehicleId", shopV.Id); + var tLabel = NAPI.TextLabel.CreateTextLabel(displayName + " | " + shopV.Price.ToMoneyString(), new Vector3(shopV.PositionX, shopV.PositionY, shopV.PositionZ + 1.5), 10, 1, 0, new Color(255, 255, 255), false); tLabel.AttachTo(current, "chassis", new Vector3(0, 0, 1.5), new Vector3(0, 0, 0)); } - if (veh is UserVehicle userV) - { - UserVehicleList.Add(current); - } } diff --git a/Server/Managers/SaveManager.cs b/Server/Managers/SaveManager.cs index b6576923..89e845a3 100644 --- a/Server/Managers/SaveManager.cs +++ b/Server/Managers/SaveManager.cs @@ -1,7 +1,9 @@ using GTANetworkAPI; +using reallife_gamemode.Model; using reallife_gamemode.Server.Entities; using reallife_gamemode.Server.Extensions; using reallife_gamemode.Server.Managers; +using reallife_gamemode.Server.Saves; using System; using System.Collections.Generic; using System.Linq; @@ -30,9 +32,9 @@ namespace reallife_gamemode.Server.Events NAPI.Blip.CreateBlip(uint.Parse(blipSprite), new Vector3(x,y,z), scale, color, name, alpha, drawDistance, shortRange, short.Parse(blipRotation), dimension); - using (var saveData = new Model.DatabaseContext()) + using (var saveData = new DatabaseContext()) { - var dataSet = new Server.Saves.SavedBlip + var dataSet = new SavedBlip { Sprite = sprite, PositionX = x, @@ -53,12 +55,12 @@ namespace reallife_gamemode.Server.Events } } - public static void SaveVehicleData(VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, - string vehicleNumberPlate, byte vehiclePrimaryColor, byte vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, byte vehicleDimension) + public static Vehicle SaveVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, + string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked) { - using (var saveData = new Model.DatabaseContext()) + using (var saveData = new DatabaseContext()) { - var dataSet = new Server.Saves.SavedVehicle + var dataSet = new SavedVehicle { Model = vehicleModel, PositionX = vehiclePosition.X, @@ -71,16 +73,19 @@ namespace reallife_gamemode.Server.Events Locked = vehicleLocked, Active = true }; - saveData.ServerVehicles.Add(dataSet); + saveData.Vehicles.Add(dataSet); saveData.SaveChanges(); + + return dataSet.Spawn(veh); } } - public static void SaveFactionVehicleData(VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, - string vehicleNumberPlate, byte vehiclePrimaryColor, byte vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, byte vehicleDimension, int? factionId) + public static Vehicle SaveFactionVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, + string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int? factionId) { - using (var saveData = new Model.DatabaseContext()) + using (var saveData = new DatabaseContext()) { - var dataSet = new Entities.FactionVehicle + Console.WriteLine("Adding Faction Vehicle Secondary Color: " + vehicleSecondaryColor); + var dataSet = new FactionVehicle { Model = vehicleModel, FactionId = factionId, @@ -94,16 +99,18 @@ namespace reallife_gamemode.Server.Events Locked = vehicleLocked, Active = true }; - saveData.ServerVehicles.Add(dataSet); + saveData.FactionVehicles.Add(dataSet); saveData.SaveChanges(); + + return dataSet.Spawn(veh); } } - public static void SaveShopVehicleData(VehicleHash vehicleModel, string vehicleModelName, Vector3 vehiclePosition, float vehicleHeading, - string vehicleNumberPlate, byte vehiclePrimaryColor, byte vehicleSecondaryColor, byte vehicleDimension, int? factionId) + public static Vehicle SaveShopVehicleData(Vehicle veh, VehicleHash vehicleModel, string vehicleModelName, Vector3 vehiclePosition, float vehicleHeading, + string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor) { - using (var saveData = new Model.DatabaseContext()) + using (var saveData = new DatabaseContext()) { - var dataSet = new Entities.ShopVehicle + var dataSet = new ShopVehicle { Model = vehicleModel, PositionX = vehiclePosition.X, @@ -115,8 +122,10 @@ namespace reallife_gamemode.Server.Events SecondaryColor = vehicleSecondaryColor, Active = true }; - saveData.ServerVehicles.Add(dataSet); + saveData.ShopVehicles.Add(dataSet); saveData.SaveChanges(); + + return dataSet.Spawn(veh); } } diff --git a/Server/Managers/TuningManager.cs b/Server/Managers/TuningManager.cs index 7d209b9b..5e5c6259 100644 --- a/Server/Managers/TuningManager.cs +++ b/Server/Managers/TuningManager.cs @@ -1,4 +1,6 @@ using GTANetworkAPI; +using reallife_gamemode.Server.Entities; +using reallife_gamemode.Server.Extensions; using System.Collections.Generic; namespace reallife_gamemode.Server.Managers @@ -19,7 +21,12 @@ namespace reallife_gamemode.Server.Managers { if(c.IsInVehicle) { - c.TriggerEvent("showTuningInfo", c.GetData("duty")); + Vehicle v = c.Vehicle; + if(v.GetServerVehicle() is FactionVehicle fV && fV.GetFaction().StateOwned) + { + return; + } + c.TriggerEvent("showTuningInfo"); } }; diff --git a/Server/Managers/VehicleManager.cs b/Server/Managers/VehicleManager.cs index b5f26990..0fce5231 100644 --- a/Server/Managers/VehicleManager.cs +++ b/Server/Managers/VehicleManager.cs @@ -25,6 +25,21 @@ namespace reallife_gamemode.Server.Managers _serverVehicles[serverVehicle.Id] = vehicle.Handle; } + internal static void DeleteVehicle(Vehicle veh) + { + ServerVehicle sVeh; + if ((sVeh = GetServerVehicleFromVehicle(veh)) != null) + { + _serverVehicles.Remove(sVeh.Id); + } + + veh.Delete(); + } + + public static Vehicle GetVehicleFromHandle(NetHandle handle) + { + return NAPI.Pools.GetAllVehicles().Find(v => v.Handle == handle); + } public static Vehicle GetVehicleFromServerVehicle(ServerVehicle serverVehicle) { @@ -34,7 +49,7 @@ namespace reallife_gamemode.Server.Managers return null; } - return NAPI.Pools.GetAllVehicles().Find(v => v.Handle == _serverVehicles[serverVehicle.Id]); + return GetVehicleFromHandle(_serverVehicles[serverVehicle.Id]); } public static ServerVehicle GetServerVehicleFromVehicle(Vehicle veh)