diff --git a/.gitignore b/.gitignore
index 09963c4..e9e8484 100644
--- a/.gitignore
+++ b/.gitignore
@@ -245,3 +245,5 @@ launchSettings.json
/Tests/ApplicationTests/Files/replay.json
/GameLogServer/game_log_server_env
*.bak
+/TebexApiClient.cs
+/Models
diff --git a/ClanTag.cs b/ClanTag.cs
index ef936e3..fbd4f46 100644
--- a/ClanTag.cs
+++ b/ClanTag.cs
@@ -3,7 +3,7 @@ using SharedLibraryCore.Database.Models;
using SharedLibraryCore;
using SharedLibraryCore.Interfaces;
-namespace ClanTagRankApi
+namespace ClanTagRankCommands
{
static class ExtensionMethods
diff --git a/ClanTagRankCommands.csproj b/ClanTagRankCommands.csproj
index 5348bdd..8b51261 100644
--- a/ClanTagRankCommands.csproj
+++ b/ClanTagRankCommands.csproj
@@ -10,7 +10,12 @@
-
+
+
+
+
+
+
diff --git a/Commands/MuteClearCommand.cs b/Commands/MuteClearCommand.cs
new file mode 100644
index 0000000..acd93fb
--- /dev/null
+++ b/Commands/MuteClearCommand.cs
@@ -0,0 +1,43 @@
+using SharedLibraryCore;
+using SharedLibraryCore.Commands;
+using SharedLibraryCore.Configuration;
+using SharedLibraryCore.Database.Models;
+using SharedLibraryCore.Interfaces;
+using System.Threading.Tasks;
+
+
+namespace ClanTagRankCommands.Commands
+{
+
+ ///
+ /// Example script command
+ ///
+ ///
+
+ public class MuteClearCommand : Command
+ {
+
+
+
+
+ public MuteClearCommand(CommandConfiguration config, ITranslationLookup lookup, IMetaService metaService, IConfigurationHandlerFactory configurationHandlerFactory) : base(config, lookup)
+ {
+
+
+ Name = "MuteClear";
+ Description = "clears the muted player list for current server";
+ Alias = "mc";
+ Permission = EFClient.Permission.Administrator;
+ RequiresTarget = false;
+
+ }
+
+ public override async Task ExecuteAsync(GameEvent E)
+ {
+ await E.Owner.ExecuteCommandAsync("muteclear");
+ E.Origin.Tell("mute list cleared");
+
+
+ }
+ }
+}
diff --git a/Commands/MuteCommand.cs b/Commands/MuteCommand.cs
new file mode 100644
index 0000000..4d39e75
--- /dev/null
+++ b/Commands/MuteCommand.cs
@@ -0,0 +1,75 @@
+using SharedLibraryCore;
+using SharedLibraryCore.Commands;
+using SharedLibraryCore.Configuration;
+using SharedLibraryCore.Database.Models;
+using SharedLibraryCore.Interfaces;
+using System.Threading.Tasks;
+
+
+namespace ClanTagRankCommands.Commands
+{
+
+ ///
+ /// Example script command
+ ///
+ ///
+
+ public class MuteCommand : Command
+ {
+
+
+
+
+ public MuteCommand(CommandConfiguration config, ITranslationLookup lookup, IMetaService metaService, IConfigurationHandlerFactory configurationHandlerFactory) : base(config, lookup)
+ {
+
+
+ Name = "Mute";
+ Description = "mutes a player's chat.";
+ Alias = "mute";
+ Permission = EFClient.Permission.Administrator;
+ RequiresTarget = true;
+ Arguments = new[]
+ {
+ new CommandArgument()
+ {
+ Name = "player",
+ Required = true
+ },
+ new CommandArgument()
+ {
+ Name = "reason",
+ Required = false
+ }
+ };
+ }
+
+ public override async Task ExecuteAsync(GameEvent E)
+ {
+ //var S = E.Owner;
+
+ var msg = E.Data;
+ if (E.Data == null)
+ {
+ msg = "Muted";
+ }
+ else
+ {
+ msg = E.Data;
+ }
+ if(E.Target.IsIngame && E.Target is object && E.Target != E.Origin)
+ {
+ await E.Owner.ExecuteCommandAsync("mute_player" + " " + E.Target.ClientNumber.ToString());
+ E.Target.Warn("muted", E.Origin);
+ }
+ if(E.Target == E.Origin)
+ {
+ E.Origin.Tell("Can't mute yourself");
+ }
+
+
+
+
+ }
+ }
+}
diff --git a/Commands/PermaperkCommand.cs b/Commands/PermaperkCommand.cs
new file mode 100644
index 0000000..a1821ea
--- /dev/null
+++ b/Commands/PermaperkCommand.cs
@@ -0,0 +1,86 @@
+using SharedLibraryCore;
+using SharedLibraryCore.Commands;
+using SharedLibraryCore.Configuration;
+using SharedLibraryCore.Database.Models;
+using SharedLibraryCore.Interfaces;
+using System.Threading.Tasks;
+using ClanTagRankCommands;
+
+namespace ClanTagRankCommands.Commands
+{
+ ///
+ /// Example script command
+ ///
+ public class PermaperkCommand : Command
+ {
+ private readonly IMetaService _metaService;
+ private readonly IConfigurationHandler _configurationHandler;
+ private Configuration Config;
+ public PermaperkCommand(CommandConfiguration config, ITranslationLookup lookup, IMetaService metaService, IConfigurationHandlerFactory configurationHandlerFactory) : base(config, lookup)
+ {
+ _metaService = metaService;
+ _configurationHandler = configurationHandlerFactory.GetConfigurationHandler("ClanTagRankCommands");
+ if (_configurationHandler.Configuration() == null)
+ {
+ _configurationHandler.Set((Configuration)new Configuration().Generate());
+ _configurationHandler.Save();
+ }
+ Config = _configurationHandler.Configuration();
+ Name = "Permaperk";
+ Description = "force permaperks, clan tag, and speed if they don't set correctly.";
+ Alias = "perma";
+ Permission = EFClient.Permission.Trusted;
+ RequiresTarget = false;
+ Arguments = new[]
+ {
+ new CommandArgument()
+ {
+ }
+ };
+ }
+
+ public override async Task ExecuteAsync(GameEvent E)
+ {
+ //await yadb.notifyYADB("Kicked player @{target} after a successful vote started from @{origin}", $"testing", E.Data,":pencil:", E.Owner, E.Origin, E.Origin);
+ var speedtoggle = await _metaService.GetPersistentMeta("speedtoggle", E.Origin);
+ if (speedtoggle == null)
+ {
+ // speedtoggle == 1 means slower, unmodified speed)
+ await _metaService.AddPersistentMeta("speedtoggle", "0", E.Origin);
+ speedtoggle = await _metaService.GetPersistentMeta("speedtoggle", E.Origin);
+ }
+ await E.Owner.SetDvarAsync("sv_iw4madmin_options", "speedtoggle;" + E.Origin.ClientNumber.ToString() + ";" + speedtoggle.Value.ToString());
+
+ if (E.Origin.CurrentServer == E.Owner && E.Origin is object && E.Origin.ClientNumber != -1 && E.Origin.ClientNumber != 9)
+ {
+ var rank_player_var = await _metaService.GetPersistentMeta("rank", E.Origin);
+ var 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 == E.Owner && E.Origin is object && E.Origin.ClientNumber != -1 && E.Origin.ClientNumber != 9)// && (E.Origin.Level > EFClient.Permission.Trusted || rankName != Config.User))
+ {
+ await E.Owner.ExecuteCommandAsync("setclantag" + " " + E.Origin.ClientNumber.ToString() + " " + rankName.ToString());
+ await E.Owner.SetDvarAsync("sv_iw4madmin_role", "setRole;" + E.Origin.ClientNumber.ToString() + ";" + rankName.ToString());
+ }
+ }
+
+
+
+ }
+ }
+}
+
+
+
diff --git a/Commands/ResetRankCommand.cs b/Commands/ResetRankCommand.cs
index e8470c2..9725be3 100644
--- a/Commands/ResetRankCommand.cs
+++ b/Commands/ResetRankCommand.cs
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
-namespace ClanTagRankApi.Commands
+namespace ClanTagRankCommands.Commands
{
///
/// Example script command
@@ -57,7 +57,11 @@ namespace ClanTagRankApi.Commands
rank_string = E.Target.Level.ClanTag(Config);
E.Origin.Tell(E.Target.Name + "'s rank has been reset to: " + rank_string);
if (E.Target.IsIngame && E.Target is object)
- await E.Owner.ExecuteCommandAsync("setclantag" + " " + E.Target.ClientNumber + " " + rank_string);
+ {
+ await E.Owner.ExecuteCommandAsync("setclantag" + " " + E.Target.ClientNumber.ToString() + " " + rank_string.ToString());
+ await E.Owner.SetDvarAsync("sv_iw4madmin_role", "setRole;" + E.Target.ClientNumber.ToString() + ";" + rank_string.ToString());
+ }
+
}
diff --git a/Commands/SetRankCommand.cs b/Commands/SetRankCommand.cs
index fa381b5..080a4a1 100644
--- a/Commands/SetRankCommand.cs
+++ b/Commands/SetRankCommand.cs
@@ -6,7 +6,7 @@ using SharedLibraryCore.Interfaces;
using System.Threading.Tasks;
-namespace ClanTagRankApi.Commands
+namespace ClanTagRankCommands.Commands
{
///
@@ -91,7 +91,12 @@ namespace ClanTagRankApi.Commands
}
if(E.Target.IsIngame && E.Target is object)
- await E.Owner.ExecuteCommandAsync("setclantag" + " " + E.Target.ClientNumber + " " + rank_string);
+ {
+ await E.Owner.ExecuteCommandAsync("setclantag" + " " + E.Target.ClientNumber.ToString() + " " + rank_string.ToString());
+ await E.Owner.SetDvarAsync("sv_iw4madmin_role", "setRole;" + E.Target.ClientNumber.ToString() + ";" + rank_string.ToString());
+ }
+
+
}
}
diff --git a/Commands/UnMuteCommand.cs b/Commands/UnMuteCommand.cs
new file mode 100644
index 0000000..b775503
--- /dev/null
+++ b/Commands/UnMuteCommand.cs
@@ -0,0 +1,59 @@
+using SharedLibraryCore;
+using SharedLibraryCore.Commands;
+using SharedLibraryCore.Configuration;
+using SharedLibraryCore.Database.Models;
+using SharedLibraryCore.Interfaces;
+using System.Threading.Tasks;
+
+
+namespace ClanTagRankCommands.Commands
+{
+
+ ///
+ /// Example script command
+ ///
+ ///
+
+ public class UnMuteCommand : Command
+ {
+
+
+
+
+ public UnMuteCommand(CommandConfiguration config, ITranslationLookup lookup, IMetaService metaService, IConfigurationHandlerFactory configurationHandlerFactory) : base(config, lookup)
+ {
+
+
+ Name = "Unmute";
+ Description = "Unmutes a player's chat.";
+ Alias = "Unmute";
+ Permission = EFClient.Permission.Administrator;
+ RequiresTarget = true;
+ Arguments = new[]
+ {
+ new CommandArgument()
+ {
+ Name = "player",
+ Required = true
+ }
+ };
+ }
+
+ public override async Task ExecuteAsync(GameEvent E)
+ {
+ //var S = E.Owner;
+
+
+ if(E.Target.IsIngame && E.Target is object)
+ {
+ await E.Owner.ExecuteCommandAsync("unmute_player" + " " + E.Target.ClientNumber.ToString());
+ E.Target.WarnClear(E.Origin);
+ E.Target.Tell("You have been Unmuted");
+ }
+
+
+
+
+ }
+ }
+}
diff --git a/Configuration.cs b/Configuration.cs
index ce91c79..d871d20 100644
--- a/Configuration.cs
+++ b/Configuration.cs
@@ -1,7 +1,7 @@
using SharedLibraryCore.Interfaces;
-namespace ClanTagRankApi
+namespace ClanTagRankCommands
{
public class Configuration : IBaseConfiguration
{
diff --git a/Events/Script.cs b/Events/Script.cs
new file mode 100644
index 0000000..ad133d7
--- /dev/null
+++ b/Events/Script.cs
@@ -0,0 +1,67 @@
+using SharedLibraryCore;
+using SharedLibraryCore.Database.Models;
+using SharedLibraryCore.Interfaces;
+using System.Collections.Generic;
+using EventGeneratorCallback = System.ValueTuple>;
+
+namespace IW4MAdmin.Plugins.ClanTagRankCommands.Events
+{
+ public class Script : IRegisterEvent
+ {
+
+ private const string EVENT_RC = "RC";
+
+ ///
+ /// this is a custom event printed out by _clientids.gsc (used for recording highest personal round records)
+ ///
+ ///
+ private EventGeneratorCallback RC()
+ {
+ return (EVENT_RC, EVENT_RC, (string eventLine, IEventParserConfiguration config, GameEvent autoEvent) =>
+ {
+ string[] lineSplit = eventLine.Split(";");
+
+
+ long originId = lineSplit[1].ConvertGuidToLong(config.GuidNumberStyle, 1);
+
+ autoEvent.Type = GameEvent.EventType.Other;
+ autoEvent.Origin = new EFClient() { NetworkId = originId };
+ autoEvent.RequiredEntity = GameEvent.EventRequiredEntity.Origin;
+ autoEvent.GameTime = autoEvent.GameTime;
+ autoEvent.Subtype = EVENT_RC;
+
+ return autoEvent;
+ }
+ );
+ }
+ //private const string EVENT_RoundNumber = "RoundNumber";
+
+ /////
+ ///// this is a custom event printed out by _clientids.gsc (used for recording highest server round records)
+ /////
+ /////
+ //private EventGeneratorCallback RoundNumber()
+ //{
+ // return (EVENT_RoundNumber, EVENT_RoundNumber, (string eventLine, IEventParserConfiguration config, GameEvent autoEvent) =>
+ // {
+ // string[] lineSplit = eventLine.Split(";");
+
+ // autoEvent.Type = GameEvent.EventType.RoundNumber;
+ // autoEvent.Origin = Utilities.IW4MAdminClient();
+ // autoEvent.GameTime = autoEvent.GameTime;
+
+ // return autoEvent;
+ // }
+ // );
+ //}
+ public IEnumerable Events =>
+ new[]
+ {
+ RC(),
+
+ };
+ }
+}
diff --git a/GscApiController.cs b/GscApiController.cs
index 880a79b..0d92692 100644
--- a/GscApiController.cs
+++ b/GscApiController.cs
@@ -1,4 +1,5 @@
-using ClanTagRankApi;
+using ClanTagRankCommands;
+using Data.Models;
using Microsoft.AspNetCore.Mvc;
using SharedLibraryCore;
using SharedLibraryCore.Database.Models;
diff --git a/Plugin.cs b/Plugin.cs
index 98cbba6..cb5cc1f 100644
--- a/Plugin.cs
+++ b/Plugin.cs
@@ -6,9 +6,11 @@ using SharedLibraryCore.Database.Models;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
using ILogger = Microsoft.Extensions.Logging.ILogger;
+using Data.Models;
+using System;
-namespace ClanTagRankApi
+namespace ClanTagRankCommands
{
public class Plugin : IPlugin
@@ -29,7 +31,7 @@ namespace ClanTagRankApi
private readonly IMetaService _metaService;
- public Plugin(IMetaService metaService, IConfigurationHandlerFactory configurationHandlerFactory, ILogger logger)
+ public Plugin(IMetaService metaService, IConfigurationHandlerFactory configurationHandlerFactory, ILogger logger)
{
_logger = logger;
_metaService = metaService;
@@ -46,14 +48,18 @@ namespace ClanTagRankApi
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.Join || E.Type == GameEvent.EventType.ChangePermission )
+ if ((E.Type == GameEvent.EventType.Other) && E.Subtype.Contains("RC"))
{
- if(E.Origin.IsIngame && E.Origin is object)
+ //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);
@@ -61,6 +67,7 @@ namespace ClanTagRankApi
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);
}
@@ -70,42 +77,54 @@ namespace ClanTagRankApi
rankName = rank_player_var.Value;
}
- if (E.Origin.IsIngame && E.Origin is object)
- await S.ExecuteCommandAsync("setclantag" + " " + E.Origin.ClientNumber + " " + rankName);
- }
-
- }
- if (E.Type == GameEvent.EventType.Start || E.Type == GameEvent.EventType.MapEnd || E.Type == GameEvent.EventType.MapChange)
- {
- IList currentclients = E.Owner.Manager.GetActiveClients();
- foreach(EFClient client in currentclients)
- {
- if (client.IsIngame && client is object)
+ 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))
{
- 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.IsIngame && client is object)
- await S.ExecuteCommandAsync("setclantag" + " " + client.ClientNumber + " " + rankName);
+ await S.ExecuteCommandAsync("setclantag" + " " + E.Origin.ClientNumber.ToString() + " " + rankName.ToString());
+ await S.SetDvarAsync("sv_iw4madmin_role", "setRole;" + E.Origin.ClientNumber.ToString() + ";" + rankName.ToString());
}
-
-
}
}
- //return Task.CompletedTask;
+ //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)// =>
{
@@ -116,7 +135,11 @@ namespace ClanTagRankApi
public Task OnUnloadAsync() => Task.CompletedTask;
- public Task notifyYADB(string message, string title, string reason, string icon, Server S, EFClient OriginClient, EFClient TargetClient)
+
+ }
+ 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())
@@ -144,9 +167,16 @@ namespace ClanTagRankApi
};
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);
}
+
+
}
+
+
}
diff --git a/unusedClanTag.cs b/unusedClanTag.cs
new file mode 100644
index 0000000..e7612c5
--- /dev/null
+++ b/unusedClanTag.cs
@@ -0,0 +1,65 @@
+
+using SharedLibraryCore.Database.Models;
+using SharedLibraryCore;
+using SharedLibraryCore.Interfaces;
+
+namespace Tebex_IW4M_Admin
+{
+
+ static class ExtensionMethods
+ {
+ public static string Truncate(this string input, int strLength)
+ {
+ if (string.IsNullOrEmpty(input)) return input;
+ return input.Length <= strLength ? input : input.Substring(0, strLength);
+ }
+ public static string ClanTag(this EFClient.Permission level, Configuration Config)
+ {
+ string rankName;
+
+ switch ((int)level)
+ {
+ case -1:
+ rankName = "Banned"; //this typically won't be seen.
+ break;
+ case 0:
+ rankName = Config.User;
+ break;
+ case 1:
+ rankName = Config.User; //1 = flagged, but don't want to show this in game.
+ break;
+ case 2:
+ rankName = Config.Trusted;
+ break;
+ case 3:
+ rankName = Config.Moderator;
+ break;
+ case 4:
+ rankName = Config.Admin;
+ break;
+ case 5:
+ rankName = Config.SeniorAdmin;
+ break;
+ case 6:
+ rankName = Config.Owner;
+ break;
+ case 7:
+ rankName = Config.Creator;
+ break;
+ case 8:
+ rankName = Config.Console;
+ break;
+ default:
+ rankName = Config.User;
+ break;
+ }
+ return rankName.Truncate(8);
+ }
+
+
+
+ }
+}
+
+
+