6 Commits

4 changed files with 187 additions and 15 deletions

View File

@ -0,0 +1,69 @@
using SharedLibraryCore;
using SharedLibraryCore.Commands;
using SharedLibraryCore.Configuration;
using SharedLibraryCore.Database.Models;
using SharedLibraryCore.Interfaces;
using System.Threading.Tasks;
namespace IW4ScriptCommands.Commands
{
/// <summary>
/// Example script command
/// </summary>
public class SetRankCommand : Command
{
readonly string rank = "rank";
string rank_string;
private readonly IMetaService _metaService;
public SetRankCommand(CommandConfiguration config, ITranslationLookup lookup, IMetaService metaService) : base(config, lookup)
{
_metaService = metaService;
Name = "SetRank";
Description = "set a user's clan tag Rank (does not give permissions)";
Alias = "sr";
Permission = EFClient.Permission.Administrator;
RequiresTarget = true;
Arguments = new[]
{
new CommandArgument()
{
Name = "rank",
Required = true
}
};
}
public override async Task ExecuteAsync(GameEvent E)
{
//var S = E.Owner;
rank_string = "none";
if (E.Data != null)
rank_string = E.Data;
var rank_player_var = await _metaService.GetPersistentMeta(rank, E.Target);
if (rank_player_var == null)
{
await _metaService.AddPersistentMeta(rank, "none", E.Target);
rank_player_var = await _metaService.GetPersistentMeta(rank, E.Target);
}
if (rank_string.Length > 0 && rank_string.Length < 9)
{
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("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");
}
}
}
}

View File

@ -1,8 +1,10 @@
using Microsoft.AspNetCore.Mvc;
using SharedLibraryCore;
using SharedLibraryCore.Database.Models;
using SharedLibraryCore.Interfaces;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebfrontCore.Controllers.API
{
@ -11,9 +13,11 @@ namespace WebfrontCore.Controllers.API
public class GscApiController : BaseController
{
string rankName;
public GscApiController(IManager manager) : base(manager)
EFMeta customRankName;
private readonly IMetaService _metaService;
public GscApiController(IManager manager, IMetaService metaService) : base(manager)
{
_metaService = metaService;
}
/// <summary>
@ -21,24 +25,26 @@ namespace WebfrontCore.Controllers.API
/// </summary>
/// <param name="clientname"></param>
/// <returns></returns>
[HttpGet("{clientname}")]
public IActionResult Clientname(string clientname)
[HttpGet("{clientguid}")]
public async Task<IActionResult> Clientguid(string clientguid)
{
long decimalNetworkId = clientguid.ConvertGuidToLong(System.Globalization.NumberStyles.Integer);
var clientInfo = Manager.GetActiveClients()
.FirstOrDefault(c => c.Name == clientname);
.FirstOrDefault(c => c.NetworkId == decimalNetworkId);
if (clientInfo != null)
{
switch((int)clientInfo.Level)
switch ((int)clientInfo.Level)
{
case -1:
rankName = "Banned"; //this typically won't be seen.
break;
case 0:
rankName = "User";
break;
case 1:
rankName = "User";
rankName = "User"; //1 = flagged, but don't want to show this in game.
break;
case 2:
rankName = "Trusted";
@ -50,7 +56,7 @@ namespace WebfrontCore.Controllers.API
rankName = "Admin";
break;
case 5:
rankName = "Sr.Admin";
rankName = "SrAdmin";
break;
case 6:
rankName = "Owner";
@ -65,6 +71,86 @@ namespace WebfrontCore.Controllers.API
break;
}
customRankName = await _metaService.GetPersistentMeta("rank", clientInfo);
if (customRankName == null)
{
await _metaService.AddPersistentMeta("rank", "none", clientInfo);
customRankName = await _metaService.GetPersistentMeta("rank", clientInfo);
}
if (!(customRankName.Value.Contains("none")) && !(customRankName.Value.Contains("None")) && !(customRankName.Value.Contains("NONE")))
{
rankName = customRankName.Value;
}
var sb = new StringBuilder();
sb.AppendLine(rankName);
return Content(sb.ToString());
}
return Content("Error: Client info is null");
}
[HttpGet("{clientname}")]
public async Task<IActionResult> Clientname(string clientname)
{
var clientInfo = Manager.GetActiveClients()
.FirstOrDefault(c => c.Name == clientname);
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;
}
customRankName = await _metaService.GetPersistentMeta("rank", clientInfo);
if (customRankName == null)
{
await _metaService.AddPersistentMeta("rank", "none", clientInfo);
customRankName = await _metaService.GetPersistentMeta("rank", clientInfo);
}
if (!(customRankName.Value.Contains("none")) || !(customRankName.Value.Contains("None")) || !(customRankName.Value.Contains("NONE")))
{
rankName = customRankName.Value;
}
var sb = new StringBuilder();
sb.AppendLine(rankName);

View File

@ -10,19 +10,19 @@ namespace ClanTagRankApi
{
private readonly IConfigurationHandler<Configuration> _configurationHandler;
private Configuration Config;
readonly string rank = "rank";
public string Name => "ClanTagRankApi";
public float Version => 1.0f;
public float Version => 1.1f;
public string Author => "INSANEMODE";
private readonly IMetaService _metaService;
public Plugin(IMetaService metaService, IConfigurationHandlerFactory configurationHandlerFactory)
public Plugin(IMetaService metaService, IConfigurationHandlerFactory configurationHandlerFactory)
{
_metaService = metaService;
_configurationHandler = (IConfigurationHandler<Configuration>)configurationHandlerFactory.GetConfigurationHandler<Configuration>("ClanTagRankApi");
@ -41,8 +41,19 @@ namespace ClanTagRankApi
return Task.CompletedTask;
}
public Task OnEventAsync(GameEvent E, Server S) => Task.CompletedTask;
public async Task OnEventAsync(GameEvent E, Server S)// => Task.CompletedTask;
{
if (E.Type == GameEvent.EventType.Join)
{
var rank_player_var = await _metaService.GetPersistentMeta(rank, E.Target);
if (rank_player_var == null)
{
await _metaService.AddPersistentMeta(rank, "none", E.Target);
rank_player_var = await _metaService.GetPersistentMeta(rank, E.Target);
}
}
//return Task.CompletedTask;
}
public Task OnTickAsync(Server S)// =>
{

6
README.md Normal file
View File

@ -0,0 +1,6 @@
# ClanTagRankApi
c# plugin for iw4m-admin that adds to the api to allow ClanTagRank to get the (shortened to fit in a clan tag) rank/role of a player based on name.
# Installation
download the latest ClanTagRankApi.dll from the releases page and place it in the Plugins folder of your iw4m-admin folder, and then head over to https://gitea.insanemode.org/INSANEMODE/ClanTagRank and follow the instructions there.