From bb3620e7c0d974a25814609e9fac8a1d24cabea1 Mon Sep 17 00:00:00 2001 From: Lennart Kampshoff Date: Wed, 19 Sep 2018 12:25:49 +0200 Subject: [PATCH] Add Admin Check, Add AdminLevel Column in database --- Main.cs | 6 +++++ Server/Commands/Admin.cs | 46 ++++++++++++++++++-------------- Server/Entities/User.cs | 6 ++++- Server/Services/ChatService.cs | 5 ++++ Server/Services/ClientService.cs | 36 +++++++++++++++++++++++++ 5 files changed, 78 insertions(+), 21 deletions(-) create mode 100644 Server/Services/ClientService.cs diff --git a/Main.cs b/Main.cs index fb113113..ab154131 100644 --- a/Main.cs +++ b/Main.cs @@ -5,6 +5,12 @@ namespace reallife_gamemode { public class Main : Script { + /** + * @overview Life of German Reallife - Main Class (Main.cs) + * @author VegaZ, hydrant + * @copyright (c) 2008 - 2018 Life of German + */ + [ServerEvent(Event.ResourceStart)] public void OnResourceStart() { diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index 733d24b9..2ac3158c 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -2,32 +2,24 @@ using System.Collections.Generic; using System.Text; using GTANetworkAPI; +using reallife_gamemode.Server.Extensions; using reallife_gamemode.Server.Services; +using reallife_gamemode.Server.Util; namespace reallife_gamemode.Server.Commands { public class Admin : Script { /** - * @overview Life of German Reallife - Admin.cs + * @overview Life of German Reallife - Admin Commands (Admin.cs) * @author VegaZ, hydrant * @copyright (c) 2008 - 2018 Life of German */ [Command("o", "~m~Benutzung: ~s~/o [Nachricht]", GreedyArg = true)] - public void CmdAdminOChat(Client player, string message) + public void CmdAdminO(Client player, string message) { - /* - * Alternative: - * Account playerAccount = AccountManager.GetAccount(player); - * if(!playerAccount.IsAdmin(adminLevel)) - * { - * ChatService.NotAuthorized(player); - * return; - * } - */ - int playerAdminLevel = 1; - if(playerAdminLevel < /* Benötigtes Level */ 1) + if (!player.GetUser().IsAdmin(AdminLevel.SUPPORTER)) { ChatService.NotAuthorized(player); return; @@ -62,9 +54,7 @@ namespace reallife_gamemode.Server.Commands [Command("fixveh")] public void CmdAdminFixveh(Client player) { - // Alternative: siehe O Chat - int playerAdminLevel = 1; - if (playerAdminLevel < /* Benötigtes Level */ 1) + if (!player.GetUser().IsAdmin(AdminLevel.SUPPORTER)) { ChatService.NotAuthorized(player); return; @@ -95,12 +85,28 @@ namespace reallife_gamemode.Server.Commands return; } - /* - * TODO: Checken, ob das Fahrzeug in einem System genutzt wird (Fraktions-Autos / Spieler-Auto) - * Wenn Ja: Abbrechen und mitteilen, dass man den System-spezifischen Befehl zu nutzen hat - */ + /* TODO: Checken, ob das Fahrzeug in einem System genutzt wird (Fraktions-Autos / Spieler-Auto) + * Wenn Ja: Abbrechen und mitteilen, dass man den System-spezifischen Befehl zu nutzen hat */ player.Vehicle.Delete(); } + + [Command("goto", "~m~Benutzung:~s~ /goto [Name]")] + public void CmdAdminGoto(Client player, string name) + { + if (!player.GetUser().IsAdmin(AdminLevel.SUPPORTER)) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByName(name); + + if(target == null) + { + ChatService.PlayerNotFound(player); + return; + } + } } } diff --git a/Server/Entities/User.cs b/Server/Entities/User.cs index 2cea4e39..133ab2d1 100644 --- a/Server/Entities/User.cs +++ b/Server/Entities/User.cs @@ -1,4 +1,5 @@ -using System; +using reallife_gamemode.Server.Util; +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; @@ -22,5 +23,8 @@ namespace reallife_gamemode.Server.Entities [EmailAddress] [StringLength(64)] public string Email { get; set; } + public AdminLevel AdminLevel { get; set; } + + public bool IsAdmin(AdminLevel level) => AdminLevel >= level; } } diff --git a/Server/Services/ChatService.cs b/Server/Services/ChatService.cs index 18fcdf2e..9b22be73 100644 --- a/Server/Services/ChatService.cs +++ b/Server/Services/ChatService.cs @@ -11,5 +11,10 @@ namespace reallife_gamemode.Server.Services { player.SendChatMessage("~r~[FEHLER]~s~ Du kannst diesen Befehl nicht ausführen."); } + + internal static void PlayerNotFound(Client player) + { + player.SendChatMessage("~r~[FEHLER]~s~ Der Spieler wurde nicht gefunden."); + } } } diff --git a/Server/Services/ClientService.cs b/Server/Services/ClientService.cs new file mode 100644 index 00000000..d60500f6 --- /dev/null +++ b/Server/Services/ClientService.cs @@ -0,0 +1,36 @@ +using GTANetworkAPI; +using System; +using System.Collections.Generic; +using System.Text; + +namespace reallife_gamemode.Server.Services +{ + class ClientService + { + /** + * @overview Life of German Reallife - Client Service (ClientService.cs) + * @author hydrant + * @copyright (c) 2008 - 2018 Life of German + */ + + public static Client GetClientByName(string name) + { + /* Funktionsaufbau: Prüft erst, ob ein Spieler mit exakt diesem Namen online ist + * Wenn Ja: Wird dieser zurückgegeben + * Wenn Nein: Wird der erste Spieler zurückgegeben, dessen Namen mit dem eingegebenen Parameter übereinstimmt + * Gibt "null" zurück, falls kein Client gefunden wurde + */ + Client toReturn = null; + + List playerList = NAPI.Pools.GetAllPlayers(); + toReturn = playerList.Find(p => p.Name == name); + + if(toReturn == null) + { + toReturn = playerList.Find(p => p.Name.StartsWith(name)); + } + + return toReturn; + } + } +}