diff --git a/PlayerAdministration.cs b/PlayerAdministration.cs index b145e5f..41443ca 100644 --- a/PlayerAdministration.cs +++ b/PlayerAdministration.cs @@ -34,22 +34,17 @@ namespace Oxide.Plugins { - [Info("PlayerAdministration", "ThibmoRozier", "1.3.18")] + [Info("PlayerAdministration", "ThibmoRozier", "1.3.20")] [Description("Allows server admins to moderate users using a GUI from within the game.")] public class PlayerAdministration : RustPlugin { - //TODO: Implement Better Chat Mute API_TimeMute 15 min - https://umod.org/plugins/better-chat-mute - //TODO: Implement Better Chat Mute API_TimeMute 30 min - https://umod.org/plugins/better-chat-mute - //TODO: Implement Better Chat Mute API_TimeMute 60 min - https://umod.org/plugins/better-chat-mute - //TODO: Implement Better Chat Mute API_Mute - https://umod.org/plugins/better-chat-mute - //TODO: Implement Better Chat Mute API_Unmute - https://umod.org/plugins/better-chat-mute - //TODO: Implement Better Chat Mute API_IsMuted - https://umod.org/plugins/better-chat-mute - #region Plugin References #pragma warning disable IDE0044, CS0649 [PluginReference] private Plugin Economics; [PluginReference] + private Plugin ServerRewards; + [PluginReference] private Plugin Freeze; [PluginReference] private Plugin PermissionsManager; @@ -57,8 +52,6 @@ public class PlayerAdministration : RustPlugin private Plugin DiscordMessages; [PluginReference] private Plugin BetterChatMute; - [PluginReference] - private Plugin ServerRewards; #pragma warning restore IDE0044, CS0649 #endregion Plugin References @@ -779,8 +772,16 @@ private bool GetIsVoiceMuted(ref BasePlayer aPlayer) => /// /// The player /// - private bool GetIsChatMuted(ref BasePlayer aPlayer) => - aPlayer.HasPlayerFlag(BasePlayer.PlayerFlags.ChatMute); + private bool GetIsChatMuted(ref BasePlayer aPlayer) + { + bool isServerMuted = aPlayer.HasPlayerFlag(BasePlayer.PlayerFlags.ChatMute); + + if (BetterChatMute != null) { + return isServerMuted || (bool)BetterChatMute.Call("API_IsMuted", aPlayer.IPlayer); + } else { + return isServerMuted; + } + } /// /// Check if the player has the freeze.frozen permission @@ -1201,40 +1202,71 @@ private void AddUserPageSecondActionRow(ref Cui aUIObj, string aParent, string a if (VerifyPermission(aUiUserId, CPermVoiceMute) && playerConnected) { if (GetIsVoiceMuted(ref aPlayer)) { - aUIObj.AddButton(aParent, CUserPageBtnVMuteLbAnchor, CUserPageBtnVMuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, - GetMessage("Voice Mute Button Text", aUiUserId)); aUIObj.AddButton(aParent, CUserPageBtnVUnmuteLbAnchor, CUserPageBtnVUnmuteRtAnchor, CuiDefaultColors.ButtonSuccess, CuiDefaultColors.TextAlt, GetMessage("Voice Unmute Button Text", aUiUserId), $"{CVoiceUnmuteUserCmd} {aPlayerId}"); + aUIObj.AddButton(aParent, CUserPageBtnVMuteLbAnchor, CUserPageBtnVMuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, + GetMessage("Voice Mute Button Text", aUiUserId)); } else { - aUIObj.AddButton(aParent, CUserPageBtnVMuteLbAnchor, CUserPageBtnVMuteRtAnchor, CuiDefaultColors.ButtonDanger, CuiDefaultColors.TextAlt, - GetMessage("Voice Mute Button Text", aUiUserId), $"{CVoiceMuteUserCmd} {aPlayerId}"); aUIObj.AddButton(aParent, CUserPageBtnVUnmuteLbAnchor, CUserPageBtnVUnmuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, GetMessage("Voice Unmute Button Text", aUiUserId)); + aUIObj.AddButton(aParent, CUserPageBtnVMuteLbAnchor, CUserPageBtnVMuteRtAnchor, CuiDefaultColors.ButtonDanger, CuiDefaultColors.TextAlt, + GetMessage("Voice Mute Button Text", aUiUserId), $"{CVoiceMuteUserCmd} {aPlayerId}"); } } else { - aUIObj.AddButton(aParent, CUserPageBtnVMuteLbAnchor, CUserPageBtnVMuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, - GetMessage("Voice Mute Button Text", aUiUserId)); aUIObj.AddButton(aParent, CUserPageBtnVUnmuteLbAnchor, CUserPageBtnVUnmuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, GetMessage("Voice Unmute Button Text", aUiUserId)); + aUIObj.AddButton(aParent, CUserPageBtnVMuteLbAnchor, CUserPageBtnVMuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, + GetMessage("Voice Mute Button Text", aUiUserId)); } + } + + /// + /// Add the third row of actions to the parent element + /// + /// Cui object + /// Parent panel name + /// UI destination Player ID (SteamId64) + /// Player ID (SteamId64) + /// Player who's information we need to display + private void AddUserPageThirdActionRow(ref Cui aUIObj, string aParent, string aUiUserId, ulong aPlayerId, ref BasePlayer aPlayer) + { + bool playerConnected = aPlayer.IsConnected; if (VerifyPermission(aUiUserId, CPermChatMute) && playerConnected) { if (GetIsChatMuted(ref aPlayer)) { - aUIObj.AddButton(aParent, CUserPageBtnCMuteLbAnchor, CUserPageBtnCMuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, - GetMessage("Chat Mute Button Text", aUiUserId)); aUIObj.AddButton(aParent, CUserPageBtnCUnmuteLbAnchor, CUserPageBtnCUnmuteRtAnchor, CuiDefaultColors.ButtonSuccess, CuiDefaultColors.TextAlt, GetMessage("Chat Unmute Button Text", aUiUserId), $"{CChatUnmuteUserCmd} {aPlayerId}"); + aUIObj.AddButton(aParent, CUserPageBtnCMuteLbAnchor, CUserPageBtnCMuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, + GetMessage("Chat Mute Button Text", aUiUserId)); + + if (BetterChatMute != null) { + aUIObj.AddButton(aParent, CUserPageBtnCMuteFifteenLbAnchor, CUserPageBtnCMuteFifteenRtAnchor, CuiDefaultColors.ButtonInactive, + CuiDefaultColors.Text, GetMessage("Chat Mute Button Text 15", aUiUserId)); + aUIObj.AddButton(aParent, CUserPageBtnCMuteThirtyLbAnchor, CUserPageBtnCMuteThirtyRtAnchor, CuiDefaultColors.ButtonInactive, + CuiDefaultColors.Text, GetMessage("Chat Mute Button Text 30", aUiUserId)); + aUIObj.AddButton(aParent, CUserPageBtnCMuteSixtyLbAnchor, CUserPageBtnCMuteSixtyRtAnchor, CuiDefaultColors.ButtonInactive, + CuiDefaultColors.Text, GetMessage("Chat Mute Button Text 60", aUiUserId)); + } } else { - aUIObj.AddButton(aParent, CUserPageBtnCMuteLbAnchor, CUserPageBtnCMuteRtAnchor, CuiDefaultColors.ButtonDanger, CuiDefaultColors.TextAlt, - GetMessage("Chat Mute Button Text", aUiUserId), $"{CChatMuteUserCmd} {aPlayerId}"); aUIObj.AddButton(aParent, CUserPageBtnCUnmuteLbAnchor, CUserPageBtnCUnmuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, GetMessage("Chat Unmute Button Text", aUiUserId)); + aUIObj.AddButton(aParent, CUserPageBtnCMuteLbAnchor, CUserPageBtnCMuteRtAnchor, CuiDefaultColors.ButtonDanger, CuiDefaultColors.TextAlt, + GetMessage("Chat Mute Button Text", aUiUserId), $"{CChatMuteUserCmd} {aPlayerId} 0"); + + if (BetterChatMute != null) { + aUIObj.AddButton(aParent, CUserPageBtnCMuteFifteenLbAnchor, CUserPageBtnCMuteFifteenRtAnchor, CuiDefaultColors.ButtonDanger, + CuiDefaultColors.TextAlt, GetMessage("Chat Mute Button Text 15", aUiUserId), $"{CChatMuteUserCmd} {aPlayerId} 15"); + aUIObj.AddButton(aParent, CUserPageBtnCMuteThirtyLbAnchor, CUserPageBtnCMuteThirtyRtAnchor, CuiDefaultColors.ButtonDanger, + CuiDefaultColors.TextAlt, GetMessage("Chat Mute Button Text 30", aUiUserId), $"{CChatMuteUserCmd} {aPlayerId} 30"); + aUIObj.AddButton(aParent, CUserPageBtnCMuteSixtyLbAnchor, CUserPageBtnCMuteSixtyRtAnchor, CuiDefaultColors.ButtonDanger, + CuiDefaultColors.TextAlt, GetMessage("Chat Mute Button Text 60", aUiUserId), $"{CChatMuteUserCmd} {aPlayerId} 60"); + } } } else { - aUIObj.AddButton(aParent, CUserPageBtnCMuteLbAnchor, CUserPageBtnCMuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, - GetMessage("Chat Mute Button Text", aUiUserId)); aUIObj.AddButton(aParent, CUserPageBtnCUnmuteLbAnchor, CUserPageBtnCUnmuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, GetMessage("Chat Unmute Button Text", aUiUserId)); + aUIObj.AddButton(aParent, CUserPageBtnCMuteLbAnchor, CUserPageBtnCMuteRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, + GetMessage("Chat Mute Button Text", aUiUserId)); } } @@ -1246,28 +1278,28 @@ private void AddUserPageSecondActionRow(ref Cui aUIObj, string aParent, string a /// UI destination Player ID (SteamId64) /// Player ID (SteamId64) /// Player who's information we need to display - private void AddUserPageThirdActionRow(ref Cui aUIObj, string aParent, string aUiUserId, ulong aPlayerId, ref BasePlayer aPlayer) + private void AddUserPageFourthActionRow(ref Cui aUIObj, string aParent, string aUiUserId, ulong aPlayerId, ref BasePlayer aPlayer) { if (Freeze == null) { aUIObj.AddButton(aParent, CUserPageBtnFreezeLbAnchor, CUserPageBtnFreezeRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, GetMessage("Freeze Not Installed Button Text", aUiUserId)); } else if (VerifyPermission(aUiUserId, CPermFreeze) && aPlayer.IsConnected) { if (GetIsFrozen(aPlayerId)) { - aUIObj.AddButton(aParent, CUserPageBtnFreezeLbAnchor, CUserPageBtnFreezeRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, - GetMessage("Freeze Button Text", aUiUserId)); aUIObj.AddButton(aParent, CUserPageBtnUnFreezeLbAnchor, CUserPageBtnUnFreezeRtAnchor, CuiDefaultColors.ButtonSuccess, CuiDefaultColors.TextAlt, GetMessage("UnFreeze Button Text", aUiUserId), $"{CUnreezeCmd} {aPlayerId}"); + aUIObj.AddButton(aParent, CUserPageBtnFreezeLbAnchor, CUserPageBtnFreezeRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, + GetMessage("Freeze Button Text", aUiUserId)); } else { - aUIObj.AddButton(aParent, CUserPageBtnFreezeLbAnchor, CUserPageBtnFreezeRtAnchor, CuiDefaultColors.ButtonDanger, CuiDefaultColors.TextAlt, - GetMessage("Freeze Button Text", aUiUserId), $"{CFreezeCmd} {aPlayerId}"); aUIObj.AddButton(aParent, CUserPageBtnUnFreezeLbAnchor, CUserPageBtnUnFreezeRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, GetMessage("UnFreeze Button Text", aUiUserId)); + aUIObj.AddButton(aParent, CUserPageBtnFreezeLbAnchor, CUserPageBtnFreezeRtAnchor, CuiDefaultColors.ButtonDanger, CuiDefaultColors.TextAlt, + GetMessage("Freeze Button Text", aUiUserId), $"{CFreezeCmd} {aPlayerId}"); } } else { - aUIObj.AddButton(aParent, CUserPageBtnFreezeLbAnchor, CUserPageBtnFreezeRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, - GetMessage("Freeze Button Text", aUiUserId)); aUIObj.AddButton(aParent, CUserPageBtnUnFreezeLbAnchor, CUserPageBtnUnFreezeRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, GetMessage("UnFreeze Button Text", aUiUserId)); + aUIObj.AddButton(aParent, CUserPageBtnFreezeLbAnchor, CUserPageBtnFreezeRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, + GetMessage("Freeze Button Text", aUiUserId)); } } @@ -1278,7 +1310,7 @@ private void AddUserPageThirdActionRow(ref Cui aUIObj, string aParent, string aU /// Parent panel name /// UI destination Player ID (SteamId64) /// Player ID (SteamId64) - private void AddUserPageFourthActionRow(ref Cui aUIObj, string aParent, string aUiUserId, ulong aPlayerId) + private void AddUserPageFifthActionRow(ref Cui aUIObj, string aParent, string aUiUserId, ulong aPlayerId) { if (VerifyPermission(aUiUserId, CPermClearInventory)) { aUIObj.AddButton(aParent, CUserPageBtnClearInventoryLbAnchor, CUserPageBtnClearInventoryRtAnchor, CuiDefaultColors.ButtonWarning, @@ -1320,7 +1352,7 @@ private void AddUserPageFourthActionRow(ref Cui aUIObj, string aParent, string a /// Parent panel name /// UI destination Player ID (SteamId64) /// Player ID (SteamId64) - private void AddUserPageFifthActionRow(ref Cui aUIObj, string aParent, string aUiUserId, ulong aPlayerId) + private void AddUserPageSixthActionRow(ref Cui aUIObj, string aParent, string aUiUserId, ulong aPlayerId) { if (VerifyPermission(aUiUserId, CPermTeleport)) { aUIObj.AddButton(aParent, CUserPageBtnTeleportToLbAnchor, CUserPageBtnTeleportToRtAnchor, CuiDefaultColors.ButtonSuccess, @@ -1350,7 +1382,7 @@ private void AddUserPageFifthActionRow(ref Cui aUIObj, string aParent, string aU /// Parent panel name /// UI destination Player ID (SteamId64) /// Player ID (SteamId64) - private void AddUserPageSixthActionRow(ref Cui aUIObj, string aParent, string aUiUserId, ulong aPlayerId) + private void AddUserPageSeventhActionRow(ref Cui aUIObj, string aParent, string aUiUserId, ulong aPlayerId) { if (PermissionsManager == null) { aUIObj.AddButton(aParent, CUserPageBtnPermsLbAnchor, CUserPageBtnPermsRtAnchor, CuiDefaultColors.ButtonInactive, CuiDefaultColors.Text, @@ -1468,16 +1500,18 @@ private void BuildUserPage(ref Cui aUIObj, UiPage aPageType, ulong aPlayerId) // --- Build player action panel // Ban, Kick AddUserPageFirstActionRow(ref aUIObj, actionPanel, uiUserId, aPlayerId, ref player); - // Mute voice, Unmute voice, Mute chat, Unmute chat + // Unmute voice, Mute voice AddUserPageSecondActionRow(ref aUIObj, actionPanel, uiUserId, aPlayerId, ref player); - // Freeze, Unfreeze + // Unmute chat, Mute chat (And timed ones if BetterChat is available) AddUserPageThirdActionRow(ref aUIObj, actionPanel, uiUserId, aPlayerId, ref player); + // Unfreeze, Freeze + AddUserPageFourthActionRow(ref aUIObj, actionPanel, uiUserId, aPlayerId, ref player); // Clear inventory, Reset BP, Reset metabolism - AddUserPageFourthActionRow(ref aUIObj, actionPanel, uiUserId, aPlayerId); - // Teleport to, Teleport, Spectate AddUserPageFifthActionRow(ref aUIObj, actionPanel, uiUserId, aPlayerId); - // Perms + // Teleport to, Teleport, Spectate AddUserPageSixthActionRow(ref aUIObj, actionPanel, uiUserId, aPlayerId); + // Perms + AddUserPageSeventhActionRow(ref aUIObj, actionPanel, uiUserId, aPlayerId); // Hurt 25, Hurt 50, Hurt 75, Hurt 100, Kill AddUserPageEleventhActionRow(ref aUIObj, actionPanel, uiUserId, aPlayerId); // Heal 25, Heal 50, Heal 75, Heal 100, Heal wounds @@ -1751,38 +1785,45 @@ private class ConfigData private readonly CuiPoint CUserPageBtnKickLbAnchor = new CuiPoint(0.17f, 0.86f); private readonly CuiPoint CUserPageBtnKickRtAnchor = new CuiPoint(0.32f, 0.92f); // Row 2 - private readonly CuiPoint CUserPageBtnVMuteLbAnchor = new CuiPoint(0.01f, 0.78f); - private readonly CuiPoint CUserPageBtnVMuteRtAnchor = new CuiPoint(0.16f, 0.84f); - private readonly CuiPoint CUserPageBtnVUnmuteLbAnchor = new CuiPoint(0.17f, 0.78f); - private readonly CuiPoint CUserPageBtnVUnmuteRtAnchor = new CuiPoint(0.32f, 0.84f); - private readonly CuiPoint CUserPageBtnCMuteLbAnchor = new CuiPoint(0.49f, 0.78f); - private readonly CuiPoint CUserPageBtnCMuteRtAnchor = new CuiPoint(0.64f, 0.84f); - private readonly CuiPoint CUserPageBtnCUnmuteLbAnchor = new CuiPoint(0.65f, 0.78f); - private readonly CuiPoint CUserPageBtnCUnmuteRtAnchor = new CuiPoint(0.80f, 0.84f); + private readonly CuiPoint CUserPageBtnVUnmuteLbAnchor = new CuiPoint(0.01f, 0.78f); + private readonly CuiPoint CUserPageBtnVUnmuteRtAnchor = new CuiPoint(0.16f, 0.84f); + private readonly CuiPoint CUserPageBtnVMuteLbAnchor = new CuiPoint(0.17f, 0.78f); + private readonly CuiPoint CUserPageBtnVMuteRtAnchor = new CuiPoint(0.32f, 0.84f); // Row 3 - private readonly CuiPoint CUserPageBtnFreezeLbAnchor = new CuiPoint(0.01f, 0.70f); - private readonly CuiPoint CUserPageBtnFreezeRtAnchor = new CuiPoint(0.16f, 0.76f); - private readonly CuiPoint CUserPageBtnUnFreezeLbAnchor = new CuiPoint(0.17f, 0.70f); - private readonly CuiPoint CUserPageBtnUnFreezeRtAnchor = new CuiPoint(0.32f, 0.76f); + private readonly CuiPoint CUserPageBtnCUnmuteLbAnchor = new CuiPoint(0.01f, 0.70f); + private readonly CuiPoint CUserPageBtnCUnmuteRtAnchor = new CuiPoint(0.16f, 0.76f); + private readonly CuiPoint CUserPageBtnCMuteLbAnchor = new CuiPoint(0.17f, 0.70f); + private readonly CuiPoint CUserPageBtnCMuteRtAnchor = new CuiPoint(0.32f, 0.76f); + private readonly CuiPoint CUserPageBtnCMuteFifteenLbAnchor = new CuiPoint(0.33f, 0.70f); + private readonly CuiPoint CUserPageBtnCMuteFifteenRtAnchor = new CuiPoint(0.48f, 0.76f); + private readonly CuiPoint CUserPageBtnCMuteThirtyLbAnchor = new CuiPoint(0.49f, 0.70f); + private readonly CuiPoint CUserPageBtnCMuteThirtyRtAnchor = new CuiPoint(0.64f, 0.76f); + private readonly CuiPoint CUserPageBtnCMuteSixtyLbAnchor = new CuiPoint(0.65f, 0.70f); + private readonly CuiPoint CUserPageBtnCMuteSixtyRtAnchor = new CuiPoint(0.80f, 0.76f); // Row 4 - private readonly CuiPoint CUserPageBtnClearInventoryLbAnchor = new CuiPoint(0.01f, 0.62f); - private readonly CuiPoint CUserPageBtnClearInventoryRtAnchor = new CuiPoint(0.16f, 0.68f); - private readonly CuiPoint CUserPageBtnResetBPLbAnchor = new CuiPoint(0.17f, 0.62f); - private readonly CuiPoint CUserPageBtnResetBPRtAnchor = new CuiPoint(0.32f, 0.68f); - private readonly CuiPoint CUserPageBtnResetMetabolismLbAnchor = new CuiPoint(0.33f, 0.62f); - private readonly CuiPoint CUserPageBtnResetMetabolismRtAnchor = new CuiPoint(0.48f, 0.68f); - private readonly CuiPoint CUserPageBtnRecoverMetabolismLbAnchor = new CuiPoint(0.49f, 0.62f); - private readonly CuiPoint CUserPageBtnRecoverMetabolismRtAnchor = new CuiPoint(0.64f, 0.68f); + private readonly CuiPoint CUserPageBtnUnFreezeLbAnchor = new CuiPoint(0.01f, 0.62f); + private readonly CuiPoint CUserPageBtnUnFreezeRtAnchor = new CuiPoint(0.16f, 0.68f); + private readonly CuiPoint CUserPageBtnFreezeLbAnchor = new CuiPoint(0.17f, 0.62f); + private readonly CuiPoint CUserPageBtnFreezeRtAnchor = new CuiPoint(0.32f, 0.68f); // Row 5 - private readonly CuiPoint CUserPageBtnTeleportToLbAnchor = new CuiPoint(0.01f, 0.54f); - private readonly CuiPoint CUserPageBtnTeleportToRtAnchor = new CuiPoint(0.16f, 0.60f); - private readonly CuiPoint CUserPageBtnTeleportLbAnchor = new CuiPoint(0.17f, 0.54f); - private readonly CuiPoint CUserPageBtnTeleportRtAnchor = new CuiPoint(0.32f, 0.60f); - private readonly CuiPoint CUserPageBtnSpectateLbAnchor = new CuiPoint(0.33f, 0.54f); - private readonly CuiPoint CUserPageBtnSpectateRtAnchor = new CuiPoint(0.48f, 0.60f); + private readonly CuiPoint CUserPageBtnClearInventoryLbAnchor = new CuiPoint(0.01f, 0.54f); + private readonly CuiPoint CUserPageBtnClearInventoryRtAnchor = new CuiPoint(0.16f, 0.60f); + private readonly CuiPoint CUserPageBtnResetBPLbAnchor = new CuiPoint(0.17f, 0.54f); + private readonly CuiPoint CUserPageBtnResetBPRtAnchor = new CuiPoint(0.32f, 0.60f); + private readonly CuiPoint CUserPageBtnResetMetabolismLbAnchor = new CuiPoint(0.33f, 0.54f); + private readonly CuiPoint CUserPageBtnResetMetabolismRtAnchor = new CuiPoint(0.48f, 0.60f); + private readonly CuiPoint CUserPageBtnRecoverMetabolismLbAnchor = new CuiPoint(0.49f, 0.54f); + private readonly CuiPoint CUserPageBtnRecoverMetabolismRtAnchor = new CuiPoint(0.64f, 0.60f); // Row 6 - private readonly CuiPoint CUserPageBtnPermsLbAnchor = new CuiPoint(0.01f, 0.46f); - private readonly CuiPoint CUserPageBtnPermsRtAnchor = new CuiPoint(0.16f, 0.52f); + private readonly CuiPoint CUserPageBtnTeleportToLbAnchor = new CuiPoint(0.01f, 0.46f); + private readonly CuiPoint CUserPageBtnTeleportToRtAnchor = new CuiPoint(0.16f, 0.52f); + private readonly CuiPoint CUserPageBtnTeleportLbAnchor = new CuiPoint(0.17f, 0.46f); + private readonly CuiPoint CUserPageBtnTeleportRtAnchor = new CuiPoint(0.32f, 0.52f); + private readonly CuiPoint CUserPageBtnSpectateLbAnchor = new CuiPoint(0.33f, 0.46f); + private readonly CuiPoint CUserPageBtnSpectateRtAnchor = new CuiPoint(0.48f, 0.52f); + // Row 7 + private readonly CuiPoint CUserPageBtnPermsLbAnchor = new CuiPoint(0.01f, 0.38f); + private readonly CuiPoint CUserPageBtnPermsRtAnchor = new CuiPoint(0.16f, 0.44f); // Row 11 private readonly CuiPoint CUserPageBtnHurt25LbAnchor = new CuiPoint(0.01f, 0.10f); private readonly CuiPoint CUserPageBtnHurt25RtAnchor = new CuiPoint(0.16f, 0.16f); @@ -1946,11 +1987,35 @@ protected override void LoadDefaultMessages() { "Go Button Text", "Go" }, + { "Unban Button Text", "Unban" }, + { "Ban Button Text", "Ban" }, + { "Kick Button Text", "Kick" }, + + { "Voice Unmute Button Text", "Unmute Voice" }, + { "Voice Mute Button Text", "Mute Voice" }, + + { "Chat Unmute Button Text", "Unmute Chat" }, + { "Chat Mute Button Text", "Mute Chat" }, + { "Chat Mute Button Text 15", "Mute Chat 15 Min" }, + { "Chat Mute Button Text 30", "Mute Chat 30 Min" }, + { "Chat Mute Button Text 60", "Mute Chat 60 Min" }, + + { "UnFreeze Button Text", "UnFreeze" }, + { "Freeze Button Text", "Freeze" }, + { "Freeze Not Installed Button Text", "Freeze Not Installed" }, + { "Clear Inventory Button Text", "Clear Inventory" }, { "Reset Blueprints Button Text", "Reset Blueprints" }, { "Reset Metabolism Button Text", "Reset Metabolism" }, { "Recover Metabolism Button Text", "Recover Metabolism" }, + { "Teleport To Player Button Text", "Teleport To Player" }, + { "Teleport Player Button Text", "Teleport Player" }, + { "Spectate Player Button Text", "Spectate Player" }, + + { "Perms Button Text", "Permissions" }, + { "Perms Not Installed Button Text", "Perms Not Installed" }, + { "Hurt 25 Button Text", "Hurt 25" }, { "Hurt 50 Button Text", "Hurt 50" }, { "Hurt 75 Button Text", "Hurt 75" }, @@ -1961,26 +2026,7 @@ protected override void LoadDefaultMessages() { "Heal 50 Button Text", "Heal 50" }, { "Heal 75 Button Text", "Heal 75" }, { "Heal 100 Button Text", "Heal 100" }, - { "Heal Wounds Button Text", "Heal Wounds" }, - - { "Ban Button Text", "Ban" }, - { "Kick Button Text", "Kick" }, - { "Unban Button Text", "Unban" }, - - { "Perms Button Text", "Permissions" }, - { "Perms Not Installed Button Text", "Perms Not Installed" }, - { "Freeze Button Text", "Freeze" }, - { "Freeze Not Installed Button Text", "Freeze Not Installed" }, - { "UnFreeze Button Text", "UnFreeze" }, - - { "Voice Mute Button Text", "Mute Voice" }, - { "Voice Unmute Button Text", "Unmute Voice" }, - { "Chat Mute Button Text", "Mute Chat" }, - { "Chat Unmute Button Text", "Unmute Chat" }, - - { "Teleport To Player Button Text", "Teleport To Player" }, - { "Teleport Player Button Text", "Teleport Player" }, - { "Spectate Player Button Text", "Spectate Player" } + { "Heal Wounds Button Text", "Heal Wounds" } }, this, "en"); LogDebug("Default messages loaded"); } @@ -2064,22 +2110,19 @@ private void PlayerAdministrationSwitchUICallback(ConsoleSystem.Arg aArg) }; } - [ConsoleCommand(CKickUserCmd)] - private void PlayerAdministrationKickUserCallback(ConsoleSystem.Arg aArg) + [ConsoleCommand(CUnbanUserCmd)] + private void PlayerAdministrationUnbanUserCallback(ConsoleSystem.Arg aArg) { - LogDebug("PlayerAdministrationKickUserCallback was called"); + LogDebug("PlayerAdministrationUnbanUserCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; - if (!VerifyPermission(ref player, CPermKick, true) || !GetTargetFromArg(ref aArg, out targetId)) + if (!VerifyPermission(ref player, CPermBan, true) || !GetTargetFromArg(ref aArg, out targetId)) return; - BasePlayer targetPlayer = BasePlayer.FindByID(targetId); - string kickReasonMsg = GetMessage("Kick Reason Message Text", targetId.ToString()); - targetPlayer?.Kick(kickReasonMsg); - LogInfo($"{player.displayName}: Kicked user ID {targetId}"); - SendDiscordKickBanMessage(player.displayName, player.UserIDString, targetPlayer.displayName, targetPlayer.UserIDString, kickReasonMsg, false); - BuildUI(player, UiPage.PlayerPage, targetId.ToString()); + Player.Unban(targetId); + LogInfo($"{player.displayName}: Unbanned user ID {targetId}"); + BuildUI(player, UiPage.Main); } [ConsoleCommand(CBanUserCmd)] @@ -2119,33 +2162,37 @@ private void PlayerAdministrationMainPageBanByIdCallback(ConsoleSystem.Arg aArg) BuildUI(player, UiPage.Main); } - [ConsoleCommand(CUnbanUserCmd)] - private void PlayerAdministrationUnbanUserCallback(ConsoleSystem.Arg aArg) + [ConsoleCommand(CKickUserCmd)] + private void PlayerAdministrationKickUserCallback(ConsoleSystem.Arg aArg) { - LogDebug("PlayerAdministrationUnbanUserCallback was called"); + LogDebug("PlayerAdministrationKickUserCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; - if (!VerifyPermission(ref player, CPermBan, true) || !GetTargetFromArg(ref aArg, out targetId)) + if (!VerifyPermission(ref player, CPermKick, true) || !GetTargetFromArg(ref aArg, out targetId)) return; - Player.Unban(targetId); - LogInfo($"{player.displayName}: Unbanned user ID {targetId}"); - BuildUI(player, UiPage.Main); + BasePlayer targetPlayer = BasePlayer.FindByID(targetId); + string kickReasonMsg = GetMessage("Kick Reason Message Text", targetId.ToString()); + targetPlayer?.Kick(kickReasonMsg); + LogInfo($"{player.displayName}: Kicked user ID {targetId}"); + SendDiscordKickBanMessage(player.displayName, player.UserIDString, targetPlayer.displayName, targetPlayer.UserIDString, kickReasonMsg, false); + BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } - [ConsoleCommand(CPermsCmd)] - private void PlayerAdministrationRunPermsCallback(ConsoleSystem.Arg aArg) + [ConsoleCommand(CVoiceUnmuteUserCmd)] + private void PlayerAdministrationVoiceUnmuteUserCallback(ConsoleSystem.Arg aArg) { - LogDebug("PlayerAdministrationRunPermsCallback was called"); + LogDebug("PlayerAdministrationVoiceUnmuteUserCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; - if (!VerifyPermission(ref player, CPermPerms, true) || !GetTargetFromArg(ref aArg, out targetId)) + if (!VerifyPermission(ref player, CPermVoiceMute, true) || !GetTargetFromArg(ref aArg, out targetId)) return; - player.SendConsoleCommand($"chat.say \"/{CPermsPermsCmd} {targetId}\""); - LogInfo($"{player.displayName}: Opened the permissions manager for user ID {targetId}"); + (BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId))?.SetPlayerFlag(BasePlayer.PlayerFlags.VoiceMuted, false); + LogInfo($"{player.displayName}: Voice unmuted user ID {targetId}"); + BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } [ConsoleCommand(CVoiceMuteUserCmd)] @@ -2163,18 +2210,23 @@ private void PlayerAdministrationVoiceMuteUserCallback(ConsoleSystem.Arg aArg) BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } - [ConsoleCommand(CVoiceUnmuteUserCmd)] - private void PlayerAdministrationVoiceUnmuteUserCallback(ConsoleSystem.Arg aArg) + [ConsoleCommand(CChatUnmuteUserCmd)] + private void PlayerAdministrationChatUnmuteUserCallback(ConsoleSystem.Arg aArg) { - LogDebug("PlayerAdministrationVoiceUnmuteUserCallback was called"); + LogDebug("PlayerAdministrationChatUnmuteUserCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; - if (!VerifyPermission(ref player, CPermVoiceMute, true) || !GetTargetFromArg(ref aArg, out targetId)) + if (!VerifyPermission(ref player, CPermChatMute, true) || !GetTargetFromArg(ref aArg, out targetId)) return; - (BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId))?.SetPlayerFlag(BasePlayer.PlayerFlags.VoiceMuted, false); - LogInfo($"{player.displayName}: Voice unmuted user ID {targetId}"); + BasePlayer target = BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId); + + if (BetterChatMute != null && target != null) + BetterChatMute.Call("API_Unmute", target.IPlayer); + + target?.SetPlayerFlag(BasePlayer.PlayerFlags.ChatMute, false); + LogInfo($"{player.displayName}: Chat unmuted user ID {targetId}"); BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } @@ -2184,28 +2236,41 @@ private void PlayerAdministrationChatMuteUserCallback(ConsoleSystem.Arg aArg) LogDebug("PlayerAdministrationChatMuteUserCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; + float time; - if (!VerifyPermission(ref player, CPermChatMute, true) || !GetTargetFromArg(ref aArg, out targetId)) + if (!VerifyPermission(ref player, CPermChatMute, true) || !GetTargetAmountFromArg(ref aArg, out targetId, out time)) return; - (BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId))?.SetPlayerFlag(BasePlayer.PlayerFlags.ChatMute, true); + BasePlayer target = BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId); + + if (BetterChatMute != null && target != null) { + if (time == 0f) { + BetterChatMute.Call("API_Mute", target.IPlayer, player.IPlayer); + } else { + BetterChatMute.Call("API_TimeMute", target.IPlayer, player.IPlayer, TimeSpan.FromMinutes(time)); + } + } else { + target?.SetPlayerFlag(BasePlayer.PlayerFlags.ChatMute, true); + } + LogInfo($"{player.displayName}: Chat muted user ID {targetId}"); BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } - [ConsoleCommand(CChatUnmuteUserCmd)] - private void PlayerAdministrationChatUnmuteUserCallback(ConsoleSystem.Arg aArg) + [ConsoleCommand(CUnreezeCmd)] + private void PlayerAdministrationUnfreezeCallback(ConsoleSystem.Arg aArg) { - LogDebug("PlayerAdministrationChatUnmuteUserCallback was called"); + LogDebug("PlayerAdministrationUnfreezeCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; - if (!VerifyPermission(ref player, CPermChatMute, true) || !GetTargetFromArg(ref aArg, out targetId)) + if (!VerifyPermission(ref player, CPermFreeze, true) || !GetTargetFromArg(ref aArg, out targetId)) return; - (BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId))?.SetPlayerFlag(BasePlayer.PlayerFlags.ChatMute, false); - LogInfo($"{player.displayName}: Chat unmuted user ID {targetId}"); - BuildUI(player, UiPage.PlayerPage, targetId.ToString()); + player.SendConsoleCommand($"{CFreezeUnfreezeCmd} {targetId}"); + LogInfo($"{player.displayName}: Chat unfroze user ID {targetId}"); + // Let code execute, then reload screen + timer.Once(0.1f, () => BuildUI(player, UiPage.PlayerPage, targetId.ToString())); } [ConsoleCommand(CFreezeCmd)] @@ -2224,22 +2289,6 @@ private void PlayerAdministrationFreezeCallback(ConsoleSystem.Arg aArg) timer.Once(0.1f, () => BuildUI(player, UiPage.PlayerPage, targetId.ToString())); } - [ConsoleCommand(CUnreezeCmd)] - private void PlayerAdministrationUnfreezeCallback(ConsoleSystem.Arg aArg) - { - LogDebug("PlayerAdministrationUnfreezeCallback was called"); - BasePlayer player = aArg.Player(); - ulong targetId; - - if (!VerifyPermission(ref player, CPermFreeze, true) || !GetTargetFromArg(ref aArg, out targetId)) - return; - - player.SendConsoleCommand($"{CFreezeUnfreezeCmd} {targetId}"); - LogInfo($"{player.displayName}: Chat unfroze user ID {targetId}"); - // Let code execute, then reload screen - timer.Once(0.1f, () => BuildUI(player, UiPage.PlayerPage, targetId.ToString())); - } - [ConsoleCommand(CClearUserInventoryCmd)] private void PlayerAdministrationClearUserInventoryCallback(ConsoleSystem.Arg aArg) { @@ -2311,105 +2360,119 @@ private void PlayerAdministrationRecoverUserMetabolismCallback(ConsoleSystem.Arg BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } - [ConsoleCommand(CHurtUserCmd)] - private void PlayerAdministrationHurtUserCallback(ConsoleSystem.Arg aArg) + [ConsoleCommand(CTeleportToUserCmd)] + private void PlayerAdministrationTeleportToUserCallback(ConsoleSystem.Arg aArg) { - LogDebug("PlayerAdministrationHurtUserCallback was called"); + LogDebug("PlayerAdministrationTeleportToUserCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; - float amount; - if (!VerifyPermission(ref player, CPermHurt, true) || !GetTargetAmountFromArg(ref aArg, out targetId, out amount)) + if (!VerifyPermission(ref player, CPermTeleport, true) || !GetTargetFromArg(ref aArg, out targetId)) return; - (BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId))?.Hurt(amount); - LogInfo($"{player.displayName}: Hurt user ID {targetId} for {amount} points"); + player.Teleport(BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId)); + LogInfo($"{player.displayName}: Teleported to user ID {targetId}"); BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } - [ConsoleCommand(CKillUserCmd)] - private void PlayerAdministrationKillUserCallback(ConsoleSystem.Arg aArg) + [ConsoleCommand(CTeleportUserCmd)] + private void PlayerAdministrationTeleportUserCallback(ConsoleSystem.Arg aArg) { - LogDebug("PlayerAdministrationKillUserCallback was called"); + LogDebug("PlayerAdministrationTeleportUserCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; - if (!VerifyPermission(ref player, CPermKill, true) || !GetTargetFromArg(ref aArg, out targetId)) + if (!VerifyPermission(ref player, CPermTeleport, true) || !GetTargetFromArg(ref aArg, out targetId)) return; - (BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId))?.Die(); - LogInfo($"{player.displayName}: Killed user ID {targetId}"); + BasePlayer targetPlayer = BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId); + targetPlayer.Teleport(player); + LogInfo($"{targetPlayer.displayName}: Teleported to admin {player.displayName}"); BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } - [ConsoleCommand(CHealUserCmd)] - private void PlayerAdministrationHealUserCallback(ConsoleSystem.Arg aArg) + [ConsoleCommand(CSpectateUserCmd)] + private void PlayerAdministrationSpectateUserCallback(ConsoleSystem.Arg aArg) { - LogDebug("PlayerAdministrationHealUserCallback was called"); + LogDebug("PlayerAdministrationSpectateUserCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; - float amount; - if (!VerifyPermission(ref player, CPermHeal, true) || !GetTargetAmountFromArg(ref aArg, out targetId, out amount)) + if (!VerifyPermission(ref player, CPermSpectate, true) || !GetTargetFromArg(ref aArg, out targetId)) return; - BasePlayer targetPlayer = BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId); - - if (targetPlayer.IsWounded()) - targetPlayer.StopWounded(); + if (!player.IsDead()) + player.DieInstantly(); - targetPlayer.Heal(amount); - LogInfo($"{player.displayName}: Healed user ID {targetId} for {amount} points"); + player.StartSpectating(); + player.UpdateSpectateTarget(targetId.ToString()); + LogInfo($"{player.displayName}: Started spectating user ID {targetId}"); BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } - [ConsoleCommand(CTeleportToUserCmd)] - private void PlayerAdministrationTeleportToUserCallback(ConsoleSystem.Arg aArg) + [ConsoleCommand(CPermsCmd)] + private void PlayerAdministrationRunPermsCallback(ConsoleSystem.Arg aArg) { - LogDebug("PlayerAdministrationTeleportToUserCallback was called"); + LogDebug("PlayerAdministrationRunPermsCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; - if (!VerifyPermission(ref player, CPermTeleport, true) || !GetTargetFromArg(ref aArg, out targetId)) + if (!VerifyPermission(ref player, CPermPerms, true) || !GetTargetFromArg(ref aArg, out targetId)) return; - player.Teleport(BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId)); - LogInfo($"{player.displayName}: Teleported to user ID {targetId}"); + player.SendConsoleCommand($"chat.say \"/{CPermsPermsCmd} {targetId}\""); + LogInfo($"{player.displayName}: Opened the permissions manager for user ID {targetId}"); + } + + [ConsoleCommand(CHurtUserCmd)] + private void PlayerAdministrationHurtUserCallback(ConsoleSystem.Arg aArg) + { + LogDebug("PlayerAdministrationHurtUserCallback was called"); + BasePlayer player = aArg.Player(); + ulong targetId; + float amount; + + if (!VerifyPermission(ref player, CPermHurt, true) || !GetTargetAmountFromArg(ref aArg, out targetId, out amount)) + return; + + (BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId))?.Hurt(amount); + LogInfo($"{player.displayName}: Hurt user ID {targetId} for {amount} points"); BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } - [ConsoleCommand(CTeleportUserCmd)] - private void PlayerAdministrationTeleportUserCallback(ConsoleSystem.Arg aArg) + [ConsoleCommand(CKillUserCmd)] + private void PlayerAdministrationKillUserCallback(ConsoleSystem.Arg aArg) { - LogDebug("PlayerAdministrationTeleportUserCallback was called"); + LogDebug("PlayerAdministrationKillUserCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; - if (!VerifyPermission(ref player, CPermTeleport, true) || !GetTargetFromArg(ref aArg, out targetId)) + if (!VerifyPermission(ref player, CPermKill, true) || !GetTargetFromArg(ref aArg, out targetId)) return; - BasePlayer targetPlayer = BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId); - targetPlayer.Teleport(player); - LogInfo($"{targetPlayer.displayName}: Teleported to admin {player.displayName}"); + (BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId))?.Die(); + LogInfo($"{player.displayName}: Killed user ID {targetId}"); BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } - [ConsoleCommand(CSpectateUserCmd)] - private void PlayerAdministrationSpectateUserCallback(ConsoleSystem.Arg aArg) + [ConsoleCommand(CHealUserCmd)] + private void PlayerAdministrationHealUserCallback(ConsoleSystem.Arg aArg) { - LogDebug("PlayerAdministrationSpectateUserCallback was called"); + LogDebug("PlayerAdministrationHealUserCallback was called"); BasePlayer player = aArg.Player(); ulong targetId; + float amount; - if (!VerifyPermission(ref player, CPermSpectate, true) || !GetTargetFromArg(ref aArg, out targetId)) + if (!VerifyPermission(ref player, CPermHeal, true) || !GetTargetAmountFromArg(ref aArg, out targetId, out amount)) return; - if (!player.IsDead()) - player.DieInstantly(); + BasePlayer targetPlayer = BasePlayer.FindByID(targetId) ?? BasePlayer.FindSleeping(targetId); - player.StartSpectating(); - player.UpdateSpectateTarget(targetId.ToString()); - LogInfo($"{player.displayName}: Started spectating user ID {targetId}"); + if (targetPlayer.IsWounded()) + targetPlayer.StopWounded(); + + targetPlayer.Heal(amount); + LogInfo($"{player.displayName}: Healed user ID {targetId} for {amount} points"); BuildUI(player, UiPage.PlayerPage, targetId.ToString()); } #endregion Command Callbacks diff --git a/README.md b/README.md index 62c09e4..3e55e35 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,12 @@ - Teleporting a player to yourself - Spectating a player - The ability to see a user's vitals, status and steamID64 -- Use of PermissionsManager plugin to edit Oxide user permissions on a user -- Use of Freeze plugin to freeze/unfreeze user position (Only for English language users, Freeze uses localized commands!!!) - Use of Economics plugin to show player's current balance - Use of ServerRewards plugin to show player's current reward points +- Use of Freeze plugin to freeze/unfreeze user position (Only for English language users, Freeze uses localized commands!!!) +- Use of PermissionsManager plugin to edit Oxide user permissions on a user - Use of DiscordMessages plugin to send a fancy message to Discord for each ban and kick +- Use of BetterChatMute plugin to mute players in an improved manner - Filtering through users via the "search" function (Case insensitive and selects both names and IDs that contain the text written in the input) ## Permissions @@ -145,11 +146,35 @@ The default messages are in the `PlayerAdministration.json` file under the `oxid "Go Button Text": "Go", + "Unban Button Text": "Unban", + "Ban Button Text": "Ban", + "Kick Button Text": "Kick", + + "Voice Unmute Button Text": "Unmute Voice", + "Voice Mute Button Text": "Mute Voice", + + "Chat Unmute Button Text": "Unmute Chat", + "Chat Mute Button Text": "Mute Chat", + "Chat Mute Button Text 15": "Mute Chat 15 Min", + "Chat Mute Button Text 30": "Mute Chat 30 Min", + "Chat Mute Button Text 60": "Mute Chat 60 Min", + + "UnFreeze Button Text": "UnFreeze", + "Freeze Button Text": "Freeze", + "Freeze Not Installed Button Text": "Freeze Not Installed", + "Clear Inventory Button Text": "Clear Inventory", "Reset Blueprints Button Text": "Reset Blueprints", "Reset Metabolism Button Text": "Reset Metabolism", "Recover Metabolism Button Text": "Recover Metabolism", + "Teleport To Player Button Text": "Teleport To Player", + "Teleport Player Button Text": "Teleport Player", + "Spectate Player Button Text": "Spectate Player", + + "Perms Button Text": "Permissions", + "Perms Not Installed Button Text": "Perms Not Installed", + "Hurt 25 Button Text": "Hurt 25", "Hurt 50 Button Text": "Hurt 50", "Hurt 75 Button Text": "Hurt 75", @@ -160,25 +185,6 @@ The default messages are in the `PlayerAdministration.json` file under the `oxid "Heal 50 Button Text": "Heal 50", "Heal 75 Button Text": "Heal 75", "Heal 100 Button Text": "Heal 100", - "Heal Wounds Button Text": "Heal Wounds", - - "Ban Button Text": "Ban", - "Kick Button Text": "Kick", - "Unban Button Text": "Unban", - - "Perms Button Text": "Permissions", - "Perms Not Installed Button Text": "Perms Not Installed", - "Freeze Button Text": "Freeze", - "Freeze Not Installed Button Text": "Freeze Not Installed", - "UnFreeze Button Text": "UnFreeze", - - "Voice Mute Button Text": "Mute Voice", - "Voice Unmute Button Text": "Unmute Voice", - "Chat Mute Button Text": "Mute Chat", - "Chat Unmute Button Text": "Unmute Chat", - - "Teleport To Player Button Text": "Teleport To Player", - "Teleport Player Button Text": "Teleport Player", - "Spectate Player Button Text": "Spectate Player" + "Heal Wounds Button Text": "Heal Wounds" } ```