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 853018f2..e7ac6c70 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -56,7 +56,6 @@ namespace reallife_gamemode.Server.Commands if (!uint.TryParse(hash, out uint vehHash)) { - Debug.WriteLine("couldnt parse"); if (!Enum.TryParse(hash, true, out VehicleHash realHash)) { player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug existiert nicht."); @@ -567,31 +566,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 +586,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..d923476f 100644 --- a/Server/Events/Disconnect.cs +++ b/Server/Events/Disconnect.cs @@ -35,12 +35,19 @@ namespace reallife_gamemode.Server.Events using (var saveUser = new Model.DatabaseContext()) { - var user = saveUser.Users.SingleOrDefault(u => u.Name == player.Name); + var user = player.GetUser(saveUser); - 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..293d598f 100644 --- a/Server/Events/Login.cs +++ b/Server/Events/Login.cs @@ -42,12 +42,12 @@ namespace reallife_gamemode.Server.Events else { player.TriggerEvent("loginSuccess"); - NAPI.Player.SpawnPlayer(player, Main.DEFAULT_SPAWN_POSITION, Main.DEFAULT_SPAWN_HEADING); + NAPI.Player.SpawnPlayer(player, new Vector3(user.PositionX, user.PositionY, user.PositionZ), 0); 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/Managers/LoadManager.cs b/Server/Managers/LoadManager.cs index 0ca49ad9..1686b3d9 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,7 +28,6 @@ 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) { if (v.Active == true) @@ -38,6 +36,14 @@ namespace reallife_gamemode.Server.Managers v.SecondaryColor, v.NumberPlate, v.Alpha, v.Locked, v.Engine = false, v.Dimension); } } + foreach (FactionVehicle v in loadData.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); + } + } } } }