1
0
mirror of https://github.com/RaidMax/IW4M-Admin.git synced 2025-06-10 23:31:13 -05:00

more consistent/enhanced game penalty messages per issue #171

This commit is contained in:
RaidMax
2020-11-17 18:24:54 -06:00
parent 8a697ca71c
commit 73bb43a8b2
11 changed files with 192 additions and 32 deletions

View File

@ -47,6 +47,8 @@ namespace SharedLibraryCore.Configuration
public string SocialLinkAddress { get; set; }
[LocalizedDisplayName("SETUP_SOCIAL_TITLE")]
public string SocialLinkTitle { get; set; }
[LocalizedDisplayName("SETUP_CONTACT_URI")]
public string ContactUri { get; set; }
[LocalizedDisplayName("SETUP_USE_CUSTOMENCODING")]
[ConfigurationLinked("CustomParserEncoding")]

View File

@ -0,0 +1,16 @@
using SharedLibraryCore.Database.Models;
namespace SharedLibraryCore.Interfaces
{
public interface IClientNoticeMessageFormatter
{
/// <summary>
/// builds a game formatted notice message
/// </summary>
/// <param name="currentPenalty">current penalty the message is for</param>
/// <param name="originalPenalty">previous penalty the current penalty relates to</param>
/// <param name="config">RCon parser config</param>
/// <returns></returns>
string BuildFormattedMessage(IRConParserConfiguration config, EFPenalty currentPenalty, EFPenalty originalPenalty = null);
}
}

View File

@ -0,0 +1,18 @@
using System.Threading.Tasks;
using SharedLibraryCore.Database.Models;
namespace SharedLibraryCore.Interfaces
{
public interface IGameServer
{
/// <summary>
/// kicks target on behalf of origin for given reason
/// </summary>
/// <param name="reason">reason client is being kicked</param>
/// <param name="target">client to kick</param>
/// <param name="origin">source of kick action</param>
/// <param name="previousPenalty">previous penalty the kick is occuring for (if applicable)</param>
/// <returns></returns>
public Task Kick(string reason, EFClient target, EFClient origin, EFPenalty previousPenalty = null);
}
}

View File

@ -62,5 +62,9 @@ namespace SharedLibraryCore.Interfaces
/// specifies the default dvar values for games that don't support certain dvars
/// </summary>
IDictionary<string, string> DefaultDvarValues { get; set; }
int NoticeMaximumLines { get; set; }
int NoticeMaxCharactersPerLine { get; set; }
}
}

View File

@ -320,7 +320,15 @@ namespace SharedLibraryCore.Database.Models
/// </summary>
/// <param name="kickReason">reason to kick for</param>
/// <param name="sender">client performing the kick</param>
public GameEvent Kick(string kickReason, EFClient sender)
public GameEvent Kick(string kickReason, EFClient sender) => Kick(kickReason, sender, null);
/// <summary>
/// kick a client for the given reason
/// </summary>
/// <param name="kickReason">reason to kick for</param>
/// <param name="sender">client performing the kick</param>
/// <param name="originalPenalty">original client penalty</param>
public GameEvent Kick(string kickReason, EFClient sender, EFPenalty originalPenalty)
{
var e = new GameEvent()
{
@ -329,6 +337,7 @@ namespace SharedLibraryCore.Database.Models
Target = this,
Origin = sender,
Data = kickReason,
Extra = originalPenalty,
Owner = sender.CurrentServer
};
@ -597,7 +606,6 @@ namespace SharedLibraryCore.Database.Models
{
var loc = Utilities.CurrentLocalization.LocalizationIndex;
var autoKickClient = Utilities.IW4MAdminClient(CurrentServer);
bool isAbleToConnectSimple = IsAbleToConnectSimple();
if (!isAbleToConnectSimple)
@ -617,23 +625,18 @@ namespace SharedLibraryCore.Database.Models
// we want to kick them if any account is banned
if (banPenalty != null)
{
if (Level == Permission.Banned)
{
Utilities.DefaultLogger.LogInformation("Kicking {client} because they are banned", ToString());
Kick(loc["SERVER_BAN_PREV"].FormatExt(banPenalty?.Offense), autoKickClient);
return false;
}
else
if (Level != Permission.Banned)
{
Utilities.DefaultLogger.LogInformation(
"Client {client} is banned, but using a new GUID, we we're updating their level and kicking them",
ToString());
await SetLevel(Permission.Banned, autoKickClient).WaitAsync(Utilities.DefaultCommandTimeout,
CurrentServer.Manager.CancellationToken);
Kick(loc["SERVER_BAN_PREV"].FormatExt(banPenalty?.Offense), autoKickClient);
return false;
}
Utilities.DefaultLogger.LogInformation("Kicking {client} because they are banned", ToString());
Kick(loc["WEBFRONT_PENALTY_LIST_BANNED_REASON"], autoKickClient, banPenalty);
return false;
}
// we want to kick them if any account is tempbanned
@ -641,9 +644,7 @@ namespace SharedLibraryCore.Database.Models
{
Utilities.DefaultLogger.LogInformation("Kicking {client} because their GUID is temporarily banned",
ToString());
Kick(
$"{loc["SERVER_TB_REMAIN"]} ({(tempbanPenalty.Expires.Value - DateTime.UtcNow).HumanizeForCurrentCulture()} {loc["WEBFRONT_PENALTY_TEMPLATE_REMAINING"]})",
autoKickClient);
Kick(loc["WEBFRONT_PENALTY_LIST_TEMPBANNED_REASON"], autoKickClient, tempbanPenalty);
return false;
}

View File

@ -14,7 +14,7 @@ using ILogger = Microsoft.Extensions.Logging.ILogger;
namespace SharedLibraryCore
{
public abstract class Server
public abstract class Server : IGameServer
{
public enum Game
{
@ -205,9 +205,10 @@ namespace SharedLibraryCore
/// <summary>
/// Kick a player from the server
/// </summary>
/// <param name="Reason">Reason for kicking</param>
/// <param name="reason">Reason for kicking</param>
/// <param name="Target">EFClient to kick</param>
abstract public Task Kick(String Reason, EFClient Target, EFClient Origin);
public Task Kick(String reason, EFClient Target, EFClient Origin) => Kick(reason, Target, Origin, null);
public abstract Task Kick(string reason, EFClient target, EFClient origin, EFPenalty originalPenalty);
/// <summary>
/// Temporarily ban a player ( default 1 hour ) from the server