using SharedLibraryCore; using SharedLibraryCore.Interfaces; using System.Threading.Tasks; using System.Threading; using SharedLibraryCore.Database.Models; using System.Collections.Generic; using Microsoft.Extensions.Logging; using ILogger = Microsoft.Extensions.Logging.ILogger; using Data.Models; using System; namespace ClanTagRankCommands { public class Plugin : IPlugin { private readonly IConfigurationHandler _configurationHandler; private readonly ILogger _logger; private Configuration Config; readonly string rank = "rank"; string rankName = "none"; public string Name => "ClanTagRankCommands"; public float Version => 1.42f; public string Author => "INSANEMODE"; private readonly IMetaService _metaService; public Plugin(IMetaService metaService, IConfigurationHandlerFactory configurationHandlerFactory, ILogger logger) { _logger = logger; _metaService = metaService; _configurationHandler = (IConfigurationHandler)configurationHandlerFactory.GetConfigurationHandler("ClanTagRankCommands"); } public Task OnLoadAsync(IManager manager)// => Task.CompletedTask; { if (_configurationHandler.Configuration() == null) { _configurationHandler.Set((Configuration)new Configuration().Generate()); _configurationHandler.Save(); } Config = _configurationHandler.Configuration(); string version = manager.Version; string str = string.Format("Loaded {0} ({1}) by {2} in {3} ({4})!", (object)((IPlugin)this).Name, (object)((IPlugin)this).Version, (object)((IPlugin)this).Author, (object)"IW4MAdmin", (object)version); _logger.LogInformation(str); return Task.CompletedTask; } public async Task OnEventAsync(GameEvent E, Server S)// => Task.CompletedTask; { //if (E.Type == GameEvent.EventType.Join || E.Type == GameEvent.EventType.ChangePermission ) if ((E.Type == GameEvent.EventType.Other) && E.Subtype.Contains("RC")) { //Console.WriteLine("RC: " + E.Origin.Name); if (E.Origin is not null && E.Origin.CurrentServer == S && E.Origin.ClientNumber != -1 && E.Origin.ClientNumber != 9) { var rank_player_var = await _metaService.GetPersistentMeta(rank, E.Origin); rankName = E.Origin.Level.ClanTag(Config); rank_player_var = await _metaService.GetPersistentMeta("rank", E.Origin); if (rank_player_var == null) { 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; } if (E.Origin is not null && E.Origin.CurrentServer == S && E.Origin.ClientNumber != -1 && E.Origin.ClientNumber != 9)// && (E.Origin.Level > EFClient.Permission.Trusted || rankName != Config.User)) { if (string.IsNullOrWhiteSpace(rankName)) { //await S.ExecuteCommandAsync("resetclantag" + " " + E.Origin.ClientNumber.ToString()); //await S.ExecuteCommandAsync("resetrole " + E.Origin.ClientNumber.ToString()); } else { await S.ExecuteCommandAsync("setclantag" + " " + E.Origin.ClientNumber.ToString() + " " + rankName.ToString()); await S.ExecuteCommandAsync("setrole " + E.Origin.ClientNumber.ToString() + " " + rankName.ToString()); } //await S.SetDvarAsync("sv_iw4madmin_role", "setRole;" + E.Origin.ClientNumber.ToString() + ";" + rankName.ToString()); } } } //if ((E.Type == GameEvent.EventType.Connect)) //{ // //Console.WriteLine("RC: " + E.Origin.Name); // if (E.Origin.CurrentServer == S && E.Origin is object && E.Origin.ClientNumber != -1 && E.Origin.ClientNumber != 9) // { // var rank_player_var = await _metaService.GetPersistentMeta(rank, E.Origin); // rankName = E.Origin.Level.ClanTag(Config); // rank_player_var = await _metaService.GetPersistentMeta("rank", E.Origin); // if (rank_player_var == null) // { // 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; // } // if (E.Origin.CurrentServer == S && E.Origin is object && E.Origin.ClientNumber != -1 && E.Origin.ClientNumber != 9)// && (E.Origin.Level > EFClient.Permission.Trusted || rankName != Config.User)) // { // if (string.IsNullOrWhiteSpace(rankName) || rankName.Length < 1) // { // //await S.ExecuteCommandAsync("resetclantag" + " " + E.Origin.ClientNumber.ToString()); // //await S.ExecuteCommandAsync("resetrole " + E.Origin.ClientNumber.ToString()); // } // else // { // await S.ExecuteCommandAsync("setclantag" + " " + E.Origin.ClientNumber.ToString() + " " + rankName.ToString()); // await S.ExecuteCommandAsync("setrole " + E.Origin.ClientNumber.ToString() + " " + rankName.ToString()); // } // //await S.SetDvarAsync("sv_iw4madmin_role", "setRole;" + E.Origin.ClientNumber.ToString() + ";" + rankName.ToString()); // } // } //} //if ((E.Type == GameEvent.EventType.Other) && E.Subtype.Contains("YADB-Embed")) //{ // Console.WriteLine(E.Extra); // Console.WriteLine(E.Origin.Name); //} //if (E.Type == GameEvent.EventType.Start || E.Type == GameEvent.EventType.MapChange) //{ // var currentclients = S.GetClientsAsList(); //GetActiveClients(); // foreach (EFClient client in currentclients) // { // if (client.CurrentServer == S && client is object && client.ClientNumber != -1 && client.ClientNumber != 9) // { // var rank_player_var = await _metaService.GetPersistentMeta("rank", client); // rankName = client.Level.ClanTag(Config); // 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; // } // if (client.CurrentServer == S && client is object && client.ClientNumber != -1 && client.ClientNumber != 9) // { // await S.SetDvarAsync("sv_iw4madmin_role", "setRole;" + client.ClientNumber.ToString() + ";" + rankName.ToString()); // await S.ExecuteCommandAsync("setclantag" + " " + client.ClientNumber.ToString() + " " + rankName.ToString()); // } // } // } //} //return Task.CompletedTask; } public Task OnTickAsync(Server S)// => { return Task.CompletedTask; } public Task OnUnloadAsync() => Task.CompletedTask; } public static class yadb { public static Task notifyYADB(string message, string title, string reason, string icon, Server S, EFClient OriginClient, EFClient TargetClient) { string json = ""; using (var stream = new System.IO.MemoryStream()) { using (var writer = new System.Text.Json.Utf8JsonWriter(stream)) { writer.WriteStartObject(); writer.WriteString("title", title); writer.WriteString("message", message); writer.WriteString("reason", reason); writer.WriteString("icon", icon); writer.WriteEndObject(); } json = System.Text.Encoding.UTF8.GetString(stream.ToArray()); } var e = new GameEvent() { Origin = OriginClient, Target = TargetClient, Owner = S, Type = GameEvent.EventType.Other, Subtype = "YADB-Embed", Extra = json }; S.ExecuteEvent(e); Console.WriteLine("event triggered!" + message); return Task.CompletedTask; //notifyYADB("Kicked player @{target} after a successful vote started from @{origin}", $"Vote kicked {target.Name}", gameEvent.Data,":pencil:", Server, origin, target); } } }