From 7b73331924decf9fe16986858eb1189530c9ba6c Mon Sep 17 00:00:00 2001 From: INSANEMODE Date: Thu, 19 Nov 2020 09:36:50 -0600 Subject: [PATCH 1/3] support using Rcon for changing clan tag. --- ClanTag.cs | 57 +++++++++++++++++++++++++++++ Commands/SetRankCommand.cs | 26 +++++++++++-- GscApiController.cs | 75 ++------------------------------------ Plugin.cs | 52 ++++++++++++++++++++++++-- 4 files changed, 132 insertions(+), 78 deletions(-) create mode 100644 ClanTag.cs diff --git a/ClanTag.cs b/ClanTag.cs new file mode 100644 index 0000000..7aa9f36 --- /dev/null +++ b/ClanTag.cs @@ -0,0 +1,57 @@ +using SharedLibraryCore; +using SharedLibraryCore.Database.Models; +using System.Linq; +using System.Threading.Tasks; + +namespace ClanTagRankApi +{ + public static class ExtensionMethods + { + public static string ClanTag(this EFClient.Permission level) + { + string rankName; + switch ((int)level) + { + case -1: + rankName = "Banned"; //this typically won't be seen. + break; + case 0: + rankName = "User"; + break; + case 1: + rankName = "User"; //1 = flagged, but don't want to show this in game. + break; + case 2: + rankName = "Trusted"; + break; + case 3: + rankName = "Mod"; + break; + case 4: + rankName = "Admin"; + break; + case 5: + rankName = "SrAdmin"; + break; + case 6: + rankName = "Owner"; + break; + case 7: + rankName = "Creator"; + break; + case 8: + rankName = "Console"; + break; + default: + rankName = "User"; + break; + } + return rankName; + } + + + } +} + + + diff --git a/Commands/SetRankCommand.cs b/Commands/SetRankCommand.cs index cb89a65..3d2a1cc 100644 --- a/Commands/SetRankCommand.cs +++ b/Commands/SetRankCommand.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; -namespace IW4ScriptCommands.Commands +namespace ClanTagRankApi.Commands { /// /// Example script command @@ -55,15 +55,35 @@ namespace IW4ScriptCommands.Commands await _metaService.AddPersistentMeta(rank, rank_string, E.Target); rank_player_var = await _metaService.GetPersistentMeta(rank, E.Target); if(rank_player_var.Value == "none" || rank_player_var.Value == "None" || rank_player_var.Value == "NONE") - E.Origin.Tell(E.Target.Name + "'s Rank reset to none"); + { + //E.Origin.Tell(E.Target.Name + "'s rank has been reset"); + rank_string = E.Target.Level.ClanTag(); + E.Origin.Tell(E.Target.Name + "'s rank has been reset to: " + rank_string); - E.Origin.Tell("New rank set: [" + rank_player_var.Value + "]" + E.Target.Name); + } + + else + { + rank_string = rank_player_var.Value; + E.Origin.Tell("New rank set: [" + rank_player_var.Value + "]" + E.Target.Name); + + } } else { //rank_player_var = await _metaService.GetPersistentMeta(rank, E.Target); E.Origin.Tell($"invalid rank length (between 1-8 characters), set rank to none to reset"); } + + //var cmd = new ScriptCommand() + //{ + + // CommandName = "setrank", + // ClientNumber = E.Target.ClientNumber, + // CommandArguments = new[] {rank_string } + //}; + + await E.Owner.ExecuteCommandAsync("setrank" + " " + E.Target.ClientNumber + " " + rank_string); } } } diff --git a/GscApiController.cs b/GscApiController.cs index 460f892..a3f8104 100644 --- a/GscApiController.cs +++ b/GscApiController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc; +using ClanTagRankApi; +using Microsoft.AspNetCore.Mvc; using SharedLibraryCore; using SharedLibraryCore.Database.Models; using SharedLibraryCore.Interfaces; @@ -35,41 +36,7 @@ namespace WebfrontCore.Controllers.API if (clientInfo != null) { - switch ((int)clientInfo.Level) - { - case -1: - rankName = "Banned"; //this typically won't be seen. - break; - case 0: - rankName = "User"; - break; - case 1: - rankName = "User"; //1 = flagged, but don't want to show this in game. - break; - case 2: - rankName = "Trusted"; - break; - case 3: - rankName = "Mod"; - break; - case 4: - rankName = "Admin"; - break; - case 5: - rankName = "SrAdmin"; - break; - case 6: - rankName = "Owner"; - break; - case 7: - rankName = "Creator"; - break; - case 8: - rankName = "Console"; - break; - default: - break; - } + rankName = clientInfo.Level.ClanTag(); customRankName = await _metaService.GetPersistentMeta("rank", clientInfo); if (customRankName == null) @@ -103,41 +70,7 @@ namespace WebfrontCore.Controllers.API if (clientInfo != null) { - switch ((int)clientInfo.Level) - { - case -1: - rankName = "Banned"; //this typically won't be seen. - break; - case 0: - rankName = "User"; - break; - case 1: - rankName = "User"; //1 = flagged, but don't want to show this in game. - break; - case 2: - rankName = "Trusted"; - break; - case 3: - rankName = "Mod"; - break; - case 4: - rankName = "Admin"; - break; - case 5: - rankName = "SrAdmin"; - break; - case 6: - rankName = "Owner"; - break; - case 7: - rankName = "Creator"; - break; - case 8: - rankName = "Console"; - break; - default: - break; - } + rankName = clientInfo.Level.ClanTag(); customRankName = await _metaService.GetPersistentMeta("rank", clientInfo); if (customRankName == null) diff --git a/Plugin.cs b/Plugin.cs index f9acac3..fe5acdc 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -1,6 +1,10 @@ using SharedLibraryCore; using SharedLibraryCore.Interfaces; +using System.Diagnostics.Tracing; using System.Threading.Tasks; +using System.Threading; +using SharedLibraryCore.Database.Models; +using System.Collections.Generic; namespace ClanTagRankApi @@ -11,6 +15,7 @@ namespace ClanTagRankApi private readonly IConfigurationHandler _configurationHandler; private Configuration Config; readonly string rank = "rank"; + string rankName = "none"; @@ -43,14 +48,53 @@ namespace ClanTagRankApi } public async Task OnEventAsync(GameEvent E, Server S)// => Task.CompletedTask; { - if (E.Type == GameEvent.EventType.Join) + if (E.Type == GameEvent.EventType.Join ||E.Type == GameEvent.EventType.ChangePermission) { - var rank_player_var = await _metaService.GetPersistentMeta(rank, E.Target); + Thread.Sleep(10000); + var rank_player_var = await _metaService.GetPersistentMeta(rank, E.Origin); + rankName = E.Origin.Level.ClanTag(); + + rank_player_var = await _metaService.GetPersistentMeta("rank", E.Origin); if (rank_player_var == null) { - await _metaService.AddPersistentMeta(rank, "none", E.Target); - rank_player_var = await _metaService.GetPersistentMeta(rank, E.Target); + await _metaService.AddPersistentMeta("rank", "none", E.Origin); + rank_player_var = await _metaService.GetPersistentMeta("rank", E.Origin); } + + if (!(rank_player_var.Value.Contains("none")) && !(rank_player_var.Value.Contains("None")) && !(rank_player_var.Value.Contains("NONE"))) + { + rankName = rank_player_var.Value; + + } + + await S.ExecuteCommandAsync("setrank" + " " + E.Origin.ClientNumber + " " + rankName); + } + if (E.Type == GameEvent.EventType.Start || E.Type == GameEvent.EventType.MapEnd || E.Type == GameEvent.EventType.MapChange) + { + Thread.Sleep(10000); + IList currentclients = E.Owner.Manager.GetActiveClients(); + foreach(EFClient client in currentclients) + { + var rank_player_var = await _metaService.GetPersistentMeta(rank, client); + rankName = client.Level.ClanTag(); + + rank_player_var = await _metaService.GetPersistentMeta("rank", client); + if (rank_player_var == null) + { + await _metaService.AddPersistentMeta("rank", "none", client); + rank_player_var = await _metaService.GetPersistentMeta("rank", client); + } + + if (!(rank_player_var.Value.Contains("none")) && !(rank_player_var.Value.Contains("None")) && !(rank_player_var.Value.Contains("NONE"))) + { + rankName = rank_player_var.Value; + + } + + await S.ExecuteCommandAsync("setrank" + " " + client.ClientNumber + " " + rankName); + + } + } //return Task.CompletedTask; } -- 2.47.2 From 38837bb05abf857d628e06d7221486265358084b Mon Sep 17 00:00:00 2001 From: INSANEMODE Date: Thu, 19 Nov 2020 09:52:41 -0600 Subject: [PATCH 2/3] add !ResetRank command --- ClanTag.cs | 5 ++-- Commands/ResetRankCommand.cs | 49 ++++++++++++++++++++++++++++++++++++ Commands/SetRankCommand.cs | 10 +------- Plugin.cs | 1 - 4 files changed, 52 insertions(+), 13 deletions(-) create mode 100644 Commands/ResetRankCommand.cs diff --git a/ClanTag.cs b/ClanTag.cs index 7aa9f36..063c128 100644 --- a/ClanTag.cs +++ b/ClanTag.cs @@ -1,7 +1,6 @@ -using SharedLibraryCore; + using SharedLibraryCore.Database.Models; -using System.Linq; -using System.Threading.Tasks; + namespace ClanTagRankApi { diff --git a/Commands/ResetRankCommand.cs b/Commands/ResetRankCommand.cs new file mode 100644 index 0000000..91efb20 --- /dev/null +++ b/Commands/ResetRankCommand.cs @@ -0,0 +1,49 @@ +using SharedLibraryCore; +using SharedLibraryCore.Commands; +using SharedLibraryCore.Configuration; +using SharedLibraryCore.Database.Models; +using SharedLibraryCore.Interfaces; +using System.Threading.Tasks; + + + +namespace ClanTagRankApi.Commands +{ + /// + /// Example script command + /// + public class ResetRankCommand : Command + { + readonly string rank = "rank"; + string rank_string; + private readonly IMetaService _metaService; + + public ResetRankCommand(CommandConfiguration config, ITranslationLookup lookup, IMetaService metaService) : base(config, lookup) + { + _metaService = metaService; + Name = "ResetRank"; + Description = "set a user's clan tag Rank (does not give permissions)"; + Alias = "rr"; + Permission = EFClient.Permission.Administrator; + RequiresTarget = true; + Arguments = new[] + { + new CommandArgument() + { + //Name = "rank", + //Required = false + } + }; + } + + public override async Task ExecuteAsync(GameEvent E) + { + //var S = E.Owner; + rank_string = "none"; + await _metaService.AddPersistentMeta(rank, rank_string, E.Target); + rank_string = E.Target.Level.ClanTag(); + E.Origin.Tell(E.Target.Name + "'s rank has been reset to: " + rank_string); + await E.Owner.ExecuteCommandAsync("setrank" + " " + E.Target.ClientNumber + " " + rank_string); + } + } +} diff --git a/Commands/SetRankCommand.cs b/Commands/SetRankCommand.cs index 3d2a1cc..9c32e63 100644 --- a/Commands/SetRankCommand.cs +++ b/Commands/SetRankCommand.cs @@ -71,17 +71,9 @@ namespace ClanTagRankApi.Commands } else { - //rank_player_var = await _metaService.GetPersistentMeta(rank, E.Target); - E.Origin.Tell($"invalid rank length (between 1-8 characters), set rank to none to reset"); + E.Origin.Tell($"invalid rank length (between 1-8 characters), set rank to none, or use !ResetRank to reset"); } - //var cmd = new ScriptCommand() - //{ - - // CommandName = "setrank", - // ClientNumber = E.Target.ClientNumber, - // CommandArguments = new[] {rank_string } - //}; await E.Owner.ExecuteCommandAsync("setrank" + " " + E.Target.ClientNumber + " " + rank_string); } diff --git a/Plugin.cs b/Plugin.cs index fe5acdc..25e8c0a 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -1,6 +1,5 @@ using SharedLibraryCore; using SharedLibraryCore.Interfaces; -using System.Diagnostics.Tracing; using System.Threading.Tasks; using System.Threading; using SharedLibraryCore.Database.Models; -- 2.47.2 From 8f36326f06c2df8ad2a5a488537bd8e31ef2695d Mon Sep 17 00:00:00 2001 From: INSANEMODE Date: Thu, 19 Nov 2020 10:19:26 -0600 Subject: [PATCH 3/3] change name to ClanTagRankCommands, and match ClanTagRank version (1.3) --- ClanTagRankApi.csproj => ClanTagRankCommands.csproj | 2 +- Plugin.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename ClanTagRankApi.csproj => ClanTagRankCommands.csproj (92%) diff --git a/ClanTagRankApi.csproj b/ClanTagRankCommands.csproj similarity index 92% rename from ClanTagRankApi.csproj rename to ClanTagRankCommands.csproj index 8c371e5..e5bca04 100644 --- a/ClanTagRankApi.csproj +++ b/ClanTagRankCommands.csproj @@ -10,7 +10,7 @@ - + diff --git a/Plugin.cs b/Plugin.cs index 25e8c0a..9b2d961 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -20,7 +20,7 @@ namespace ClanTagRankApi public string Name => "ClanTagRankApi"; - public float Version => 1.1f; + public float Version => 1.3f; public string Author => "INSANEMODE"; -- 2.47.2