diff --git a/Model/DatabaseContext.cs b/Model/DatabaseContext.cs index 6b60c4b8..9849697f 100644 --- a/Model/DatabaseContext.cs +++ b/Model/DatabaseContext.cs @@ -37,6 +37,7 @@ namespace reallife_gamemode.Model } public DbSet Users { get; set; } + public DbSet UserVehicles { get; set; } public DbSet Blips { get; set; } public DbSet Markers { get; set; } diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index 9f558bee..b1894b4d 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -1,11 +1,15 @@ using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; using System.Collections.Generic; +using System.Diagnostics; using System.Text; using GTANetworkAPI; using reallife_gamemode.Server.Events; using reallife_gamemode.Server.Extensions; using reallife_gamemode.Server.Services; using reallife_gamemode.Server.Util; +using reallife_gamemode.Model; /** * @overview Life of German Reallife - Admin Commands (Admin.cs) @@ -277,5 +281,99 @@ namespace reallife_gamemode.Server.Commands } } + //TEST COMMAND + [Command("own")] + public void CmdAdminOwn(Client player) + { + if (ClientExtension.IsLoggedIn(player) == false) + { + ChatService.PlayerNotLoggedIn(player); + return; + } + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (player.IsInVehicle) + { + Vehicle playerVehicle = player.Vehicle; + using (var saveVehicle = new Model.DatabaseContext()) + { + var dataSet = new Entities.UserVehicle + { + UserId = ClientExtension.GetUser(player).Id, + Model = (VehicleHash) playerVehicle.Model, + PositionX = playerVehicle.Position.X, + PositionY = playerVehicle.Position.Y, + PositionZ = playerVehicle.Position.Z, + Heading = playerVehicle.Heading, + NumberPlate = playerVehicle.NumberPlate, + PrimaryColor = Convert.ToByte(playerVehicle.PrimaryColor), + SecondaryColor = Convert.ToByte(playerVehicle.SecondaryColor), + Locked = playerVehicle.Locked, + Engine = playerVehicle.EngineStatus, + Dimension = Convert.ToByte(playerVehicle.Dimension), + }; + saveVehicle.UserVehicles.Add(dataSet); + saveVehicle.SaveChanges(); + } + + } + else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!"); + + } + //TEST COMMAND + [Command("myvehicles")] + public void CmdAdminMyVehicles(Client player) + { + if (ClientExtension.IsLoggedIn(player) == false) + { + ChatService.PlayerNotLoggedIn(player); + return; + } + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + player.SendChatMessage("Deine Fahrzeuge: "); + using (var loadData = new DatabaseContext()) + { + foreach (Entities.UserVehicle v in loadData.UserVehicles) + { + if (v.UserId == ClientExtension.GetUser(player).Id) + { + player.SendChatMessage("~b~" + NAPI.Vehicle.GetVehicleDisplayName(v.Model)); + } + } + } + } + /* + [Command("restart")] + public void CmdAdminRestart(Client player) + { + if (ClientExtension.IsLoggedIn(player) == false) + { + ChatService.PlayerNotLoggedIn(player); + return; + } + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + var users = NAPI.Pools.GetAllPlayers(); + + foreach(Client user in users) + { + user.SendChatMessage("~r~Server startet neu.~s~ Bitte verbinde dich über ~y~F1~s~ neu."); + user.Kick(); + } + + NAPI.Resource.StopResource("reallife-gamemode"); + }*/ } } diff --git a/Server/Entities/User.cs b/Server/Entities/User.cs index 5f8532e1..f119e2fa 100644 --- a/Server/Entities/User.cs +++ b/Server/Entities/User.cs @@ -1,4 +1,5 @@ -using reallife_gamemode.Server.Util; +using GTANetworkAPI; +using reallife_gamemode.Server.Util; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -31,6 +32,9 @@ namespace reallife_gamemode.Server.Entities [StringLength(64)] public string Email { get; set; } public AdminLevel AdminLevel { get; set; } + public float PositionX { get; set; } + public float PositionY { get; set; } + public float PositionZ { get; set; } public bool IsAdmin(AdminLevel level) => AdminLevel >= level; } diff --git a/Server/Entities/UserVehicle.cs b/Server/Entities/UserVehicle.cs new file mode 100644 index 00000000..66daec9e --- /dev/null +++ b/Server/Entities/UserVehicle.cs @@ -0,0 +1,38 @@ +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 UserVehicle (UserVehicle.cs) +* @author VegaZ, hydrant +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Entities +{ + public class UserVehicle + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + [ForeignKey("User")] + public int UserId { 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; } + } +} diff --git a/Server/Events/Disconnect.cs b/Server/Events/Disconnect.cs index defec9b7..b4696652 100644 --- a/Server/Events/Disconnect.cs +++ b/Server/Events/Disconnect.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; using GTANetworkAPI; @@ -11,13 +12,34 @@ using GTANetworkAPI; namespace reallife_gamemode.Server.Events { - class Disconnect : Script + public class Disconnect : Script { [ServerEvent(Event.PlayerDisconnected)] - public void OnPlayerDisconnected(Client player) + public void OnPlayerDisconnected(Client player, DisconnectionType type, string reason) { + if (type == DisconnectionType.Left) + { + NAPI.Util.ConsoleOutput(player.Name + " left"); + } + if (type == DisconnectionType.Kicked) + { + NAPI.Util.ConsoleOutput(player.Name + " kicked"); + } + if (type == DisconnectionType.Timeout) + { + NAPI.Util.ConsoleOutput(player.Name + " Timeoutet"); + } + /* + using (var saveUser = new Model.DatabaseContext()) + { + 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(); + }*/ player.SetData("isLoggedIn", false); } - } } \ No newline at end of file diff --git a/Server/Events/Login.cs b/Server/Events/Login.cs index a6534280..874285ff 100644 --- a/Server/Events/Login.cs +++ b/Server/Events/Login.cs @@ -44,6 +44,7 @@ namespace reallife_gamemode.Server.Events player.SetData("isLoggedIn", true); player.TriggerEvent("draw"); + player.Position = new Vector3(user.PositionX, user.PositionY, user.PositionZ); } } } diff --git a/Server/Events/ResourceStop.cs b/Server/Events/ResourceStop.cs new file mode 100644 index 00000000..ce98d989 --- /dev/null +++ b/Server/Events/ResourceStop.cs @@ -0,0 +1,38 @@ +using GTANetworkAPI; +using GTANetworkMethods; +using reallife_gamemode.Server.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +/** +* @overview Life of German Reallife - Event ResourceStop (ResourceStop.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Events +{ + public class ResourceStop : Script + { + [ServerEvent(Event.ResourceStop)] + public void OnResourceStop() + { + var users = NAPI.Pools.GetAllPlayers(); + + foreach(Client user in users) + { + using (var saveUsers = new Model.DatabaseContext()) + { + var saveUser = saveUsers.Users.SingleOrDefault(u => u.Name == user.Name); + + saveUser.PositionX = user.Position.X; + saveUser.PositionY = user.Position.Y; + saveUser.PositionZ = user.Position.Z; + saveUsers.SaveChanges(); + } + } + } + } +} diff --git a/Server/Managers/LoadManager.cs b/Server/Managers/LoadManager.cs index 4384c916..0ca49ad9 100644 --- a/Server/Managers/LoadManager.cs +++ b/Server/Managers/LoadManager.cs @@ -34,7 +34,7 @@ namespace reallife_gamemode.Server.Managers { if (v.Active == true) { - NAPI.Vehicle.CreateVehicle((uint)v.Model, new Vector3(v.PositionX, v.PositionY, v.PositionZ), v.Heading, (int)(v.PrimaryColor), + 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); } }