using System; using System.Collections.Generic; using Newtonsoft.Json; using Oxide.Core.Plugins; using Facepunch.Extend; using CompanionServer.Handlers; using WebSocketSharp; using System.Linq; namespace Oxide.Plugins { [Info("Admin Logger", "AK", "2.3.4")] [Description("Logs admin commands usage in a file and console.")] internal class AdminLogger : CovalencePlugin { [PluginReference] private Plugin Vanish, AdminRadar, NightVision, ConvertStatus, DiscordMessages, InventoryViewer, PlayerAdministration, Freeze, Backpacks; #region Vars private Dictionary noclipState = new Dictionary(); private Dictionary godmodeState = new Dictionary(); private Dictionary spectateState = new Dictionary(); private HashSet adminList = new HashSet(); #endregion Vars #region Config private ConfigData configData; private class ConfigData { [JsonProperty(PropertyName = "Log to console (true/false)")] public bool LogToConsole { get; set; } [JsonProperty(PropertyName = "Update frequency (s)")] public float UpdateFreq { get; set; } [JsonProperty(PropertyName = "Log filename")] public string LogFileName { get; set; } [JsonProperty(PropertyName = "Enable Discord Messages (true/false)")] public bool DiscordLog { get; set; } [JsonProperty(PropertyName = "Discord Messages webhook")] public string DiscordWebhook { get; set; } [JsonProperty(PropertyName = "Exclude List")] public List ExcludeList { get; set; } [JsonProperty(PropertyName = "Default admin commands")] public DefaultCommandsOptions DefaultCommands { get; set; } [JsonProperty(PropertyName = "Admin plugins")] public PluginsCommandsOptions PluginsCommands { get; set; } public class DefaultCommandsOptions { [JsonProperty(PropertyName = "Admin connections logging (true/false)")] public bool ConnectionLog { get; set; } [JsonProperty(PropertyName = "Noclip logging (true/false)")] public bool NoclipLog { get; set; } [JsonProperty(PropertyName = "GodMode logging (true/false)")] public bool GodmodeLog { get; set; } [JsonProperty(PropertyName = "Spectate logging (true/false)")] public bool SpectateLog { get; set; } [JsonProperty(PropertyName = "Kill player logging (true/false)")] public bool KillPlayerLog { get; set; } [JsonProperty(PropertyName = "Admin events logging (true/false)")] public bool EventsAllLog { get; set; } [JsonProperty(PropertyName = "Admin event commands")] public EventsLoggingOptions EventsLogging { get; set; } [JsonProperty(PropertyName = "Kick logging (true/false)")] public bool KickAllLog { get; set; } [JsonProperty(PropertyName = "Kick commands")] public KickLoggingOptions KickLogging { get; set; } [JsonProperty(PropertyName = "Ban logging (true/false)")] public bool BanAllLog { get; set; } [JsonProperty(PropertyName = "Ban commands")] public BanLoggingOptions BanLogging { get; set; } [JsonProperty(PropertyName = "Mute logging (true/false)")] public bool MuteAllLog { get; set; } [JsonProperty(PropertyName = "Mute commands")] public MuteLoggingOptions MuteLogging { get; set; } [JsonProperty(PropertyName = "Entity logging (true/false)")] public bool EntAllLog { get; set; } [JsonProperty(PropertyName = "Entity commands")] public EntityLoggingOptions EntityLogging { get; set; } [JsonProperty(PropertyName = "Teleport logging (true/false)")] public bool TeleportAllLog { get; set; } [JsonProperty(PropertyName = "Teleport commands")] public TeleportLoggingOptions TeleportLogging { get; set; } [JsonProperty(PropertyName = "Give items logging (true/false)")] public bool GiveAllLog { get; set; } [JsonProperty(PropertyName = "Give commands")] public GiveLoggingOptions GiveLogging { get; set; } [JsonProperty(PropertyName = "Spawn logging (true/false)")] public bool SpawnAllLog { get; set; } [JsonProperty(PropertyName = "Spawn commands")] public SpawnLoggingOptions SpawnLogging { get; set; } } public class PluginsCommandsOptions { [JsonProperty(PropertyName = "Vanish logging (true/false)")] public bool VanishLog { get; set; } [JsonProperty(PropertyName = "Admin Radar logging (true/false)")] public bool RadarLog { get; set; } [JsonProperty(PropertyName = "Night Vision logging (true/false)")] public bool NightLog { get; set; } [JsonProperty(PropertyName = "Convert Status logging (true/false)")] public bool ConvertLog { get; set; } [JsonProperty(PropertyName = "Inventory Viewer logging (true/false)")] public bool InventoryViewerLog { get; set; } [JsonProperty(PropertyName = "Backpacks logging (true/false)")] public bool BackpacksLog { get; set; } [JsonProperty(PropertyName = "Freeze logging (true/false)")] public bool FreezeAllLog { get; set; } [JsonProperty(PropertyName = "Freeze commands")] public FreezeLoggingOptions FreezeLogging { get; set; } [JsonProperty(PropertyName = "Player Administration logging (true/false)")] public bool PlayerAdministrationAllLog { get; set; } [JsonProperty(PropertyName = "Player Administration commands")] public PlayerAdministrationLoggingOptions PlayerAdministrationLogging { get; set; } } public class EventsLoggingOptions { [JsonProperty(PropertyName = "[Attack Heli] heli.call")] public bool HeliCallLog { get; set; } [JsonProperty(PropertyName = "[Attack Heli] heli.calltome")] public bool HeliCallToMeLog { get; set; } [JsonProperty(PropertyName = "[Attack Heli] drop")] public bool HeliDropLog { get; set; } [JsonProperty(PropertyName = "[Airdrop] supply.call")] public bool AirdropRandomLog { get; set; } [JsonProperty(PropertyName = "[Airdrop] supply.drop")] public bool AirdropPosLog { get; set; } } public class KickLoggingOptions { [JsonProperty(PropertyName = "kick")] public bool KickLog { get; set; } [JsonProperty(PropertyName = "kickall")] public bool KickEveryoneLog { get; set; } } public class BanLoggingOptions { [JsonProperty(PropertyName = "ban")] public bool BanLog { get; set; } [JsonProperty(PropertyName = "unban")] public bool UnbanLog { get; set; } } public class MuteLoggingOptions { [JsonProperty(PropertyName = "mute")] public bool MuteLog { get; set; } [JsonProperty(PropertyName = "unmute")] public bool UnmuteLog { get; set; } } public class EntityLoggingOptions { [JsonProperty(PropertyName = "ent kill")] public bool EntKillLog { get; set; } [JsonProperty(PropertyName = "ent who")] public bool EntWhoLog { get; set; } [JsonProperty(PropertyName = "ent lock")] public bool EntLockLog { get; set; } [JsonProperty(PropertyName = "ent unlock")] public bool EntUnlockLog { get; set; } [JsonProperty(PropertyName = "ent auth")] public bool EntAuthLog { get; set; } } public class TeleportLoggingOptions { [JsonProperty(PropertyName = "teleport")] public bool TeleportLog { get; set; } [JsonProperty(PropertyName = "teleportpos")] public bool TeleportPosLog { get; set; } [JsonProperty(PropertyName = "teleport2me")] public bool TeleportToMeLog { get; set; } } public class GiveLoggingOptions { [JsonProperty(PropertyName = "give")] public bool GiveLog { get; set; } [JsonProperty(PropertyName = "giveid")] public bool GiveIdLog { get; set; } [JsonProperty(PropertyName = "givearm")] public bool GiveArmLog { get; set; } [JsonProperty(PropertyName = "giveto")] public bool GiveToLog { get; set; } [JsonProperty(PropertyName = "giveall")] public bool GiveAllLog { get; set; } } public class SpawnLoggingOptions { [JsonProperty(PropertyName = "spawn")] public bool SpawnLog { get; set; } [JsonProperty(PropertyName = "spawnat")] public bool SpawnAtLog { get; set; } [JsonProperty(PropertyName = "spawnhere")] public bool SpawnHereLog { get; set; } [JsonProperty(PropertyName = "spawnitem")] public bool SpawnItemLog { get; set; } } public class FreezeLoggingOptions { [JsonProperty(PropertyName = "freeze")] public bool FreezeLog { get; set; } [JsonProperty(PropertyName = "unfreeze")] public bool UnfreezeLog { get; set; } [JsonProperty(PropertyName = "freezeall")] public bool AllFreezeLog { get; set; } [JsonProperty(PropertyName = "unfreezeall")] public bool AllUnfreezeLog { get; set; } } public class PlayerAdministrationLoggingOptions { [JsonProperty(PropertyName = "OpenPadminCmd")] public bool OpenPadminCmdLog { get; set; } [JsonProperty(PropertyName = "ClosePadminCmd")] public bool ClosePadminCmdLog { get; set; } [JsonProperty(PropertyName = "BanUserCmd")] public bool BanUserCmdLog { get; set; } [JsonProperty(PropertyName = "UnbanUserCmd")] public bool UnbanUserCmdLog { get; set; } [JsonProperty(PropertyName = "KickUserCmd")] public bool KickUserCmdLog { get; set; } [JsonProperty(PropertyName = "MuteUserCmd")] public bool MuteUserCmdLog { get; set; } [JsonProperty(PropertyName = "UnmuteUserCmd")] public bool UnmuteUserCmdLog { get; set; } [JsonProperty(PropertyName = "FreezeCmd")] public bool FreezeCmdLog { get; set; } [JsonProperty(PropertyName = "UnreezeCmd")] public bool UnreezeCmdLog { get; set; } [JsonProperty(PropertyName = "BackpackViewCmd")] public bool BackpackViewCmdLog { get; set; } [JsonProperty(PropertyName = "InventoryViewCmd")] public bool InventoryViewCmdLog { get; set; } [JsonProperty(PropertyName = "ClearUserInventoryCmd")] public bool ClearUserInventoryCmdLog { get; set; } [JsonProperty(PropertyName = "ResetUserBPCmd")] public bool ResetUserBPCmdLog { get; set; } [JsonProperty(PropertyName = "ResetUserMetabolismCmd")] public bool ResetUserMetabolismCmdLog { get; set; } [JsonProperty(PropertyName = "RecoverUserMetabolismCmd")] public bool RecoverUserMetabolismLog { get; set; } [JsonProperty(PropertyName = "TeleportToUserCmd")] public bool TeleportToUserCmdLog { get; set; } [JsonProperty(PropertyName = "TeleportUserCmd")] public bool TeleportUserCmdLog { get; set; } [JsonProperty(PropertyName = "SpectateUserCmd")] public bool SpectateUserCmdLog { get; set; } [JsonProperty(PropertyName = "PermsCmd")] public bool PermsCmdLog { get; set; } [JsonProperty(PropertyName = "HurtUserCmd")] public bool HurtUserCmdLog { get; set; } [JsonProperty(PropertyName = "KillUserCmd")] public bool KillUserCmdLog { get; set; } [JsonProperty(PropertyName = "HealUserCmd")] public bool HealUserCmdLog { get; set; } } } protected override void LoadConfig() { base.LoadConfig(); try { configData = Config.ReadObject(); if (configData == null) { LoadDefaultConfig(); } } catch { LoadDefaultConfig(); } SaveConfig(); } protected override void LoadDefaultConfig() => configData = GetBaseConfig(); private ConfigData GetBaseConfig() { return new ConfigData { LogToConsole = true, UpdateFreq = 5f, LogFileName = "adminlog", DiscordLog = true, DiscordWebhook = "", ExcludeList = new List(){ "76561197960279927", "76561197960287930" }, DefaultCommands = new ConfigData.DefaultCommandsOptions { ConnectionLog = true, NoclipLog = true, GodmodeLog = true, SpectateLog = true, KillPlayerLog = true, EventsAllLog = true, EventsLogging = new ConfigData.EventsLoggingOptions { HeliCallLog = true, HeliCallToMeLog = true, HeliDropLog = true, AirdropRandomLog = true, AirdropPosLog = true }, KickAllLog = true, KickLogging = new ConfigData.KickLoggingOptions { KickLog = true, KickEveryoneLog = true }, BanAllLog = true, BanLogging = new ConfigData.BanLoggingOptions { BanLog = true, UnbanLog = true }, MuteAllLog = true, MuteLogging = new ConfigData.MuteLoggingOptions { MuteLog = true, UnmuteLog = true }, EntAllLog = true, EntityLogging = new ConfigData.EntityLoggingOptions { EntKillLog = true, EntWhoLog = true, EntLockLog = true, EntUnlockLog = true, EntAuthLog = true }, TeleportAllLog = true, TeleportLogging = new ConfigData.TeleportLoggingOptions { TeleportLog = true, TeleportPosLog = true, TeleportToMeLog = true }, GiveAllLog = true, GiveLogging = new ConfigData.GiveLoggingOptions { GiveLog = true, GiveIdLog = true, GiveArmLog = true, GiveToLog = true, GiveAllLog = true }, SpawnAllLog = true, SpawnLogging = new ConfigData.SpawnLoggingOptions { SpawnLog = true, SpawnAtLog = true, SpawnHereLog = true, SpawnItemLog = true } }, PluginsCommands = new ConfigData.PluginsCommandsOptions { VanishLog = true, RadarLog = true, NightLog = true, ConvertLog = true, InventoryViewerLog = true, BackpacksLog = true, FreezeAllLog = true, FreezeLogging = new ConfigData.FreezeLoggingOptions { FreezeLog = true, UnfreezeLog = true, AllFreezeLog = true, AllUnfreezeLog = true }, PlayerAdministrationAllLog = true, PlayerAdministrationLogging = new ConfigData.PlayerAdministrationLoggingOptions { OpenPadminCmdLog = true, ClosePadminCmdLog = true, BanUserCmdLog = true, UnbanUserCmdLog = true, KickUserCmdLog = true, MuteUserCmdLog = true, UnmuteUserCmdLog = true, FreezeCmdLog = true, UnreezeCmdLog = true, BackpackViewCmdLog = true, InventoryViewCmdLog = true, ClearUserInventoryCmdLog = true, ResetUserBPCmdLog = true, ResetUserMetabolismCmdLog = true, RecoverUserMetabolismLog = true, TeleportToUserCmdLog = true, TeleportUserCmdLog = true, SpectateUserCmdLog = true, PermsCmdLog = true, HurtUserCmdLog = true, KillUserCmdLog = true, HealUserCmdLog = true } } }; } protected override void SaveConfig() => Config.WriteObject(configData, true); #endregion Config #region Localization private new void LoadDefaultMessages() { lang.RegisterMessages(new Dictionary { ["AdminConnected"] = "{0} [{1}] connected.", ["AdminDisconnected"] = "{0} [{1}] disconnected.", ["NoclipEnabled"] = "{0} [{1}] enabled Noclip.", ["NoclipDisabled"] = "{0} [{1}] disabled Noclip.", ["GodmodeEnabled"] = "{0} [{1}] enabled Godmode.", ["GodmodeDisabled"] = "{0} [{1}] disabled Godmode.", ["SpectateEnabled"] = "{0} [{1}] enabled Spectate mode.", ["SpectateDisabled"] = "{0} [{1}] disabled Spectate mode.", ["SpectatePlayer"] = "{0} [{1}] started spectating player {2} [{3}].", ["KillPlayer"] = "{0} [{1}] killed {2} [{3}].", ["KickPlayer"] = "{0} [{1}] kicked {2} [{3}]. Reason: No reason.", ["KickPlayerReason"] = "{0} [{1}] kicked {2} [{3}]. Reason: {4}.", ["KickAllPlayers"] = "{0} [{1}] kicked all players.", ["BanPlayer"] = "{0} [{1}] banned {2} [{3}]. Reason: No reason.", ["BanPlayerReason"] = "{0} [{1}] banned {2} [{3}]. Reason: {4}.", ["UnbanPlayer"] = "{0} [{1}] unbanned {2} [{3}].", ["MutePlayer"] = "{0} [{1}] muted {2} [{3}].", ["UnmutePlayer"] = "{0} [{1}] unmuted {2} [{3}].", ["VanishEnabled"] = "{0} [{1}] enabled Vanish.", ["VanishDisabled"] = "{0} [{1}] disabled Vanish.", ["RadarEnabled"] = "{0} [{1}] enabled AdminRadar.", ["RadarDisabled"] = "{0} [{1}] disabled AdminRadar.", ["NightVisionEnabled"] = "{0} [{1}] enabled NightVision.", ["NightVisionDisabled"] = "{0} [{1}] disabled NightVision.", ["ConvertStatusEnabled"] = "{0} [{1}] converted into admin status.", ["ConvertStatusDisabled"] = "{0} [{1}] converted out of admin status.", ["InventoryView"] = "{0} [{1}] used Inventory Viewer on {2} [{3}].", ["TeleportSelfToPlayer"] = "{0} [{1}] teleported to {2} [{3}].", ["TeleportPlayerToPlayer"] = "{0} [{1}] teleported {2} [{3}] to {4} [{5}].", ["TeleportToSelf"] = "{0} [{1}] teleported {2} [{3}] to self.", ["TeleportPosition"] = "{0} [{1}] teleported to coordinates {2}.", ["GiveSelf"] = "{0} [{1}] gave themselves {2} x {3}.", ["GiveSelfArm"] = "{0} [{1}] added 1 x {2} to their belt.", ["GiveTo"] = "{0} [{1}] gave {2} [{3}] {4} x {5}.", ["GiveAll"] = "{0} [{1}] gave everyone {2} x {3}.", ["EntKillPrefab"] = "{0} [{1}] used *kill* on ent: {2} at position {3}.", ["EntKillBaseEntity"] = "{0} [{1}] used *kill* on {2} owned by {3} [{4}] at position {5}.", ["EntWhoBaseEntity"] = "{0} [{1}] used *who* on {2} owned by {3} [{4}] at position {5}.", ["EntLockBaseEntity"] = "{0} [{1}] used *lock* on {2} owned by {3} [{4}] at position {5}.", ["EntUnlockBaseEntity"] = "{0} [{1}] used *unlock* on {2} owned by {3} [{4}] at position {5}.", ["EntAuthBaseEntity"] = "{0} [{1}] used *auth* on {2} owned by {3} [{4}] at position {5}.", ["Spawn"] = "{0} [{1}] spawned {2} at {3}.", ["HeliCall"] = "{0} [{1}] called in Attack Helicopter.", ["HeliCallToMe"] = "{0} [{1}] called in Attack Helicopter to themselves at position {2}.", ["HeliCallDrop"] = "{0} [{1}] spawned Attack Helicopter at their position {2}.", ["AirdropCall"] = "{0} [{1}] called in a Supply Drop.", ["AirdropCallPos"] = "{0} [{1}] called in a Supply Drop to position (0, 0, 0).", ["PadminOpen"] = "{0} [{1}] opened Padmin Menu.", ["PadminClose"] = "{0} [{1}] closed Padmin Menu.", ["PadminBan"] = "{0} [{1}] banned {2} [{3}] using Padmin. Reason: Administrative decision.", ["PadminUnban"] = "{0} [{1}] unbanned {2} [{3}] using Padmin.", ["PadminKick"] = "{0} [{1}] kicked {2} [{3}] using Padmin. Reason: Administrative decision.", ["PadminMute"] = "{0} [{1}] muted {2} [{3}] using Padmin.", ["PadminUnmute"] = "{0} [{1}] unmuted {2} [{3}] using Padmin.", ["PadminFreeze"] = "{0} [{1}] Froze player {2} [{3}] using Padmin.", ["PadminUnfreeze"] = "{0} [{1}] Unfroze player {2} [{3}] using Padmin.", ["PadminBackpackView"] = "{0} [{1}] viewed Backpack of player {2} [{3}] using Padmin.", ["PadminInventoryView"] = "{0} [{1}] viewed Inventory of player {2} [{3}] using Padmin.", ["PadminClearInventory"] = "{0} [{1}] cleared the inventory of player {2} [{3}] using Padmin.", ["PadminResetBP"] = "{0} [{1}] reset the blueprints of player {2} [{3}] using Padmin.", ["PadminResetMetabolism"] = "{0} [{1}] reset the metabolism of player {2} [{3}] using Padmin.", ["PadminRecoverMetabolism"] = "{0} [{1}] recovered the metabolism of player {2} [{3}] using Padmin.", ["PadminTeleportToPlayer"] = "{0} [{1}] teleported to {2} [{3}] using Padmin.", ["PadminTeleportPlayer"] = "{0} [{1}] teleported {2} [{3}] to themselves using Padmin.", ["PadminSpectate"] = "{0} [{1}] started spectating player {2} [{3}] using Padmin.", ["PadminPerms"] = "{0} [{1}] opened the permissions manager for player {2} [{3}] using Padmin.", ["PadminHurt"] = "{0} [{1}] hurt player {2} [{3}] for {4} points using Padmin.", ["PadminKill"] = "{0} [{1}] killed player {2} [{3}] using Padmin.", ["PadminHeal"] = "{0} [{1}] healed player {2} [{3}] for {4} points using Padmin.", ["BackpacksView"] = "{0} [{1}] viewed Backpack of player {2} [{3}].", ["FreezePlayer"] = "{0} [{1}] Froze player {2} [{3}].", ["UnfreezePlayer"] = "{0} [{1}] Unfroze player {2} [{3}].", ["FreezeAllPlayers"] = "{0} [{1}] Froze all players.", ["UnfreezeAllPlayers"] = "{0} [{1}] Unfroze all players.", }, this); } #endregion Localization #region Oxide Hooks void OnServerInitialized() { foreach (var player in BasePlayer.activePlayerList) { OnPlayerConnected(player); } InvokeHandler.Instance.InvokeRepeating(HandlePlayers, 5f, configData.UpdateFreq); } void Unload() { InvokeHandler.Instance.CancelInvoke(HandlePlayers); } void OnPlayerConnected(BasePlayer player) { if (configData.ExcludeList.Contains(player.UserIDString)) { return; } if (player.IsAdmin || (configData.PluginsCommands.ConvertLog && ConvertStatus && player.IPlayer.HasPermission("convertstatus.use"))) { if (configData.DefaultCommands.ConnectionLog) { Log(configData.LogFileName, "AdminConnected", player.displayName, player.UserIDString); } adminList.Add(player); noclipState[player.userID] = false; spectateState[player.userID] = false; if (player.IsGod()) { godmodeState[player.userID] = true; } else { godmodeState[player.userID] = false; } } } void OnPlayerDisconnected(BasePlayer player, string reason) { if (configData.ExcludeList.Contains(player.UserIDString)) { return; } if (player.IsAdmin || (configData.PluginsCommands.ConvertLog && ConvertStatus && player.IPlayer.HasPermission("convertstatus.use"))) { if (configData.DefaultCommands.ConnectionLog) { Log(configData.LogFileName, "AdminDisconnected", player.displayName, player.UserIDString); } adminList.Remove(player); } } private void OnServerCommand(ConsoleSystem.Arg arg) { if (!arg.IsConnectionAdmin) return; string command = arg.cmd.Name; string fullCommand = arg.cmd.FullName; BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; if (fullCommand == "chat.say") return; if (configData.ExcludeList.Contains(player.UserIDString)) { return; } switch (command) { case "killplayer": if (configData.DefaultCommands.KillPlayerLog) { KillPlayerLogging(arg); } break; case "kick": case "kickall": if (configData.DefaultCommands.KickAllLog) { KickLogging(arg); } break; case "ban": case "unban": if (configData.DefaultCommands.BanAllLog) { BanLogging(arg); } break; case "mute": case "unmute": if (configData.DefaultCommands.MuteAllLog) { MuteLogging(arg); } break; case "teleport": case "teleportpos": case "teleport2me": if (configData.DefaultCommands.TeleportAllLog) { TeleportLogging(arg); } break; case "spectate": if (configData.DefaultCommands.SpectateLog) { SpectateLogging(arg); } break; case "giveid": case "give": case "givearm": case "giveto": case "giveall": if (configData.DefaultCommands.GiveAllLog) { GiveItemLogging(arg); } break; case "spawn": case "spawnat": case "spawnhere": case "spawnitem": if (configData.DefaultCommands.SpawnAllLog) { SpawnLogging(arg); } break; case "entid": if (configData.DefaultCommands.EntAllLog) { EntityLogging(arg); } break; case "vanish": if (configData.PluginsCommands.VanishLog && Vanish != null && Vanish.IsLoaded && player.IPlayer.HasPermission("vanish.allow")) { VanishLogging(player); } break; case "freeze": case "unfreeze": case "freezeall": case "unfreezeall": if (configData.PluginsCommands.FreezeAllLog && Freeze != null && Freeze.IsLoaded && player.IPlayer.HasPermission("freeze.use")) { FreezeLogging(arg); } break; } switch (fullCommand) { case "heli.call": case "heli.calltome": case "global.drop": case "drop": case "supply.call": case "supply.drop": if (configData.DefaultCommands.EventsAllLog) { EventsLogging(arg); } break; case "playeradministration.closeui": case "playeradministration.kickuser": case "playeradministration.banuser": case "playeradministration.unbanuser": case "playeradministration.perms": case "playeradministration.muteuser": case "playeradministration.unmuteuser": case "playeradministration.tptouser": case "playeradministration.tpuser": case "playeradministration.viewbackpack": case "playeradministration.viewinventory": case "playeradministration.freeze": case "playeradministration.unfreeze": case "playeradministration.clearuserinventory": case "playeradministration.resetuserblueprints": case "playeradministration.resetusermetabolism": case "playeradministration.recoverusermetabolism": case "playeradministration.spectateuser": case "playeradministration.hurtuser": case "playeradministration.killuser": case "playeradministration.healuser": if (configData.PluginsCommands.PlayerAdministrationAllLog && PlayerAdministration != null && PlayerAdministration.IsLoaded) { PadminLogging(arg); } break; } } void OnPlayerCommand(BasePlayer player, string command, string[] args) { if (configData.ExcludeList.Contains(player.UserIDString)) { return; } switch (command) { case "vanish": if (configData.PluginsCommands.VanishLog && Vanish != null && Vanish.IsLoaded && player.IPlayer.HasPermission("vanish.allow")) { VanishLogging(player); } break; case "radar": if (configData.PluginsCommands.RadarLog && AdminRadar != null && AdminRadar.IsLoaded && player.IPlayer.HasPermission("adminradar.allowed")) { AdminRadarLogging(player); } break; case "nightvision": case "nv": if (configData.PluginsCommands.NightLog && NightVision != null && NightVision.IsLoaded && player.IPlayer.HasPermission("nightvision.allowed")) { NightVisionLogging(player); } break; case "convert": if (configData.PluginsCommands.ConvertLog && ConvertStatus != null && ConvertStatus.IsLoaded && player.IPlayer.HasPermission("convertstatus.use")) { ConvertStatusLogging(player); } break; case "freeze": case "unfreeze": case "freezeall": case "unfreezeall": if (configData.PluginsCommands.FreezeAllLog && Freeze != null && Freeze.IsLoaded && player.IPlayer.HasPermission("freeze.use")) { FreezeLogging(player, command, args); } break; case "viewinventory": case "viewinv": if (configData.PluginsCommands.InventoryViewerLog && InventoryViewer != null && InventoryViewer.IsLoaded && player.IPlayer.HasPermission("inventoryviewer.allowed")) { InventoryViewerLogging(player, args); } break; case "viewbackpack": if (configData.PluginsCommands.BackpacksLog && Backpacks != null && Backpacks.IsLoaded && player.IPlayer.HasPermission("backpacks.admin")) { BackpacksLogging(player, args); } break; case "padmin": if (configData.PluginsCommands.PlayerAdministrationAllLog && PlayerAdministration != null && PlayerAdministration.IsLoaded && player.IPlayer.HasPermission("playeradministration.access.show")) { PadminLogging(player); } break; } } void OnPlayerSpectateEnd(BasePlayer player, string spectateFilter) { if (configData.ExcludeList.Contains(player.UserIDString)) { return; } if (configData.DefaultCommands.SpectateLog) { Log(configData.LogFileName, "SpectateDisabled", player.displayName, player.UserIDString); } } #endregion Oxide Hooks #region Default Commands #region Noclip & Godmode private void ClientSideCommandDetection(BasePlayer player) { if (configData.DefaultCommands.NoclipLog) { if (player.IsFlying && !noclipState[player.userID]) { Log(configData.LogFileName, "NoclipEnabled", player.displayName, player.UserIDString); noclipState[player.userID] = true; } if (!player.IsFlying && noclipState[player.userID]) { Log(configData.LogFileName, "NoclipDisabled", player.displayName, player.UserIDString); noclipState[player.userID] = false; } } if (configData.DefaultCommands.GodmodeLog) { if (player.IsGod() && godmodeState[player.userID]) { Log(configData.LogFileName, "GodmodeEnabled", player.displayName, player.UserIDString); godmodeState[player.userID] = false; } if (!player.IsGod() && !godmodeState[player.userID]) { Log(configData.LogFileName, "GodmodeDisabled", player.displayName, player.UserIDString); godmodeState[player.userID] = true; } } } #endregion Noclip & Godmode #region Events private void EventsLogging(ConsoleSystem.Arg arg) { string command = arg.cmd.Name; string fullCommand = arg.cmd.FullName; ulong playerUserId = arg.Connection.userid; var player = BasePlayer.FindByID(playerUserId); if (player == null) { return; } switch (fullCommand) { case "heli.call": if (configData.DefaultCommands.EventsLogging.HeliCallLog) { Log(configData.LogFileName, "HeliCall", player.displayName, player.UserIDString); } break; case "heli.calltome": if (configData.DefaultCommands.EventsLogging.HeliCallToMeLog) { var position = player.transform.position; Log(configData.LogFileName, "HeliCallToMe", player.displayName, player.UserIDString, position); } break; case "global.drop": if (configData.DefaultCommands.EventsLogging.HeliDropLog) { var position = player.transform.position; Log(configData.LogFileName, "HeliCallDrop", player.displayName, player.UserIDString, position); } break; case "supply.call": if (configData.DefaultCommands.EventsLogging.AirdropRandomLog) { Log(configData.LogFileName, "AirdropCall", player.displayName, player.UserIDString); } break; case "supply.drop": if (configData.DefaultCommands.EventsLogging.AirdropPosLog) { Log(configData.LogFileName, "AirdropCallPos", player.displayName, player.UserIDString); } break; } } #endregion Events #region Kill Player private void KillPlayerLogging(ConsoleSystem.Arg arg) { if (arg.Args == null || arg.Args.Length == 0) return; BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; var player1 = covalence.Players.FindPlayer(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "KillPlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } #endregion Kill Player #region Kick private void KickLogging(ConsoleSystem.Arg arg) { string command = arg.cmd.Name; BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; if (configData.DefaultCommands.KickLogging.KickEveryoneLog && command == "kickall") { Log(configData.LogFileName, "KickAllPlayers", player.displayName, player.UserIDString); } if (configData.DefaultCommands.KickLogging.KickLog && command == "kick") { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayer(arg.Args[0]); if (player1 == null) return; if (arg.Args.Length == 2) { string reason = arg.Args[1]; Log(configData.LogFileName, "KickPlayerReason", player.displayName, player.UserIDString, player1.Name, player1.Id, reason); } else { Log(configData.LogFileName, "KickPlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } } } #endregion Kick #region Ban private void BanLogging(ConsoleSystem.Arg arg) { if (arg.Args == null || arg.Args.Length == 0) return; string command = arg.cmd.Name; BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; var player1 = covalence.Players.FindPlayer(arg.Args[0]); if (player1 == null) return; if (configData.DefaultCommands.BanLogging.BanLog && command == "ban") { if (arg.Args.Length == 2) { string reason = arg.Args[1]; Log(configData.LogFileName, "BanPlayerReason", player.displayName, player.UserIDString, player1.Name, player1.Id, reason); } else { Log(configData.LogFileName, "BanPlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } } if (configData.DefaultCommands.BanLogging.UnbanLog && command == "unban") { Log(configData.LogFileName, "UnbanPlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } } #endregion Ban #region Mute private void MuteLogging(ConsoleSystem.Arg arg) { if (arg.Args == null || arg.Args.Length == 0) return; string command = arg.cmd.Name; BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; var player1 = covalence.Players.FindPlayer(arg.Args[0]); if (player1 == null) return; if (configData.DefaultCommands.MuteLogging.MuteLog && command == "mute") { Log(configData.LogFileName, "MutePlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } if (configData.DefaultCommands.MuteLogging.UnmuteLog && command == "unmute") { Log(configData.LogFileName, "UnmutePlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } } #endregion Mute #region Spectate private void SpectateLogging(ConsoleSystem.Arg arg) { BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; if (arg.Args == null || arg.Args.Length == 0) { Log(configData.LogFileName, "SpectateEnabled", player.displayName, player.UserIDString); } if (arg.Args.Length == 1) { var player1 = covalence.Players.FindPlayer(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "SpectatePlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } } #endregion Spectate #region Teleport private void TeleportLogging(ConsoleSystem.Arg arg) { if (arg.Args == null || arg.Args.Length == 0) return; string command = arg.cmd.Name; BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; if (configData.DefaultCommands.TeleportLogging.TeleportLog && command == "teleport") { if (arg.Args.Length == 1) { var player1 = covalence.Players.FindPlayer(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "TeleportSelfToPlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } if (arg.Args.Length == 2) { var player1 = covalence.Players.FindPlayer(arg.Args[0]); if (player1 == null) return; var player2 = covalence.Players.FindPlayer(arg.Args[1]); if (player1 == null) return; Log(configData.LogFileName, "TeleportPlayerToPlayer", player.displayName, player.UserIDString, player1.Name, player1.Id, player2.Name, player2.Id); } } if (configData.DefaultCommands.TeleportLogging.TeleportPosLog && command == "teleportpos") { Log(configData.LogFileName, "TeleportPosition", player.displayName, player.UserIDString, arg.FullString); } if (configData.DefaultCommands.TeleportLogging.TeleportToMeLog && command == "teleport2me") { var player1 = covalence.Players.FindPlayer(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "TeleportToSelf", player.displayName, player.UserIDString, player1.Name, player1.Id); } } #endregion Teleport #region Give private void GiveItemLogging(ConsoleSystem.Arg arg) { if (arg.Args == null || arg.Args.Length == 0) return; if (ItemManager.FindItemDefinition(arg.Args[0].ToInt()) == null) return; string command = arg.cmd.Name; BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; switch (command) { case "giveid": if (configData.DefaultCommands.GiveLogging.GiveIdLog) { if (arg.Args.Length == 1) { var itemShortName = ItemManager.FindItemDefinition(arg.Args[0].ToInt()).shortname; Log(configData.LogFileName, "GiveSelf", player.displayName, player.UserIDString, "1", itemShortName); } if (arg.Args.Length == 2) { var itemShortName = ItemManager.FindItemDefinition(arg.Args[0].ToInt()).shortname; var amount = arg.Args[1]; Log(configData.LogFileName, "GiveSelf", player.displayName, player.UserIDString, amount, itemShortName); } if (arg.Args.Length == 3) { var itemShortName = ItemManager.FindItemDefinition(arg.Args[1].ToInt()).shortname; var amount = arg.Args[2]; var player1 = covalence.Players.FindPlayer(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "GiveTo", player.displayName, player.UserIDString, player1.Name, player1.Id, amount, itemShortName); } } break; case "give": if (configData.DefaultCommands.GiveLogging.GiveLog) { if (arg.Args.Length == 1) { var itemShortName = ItemManager.FindItemDefinition(arg.Args[0].ToInt()).shortname; Log(configData.LogFileName, "GiveSelf", player.displayName, player.UserIDString, "1", itemShortName); } if (arg.Args.Length == 2) { var itemShortName = ItemManager.FindItemDefinition(arg.Args[0].ToInt()).shortname; var amount = arg.Args[1]; Log(configData.LogFileName, "GiveSelf", player.displayName, player.UserIDString, amount, itemShortName); } } break; case "givearm": if (configData.DefaultCommands.GiveLogging.GiveArmLog) { var itemShortName = ItemManager.FindItemDefinition(arg.Args[0].ToInt()).shortname; Log(configData.LogFileName, "GiveSelfArm", player.displayName, player.UserIDString, itemShortName); } break; case "giveto": if (configData.DefaultCommands.GiveLogging.GiveToLog) { var player1 = covalence.Players.FindPlayer(arg.Args[0]); if (player1 == null) return; if (arg.Args.Length == 2) { var itemShortName = ItemManager.FindItemDefinition(arg.Args[1].ToInt()).shortname; Log(configData.LogFileName, "GiveTo", player.displayName, player.UserIDString, player1.Name, player1.Id, "1", itemShortName); } if (arg.Args.Length == 3) { var itemShortName = ItemManager.FindItemDefinition(arg.Args[1].ToInt()).shortname; var amount = arg.Args[2]; Log(configData.LogFileName, "GiveTo", player.displayName, player.UserIDString, player1.Name, player1.Id, amount, itemShortName); } } break; case "giveall": if (configData.DefaultCommands.GiveLogging.GiveAllLog) { if (arg.Args.Length == 1) { var itemShortName = ItemManager.FindItemDefinition(arg.Args[0].ToInt()).shortname; Log(configData.LogFileName, "GiveAll", player.displayName, player.UserIDString, "1", itemShortName); } if (arg.Args.Length == 2) { var itemShortName = ItemManager.FindItemDefinition(arg.Args[0].ToInt()).shortname; var amount = arg.Args[1]; Log(configData.LogFileName, "GiveAll", player.displayName, player.UserIDString, amount, itemShortName); } } break; } } #endregion Give #region Spawn private void SpawnLogging(ConsoleSystem.Arg arg) { if (arg.Args == null || arg.Args.Length < 2) return; string command = arg.cmd.Name; BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; switch (command) { case "spawn": if (configData.DefaultCommands.SpawnLogging.SpawnLog) { Log(configData.LogFileName, "Spawn", player.displayName, player.UserIDString, arg.Args[0], arg.Args[1]); } break; case "spawnat": if (configData.DefaultCommands.SpawnLogging.SpawnAtLog) { Log(configData.LogFileName, "Spawn", player.displayName, player.UserIDString, arg.Args[0], arg.Args[1]); } break; case "spawnhere": if (configData.DefaultCommands.SpawnLogging.SpawnHereLog) { Log(configData.LogFileName, "Spawn", player.displayName, player.UserIDString, arg.Args[0], arg.Args[1]); } break; case "spawnitem": if (configData.DefaultCommands.SpawnLogging.SpawnItemLog) { Log(configData.LogFileName, "Spawn", player.displayName, player.UserIDString, arg.Args[0], arg.Args[1]); } break; } } #endregion Spawn #region Ent private void EntityLogging(ConsoleSystem.Arg arg) { if (arg.Args == null || arg.Args.Length < 2) return; string command = arg.cmd.Name; BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; var entity = BaseNetworkable.serverEntities.Find(Convert.ToUInt32(arg.Args[1])); if (entity == null) return; if (command != "entid") return; switch (arg.Args[0]) { case "kill": if (configData.DefaultCommands.EntityLogging.EntKillLog) { if (entity is BaseEntity) { var bentity = entity as BaseEntity; var player1 = covalence.Players.FindPlayerById(bentity.OwnerID.ToString()); if (player1 != null) { Log(configData.LogFileName, "EntKillBaseEntity", player.displayName, player.UserIDString, bentity.ShortPrefabName, player1.Name, player1.Id, player.transform.position); } else { Log(configData.LogFileName, "EntKillPrefab", player.displayName, player.UserIDString, entity.ShortPrefabName, player.transform.position); } } else { Log(configData.LogFileName, "EntKillPrefab", player.displayName, player.UserIDString, entity.ShortPrefabName, player.transform.position); } } break; case "who": if (configData.DefaultCommands.EntityLogging.EntWhoLog) { if (entity is BaseEntity) { var bentity = entity as BaseEntity; var player1 = covalence.Players.FindPlayerById(bentity.OwnerID.ToString()); if (player1 != null) { Log(configData.LogFileName, "EntWhoBaseEntity", player.displayName, player.UserIDString, bentity.ShortPrefabName, player1.Name, player1.Id, player.transform.position); } } } break; case "lock": if (configData.DefaultCommands.EntityLogging.EntLockLog) { if (entity is BaseEntity) { var bentity = entity as BaseEntity; var player1 = covalence.Players.FindPlayerById(bentity.OwnerID.ToString()); if (player1 != null) { Log(configData.LogFileName, "EntLockBaseEntity", player.displayName, player.UserIDString, bentity.ShortPrefabName, player1.Name, player1.Id, player.transform.position); } } } break; case "unlock": if (configData.DefaultCommands.EntityLogging.EntUnlockLog) { if (entity is BaseEntity) { var bentity = entity as BaseEntity; var player1 = covalence.Players.FindPlayerById(bentity.OwnerID.ToString()); if (player1 != null) { Log(configData.LogFileName, "EntUnlockBaseEntity", player.displayName, player.UserIDString, bentity.ShortPrefabName, player1.Name, player1.Id, player.transform.position); } } } break; case "auth": if (configData.DefaultCommands.EntityLogging.EntAuthLog) { if (entity is BaseEntity) { var bentity = entity as BaseEntity; var player1 = covalence.Players.FindPlayerById(bentity.OwnerID.ToString()); Log(configData.LogFileName, "EntAuthBaseEntity", player.displayName, player.UserIDString, bentity.ShortPrefabName, player1.Name, player1.Id, player.transform.position); } } break; } } #endregion Ent #endregion Default Commands #region Plugins Commands #region Vanish private void VanishLogging(BasePlayer player) { if (Vanish.Call("IsInvisible", player)) { Log(configData.LogFileName, "VanishDisabled", player.displayName, player.UserIDString); } else { Log(configData.LogFileName, "VanishEnabled", player.displayName, player.UserIDString); } } #endregion Vanish #region AdminRadar private void AdminRadarLogging(BasePlayer player) { if (AdminRadar.Call("IsRadar", player.UserIDString)) { Log(configData.LogFileName, "RadarDisabled", player.displayName, player.UserIDString); } else { Log(configData.LogFileName, "RadarEnabled", player.displayName, player.UserIDString); } } #endregion AdminRadar #region NightVision private void NightVisionLogging(BasePlayer player) { if (NightVision.Call("IsPlayerTimeLocked", player)) { Log(configData.LogFileName, "NightVisionDisabled", player.displayName, player.UserIDString); } else { Log(configData.LogFileName, "NightVisionEnabled", player.displayName, player.UserIDString); } } #endregion NightVision #region ConvertStatus private void ConvertStatusLogging(BasePlayer player) { if (player.IsAdmin) { Log(configData.LogFileName, "ConvertStatusDisabled", player.displayName, player.UserIDString); } else { Log(configData.LogFileName, "ConvertStatusEnabled", player.displayName, player.UserIDString); } } #endregion ConvertStatus #region Freeze private void FreezeLogging(ConsoleSystem.Arg arg) { string command = arg.cmd.Name; BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; switch (command) { case "freeze": if (configData.PluginsCommands.FreezeLogging.FreezeLog) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "FreezePlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "unfreeze": if (configData.PluginsCommands.FreezeLogging.UnfreezeLog) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "UnfreezePlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "freezeall": if (configData.PluginsCommands.FreezeLogging.AllFreezeLog) { Log(configData.LogFileName, "FreezeAllPlayers", player.displayName, player.UserIDString); } break; case "unfreezeall": if (configData.PluginsCommands.FreezeLogging.AllFreezeLog) { Log(configData.LogFileName, "UnfreezeAllPlayers", player.displayName, player.UserIDString); } break; } } private void FreezeLogging(BasePlayer player, string command, string[] args) { switch (command) { case "freeze": if (configData.PluginsCommands.FreezeLogging.FreezeLog) { if (args == null || args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(args[0]); if (player1 == null) return; Log(configData.LogFileName, "FreezePlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "unfreeze": if (configData.PluginsCommands.FreezeLogging.UnfreezeLog) { if (args == null || args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(args[0]); if (player1 == null) return; Log(configData.LogFileName, "UnfreezePlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "freezeall": if (configData.PluginsCommands.FreezeLogging.AllFreezeLog) { Log(configData.LogFileName, "FreezeAllPlayers", player.displayName, player.UserIDString); } break; case "unfreezeall": if (configData.PluginsCommands.FreezeLogging.AllFreezeLog) { Log(configData.LogFileName, "UnfreezeAllPlayers", player.displayName, player.UserIDString); } break; } } #endregion Freeze #region InventoryViewer private void InventoryViewerLogging(BasePlayer player, string[] args) { if (args == null || args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(args[0]); if (player1 == null) return; Log(configData.LogFileName, "InventoryView", player.displayName, player.UserIDString, player1.Name, player1.Id); } #endregion Backpacks #region Backpacks private void BackpacksLogging(BasePlayer player, string[] args) { if (args == null || args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(args[0]); if (player1 == null) return; Log(configData.LogFileName, "BackpacksView", player.displayName, player.UserIDString, player1.Name, player1.Id); } #endregion Backpacks #region Padmin private void PadminLogging(BasePlayer player) { if (!configData.PluginsCommands.PlayerAdministrationLogging.OpenPadminCmdLog) return; Log(configData.LogFileName, "PadminOpen", player.displayName, player.UserIDString); } private void PadminLogging(ConsoleSystem.Arg arg) { string fullCommand = arg.cmd.FullName; BasePlayer player = arg.Connection.player as BasePlayer; if (player == null) return; switch (fullCommand) { case "playeradministration.closeui": if (configData.PluginsCommands.PlayerAdministrationLogging.ClosePadminCmdLog && player.IPlayer.HasPermission("playeradministration.access.show")) { Log(configData.LogFileName, "PadminClose", player.displayName, player.UserIDString); } break; case "playeradministration.kickuser": if (configData.PluginsCommands.PlayerAdministrationLogging.KickUserCmdLog && player.IPlayer.HasPermission("playeradministration.access.kick")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminKick", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.banuser": if (configData.PluginsCommands.PlayerAdministrationLogging.BanUserCmdLog && player.IPlayer.HasPermission("playeradministration.access.ban")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminBan", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.unbanuser": if (configData.PluginsCommands.PlayerAdministrationLogging.UnbanUserCmdLog && player.IPlayer.HasPermission("playeradministration.access.ban")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminUnban", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.muteuser": if (configData.PluginsCommands.PlayerAdministrationLogging.MuteUserCmdLog && player.IPlayer.HasPermission("playeradministration.access.mute")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminMute", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.unmuteuser": if (configData.PluginsCommands.PlayerAdministrationLogging.UnmuteUserCmdLog && player.IPlayer.HasPermission("playeradministration.access.mute")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminUnmute", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.freeze": if (configData.PluginsCommands.PlayerAdministrationLogging.FreezeCmdLog && Freeze != null && Freeze.IsLoaded && player.IPlayer.HasPermission("playeradministration.access.allowfreeze")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminFreeze", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.unfreeze": if (configData.PluginsCommands.PlayerAdministrationLogging.UnreezeCmdLog && Freeze != null && Freeze.IsLoaded && player.IPlayer.HasPermission("playeradministration.access.allowfreeze")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminUnfreeze", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.viewbackpack": if (configData.PluginsCommands.PlayerAdministrationLogging.BackpackViewCmdLog && Backpacks != null && Backpacks.IsLoaded && player.IPlayer.HasPermission("backpacks.admin")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminBackpackView", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.viewinventory": if (configData.PluginsCommands.PlayerAdministrationLogging.InventoryViewCmdLog && InventoryViewer != null && InventoryViewer.IsLoaded && player.IPlayer.HasPermission("inventoryviewer.allowed")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminInventoryView", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.clearuserinventory": if (configData.PluginsCommands.PlayerAdministrationLogging.ClearUserInventoryCmdLog && player.IPlayer.HasPermission("playeradministration.access.clearinventory")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminClearInventory", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.resetuserblueprints": if (configData.PluginsCommands.PlayerAdministrationLogging.ResetUserBPCmdLog && player.IPlayer.HasPermission("playeradministration.access.resetblueprint")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminResetBP", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.resetusermetabolism": if (configData.PluginsCommands.PlayerAdministrationLogging.ResetUserMetabolismCmdLog && player.IPlayer.HasPermission("playeradministration.access.resetmetabolism")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminResetMetabolism", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.recoverusermetabolism": if (configData.PluginsCommands.PlayerAdministrationLogging.RecoverUserMetabolismLog && player.IPlayer.HasPermission("playeradministration.access.recovermetabolism")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminRecoverMetabolism", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.tptouser": if (configData.PluginsCommands.PlayerAdministrationLogging.TeleportToUserCmdLog && player.IPlayer.HasPermission("playeradministration.access.teleport")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminTeleportToPlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.tpuser": if (configData.PluginsCommands.PlayerAdministrationLogging.TeleportUserCmdLog && player.IPlayer.HasPermission("playeradministration.access.teleport")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminTeleportPlayer", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.spectateuser": if (configData.PluginsCommands.PlayerAdministrationLogging.SpectateUserCmdLog && player.IPlayer.HasPermission("playeradministration.access.spectate")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminSpectate", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.perms": if (configData.PluginsCommands.PlayerAdministrationLogging.PermsCmdLog && player.IPlayer.HasPermission("playeradministration.access.perms")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminPerms", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.hurtuser": if (configData.PluginsCommands.PlayerAdministrationLogging.HurtUserCmdLog && player.IPlayer.HasPermission("playeradministration.access.hurt")) { if (arg.Args == null || arg.Args.Length < 2) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminHurt", player.displayName, player.UserIDString, player1.Name, player1.Id, arg.Args[1]); } break; case "playeradministration.killuser": if (configData.PluginsCommands.PlayerAdministrationLogging.KillUserCmdLog && player.IPlayer.HasPermission("playeradministration.access.kill")) { if (arg.Args == null || arg.Args.Length == 0) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminKill", player.displayName, player.UserIDString, player1.Name, player1.Id); } break; case "playeradministration.healuser": if (configData.PluginsCommands.PlayerAdministrationLogging.HealUserCmdLog && player.IPlayer.HasPermission("playeradministration.access.heal")) { if (arg.Args == null || arg.Args.Length < 2) return; var player1 = covalence.Players.FindPlayerById(arg.Args[0]); if (player1 == null) return; Log(configData.LogFileName, "PadminHeal", player.displayName, player.UserIDString, player1.Name, player1.Id, arg.Args[1]); } break; } } #endregion Padmin #endregion Plugins Commands #region Helpers private void HandlePlayers() { foreach (var player in adminList) { ClientSideCommandDetection(player); } } private void Log(string filename, string key, params object[] args) { if (configData.LogToConsole) { Puts($"[{DateTime.Now}] {Lang(key, null, args)}"); } if(configData.DiscordLog && DiscordMessages && !configData.DiscordWebhook.IsNullOrEmpty()) { DiscordMessages?.Call("API_SendTextMessage", configData.DiscordWebhook, $"[{DateTime.Now}] {Lang(key, null, args)}"); } LogToFile(filename, $"[{DateTime.Now}] {Lang(key, null, args)}", this); } private string Lang(string key, string id = null, params object[] args) { return string.Format(lang.GetMessage(key, this, id), args); } #endregion Helpers } }