From 5d1983f97a2e66f4a646be0207c927d518ce4597 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sun, 7 Oct 2018 20:17:06 +0200 Subject: [PATCH] Feature/save system --- Client/Login/login.html | 1 + Client/Save/main.js | 4 +- Client/Save/save.html | 1 + Client/index.js | 6 +++ Model/DatabaseContext.cs | 4 ++ Server/Commands/Admin.cs | 63 ++++++++++++++++----------- Server/Entities/FactionVehicles.cs | 41 +++++++++++++++++ Server/Events/Disconnect.cs | 15 +++++-- Server/Events/Login.cs | 2 +- Server/Events/SaveData.cs | 26 ++++++++++- Server/Extensions/VehicleExtension.cs | 34 +++++++++++++++ Server/Managers/LoadManager.cs | 20 +++++++-- build.csproj | 23 ---------- 13 files changed, 179 insertions(+), 61 deletions(-) create mode 100644 Server/Entities/FactionVehicles.cs create mode 100644 Server/Extensions/VehicleExtension.cs delete mode 100644 build.csproj diff --git a/Client/Login/login.html b/Client/Login/login.html index 5306cfdd..9b848994 100644 --- a/Client/Login/login.html +++ b/Client/Login/login.html @@ -7,6 +7,7 @@ + diff --git a/Client/Save/main.js b/Client/Save/main.js index ab26a4b6..b40e649f 100644 --- a/Client/Save/main.js +++ b/Client/Save/main.js @@ -9,9 +9,7 @@ mp.events.add('saveBlip', () => { saveBrowser = mp.browsers.new('package://Save/save.html'); mp.gui.chat.activate(false); - setTimeout(() => { - mp.gui.cursor.visible = true - }, 500); + mp.gui.cursor.show(true, true); }); mp.events.add('saveData', (blipSprite, blipName, blipScale, blipColor, blipAlpha, blipDrawDistance, blipShortRange, blipRotation, blipDimension) => { diff --git a/Client/Save/save.html b/Client/Save/save.html index 7f0538b7..b6122bcb 100644 --- a/Client/Save/save.html +++ b/Client/Save/save.html @@ -7,6 +7,7 @@ + diff --git a/Client/index.js b/Client/index.js index a0b043e1..7a6e6771 100644 --- a/Client/index.js +++ b/Client/index.js @@ -4,8 +4,14 @@ * @copyright (c) 2008 - 2018 Life of German */ + +require('./Login/main.js'); +require('./Save/main.js'); +require('./Save/save.js'); + require('./Gui/infobox.js'); require('./Login/main.js'); require('./Save/main.js'); require('./FactionManagement/main.js'); + diff --git a/Model/DatabaseContext.cs b/Model/DatabaseContext.cs index f3f1e4d9..f4b77eb8 100644 --- a/Model/DatabaseContext.cs +++ b/Model/DatabaseContext.cs @@ -36,12 +36,16 @@ namespace reallife_gamemode.Model base.OnModelCreating(modelBuilder); } + //User public DbSet Users { get; set; } public DbSet UserVehicles { get; set; } public DbSet BankAccounts { get; set; } public DbSet Bans { get; set; } + + //Faction public DbSet Factions { get; set; } public DbSet FactionRanks { get; set; } + public DbSet FactionVehicles { get; set; } //Logs //public DbSet BanLogs { get; set; } diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index d7e80d55..c5d418e9 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -567,31 +567,6 @@ namespace reallife_gamemode.Server.Commands } } - [Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip, ~r~Marker, Ped, Pickup, TextLabel, ~g~Vehicle")] - public void CmdAdminSave(Client player, string typ) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - switch (typ.ToLower()) - { - case "blip": - player.TriggerEvent("saveBlip"); - break; - case "vehicle": - if (player.IsInVehicle) - { - Vehicle vehicle = player.Vehicle; - SaveData.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)); - } - else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!"); - break; - } - } - [Command("ban", "~m~Benutzung: ~s~/ban [User] [Zeit in Minuten(0 für Permanent)] [Grund] ", GreedyArg = true)] public void CmdAdminBan(Client admin, string user, int mins, string reason) { @@ -612,6 +587,44 @@ namespace reallife_gamemode.Server.Commands target.GetUser().BanPlayer(admin, reason, mins); } + [Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip, ~r~Marker, Ped, Pickup, TextLabel, ~g~Vehicle, FVehicle")] + public void CmdAdminSave(Client player, string typ) + { + switch (typ) + { + case "Blip": + player.TriggerEvent("saveBlip"); + break; + case "FVehicle": + if (player.IsInVehicle) + { + if(player.GetUser().FactionId == null) + { + player.SendChatMessage("~m~Du bist in keiner Fraktion! Invite dich erst mit ~y~/ainvite"); + return; + } + else + { + Vehicle vehicle = player.Vehicle; + SaveData.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); + } + } + else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!"); + break; + case "Vehicle": + if (player.IsInVehicle) + { + Vehicle vehicle = player.Vehicle; + SaveData.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)); + } + else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!"); + break; + + } + } + [Command("unban", "~m~Benutzung: ~s~/unban [Name] ", GreedyArg = true)] public void CmdAdminUnban(Client admin, string userName) { diff --git a/Server/Entities/FactionVehicles.cs b/Server/Entities/FactionVehicles.cs new file mode 100644 index 00000000..3e67d3cc --- /dev/null +++ b/Server/Entities/FactionVehicles.cs @@ -0,0 +1,41 @@ +using GTANetworkAPI; +using reallife_gamemode.Server.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +/** +* @overview Life of German Reallife - Entities FactionVehicles (FactionVehicle.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Entities +{ + public class FactionVehicle + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + [ForeignKey("Faction")] + public int? FactionId { get; set; } + public Faction Faction { get; set; } + + public VehicleHash Model { get; set; } + public float PositionX { get; set; } + public float PositionY { get; set; } + public float PositionZ { get; set; } + public float Heading { get; set; } + [StringLength(8)] + public string NumberPlate { get; set; } + public byte Alpha { get; set; } + public byte PrimaryColor { get; set; } + public byte SecondaryColor { get; set; } + public bool Locked { get; set; } + public bool Engine { get; set; } + public byte Dimension { get; set; } + public bool Active { get; set; } + } +} diff --git a/Server/Events/Disconnect.cs b/Server/Events/Disconnect.cs index bbcd959f..e740aec5 100644 --- a/Server/Events/Disconnect.cs +++ b/Server/Events/Disconnect.cs @@ -37,10 +37,17 @@ namespace reallife_gamemode.Server.Events { var user = saveUser.Users.SingleOrDefault(u => u.Name == player.Name); - user.PositionX = player.Position.X; - user.PositionY = player.Position.Y; - user.PositionZ = player.Position.Z; - saveUser.SaveChanges(); + if(user == null) + { + return; + } + else + { + user.PositionX = player.Position.X; + user.PositionY = player.Position.Y; + user.PositionZ = player.Position.Z; + saveUser.SaveChanges(); + } } player.SetData("isLoggedIn", false); } diff --git a/Server/Events/Login.cs b/Server/Events/Login.cs index 032b9b55..55aedcbb 100644 --- a/Server/Events/Login.cs +++ b/Server/Events/Login.cs @@ -47,7 +47,7 @@ namespace reallife_gamemode.Server.Events player.SetData("isLoggedIn", true); player.SetData("spec", true); player.TriggerEvent("draw", player.Name, player.Handle.Value); - player.Position = new Vector3(user.PositionX, user.PositionY, user.PositionZ); + //player.Position = new Vector3(user.PositionX, user.PositionY, user.PositionZ); } } } diff --git a/Server/Events/SaveData.cs b/Server/Events/SaveData.cs index 01d32054..667dc6b9 100644 --- a/Server/Events/SaveData.cs +++ b/Server/Events/SaveData.cs @@ -73,6 +73,30 @@ namespace reallife_gamemode.Server.Events saveData.SaveChanges(); } } - + public static void SaveFactionVehicleData(VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, + string vehicleNumberPlate, byte vehiclePrimaryColor, byte vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, byte vehicleDimension, int? factionId) + { + using (var saveData = new Model.DatabaseContext()) + { + var dataSet = new Entities.FactionVehicle + { + Model = vehicleModel, + FactionId = factionId, + PositionX = vehiclePosition.X, + PositionY = vehiclePosition.Y, + PositionZ = vehiclePosition.Z, + Heading = vehicleHeading, + NumberPlate = vehicleNumberPlate, + PrimaryColor = vehiclePrimaryColor, + SecondaryColor = vehicleSecondaryColor, + Locked = vehicleLocked, + Engine = vehicleEngine, + Dimension = vehicleDimension, + Active = true + }; + saveData.FactionVehicles.Add(dataSet); + saveData.SaveChanges(); + } + } } } diff --git a/Server/Extensions/VehicleExtension.cs b/Server/Extensions/VehicleExtension.cs new file mode 100644 index 00000000..1901eecb --- /dev/null +++ b/Server/Extensions/VehicleExtension.cs @@ -0,0 +1,34 @@ +using GTANetworkAPI; +using Microsoft.EntityFrameworkCore; +using reallife_gamemode.Model; +using reallife_gamemode.Server.Entities; +using reallife_gamemode.Server.Managers; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +/** +* @overview Life of German Reallife - Vehicle Extension (VehicleExtension.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Extensions +{ + public class VehicleExtension : Script + { + public static bool IsFactionVehicle(Vehicle vehicle) + { + if (LoadManager.FactionVehiclesList.Contains(vehicle) == true) + { + return true; + } + else return false; + } + public static int GetFaction(Vehicle vehicle) + { + return (FactionVehicle)vehicle.FactionId; + } + } +} diff --git a/Server/Managers/LoadManager.cs b/Server/Managers/LoadManager.cs index 0ca49ad9..83e05330 100644 --- a/Server/Managers/LoadManager.cs +++ b/Server/Managers/LoadManager.cs @@ -17,10 +17,9 @@ namespace reallife_gamemode.Server.Managers { [ServerEvent(Event.ResourceStart)] public void OnResourceStart() - { + { using (var loadData = new DatabaseContext()) { - //LOAD ALL BLIPS foreach (Saves.SavedBlip b in loadData.Blips) { if(b.Active == true) @@ -29,8 +28,10 @@ namespace reallife_gamemode.Server.Managers b.Color, b.Name, b.Alpha, b.DrawDistance, b.ShortRange, (short) b.Rotation, b.Dimension); } } - //LOAD ALL VEHICLES - foreach (Saves.SavedVehicle v in loadData.Vehicles) + } + using (var loadVehicles = new DatabaseContext()) + { + foreach (Saves.SavedVehicle v in loadVehicles.Vehicles) { if (v.Active == true) { @@ -39,6 +40,17 @@ namespace reallife_gamemode.Server.Managers } } } + using (var loadFVehicles = new DatabaseContext()) + { + foreach (FactionVehicle v in loadFVehicles.FactionVehicles) + { + if (v.Active == true) + { + NAPI.Vehicle.CreateVehicle((uint)v.Model, new Vector3(v.PositionX, v.PositionY, v.PositionZ), v.Heading, (v.PrimaryColor), + v.SecondaryColor, v.NumberPlate, v.Alpha, v.Locked, v.Engine = false, v.Dimension); + } + } + } } } } diff --git a/build.csproj b/build.csproj deleted file mode 100644 index 3d263cde..00000000 --- a/build.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - netcoreapp2.0 - reallife_gamemode - true - true - true - - - - Always - - - - - - - - - - - - \ No newline at end of file