From 40471792d177742d9d84f70e9150d76c963c6a0d Mon Sep 17 00:00:00 2001 From: Lennart Kampshoff Date: Sat, 22 Sep 2018 16:48:03 +0200 Subject: [PATCH] Continued faction system --- Main.cs | 1 + Model/DatabaseContext.cs | 2 +- Server/Commands/Faction.cs | 41 ++++++++++++++++++++++++++++ Server/Entities/Faction.cs | 6 ++++ Server/Extensions/ClientExtension.cs | 7 ++++- Server/Services/ChatService.cs | 21 +++++++++++++- 6 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 Server/Commands/Faction.cs diff --git a/Main.cs b/Main.cs index 3f6166a1..86b1e5f8 100644 --- a/Main.cs +++ b/Main.cs @@ -25,6 +25,7 @@ namespace reallife_gamemode using (var context = new DatabaseContext()) { + context.Factions.FirstOrDefault(); context.Users.FirstOrDefault(); context.SaveChanges(); } diff --git a/Model/DatabaseContext.cs b/Model/DatabaseContext.cs index 88720957..c64e4582 100644 --- a/Model/DatabaseContext.cs +++ b/Model/DatabaseContext.cs @@ -34,7 +34,7 @@ namespace reallife_gamemode.Model base.OnModelCreating(modelBuilder); } - public DbSet Users { get; set; } public DbSet Factions { get; set; } + public DbSet Users { get; set; } } } diff --git a/Server/Commands/Faction.cs b/Server/Commands/Faction.cs new file mode 100644 index 00000000..91e46210 --- /dev/null +++ b/Server/Commands/Faction.cs @@ -0,0 +1,41 @@ +using GTANetworkAPI; +using reallife_gamemode.Server.Entities; +using reallife_gamemode.Server.Extensions; +using reallife_gamemode.Server.Services; +using System; +using System.Collections.Generic; +using System.Text; + +/** +* @overview Life of German Reallife - Faction Commands (Faction.cs) +* @author VegaZ, hydrant +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Commands +{ + class Faction : Script + { + [Command("f", "~m~Benutzung: ~s~/f [Nachricht]", GreedyArg = true)] + public void CmdFactionF(Client player, string message) + { + User u = player.GetUser(); + + if(u == null) + { + NAPI.Util.ConsoleOutput("u is null"); + return; + } + Entities.Faction f = u.Faction; + if(f == null) + { + NAPI.Util.ConsoleOutput("f is null"); + return; + } + + string broadcastMessage = "** " + player.Name + ": " + message + " )) **"; + + ChatService.BroadcastFaction(broadcastMessage, player.GetFaction()); + } + } +} diff --git a/Server/Entities/Faction.cs b/Server/Entities/Faction.cs index 06f3dc3c..32820d5d 100644 --- a/Server/Entities/Faction.cs +++ b/Server/Entities/Faction.cs @@ -4,6 +4,12 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Text; +/** +* @overview Life of German Reallife - Entities Faction (Faction.cs) +* @author VegaZ, hydrant +* @copyright (c) 2008 - 2018 Life of German +*/ + namespace reallife_gamemode.Server.Entities { public class Faction diff --git a/Server/Extensions/ClientExtension.cs b/Server/Extensions/ClientExtension.cs index 38aed1ac..bdc0dda6 100644 --- a/Server/Extensions/ClientExtension.cs +++ b/Server/Extensions/ClientExtension.cs @@ -8,7 +8,7 @@ using System.Text; /** * @overview Life of German Reallife - Client Extension (ClientExtension.cs) -* @author VegaZ, hydrant +* @author hydrant * @copyright (c) 2008 - 2018 Life of German */ @@ -23,5 +23,10 @@ namespace reallife_gamemode.Server.Extensions return dbContext.Users.FirstOrDefault(u => u.Name == client.Name); } } + + public static Faction GetFaction(this Client client) + { + return client.GetUser()?.Faction ?? null; + } } } diff --git a/Server/Services/ChatService.cs b/Server/Services/ChatService.cs index 0ccdfe1f..12e75864 100644 --- a/Server/Services/ChatService.cs +++ b/Server/Services/ChatService.cs @@ -1,4 +1,6 @@ using GTANetworkAPI; +using reallife_gamemode.Model; +using reallife_gamemode.Server.Entities; using System; using System.Collections.Generic; using System.Text; @@ -18,9 +20,26 @@ namespace reallife_gamemode.Server.Services player.SendChatMessage("~r~[FEHLER]~s~ Du kannst diesen Befehl nicht ausführen."); } - internal static void PlayerNotFound(Client player) + public static void PlayerNotFound(Client player) { player.SendChatMessage("~r~[FEHLER]~s~ Der Spieler wurde nicht gefunden."); } + + public static void BroadcastFaction(string message, List factions) + { + using(var dbCon = new DatabaseContext()) + { + foreach(User u in dbCon.Users) + { + Client c = ClientService.GetClientByName(u.Name); + if (c != null && factions.Contains(u.Faction)) c.SendChatMessage(message); + } + } + } + + public static void BroadcastFaction(string message, Faction faction) + { + BroadcastFaction(message, new List { faction }); + } } }