diff --git a/PermissionExtensions/Events/UnturnedPlayerChatting.cs b/PermissionExtensions/Events/UnturnedPlayerChatting.cs index a4ed0e8..fe1ae29 100644 --- a/PermissionExtensions/Events/UnturnedPlayerChatting.cs +++ b/PermissionExtensions/Events/UnturnedPlayerChatting.cs @@ -32,18 +32,18 @@ public async Task HandleEventAsync(object? sender, UnturnedPlayerChattingEvent @ { var isAdmin = @event.Player.SteamPlayer.isAdmin; var isGold = @event.Player.SteamPlayer.isPro; - - if (!m_Configuration.GetSection("override:color:admin").Get() && isAdmin || Provider.hideAdmins) + + if (isAdmin && !Provider.hideAdmins && !m_Configuration.GetSection("override:color:admin").Get()) { return; } - if (!m_Configuration.GetSection("override:color:gold").Get() && isGold) + if (isGold && !m_Configuration.GetSection("override:color:gold").Get()) { return; } - var id = @event.Player.SteamId.ToString(); + var id = @event.Player.EntityInstanceId; var displayName = @event.Player.SteamPlayer.playerID.characterName; var role = await m_PermissionExtensions.GetOrderedPermissionRoleData(id, KnownActorTypes.Player); @@ -73,10 +73,10 @@ public async Task HandleEventAsync(object? sender, UnturnedPlayerChattingEvent @ var eventIsCancelled = @event.IsCancelled; var eventColor = @event.Color.ToSystemColor(); - + CallRocketPlayerChatted(@event.Player, @event.Mode, @event.Message, ref eventColor, ref eventIsCancelled); - + @event.IsCancelled = eventIsCancelled; @event.Color = eventColor.ToUnityColor(); } @@ -89,28 +89,35 @@ private void CallRocketPlayerChatted(UnturnedPlayer player, EChatMode mode, stri return; } + var canOverrideColor = m_Configuration.GetSection("rocketmodIntegration:canOverrideColor").Get(); + var canCancelMessage = m_Configuration.GetSection("rocketmodIntegration:canCancelMessage").Get(); + + if (!canOverrideColor && !canCancelMessage) + { + return; + } + m_Logger.LogDebug("Calling the event UnturnedChat.OnPlayerChatted"); var colorEx = color; var cancelEx = cancel; m_PermissionExtensions.CallRocketEvent(player, mode, message, ref colorEx, ref cancelEx); - if (m_Configuration.GetSection("rocketmodIntegration:canOverrideColor").Get()) + if (canOverrideColor) { color = colorEx; } if (cancelEx) { - m_Logger.LogDebug("RocketMod cancel the message!"); + m_Logger.LogDebug("RocketMod cancelled the message!"); } if (color != colorEx) { - m_Logger.LogDebug("RocketMod override the color! {FromColor} -> {ToColor}", color, colorEx); + m_Logger.LogDebug("RocketMod overrides the color! {FromColor} -> {ToColor}", color, colorEx); } - - cancel = cancelEx && m_Configuration.GetSection("rocketmodIntegration:canCancelMessage").Get(); + cancel = cancelEx && canCancelMessage; } } } diff --git a/PermissionExtensions/Events/UnturnedUserConnecting.cs b/PermissionExtensions/Events/UnturnedUserConnecting.cs index cd639c2..13c32aa 100644 --- a/PermissionExtensions/Events/UnturnedUserConnecting.cs +++ b/PermissionExtensions/Events/UnturnedUserConnecting.cs @@ -30,8 +30,21 @@ public async Task HandleEventAsync(object? sender, UnturnedUserConnectingEvent @ m_Logger.LogDebug("Found role {RoleDisplayName}({RoleId}) for player {FullName}", role.DisplayName, role.Id, @event.User.FullActorName); - var prefix = role.Data?.ContainsKey("prefix") ?? false ? role.Data["prefix"] : string.Empty; - var suffix = role.Data?.ContainsKey("suffix") ?? false ? role.Data["suffix"] : string.Empty; + var prefix = string.Empty; + var suffix = string.Empty; + + if (role.Data is not null) + { + if (role.Data.TryGetValue("prefix", out var obj)) + { + prefix = (obj as string) ?? string.Empty; + } + + if (role.Data.TryGetValue("suffix", out obj)) + { + suffix = (obj as string) ?? string.Empty; + } + } string pendingName = prefix + @event.User.DisplayName + suffix; diff --git a/PermissionExtensions/PermissionExtensions.cs b/PermissionExtensions/PermissionExtensions.cs index 5deb130..1a0ba8b 100644 --- a/PermissionExtensions/PermissionExtensions.cs +++ b/PermissionExtensions/PermissionExtensions.cs @@ -25,7 +25,6 @@ public class PermissionExtensions : OpenModUnturnedPlugin private readonly IUserDataStore m_UserDataStore; private readonly ILogger m_Logger; private readonly ILifetimeScope m_LifetimeScope; - private RocketModHandleChatPatch m_HandleChatPatch = null!; public PermissionExtensions(IServiceProvider serviceProvider, IPermissionRolesDataStore permissionRolesDataStore, @@ -37,25 +36,37 @@ public PermissionExtensions(IServiceProvider serviceProvider, IPermissionRolesDa m_LifetimeScope = lifetimeScope; } - protected override UniTask OnLoadAsync() + protected override async UniTask OnLoadAsync() { m_Logger.LogInformation("Made with <3 by EvolutionPlugins"); m_Logger.LogInformation("https://github.com/evolutionplugins \\ https://github.com/diffoz"); m_Logger.LogInformation("Support discord: https://discord.gg/6KymqGv"); - if (RocketModIntegration.IsRocketModUnturnedLoaded(out var asm) && RocketModIntegration.IsRocketModInstalled()) + try { - m_HandleChatPatch = - ActivatorUtilitiesEx.CreateInstance(m_LifetimeScope, - m_Logger, Harmony, asm!); + if (RocketModIntegration.IsRocketModUnturnedLoaded(out var asm) && RocketModIntegration.IsRocketModInstalled()) + { + m_HandleChatPatch = + ActivatorUtilitiesEx.CreateInstance(m_LifetimeScope, + m_Logger, Harmony, asm!); + } + } + catch + { + // rocketmod is not installed, ignoring the issue } - return AddExample().AsUniTask(false); + await AddExample(); } public void CallRocketEvent(UnturnedPlayer player, EChatMode chatMode, string message, ref Color color, ref bool cancel) { - m_HandleChatPatch?.CallRocketEventInternal(player.Player, chatMode, ref color, message, ref cancel); + try + { + m_HandleChatPatch?.CallRocketEventInternal(player.Player, chatMode, ref color, message, ref cancel); + } + catch + { } } public async Task GetOrderedPermissionRoleData(string id, string type) @@ -85,7 +96,6 @@ public void CallRocketEvent(UnturnedPlayer player, EChatMode chatMode, string me private Task AddExample() { - // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator < bad rider foreach (var role in m_PermissionRolesDataStore.Roles) { if (role?.Data == null)