diff --git a/ClanTag.cs b/ClanTag.cs new file mode 100644 index 0000000..063c128 --- /dev/null +++ b/ClanTag.cs @@ -0,0 +1,56 @@ + +using SharedLibraryCore.Database.Models; + + +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/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/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 cb89a65..9c32e63 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,27 @@ 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"); + E.Origin.Tell($"invalid rank length (between 1-8 characters), set rank to none, or use !ResetRank to reset"); } + + + 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..9b2d961 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -1,6 +1,9 @@ using SharedLibraryCore; using SharedLibraryCore.Interfaces; using System.Threading.Tasks; +using System.Threading; +using SharedLibraryCore.Database.Models; +using System.Collections.Generic; namespace ClanTagRankApi @@ -11,12 +14,13 @@ namespace ClanTagRankApi private readonly IConfigurationHandler _configurationHandler; private Configuration Config; readonly string rank = "rank"; + string rankName = "none"; public string Name => "ClanTagRankApi"; - public float Version => 1.1f; + public float Version => 1.3f; public string Author => "INSANEMODE"; @@ -43,14 +47,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; }