diff --git a/.github/RESOURCES.md b/.github/RESOURCES.md index ffda384..1f6b1a7 100644 --- a/.github/RESOURCES.md +++ b/.github/RESOURCES.md @@ -59,14 +59,14 @@ |#19| Weapon Manager Tablet |#20| E-11 Standard Rifle |#21| P90 -|#22| SFA Ammo (E- 11 Rifle Ammo) +|#22| 5.56mm Ammo (E- 11 Rifle Ammo) |#23| MP4 |#24| Logicer (Chaos Weapon) |#25| Frag Granade |#26| Flash Granade |#27| Disarmer -|#28| RAT Ammo (MP7, Logicer ammo) -|#29| PAT ammo (Com15, P90 ammo) +|#28| 7.62mm Ammo (MP4, Logicer ammo) +|#29| 9mm ammo (Com15, P90 ammo) # ## DamageType ID's @@ -91,7 +91,7 @@ #16| COM15 | Pistol #17| E11_STANDARD_RIFLE | NTF Rifle #18| P90 | -#19| MP7 | +#19| MP4 | #20| LOGICER | Chaos weapon # @@ -107,7 +107,7 @@ #6| Tutorial # ->Room ID's is not finished beeing documented +>Room ID's are not yet finished being documented ## Room ID's | Room ID | Description | | :--- | :--- | @@ -131,8 +131,8 @@ HC_SERVERS | ^ HC_SERVERS | ^ HC_TESLA_B | Tesla Gate HC_TESLA_B | Tesla Gate -HC_457_CR | Micro HID Room -HC_096_CR | +HC_457_CR | 096's containment +HC_096_CR | Micro HID Room HC_079_HALL | HC_079_HALL | HC_079_MON | @@ -148,4 +148,4 @@ Straight_4 | LC_ARMORY | Shelter | Containment Shelter (entrance) intercom | Intercom Room -pocket | Pocked Dimention +pocket | Pocket Dimention diff --git a/AdminToolbox/AdminToolbox/AdminToolbox.cs b/AdminToolbox/AdminToolbox/AdminToolbox.cs index 9902577..f70d23b 100644 --- a/AdminToolbox/AdminToolbox/AdminToolbox.cs +++ b/AdminToolbox/AdminToolbox/AdminToolbox.cs @@ -10,6 +10,7 @@ using Unity; using UnityEngine; using System.Linq; +using System.Collections; namespace AdminToolbox { @@ -18,127 +19,122 @@ namespace AdminToolbox name = "Admin Toolbox", description = "Plugin for advanced admin tools", id = "rnen.admin.toolbox", - version = "1.3.2", + version = "1.3.3", SmodMajor = 3, - SmodMinor = 3, - SmodRevision = 8 + SmodMinor = 1, + SmodRevision = 12 )] class AdminToolbox : Plugin { - public static bool isRoundFinished = false, lockRound = false, isColored = false, isColoredCommand = false; - - public static Dictionary> playerdict = new Dictionary>(); - public static Dictionary> playerStats = new Dictionary>(); - public static Dictionary warpVectors = new Dictionary(), playerDeathPos = new Dictionary(); + public static bool isRoundFinished = false, lockRound = false, isColored = false, isColoredCommand = false, intercomLock = false, intercomLockChanged = false; + public static Dictionary playerdict = new Dictionary(); + public static Dictionary warpVectors = new Dictionary(), + presetWarps = new Dictionary() + { + { "mtf",new Vector(181,994,-61) }, + { "grass",new Vector(237,999,17) }, + { "ci",new Vector(10,989,-60) }, + { "jail",new Vector(53,1020,-44) }, + { "flat",new Vector(250,980,110) }, + { "heli",new Vector(293,977,-62) }, + { "car",new Vector(-96,987,-59) }, + { "escape", new Vector(179,996,27) } + }; public static int roundCount = 0; public static LogHandlers AdminToolboxLogger = new LogHandlers(); public static string _roundStartTime; + public static AdminToolbox plugin; + + public class AdminToolboxPlayerSettings + { + public bool spectatorOnly = false, + godMode = false, + dmgOff = false, + destroyDoor = false, + keepSettings = false, + lockDown = false, + instantKill = false, + isJailed = false, + isInJail = false; + public int Kills = 0, + TeamKills = 0, + Deaths = 0, + RoundsPlayed = 0, + previousHealth = 100, + prevAmmo5 = 0, + prevAmmo7 = 0, + prevAmmo9 = 0; + public Vector DeathPos = Vector.Zero, + originalPos = Vector.Zero; + public Role previousRole = Role.CLASSD; + public List playerPrevInv = new List(); + public DateTime JailedToTime = DateTime.Now; + } + public override void OnDisable() { - if(isColored) + if (isColored) this.Info(this.Details.name + " v." + this.Details.version + " - @#fg=Red;Disabled@#fg=Default;"); else this.Info(this.Details.name + " v." + this.Details.version + " - Disabled"); } - public static void SetPlayerBools(Player player, bool spectatorOnly, bool godMode, bool dmgOff, bool destroyDoor, bool lockDown, bool instantKill) - { - //This is actually never used, its just for keeping track, might become an all on/off switch at some point - playerdict[player.SteamId][0] = spectatorOnly; - playerdict[player.SteamId][1] = godMode; - playerdict[player.SteamId][2] = dmgOff; - playerdict[player.SteamId][3] = destroyDoor; - //playerdict[player.SteamId[4] = keepSettings; - playerdict[player.SteamId][5] = lockDown; - playerdict[player.SteamId][6] = instantKill; - } - public static void SetPlayerStats(Player player, int Kills, int TeamKills, int Deaths, int RoundsPlayed) - { - playerStats[player.SteamId][0] = Kills; - playerStats[player.SteamId][1] = TeamKills; - playerStats[player.SteamId][2] = Deaths; - playerStats[player.SteamId][3] = RoundsPlayed; - } public override void OnEnable() { - WriteVersionToFile(this.Details.version); - CheckCurrVersion(this, this.Details.version); - if(isColored) + plugin = this; + WriteVersionToFile(); + //CheckCurrVersion(this, this.Details.version); + if (isColored) this.Info(this.Details.name + " v." + this.Details.version + " - @#fg=Green;Enabled@#fg=Default;"); else this.Info(this.Details.name + " v." + this.Details.version + " - Enabled"); _roundStartTime = DateTime.Now.Year.ToString() + "-" + ((DateTime.Now.Month >= 10) ? DateTime.Now.Month.ToString() : ("0" + DateTime.Now.Month.ToString())) + "-" + ((DateTime.Now.Day >= 10) ? DateTime.Now.Day.ToString() : ("0" + DateTime.Now.Day.ToString())) + " " + ((DateTime.Now.Hour >= 10) ? DateTime.Now.Hour.ToString() : ("0" + DateTime.Now.Hour.ToString())) + "." + ((DateTime.Now.Minute >= 10) ? DateTime.Now.Minute.ToString() : ("0" + DateTime.Now.Minute.ToString())) + "." + ((DateTime.Now.Second >= 10) ? DateTime.Now.Second.ToString() : ("0" + DateTime.Now.Second.ToString())); + warpVectors = presetWarps; } public override void Register() { + #region EventHandlers Registering Eventhandlers // Register Events - this.AddEventHandlers(new RoundEventHandler(this), Priority.High); - this.AddEventHandler(typeof(IEventHandlerPlayerHurt), new DamageDetect(this), Priority.High); - this.AddEventHandler(typeof(IEventHandlerPlayerDie), new DieDetect(this), Priority.High); - this.AddEventHandler(typeof(IEventHandlerPlayerJoin), new PlayerJoinHandler(this), Priority.Highest); - this.AddEventHandlers(new MyMiscEvents(this)); + this.AddEventHandlers(new RoundEventHandler(this), Priority.Normal); + this.AddEventHandler(typeof(IEventHandlerPlayerHurt), new DamageDetect(this), Priority.Normal); + this.AddEventHandler(typeof(IEventHandlerPlayerDie), new DieDetect(this), Priority.Normal); + this.AddEventHandlers(new MyMiscEvents(), Priority.Normal); + #endregion + #region Commands Registering Commands // Register Commands - this.AddCommand("spectator", new Command.SpectatorCommand(this)); - this.AddCommand("spec", new Command.SpectatorCommand(this)); - - this.AddCommand("player", new Command.PlayerCommand(this)); - this.AddCommand("p", new Command.PlayerCommand(this)); - - this.AddCommand("players", new Command.PlayerListCommand(this)); - - this.AddCommand("heal", new Command.HealCommand(this)); - - this.AddCommand("god", new Command.GodModeCommand(this)); - this.AddCommand("godmode", new Command.GodModeCommand(this)); - - this.AddCommand("nodmg", new Command.NoDmgCommand(this)); - - this.AddCommand("tut", new Command.TutorialCommand(this)); - this.AddCommand("tutorial", new Command.TutorialCommand(this)); - - this.AddCommand("role", new Command.RoleCommand(this)); - - this.AddCommand("keep", new Command.KeepSettingsCommand(this)); - this.AddCommand("keepsettings", new Command.KeepSettingsCommand(this)); - - this.AddCommand("hp", new Command.SetHpCommand(this)); - this.AddCommand("sethp", new Command.SetHpCommand(this)); - - - this.AddCommand("pos", new Command.PosCommand(this)); - this.AddCommand("tpx", new Command.TeleportCommand(this)); - - this.AddCommand("warp", new Command.WarpCommmand(this)); - - this.AddCommand("roundlock", new Command.RoundLockCommand(this)); - this.AddCommand("lockround", new Command.RoundLockCommand(this)); - this.AddCommand("rlock", new Command.RoundLockCommand(this)); - this.AddCommand("lockr", new Command.RoundLockCommand(this)); - - this.AddCommand("breakdoors", new Command.BreakDoorsCommand(this)); - this.AddCommand("breakdoor", new Command.BreakDoorsCommand(this)); - this.AddCommand("bd", new Command.BreakDoorsCommand(this)); - - this.AddCommand("playerlockdown", new Command.LockdownCommand(this)); - this.AddCommand("pl", new Command.LockdownCommand(this)); - this.AddCommand("playerlock", new Command.LockdownCommand(this)); - this.AddCommand("plock", new Command.LockdownCommand(this)); - + this.AddCommands(new string[] { "spec", "spectator" }, new Command.SpectatorCommand()); + this.AddCommands(new string[] { "p", "player" }, new Command.PlayerCommand()); + this.AddCommands(new string[] { "players", "playerlist", "plist" }, new Command.PlayerListCommand()); + this.AddCommands(new string[] { "atheal", "at-heal" }, new Command.HealCommand()); + this.AddCommands(new string[] { "atgod", "atgodmode", "at-god", "at-godmode" }, new Command.GodModeCommand()); + this.AddCommand("nodmg", new Command.NoDmgCommand()); + this.AddCommands(new string[] { "tut", "tutorial" }, new Command.TutorialCommand()); + this.AddCommand("role", new Command.RoleCommand()); + this.AddCommands(new string[] { "keep", "keepsettings" }, new Command.KeepSettingsCommand()); + this.AddCommands(new string[] { "athp", "atsethp", "at-hp", "at-sethp" }, new Command.SetHpCommand()); + this.AddCommand("pos", new Command.PosCommand()); + this.AddCommand("tpx", new Command.TeleportCommand()); + this.AddCommand("warp", new Command.WarpCommmand()); + this.AddCommand("warps", new Command.WarpsCommmand()); + this.AddCommands(new string[] { "roundlock", "lockround", "rlock", "lockr" }, new Command.RoundLockCommand(this)); + this.AddCommands(new string[] { "breakdoor", "bd", "breakdoors" }, new Command.BreakDoorsCommand()); + this.AddCommands(new string[] { "pl", "playerlockdown", "plock", "playerlock" }, new Command.LockdownCommand()); this.AddCommand("atcolor", new Command.ATColorCommand(this)); this.AddCommand("atdisable", new Command.ATDisableCommand(this)); - - this.AddCommand("instantkill", new Command.InstantKillCommand(this)); - this.AddCommand("instakill", new Command.InstantKillCommand(this)); - this.AddCommand("ik", new Command.InstantKillCommand(this)); - + this.AddCommands(new string[] { "ik", "instakill", "instantkill" }, new Command.InstantKillCommand()); + this.AddCommands(new string[] { "j", "jail" }, new Command.JailCommand()); + this.AddCommands(new string[] { "il", "ilock", "INTERLOCK", "intercomlock" }, new Command.IntercomLockCommand(this)); + this.AddCommands(new string[] { "s", "server", "serverinfo" }, new Command.ServerCommand()); + this.AddCommands(new string[] { "e", "empty" }, new Command.EmptyCommand()); + #endregion + #region Config Registering Config Entries // Register config settings this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_enable", true, Smod2.Config.SettingType.BOOL, true, "Enable/Disable AdminToolbox")); this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_colors", false, Smod2.Config.SettingType.BOOL, true, "Enable/Disable AdminToolbox colors in server window")); - this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_tutorial_dmg_allowed", new int[] { -1 }, Smod2.Config.SettingType.NUMERIC_LIST, true, "What (int)damagetypes TUTORIAL is allowed to take")); this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_debug_damagetypes", new int[] { 5, 13, 14, 15, 16, 17 }, Smod2.Config.SettingType.NUMERIC_LIST, true, "What (int)damagetypes to debug")); @@ -151,43 +147,135 @@ public override void Register() this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_debug_friendly_kill", true, Smod2.Config.SettingType.BOOL, true, "Debugs team-kills")); this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_debug_scp_and_self_killed", false, Smod2.Config.SettingType.BOOL, true, "Debug suicides and SCP kills")); - this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_endedRound_damageMultiplier", 1, Smod2.Config.SettingType.NUMERIC, true, "Damage multiplier after end of round")); - this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_round_damageMultiplier", 1, Smod2.Config.SettingType.NUMERIC, true, "Damage multiplier")); - + this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_endedRound_damagemultiplier", 1f, Smod2.Config.SettingType.FLOAT, true, "Damage multiplier after end of round")); + this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_round_damagemultiplier", 1f, Smod2.Config.SettingType.FLOAT, true, "Damage multiplier")); + this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_decontamination_damagemultiplier", 1f, Smod2.Config.SettingType.FLOAT, true, "Damage multiplier for the decontamination of LCZ")); + this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_custom_nuke_cards", false, Smod2.Config.SettingType.BOOL, true, "Enables the use of custom keycards for the activation of the nuke")); + this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_nuke_card_list", new int[] { 6, 9, 11 }, Smod2.Config.SettingType.NUMERIC_LIST, true, "List of all cards that can enable the nuke")); this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_log_teamkills", false, Smod2.Config.SettingType.BOOL, true, "Writing logfiles for teamkills")); this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_log_kills", false, Smod2.Config.SettingType.BOOL, true, "Writing logfiles for regular kills")); this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_log_commands", false, Smod2.Config.SettingType.BOOL, true, "Writing logfiles for all AT command usage")); this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_round_info", true, Smod2.Config.SettingType.BOOL, true, "Prints round count and player number on round start & end")); - this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_debug_player_joinANDleave", false, Smod2.Config.SettingType.BOOL, true, "Writes player name in console on players joining")); + this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_player_join_info", true, Smod2.Config.SettingType.BOOL, true, "Writes player name in console on players joining")); //this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_intercom_whitelist", new string[] { string.Empty }, Smod2.Config.SettingType.LIST, true, "What ServerRank can use the Intercom to your specified settings")); this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_intercom_steamid_blacklist", new string[] { string.Empty }, Smod2.Config.SettingType.LIST, true, "Blacklist of steamID's that cannot use the intercom")); + this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_intercomlock", false, Smod2.Config.SettingType.BOOL, true, "If set to true, locks the command for all non-whitelist players")); + + this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_block_role_damage", new string[] { string.Empty }, Smod2.Config.SettingType.LIST, true, "What roles cannot attack other roles")); + #endregion + } - this.AddConfig(new Smod2.Config.ConfigSetting("admintoolbox_block_role_damage", new string[] { string.Empty }, Smod2.Config.SettingType.LIST, true, "What roles cannot attack other roles")); + public static void AddMissingPlayerVariables(List players = null) + { + if (PluginManager.Manager.Server.GetPlayers().Count == 0) return; + else if (players != null && players.Count > 0) + foreach (Player player in players) + AdminToolbox.AddToPlayerDict(player); + else + foreach (Player player in PluginManager.Manager.Server.GetPlayers()) + AdminToolbox.AddToPlayerDict(player); } - public static void AddMissingPlayerVariables() + public static void AddToPlayerDict(Player player) { + if (player.SteamId != null && player.SteamId != string.Empty) + if (!playerdict.ContainsKey(player.SteamId)) + playerdict.Add(player.SteamId, new AdminToolboxPlayerSettings()); + } + + public static List GetJailedPlayers(string filter = "") + { + List myPlayers = new List(); if (PluginManager.Manager.Server.GetPlayers().Count > 0) - foreach (Player pl in PluginManager.Manager.Server.GetPlayers()) + if (filter != string.Empty) + foreach (Player pl in PluginManager.Manager.Server.GetPlayers(filter)) + { + if (AdminToolbox.playerdict.ContainsKey(pl.SteamId) && AdminToolbox.playerdict[pl.SteamId].isJailed) + myPlayers.Add(pl); + } + else + foreach (Player pl in PluginManager.Manager.Server.GetPlayers()) + if (AdminToolbox.playerdict.ContainsKey(pl.SteamId) && AdminToolbox.playerdict[pl.SteamId].isJailed) + myPlayers.Add(pl); + return myPlayers; + } + public static void CheckJailedPlayers(Player myPlayer = null) + { + bool isInsideJail(Player pl) + { + float x = System.Math.Abs(pl.GetPosition().x - presetWarps["jail"].x), y = System.Math.Abs(pl.GetPosition().y - presetWarps["jail"].y), z = System.Math.Abs(pl.GetPosition().z - presetWarps["jail"].z); + if (x > 7 || y > 5 || z > 7) return false; + else return true; + } + if (myPlayer != null) + { + AdminToolbox.playerdict[myPlayer.SteamId].isInJail = isInsideJail(myPlayer); + if (!AdminToolbox.playerdict[myPlayer.SteamId].isInJail) SendToJail(myPlayer); + else if (AdminToolbox.playerdict[myPlayer.SteamId].JailedToTime <= DateTime.Now) ReturnFromJail(myPlayer); + } + else + foreach (Player pl in GetJailedPlayers()) { - AddSpesificPlayer(pl); + AdminToolbox.playerdict[pl.SteamId].isInJail = isInsideJail(pl); + if (!AdminToolbox.playerdict[pl.SteamId].isInJail) SendToJail(pl); + else if (AdminToolbox.playerdict[pl.SteamId].JailedToTime <= DateTime.Now) ReturnFromJail(pl); } } - public static void AddSpesificPlayer(Player playerToAdd) + + public static void SendToJail(Player ply) { - if (playerToAdd.SteamId != null || playerToAdd.SteamId != "") + if (AdminToolbox.playerdict.ContainsKey(ply.SteamId)) { - if (!playerdict.ContainsKey(playerToAdd.SteamId)) - playerdict.Add(playerToAdd.SteamId, new List(new bool[] { false, false, false, false, false, false, false })); - if (!playerStats.ContainsKey(playerToAdd.SteamId)) - playerStats.Add(playerToAdd.SteamId, new List(new int[] { 0, 0, 0, 0 })); - if (!playerDeathPos.ContainsKey(playerToAdd.SteamId)) - playerDeathPos.Add(playerToAdd.SteamId, new Vector(0, 0, 0)); + //Saves original variables + AdminToolbox.playerdict[ply.SteamId].originalPos = ply.GetPosition(); + if (!AdminToolbox.playerdict[ply.SteamId].isJailed) + { + AdminToolbox.playerdict[ply.SteamId].previousRole = ply.TeamRole.Role; + AdminToolbox.playerdict[ply.SteamId].playerPrevInv = ply.GetInventory(); + AdminToolbox.playerdict[ply.SteamId].previousHealth = ply.GetHealth(); + AdminToolbox.playerdict[ply.SteamId].prevAmmo5 = ply.GetAmmo(AmmoType.DROPPED_5); + AdminToolbox.playerdict[ply.SteamId].prevAmmo7 = ply.GetAmmo(AmmoType.DROPPED_7); + AdminToolbox.playerdict[ply.SteamId].prevAmmo9 = ply.GetAmmo(AmmoType.DROPPED_9); + } + //Changes role to Tutorial, teleports to jail, removes inv. + ply.ChangeRole(Role.TUTORIAL, true, false); + ply.Teleport(AdminToolbox.warpVectors["jail"]); + foreach (Smod2.API.Item item in ply.GetInventory()) + item.Remove(); + AdminToolbox.playerdict[ply.SteamId].isJailed = true; } + else + plugin.Info("Player not in PlayerDict!"); + } + public static void ReturnFromJail(Player ply) + { + if (AdminToolbox.playerdict.ContainsKey(ply.SteamId)) + { + AdminToolbox.playerdict[ply.SteamId].isJailed = false; + ply.ChangeRole(AdminToolbox.playerdict[ply.SteamId].previousRole, true, false); + ply.Teleport(AdminToolbox.playerdict[ply.SteamId].originalPos); + AdminToolbox.playerdict[ply.SteamId].isInJail = false; + ply.SetHealth(AdminToolbox.playerdict[ply.SteamId].previousHealth); + foreach (Smod2.API.Item item in ply.GetInventory()) + item.Remove(); + foreach (Smod2.API.Item item in AdminToolbox.playerdict[ply.SteamId].playerPrevInv) + ply.GiveItem(item.ItemType); + ply.SetAmmo(AmmoType.DROPPED_5, AdminToolbox.playerdict[ply.SteamId].prevAmmo5); + ply.SetAmmo(AmmoType.DROPPED_7, AdminToolbox.playerdict[ply.SteamId].prevAmmo7); + ply.SetAmmo(AmmoType.DROPPED_9, AdminToolbox.playerdict[ply.SteamId].prevAmmo9); + AdminToolbox.playerdict[ply.SteamId].playerPrevInv = null; + } + else + plugin.Info("Player not in PlayerDict!"); + } + + public static string WriteParseableLogKills(Player attacker, Player victim, DamageType dmgType) + { + return " "; } - public static void WriteToLog(string[] str, LogHandlers.ServerLogType logType) + public static void WriteToLog(string[] str, LogHandlers.ServerLogType logType = LogHandlers.ServerLogType.Misc) { string str2 = string.Empty; if (str.Length != 0) @@ -206,37 +294,51 @@ public static void WriteToLog(string[] str, LogHandlers.ServerLogType logType) case LogHandlers.ServerLogType.RemoteAdminActivity: if (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_log_commands", false, false)) AdminToolboxLogger.AddLog(str2, logType); - break; + break; default: break; } } - public static void WriteVersionToFile(string currVersion) + public static void WriteVersionToFile() { if (Directory.Exists(FileManager.AppFolder)) { StreamWriter streamWriter = new StreamWriter(FileManager.AppFolder + "at_version.md", false); - string text = "at_version=" + currVersion; + string text = "at_version=" + plugin.Details.version; streamWriter.Write(text); streamWriter.Close(); + if (File.Exists(FileManager.AppFolder + "n_at_version.md")) + File.Delete(FileManager.AppFolder + "n_at_version.md"); } + else + plugin.Info("Could not find SCP Secret Lab folder!"); } - public static void CheckCurrVersion(AdminToolbox plugin,string currVersion) + public static void CheckCurrVersion(AdminToolbox plugin,string version) { - //try - //{ - // string host = "https://raw.githubusercontent.com/Rnen/AdminToolbox/master/version.md"; - // Int16 version = Int16.Parse(currVersion.Replace(".", string.Empty)); - // Int16 fileContentV = Int16.Parse(new System.Net.WebClient().DownloadString(host).Replace(".",string.Empty).Replace("at_version=",string.Empty)); - // if (fileContentV > version) - // { - // plugin.Info("Your version is out of date, please run the \"AT_AutoUpdate.bat\" or visit the AdminToolbox GitHub"); - // } - //} - //catch (System.Exception e) - //{ - // plugin.Error("Could not fetch latest version: " + e.Message); - //} + try + { + string host = "http://raw.githubusercontent.com/Rnen/AdminToolbox/master/version.md"; + if (!Int16.TryParse(version.Replace(".", string.Empty), out Int16 currentVersion)) + plugin.Info("Coult not get Int16 from currentVersion"); + + if (Int16.TryParse(new System.Net.WebClient().DownloadString(host).Replace(".", string.Empty).Replace("at_version=", string.Empty), out Int16 onlineVersion)) + { + + if (onlineVersion > currentVersion) + { + + plugin.Info("Your version is out of date, please run the \"AT_AutoUpdate.bat\" or visit the AdminToolbox GitHub"); + } + } + else + plugin.Info("Could not get Int16 from onlineVersion"); + + } + catch (System.Exception e) + { + + plugin.Error("Could not fetch latest version: " + e.Message); + } } } @@ -298,7 +400,7 @@ public static Player GetPlayer(string args, out Player playerOut) int maxNameLength = 31, LastnameDifference =31/*, lastNameLength = 31*/; Player plyer = null; string str1 = args.ToLower(); - foreach (Player pl in PluginManager.Manager.Server.GetPlayers()) + foreach (Player pl in PluginManager.Manager.Server.GetPlayers(str1)) { if (!pl.Name.ToLower().Contains(args.ToLower())) { goto NoPlayer; } if (str1.Length < maxNameLength) @@ -354,6 +456,7 @@ public enum ServerLogType RemoteAdminActivity, KillLog, TeamKill, + Suicice, GameEvent, Misc } @@ -362,6 +465,7 @@ public enum ServerLogType "Remote Admin", "Kill", "TeamKill", + "Suicide", "Game Event", "Misc" }; @@ -376,7 +480,6 @@ private void Awake() } void Start() { - //AdminToolbox._roundStartTime = DateTime.Now.Year.ToString() + "-" + ((DateTime.Now.Month >= 10) ? DateTime.Now.Month.ToString() : ("0" + DateTime.Now.Month.ToString())) + "-" + ((DateTime.Now.Day >= 10) ? DateTime.Now.Day.ToString() : ("0" + DateTime.Now.Day.ToString())) + " " + ((DateTime.Now.Hour >= 10) ? DateTime.Now.Hour.ToString() : ("0" + DateTime.Now.Hour.ToString())) + "." + ((DateTime.Now.Minute >= 10) ? DateTime.Now.Minute.ToString() : ("0" + DateTime.Now.Minute.ToString())) + "." + ((DateTime.Now.Second >= 10) ? DateTime.Now.Second.ToString() : ("0" + DateTime.Now.Second.ToString())); _port = PluginManager.Manager.Server.Port; } @@ -390,17 +493,18 @@ public void AddLog(string msg, ServerLogType type) Type = Txt[(int)type], Time = time }); + string mystring = System.Reflection.Assembly.GetAssembly(this.GetType()).Location; if (Directory.Exists(FileManager.AppFolder)) { if (!Directory.Exists(FileManager.AppFolder + "ATServerLogs")) { Directory.CreateDirectory(FileManager.AppFolder + "ATServerLogs"); } - if (!Directory.Exists(FileManager.AppFolder + "ATServerLogs/" + _port)) + if (!Directory.Exists(FileManager.AppFolder + "ATServerLogs" + Path.DirectorySeparatorChar + _port)) { - Directory.CreateDirectory(FileManager.AppFolder + "ATServerLogs/" + _port); + Directory.CreateDirectory(FileManager.AppFolder + "ATServerLogs" + Path.DirectorySeparatorChar + _port); } - StreamWriter streamWriter = new StreamWriter(FileManager.AppFolder + "ATServerLogs" + "/" + _port + "/" + AdminToolbox._roundStartTime + " Round " + AdminToolbox.roundCount + ".txt", true); + StreamWriter streamWriter = new StreamWriter(FileManager.AppFolder + "ATServerLogs" + Path.DirectorySeparatorChar + _port + Path.DirectorySeparatorChar + AdminToolbox._roundStartTime + " Round " + AdminToolbox.roundCount + ".txt", true); string text = string.Empty; foreach (LogHandler log in logs) { @@ -413,6 +517,13 @@ public void AddLog(string msg, ServerLogType type) } streamWriter.Write(text); streamWriter.Close(); + //string[] lines = File.ReadAllLines(FileManager.AppFolder + "ATServerLogs" + "/" + _port + "/" + AdminToolbox._roundStartTime + " Round " + AdminToolbox.roundCount + ".txt"); + //foreach(var item in lines) + //{ + // string[] myStrings = item.Split('|'); + // DateTime logfileDate = DateTime.Parse(myStrings[0]); + // DateTime.Now.Subtract(logfileDate); + //} } } private static string ToMax(string text, int max) @@ -424,4 +535,25 @@ private static string ToMax(string text, int max) return text; } } + class SetPlayerVariables : AdminToolbox + { + public static void SetPlayerBools(string steamID, bool? spectatorOnly = null, bool? godMode = null, bool? dmgOff = null, bool? destroyDoor = null, bool? keepSettings = null, bool? lockDown = null, bool? instantKill = null, bool? isJailed = null) + { + if (!AdminToolbox.playerdict.ContainsKey(steamID)) return; + AdminToolbox.playerdict[steamID].spectatorOnly = (spectatorOnly.HasValue) ? (bool)spectatorOnly : AdminToolbox.playerdict[steamID].spectatorOnly; + AdminToolbox.playerdict[steamID].godMode = (godMode.HasValue) ? (bool)godMode : AdminToolbox.playerdict[steamID].godMode; + AdminToolbox.playerdict[steamID].dmgOff = (dmgOff.HasValue) ? (bool)dmgOff : AdminToolbox.playerdict[steamID].dmgOff; + AdminToolbox.playerdict[steamID].destroyDoor = (destroyDoor.HasValue) ? (bool)destroyDoor : AdminToolbox.playerdict[steamID].destroyDoor; + AdminToolbox.playerdict[steamID].lockDown = (lockDown.HasValue) ? (bool)lockDown : AdminToolbox.playerdict[steamID].lockDown; + AdminToolbox.playerdict[steamID].instantKill = (instantKill.HasValue) ? (bool)instantKill : AdminToolbox.playerdict[steamID].instantKill; + } + public static void SetPlayerStats(string steamID, int? Kills = null, int? TeamKills = null, int? Deaths = null, int? RoundsPlayed = null) + { + if (!AdminToolbox.playerdict.ContainsKey(steamID)) return; + AdminToolbox.playerdict[steamID].Kills = (Kills.HasValue) ? (int)Kills : AdminToolbox.playerdict[steamID].Kills; + AdminToolbox.playerdict[steamID].TeamKills = (TeamKills.HasValue) ? (int)TeamKills : AdminToolbox.playerdict[steamID].TeamKills; ; + AdminToolbox.playerdict[steamID].Deaths = (Deaths.HasValue) ? (int)Deaths : AdminToolbox.playerdict[steamID].Deaths; + AdminToolbox.playerdict[steamID].RoundsPlayed = (RoundsPlayed.HasValue) ? (int)RoundsPlayed : AdminToolbox.playerdict[steamID].RoundsPlayed; + } + } } \ No newline at end of file diff --git a/AdminToolbox/AdminToolbox/AdminToolbox.csproj b/AdminToolbox/AdminToolbox/AdminToolbox.csproj index 3a0a3ec..7a8831f 100644 --- a/AdminToolbox/AdminToolbox/AdminToolbox.csproj +++ b/AdminToolbox/AdminToolbox/AdminToolbox.csproj @@ -49,6 +49,7 @@ + @@ -56,7 +57,11 @@ + + + + @@ -68,7 +73,6 @@ - diff --git a/AdminToolbox/AdminToolbox/Commands/BreakDoorsCommand.cs b/AdminToolbox/AdminToolbox/Commands/BreakDoorsCommand.cs index 9fc3bf7..fd2a012 100644 --- a/AdminToolbox/AdminToolbox/Commands/BreakDoorsCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/BreakDoorsCommand.cs @@ -7,12 +7,6 @@ namespace AdminToolbox.Command { class BreakDoorsCommand : ICommandHandler { - private AdminToolbox plugin; - public BreakDoorsCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Toggles that players break doors when interacting with them"; @@ -39,22 +33,18 @@ public string[] OnCall(ICommandSender sender, string[] args) int playerNum = 0; foreach (Player pl in server.GetPlayers()) { - AdminToolbox.playerdict[pl.SteamId][3] = j; + AdminToolbox.playerdict[pl.SteamId].destroyDoor = j; playerNum++; } outPut += "\nSet " + playerNum + " player's BreakDoors to " + j; return new string[] { "\nSet " + playerNum + " player's BreakDoors to " + j }; } else - { - //plugin.Info("Not a valid bool!"); return new string[] { "Not a valid bool!" }; - } } else { - foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId][3] = !AdminToolbox.playerdict[pl.SteamId][3]; } - //plugin.Info("Toggled all players godmodes"); + foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId].destroyDoor = !AdminToolbox.playerdict[pl.SteamId].destroyDoor; } return new string[] { "Toggled all players BreakDoors" }; } } @@ -64,19 +54,14 @@ public string[] OnCall(ICommandSender sender, string[] args) List myPlayerList = new List(); foreach (Player pl in server.GetPlayers()) { - if (AdminToolbox.playerdict[pl.SteamId][3]) - { + if (AdminToolbox.playerdict[pl.SteamId].destroyDoor) myPlayerList.Add(pl.Name); - //str += " - " +pl.Name + "\n"; - } } if (myPlayerList.Count > 0) { myPlayerList.Sort(); foreach (var item in myPlayerList) - { str += "\n - " + item; - } } else str = "\nNo players with \"BreakDoors\" enabled!"; return new string[] { str }; @@ -85,14 +70,14 @@ public string[] OnCall(ICommandSender sender, string[] args) if (myPlayer == null) { return new string[] { "Couldn't find player: " + args[0] }; } if (args.Length > 1) { - if (args[1].ToLower() == "on" || args[1].ToLower() == "true") { AdminToolbox.playerdict[myPlayer.SteamId][3] = true; } - else if (args[1].ToLower() == "off" || args[1].ToLower() == "false") { AdminToolbox.playerdict[myPlayer.SteamId][3] = false; } - return new string[] { myPlayer.Name + " BreakDoors: " + AdminToolbox.playerdict[myPlayer.SteamId][3] }; + if (args[1].ToLower() == "on" || args[1].ToLower() == "true") { AdminToolbox.playerdict[myPlayer.SteamId].destroyDoor = true; } + else if (args[1].ToLower() == "off" || args[1].ToLower() == "false") { AdminToolbox.playerdict[myPlayer.SteamId].destroyDoor = false; } + return new string[] { myPlayer.Name + " BreakDoors: " + AdminToolbox.playerdict[myPlayer.SteamId].destroyDoor }; } else { - AdminToolbox.playerdict[myPlayer.SteamId][3] = !AdminToolbox.playerdict[myPlayer.SteamId][3]; - return new string[] { myPlayer.Name + " BreakDoors: " + AdminToolbox.playerdict[myPlayer.SteamId][3] }; + AdminToolbox.playerdict[myPlayer.SteamId].destroyDoor = !AdminToolbox.playerdict[myPlayer.SteamId].destroyDoor; + return new string[] { myPlayer.Name + " BreakDoors: " + AdminToolbox.playerdict[myPlayer.SteamId].destroyDoor }; } } diff --git a/AdminToolbox/AdminToolbox/Commands/EmptyCommand.cs b/AdminToolbox/AdminToolbox/Commands/EmptyCommand.cs new file mode 100644 index 0000000..9798f3b --- /dev/null +++ b/AdminToolbox/AdminToolbox/Commands/EmptyCommand.cs @@ -0,0 +1,69 @@ +using Smod2.Commands; +using Smod2; +using Smod2.API; +using System; +using System.Linq; + +namespace AdminToolbox.Command +{ + class EmptyCommand : ICommandHandler + { + public string GetCommandDescription() + { + return "Empties the player's inventory"; + } + + public string GetUsage() + { + return "E / EMPTY [Player] (ItemType INT / Delete) (Delete)"; + } + + public string[] OnCall(ICommandSender sender, string[] args) + { + Server server = PluginManager.Manager.Server; + if (args.Length > 0) + { + Player myPlayer = GetPlayerFromString.GetPlayer(args[0], out myPlayer); + if (myPlayer == null) { return new string[] { "Couldn't get player: " + args[0] }; ; } + AdminToolbox.AddToPlayerDict(myPlayer); + byte itemNumber = 0; + string[] deleteAliases = { "delete", "del", "d" }; + if (args.Length > 1 && deleteAliases.Contains(args[1].ToLower())) + { + foreach (Smod2.API.Item item in myPlayer.GetInventory()) + if (item.ItemType != ItemType.NULL) { item.Remove(); itemNumber++; } + myPlayer.SetAmmo(AmmoType.DROPPED_5, 0); + myPlayer.SetAmmo(AmmoType.DROPPED_7, 0); + myPlayer.SetAmmo(AmmoType.DROPPED_9, 0); + return new string[] { "Deleted " + itemNumber + " items from player " + myPlayer.Name + "'s inventory" }; + } + else if (args.Length > 1 && byte.TryParse(args[1], out byte itemInt)) + if (args.Length > 2 && deleteAliases.Contains(args[2].ToLower())) + { + foreach (Smod2.API.Item item in myPlayer.GetInventory()) + if ((byte)item.ItemType == itemInt) { item.Remove(); itemNumber++; } + return new string[] { "Deleted all \"" + Enum.GetName(typeof(ItemType), itemInt) + "\" items from player " + myPlayer.Name + "'s inventory" }; + } + else + { + foreach (Smod2.API.Item item in myPlayer.GetInventory()) + if ((byte)item.ItemType == itemInt) { item.Drop(); itemNumber++; } + return new string[] { "Dropped all \"" + Enum.GetName(typeof(ItemType), itemInt) + "\" items from player " + myPlayer.Name + "'s inventory" }; + } + else + { + foreach (Smod2.API.Item item in myPlayer.GetInventory()) + if (item.ItemType != ItemType.NULL) { item.Drop(); itemNumber++; } + PluginManager.Manager.Server.Map.SpawnItem(ItemType.DROPPED_5, myPlayer.GetPosition(), myPlayer.GetRotation()); + PluginManager.Manager.Server.Map.SpawnItem(ItemType.DROPPED_7, myPlayer.GetPosition(), myPlayer.GetRotation()); + PluginManager.Manager.Server.Map.SpawnItem(ItemType.DROPPED_9, myPlayer.GetPosition(), myPlayer.GetRotation()); + myPlayer.SetAmmo(AmmoType.DROPPED_5, 0); + myPlayer.SetAmmo(AmmoType.DROPPED_5, 0); + myPlayer.SetAmmo(AmmoType.DROPPED_5, 0); + return new string[] { "Dropped " + itemNumber + " items from player " + myPlayer.Name + "'s inventory" }; + } + } + return new string[] { GetUsage() }; + } + } +} diff --git a/AdminToolbox/AdminToolbox/Commands/GodModeCommand.cs b/AdminToolbox/AdminToolbox/Commands/GodModeCommand.cs index cf35df8..d0e1fe8 100644 --- a/AdminToolbox/AdminToolbox/Commands/GodModeCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/GodModeCommand.cs @@ -7,14 +7,8 @@ namespace AdminToolbox.Command { class GodModeCommand : ICommandHandler { - private AdminToolbox plugin; public bool noDmg = false; - public GodModeCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Switch on/off godmode for player"; @@ -22,7 +16,7 @@ public string GetCommandDescription() public string GetUsage() { - return "GOD [PLAYER] (BOOL)"; + return "(ATGOD / ATGODMODE / AT-GOD) [PLAYER] (BOOL)"; } public string[] OnCall(ICommandSender sender, string[] args) @@ -43,35 +37,32 @@ public string[] OnCall(ICommandSender sender, string[] args) int playerNum = 0; foreach (Player pl in server.GetPlayers()) { - AdminToolbox.playerdict[pl.SteamId][1] = j; - if(changedState) AdminToolbox.playerdict[pl.SteamId][2] = j; + AdminToolbox.playerdict[pl.SteamId].godMode = j; + if(changedState) AdminToolbox.playerdict[pl.SteamId].dmgOff = j; playerNum++; } - outPut += "\nSet " + playerNum + " player's Godmode to " + j; - //plugin.Info("Set " + playerNum + " player's Godmode to " + j); - if (changedState) { /*plugin.Info("\nNoDmg for theese " + playerNum + " players set to: " + j);*/ return new string[] { "\nSet " + playerNum + " player's Godmode to " + j, "\nNoDmg for theese " + playerNum + " players set to: " + j }; } - return new string[] { "\nSet " + playerNum + " player's Godmode to " + j }; + outPut += "\nSet " + playerNum + " player's AT-Godmode to " + j; + if (changedState) return new string[] { "\n" + "Set " + playerNum + " player's AT-Godmode to " + j, "\n" + "NoDmg for theese " + playerNum + " players set to: " + j }; + return new string[] { "\n" + "Set " + playerNum + " player's AT-Godmode to " + j }; } else { - //plugin.Info("Not a valid bool!"); return new string[] { "Not a valid bool!" }; } } else { - foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId][1] = !AdminToolbox.playerdict[pl.SteamId][1]; } - //plugin.Info("Toggled all players godmodes"); - return new string[] { "Toggled all players godmodes" }; + foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId].godMode = !AdminToolbox.playerdict[pl.SteamId].godMode; } + return new string[] { "Toggled all players AT-Godmodes" }; } } else if(args[0].ToLower() == "list" || args[0].ToLower() == "get") { - string str = "\nPlayers with Godmode enabled: \n"; + string str = "\n" + "Players with AT-Godmode enabled: " + "\n"; List myPlayerList = new List(); foreach(Player pl in server.GetPlayers()) { - if (AdminToolbox.playerdict[pl.SteamId][1]) + if (AdminToolbox.playerdict[pl.SteamId].godMode) { myPlayerList.Add(pl.Name); //str += " - " +pl.Name + "\n"; @@ -85,40 +76,35 @@ public string[] OnCall(ICommandSender sender, string[] args) str += "\n - " + item; } } - else str = "\nNo players with \"Godmode\" enabled!"; - //plugin.Info(str); + else str = "\n" + "No players with \"AT-Godmode\" enabled!"; return new string[] { str }; } Player myPlayer = GetPlayerFromString.GetPlayer(args[0], out myPlayer); - if (myPlayer == null) { /*plugin.Info("Couldn't find player: " + args[0]);*/ return new string[] { "Couldn't find player: " + args[0] }; } + if (myPlayer == null) return new string[] { "Couldn't find player: " + args[0] }; if (args.Length > 1) { bool changedValue=false; if (args.Length > 2) { if (args[2].ToLower() == "nodmg") { changedValue = true; } } - if (args[1].ToLower() == "on" || args[1].ToLower() == "true") { AdminToolbox.playerdict[myPlayer.SteamId][1] = true; } - else if (args[1].ToLower() == "off" || args[1].ToLower() == "false") { AdminToolbox.playerdict[myPlayer.SteamId][1] = false; } - //plugin.Info(myPlayer.Name + " godmode: " + AdminToolbox.playerdict[myPlayer.SteamId][1]); + if (args[1].ToLower() == "on" || args[1].ToLower() == "true") { AdminToolbox.playerdict[myPlayer.SteamId].godMode = true; } + else if (args[1].ToLower() == "off" || args[1].ToLower() == "false") { AdminToolbox.playerdict[myPlayer.SteamId].godMode = false; } if (changedValue) { - AdminToolbox.playerdict[myPlayer.SteamId][2] = AdminToolbox.playerdict[myPlayer.SteamId][1]; - //plugin.Info(myPlayer.Name + " No Dmg: " + AdminToolbox.playerdict[myPlayer.SteamId][2]); - return new string[] { myPlayer.Name + " godmode: " + AdminToolbox.playerdict[myPlayer.SteamId][1], myPlayer.Name + " No Dmg: " + AdminToolbox.playerdict[myPlayer.SteamId][2] }; + AdminToolbox.playerdict[myPlayer.SteamId].dmgOff = AdminToolbox.playerdict[myPlayer.SteamId].godMode; + return new string[] { myPlayer.Name + " AT-Godmode: " + AdminToolbox.playerdict[myPlayer.SteamId].godMode, myPlayer.Name + " No Dmg: " + AdminToolbox.playerdict[myPlayer.SteamId].dmgOff }; } else - return new string[] { myPlayer.Name + " godmode: " + AdminToolbox.playerdict[myPlayer.SteamId][1] }; + return new string[] { myPlayer.Name + " AT-Godmode: " + AdminToolbox.playerdict[myPlayer.SteamId].godMode }; } else { - AdminToolbox.playerdict[myPlayer.SteamId][1] = !AdminToolbox.playerdict[myPlayer.SteamId][1]; - //plugin.Info(myPlayer.Name + " Godmode: " + AdminToolbox.playerdict[myPlayer.SteamId][1]); - return new string[] { myPlayer.Name + " Godmode: " + AdminToolbox.playerdict[myPlayer.SteamId][1] }; + AdminToolbox.playerdict[myPlayer.SteamId].godMode = !AdminToolbox.playerdict[myPlayer.SteamId].godMode; + return new string[] { myPlayer.Name + " AT-Godmode: " + AdminToolbox.playerdict[myPlayer.SteamId].godMode }; } } else { return new string[] { GetUsage() }; - //plugin.Info(GetUsage()); } } } diff --git a/AdminToolbox/AdminToolbox/Commands/HealCommand.cs b/AdminToolbox/AdminToolbox/Commands/HealCommand.cs index f5e52be..3a3dbc4 100644 --- a/AdminToolbox/AdminToolbox/Commands/HealCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/HealCommand.cs @@ -7,13 +7,6 @@ namespace AdminToolbox.Command { class HealCommand : ICommandHandler { - private AdminToolbox plugin; - - public HealCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Heals player. Use int for spesific amount (optional)"; @@ -21,7 +14,7 @@ public string GetCommandDescription() public string GetUsage() { - return "HEAL [PLAYER] (AMOUNT)"; + return "(ATHEAL / AT-HEAL) [PLAYER] (AMOUNT)"; } public string[] OnCall(ICommandSender sender, string[] args) @@ -55,12 +48,11 @@ public string[] OnCall(ICommandSender sender, string[] args) else { foreach (Player pl in server.GetPlayers()) { pl.SetHealth(pl.TeamRole.MaxHP); } - plugin.Info("Set all players to their default max HP"); return new string[] { "Set all players to their default max HP" }; } } Player myPlayer = GetPlayerFromString.GetPlayer(args[0], out myPlayer); - if (myPlayer == null) { /*plugin.Info("Couldn't find player: " + args[0]);*/ return new string[] { "Couldn't find player: " + args[0] }; } + if (myPlayer == null) return new string[] { "Couldn't find player: " + args[0] }; if (args.Length > 1) { if (Int32.TryParse(args[1], out int j)) diff --git a/AdminToolbox/AdminToolbox/Commands/InstantKillCommand.cs b/AdminToolbox/AdminToolbox/Commands/InstantKillCommand.cs index a5d4d6e..8747af3 100644 --- a/AdminToolbox/AdminToolbox/Commands/InstantKillCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/InstantKillCommand.cs @@ -7,13 +7,6 @@ namespace AdminToolbox.Command { class InstantKillCommand : ICommandHandler { - private AdminToolbox plugin; - - public InstantKillCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Lets specified players instantly kill targets"; @@ -40,7 +33,7 @@ public string[] OnCall(ICommandSender sender, string[] args) int playerNum = 0; foreach (Player pl in server.GetPlayers()) { - AdminToolbox.playerdict[pl.SteamId][6] = j; + AdminToolbox.playerdict[pl.SteamId].instantKill = j; playerNum++; } outPut += "\nSet " + playerNum + " player's InstantKill to " + j; @@ -48,13 +41,12 @@ public string[] OnCall(ICommandSender sender, string[] args) } else { - //plugin.Info("Not a valid bool!"); return new string[] { "Not a valid bool!" }; } } else { - foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId][6] = !AdminToolbox.playerdict[pl.SteamId][6]; } + foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId].instantKill = !AdminToolbox.playerdict[pl.SteamId].instantKill; } return new string[] { "Toggled all players InstantKill" }; } } @@ -64,7 +56,7 @@ public string[] OnCall(ICommandSender sender, string[] args) List myPlayerList = new List(); foreach (Player pl in server.GetPlayers()) { - if (AdminToolbox.playerdict[pl.SteamId][6]) + if (AdminToolbox.playerdict[pl.SteamId].instantKill) { myPlayerList.Add(pl.Name); //str += " - " +pl.Name + "\n"; @@ -85,16 +77,16 @@ public string[] OnCall(ICommandSender sender, string[] args) if (myPlayer == null) { return new string[] { "Couldn't find player: " + args[0] }; } if (args.Length > 1) { - if (bool.TryParse(args[1], out bool g)) AdminToolbox.playerdict[myPlayer.SteamId][6] = g; - else if (args[1].ToLower() == "on") { AdminToolbox.playerdict[myPlayer.SteamId][6] = true; } - else if (args[1].ToLower() == "off") { AdminToolbox.playerdict[myPlayer.SteamId][6] = false; } + if (bool.TryParse(args[1], out bool g)) AdminToolbox.playerdict[myPlayer.SteamId].instantKill = g; + else if (args[1].ToLower() == "on") { AdminToolbox.playerdict[myPlayer.SteamId].instantKill = true; } + else if (args[1].ToLower() == "off") { AdminToolbox.playerdict[myPlayer.SteamId].instantKill = false; } else return new string[] { GetUsage() }; - return new string[] { myPlayer.Name + " InstantKill: " + AdminToolbox.playerdict[myPlayer.SteamId][6] }; + return new string[] { myPlayer.Name + " InstantKill: " + AdminToolbox.playerdict[myPlayer.SteamId].instantKill }; } else { - AdminToolbox.playerdict[myPlayer.SteamId][6] = !AdminToolbox.playerdict[myPlayer.SteamId][6]; - return new string[] { myPlayer.Name + " InstantKill: " + AdminToolbox.playerdict[myPlayer.SteamId][6] }; + AdminToolbox.playerdict[myPlayer.SteamId].instantKill = !AdminToolbox.playerdict[myPlayer.SteamId].instantKill; + return new string[] { myPlayer.Name + " InstantKill: " + AdminToolbox.playerdict[myPlayer.SteamId].instantKill }; } } diff --git a/AdminToolbox/AdminToolbox/Commands/IntercomLockCommand.cs b/AdminToolbox/AdminToolbox/Commands/IntercomLockCommand.cs new file mode 100644 index 0000000..d2d46eb --- /dev/null +++ b/AdminToolbox/AdminToolbox/Commands/IntercomLockCommand.cs @@ -0,0 +1,51 @@ +using Smod2.Commands; +using Smod2; +using Smod2.API; + +namespace AdminToolbox.Command +{ + class IntercomLockCommand : ICommandHandler + { + private AdminToolbox plugin; + + public IntercomLockCommand(AdminToolbox plugin) + { + this.plugin = plugin; + } + public string GetCommandDescription() + { + return "Enables/Disables the intercom for non-whitelisted players"; + } + + public string GetUsage() + { + return "(IL / ILOCK / INTERCOMLOCK) (bool)"; + } + + public string[] OnCall(ICommandSender sender, string[] args) + { + Server server = PluginManager.Manager.Server; + if (args.Length >= 1) + { + if (bool.TryParse(args[0], out bool x)) + { + AdminToolbox.isColored = x; + if(!AdminToolbox.intercomLockChanged) AdminToolbox.intercomLockChanged = true; + plugin.Info("IntercomLock set to: " + AdminToolbox.intercomLock); + return new string[] { "IntercomLock set to: " + AdminToolbox.intercomLock }; + } + else + return new string[] { "\"ATCOLOR "+ args[0] +"\" is not a valid bool" }; + } + else if (args.Length == 0) + { + AdminToolbox.intercomLock = !AdminToolbox.intercomLock; + if (!AdminToolbox.intercomLockChanged) AdminToolbox.intercomLockChanged = true; + plugin.Info("IntercomLock set to: " + AdminToolbox.intercomLock); + return new string[] { "IntercomLock set to: " + AdminToolbox.intercomLock }; + } + else + return new string[] { GetUsage() }; + } + } +} diff --git a/AdminToolbox/AdminToolbox/Commands/JailCommand.cs b/AdminToolbox/AdminToolbox/Commands/JailCommand.cs new file mode 100644 index 0000000..71c8336 --- /dev/null +++ b/AdminToolbox/AdminToolbox/Commands/JailCommand.cs @@ -0,0 +1,73 @@ +using Smod2.Commands; +using Smod2; +using Smod2.API; +using System; +using System.Text.RegularExpressions; +using System.Collections.Generic; +using System.Linq; + +namespace AdminToolbox.Command +{ + class JailCommand : ICommandHandler + { + public string GetCommandDescription() + { + return "Jails player for a (optional) specified time"; + } + + public string GetUsage() + { + return "JAIL [PLAYER] (time)"; + } + + public string[] OnCall(ICommandSender sender, string[] args) + { + Server server = PluginManager.Manager.Server; + if (args.Length > 0) + { + Player myPlayer = GetPlayerFromString.GetPlayer(args[0], out myPlayer); + if (myPlayer == null) { return new string[] { "Couldn't get player: " + args[0] }; ; } + AdminToolbox.AddMissingPlayerVariables(new List { myPlayer }); + if (args.Length == 2) + { + if (Int32.TryParse(args[1], out int x)) + { + if (x > 0) + { + AdminToolbox.playerdict[myPlayer.SteamId].JailedToTime = DateTime.Now.AddSeconds(x); + AdminToolbox.SendToJail(myPlayer); + return new string[] { "\"" + myPlayer.Name + "\" sent to jail for: " + x + " seconds." }; + } + else + { + AdminToolbox.playerdict[myPlayer.SteamId].JailedToTime = DateTime.Now.AddYears(1); + AdminToolbox.SendToJail(myPlayer); + return new string[] { "\"" + myPlayer.Name + "\" sent to jail for 1 year" }; + } + } + else + return new string[] { args[1] + " is not a valid number!" }; + } + else if (args.Length == 1) + { + if (AdminToolbox.playerdict[myPlayer.SteamId].isInJail || AdminToolbox.playerdict[myPlayer.SteamId].isJailed) + { + AdminToolbox.ReturnFromJail(myPlayer); + return new string[] { "\""+ myPlayer.Name + "\" returned from jail" }; + } + else + { + AdminToolbox.SendToJail(myPlayer); + AdminToolbox.playerdict[myPlayer.SteamId].JailedToTime = DateTime.Now.AddYears(1); + return new string[] { "\"" + myPlayer.Name + "\" sent to jail for 1 year" }; + } + } + else + return new string[] { GetUsage() }; + + } + else + return new string[] { GetUsage() }; + } + } +} diff --git a/AdminToolbox/AdminToolbox/Commands/KeepSettingsCommand.cs b/AdminToolbox/AdminToolbox/Commands/KeepSettingsCommand.cs index ce9d3be..00cba1c 100644 --- a/AdminToolbox/AdminToolbox/Commands/KeepSettingsCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/KeepSettingsCommand.cs @@ -7,12 +7,6 @@ namespace AdminToolbox.Command { class KeepSettingsCommand : ICommandHandler { - private AdminToolbox plugin; - public KeepSettingsCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Toggles that players keeping settings on round restart"; @@ -39,23 +33,20 @@ public string[] OnCall(ICommandSender sender, string[] args) int playerNum = 0; foreach (Player pl in server.GetPlayers()) { - AdminToolbox.playerdict[pl.SteamId][4] = j; + AdminToolbox.playerdict[pl.SteamId].keepSettings = j; playerNum++; } outPut += "\nSet " + playerNum + " player's KeepSettings to " + j; - //plugin.Info("Set " + playerNum + " player's Godmode to " + j); return new string[] { outPut }; } else { - //plugin.Info("Not a valid bool!"); return new string[] { "Not a valid bool!" }; } } else { - foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId][3] = !AdminToolbox.playerdict[pl.SteamId][3]; } - //plugin.Info("Toggled all players godmodes"); + foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId].keepSettings = !AdminToolbox.playerdict[pl.SteamId].keepSettings; } return new string[] { "Toggled all players KeepSettings" }; } } @@ -65,10 +56,9 @@ public string[] OnCall(ICommandSender sender, string[] args) List myPlayerList = new List(); foreach (Player pl in server.GetPlayers()) { - if (AdminToolbox.playerdict[pl.SteamId][4]) + if (AdminToolbox.playerdict[pl.SteamId].keepSettings) { myPlayerList.Add(pl.Name); - //str += " - " +pl.Name + "\n"; } } if (myPlayerList.Count > 0) @@ -86,14 +76,14 @@ public string[] OnCall(ICommandSender sender, string[] args) if (myPlayer == null) { return new string[] { "Couldn't find player: " + args[0] }; } if (args.Length > 1) { - if (args[1].ToLower() == "on" || args[1].ToLower() == "true") { AdminToolbox.playerdict[myPlayer.SteamId][4] = true; } - else if (args[1].ToLower() == "off" || args[1].ToLower() == "false") { AdminToolbox.playerdict[myPlayer.SteamId][4] = false; } - return new string[] { myPlayer.Name + " KeepSettings: " + AdminToolbox.playerdict[myPlayer.SteamId][4] }; + if (args[1].ToLower() == "on" || args[1].ToLower() == "true") { AdminToolbox.playerdict[myPlayer.SteamId].keepSettings = true; } + else if (args[1].ToLower() == "off" || args[1].ToLower() == "false") { AdminToolbox.playerdict[myPlayer.SteamId].keepSettings = false; } + return new string[] { myPlayer.Name + " KeepSettings: " + AdminToolbox.playerdict[myPlayer.SteamId].keepSettings }; } else { - AdminToolbox.playerdict[myPlayer.SteamId][4] = !AdminToolbox.playerdict[myPlayer.SteamId][4]; - return new string[] { myPlayer.Name + " KeepSettings: " + AdminToolbox.playerdict[myPlayer.SteamId][4] }; + AdminToolbox.playerdict[myPlayer.SteamId].keepSettings = !AdminToolbox.playerdict[myPlayer.SteamId].keepSettings; + return new string[] { myPlayer.Name + " KeepSettings: " + AdminToolbox.playerdict[myPlayer.SteamId].keepSettings }; } } diff --git a/AdminToolbox/AdminToolbox/Commands/LockdownCommand.cs b/AdminToolbox/AdminToolbox/Commands/LockdownCommand.cs index f70db66..9f4a762 100644 --- a/AdminToolbox/AdminToolbox/Commands/LockdownCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/LockdownCommand.cs @@ -7,13 +7,6 @@ namespace AdminToolbox.Command { class LockdownCommand : ICommandHandler { - private AdminToolbox plugin; - - public LockdownCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Locks all the doors for specified players"; @@ -40,23 +33,18 @@ public string[] OnCall(ICommandSender sender, string[] args) int playerNum = 0; foreach (Player pl in server.GetPlayers()) { - AdminToolbox.playerdict[pl.SteamId][5] = j; + AdminToolbox.playerdict[pl.SteamId].lockDown = j; playerNum++; } outPut += "\nSet " + playerNum + " player's Lockdown to " + j; - //plugin.Info("Set " + playerNum + " player's Godmode to " + j); return new string[] { outPut }; } else - { - //plugin.Info("Not a valid bool!"); return new string[] { "Not a valid bool!" }; - } } else { - foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId][5] = !AdminToolbox.playerdict[pl.SteamId][5]; } - //plugin.Info("Toggled all players godmodes"); + foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId].lockDown = !AdminToolbox.playerdict[pl.SteamId].lockDown; } return new string[] { "Toggled all players Lockdown" }; } } @@ -66,7 +54,7 @@ public string[] OnCall(ICommandSender sender, string[] args) List myPlayerList = new List(); foreach (Player pl in server.GetPlayers()) { - if (AdminToolbox.playerdict[pl.SteamId][5]) + if (AdminToolbox.playerdict[pl.SteamId].lockDown) { myPlayerList.Add(pl.Name); //str += " - " +pl.Name + "\n"; @@ -87,16 +75,16 @@ public string[] OnCall(ICommandSender sender, string[] args) if (myPlayer == null) { return new string[] { "Couldn't find player: " + args[0] }; } if (args.Length > 1) { - if (bool.TryParse(args[1], out bool g)) AdminToolbox.playerdict[myPlayer.SteamId][5] = g; - else if (args[1].ToLower() == "on") { AdminToolbox.playerdict[myPlayer.SteamId][5] = true; } - else if (args[1].ToLower() == "off") { AdminToolbox.playerdict[myPlayer.SteamId][5] = false; } + if (bool.TryParse(args[1], out bool g)) AdminToolbox.playerdict[myPlayer.SteamId].lockDown = g; + else if (args[1].ToLower() == "on") { AdminToolbox.playerdict[myPlayer.SteamId].lockDown = true; } + else if (args[1].ToLower() == "off") { AdminToolbox.playerdict[myPlayer.SteamId].lockDown = false; } else return new string[] { GetUsage() }; - return new string[] { myPlayer.Name + " Lockdown: " + AdminToolbox.playerdict[myPlayer.SteamId][5] }; + return new string[] { myPlayer.Name + " Lockdown: " + AdminToolbox.playerdict[myPlayer.SteamId].lockDown }; } else { - AdminToolbox.playerdict[myPlayer.SteamId][5] = !AdminToolbox.playerdict[myPlayer.SteamId][5]; - return new string[] { myPlayer.Name + " Lockdown: " + AdminToolbox.playerdict[myPlayer.SteamId][5] }; + AdminToolbox.playerdict[myPlayer.SteamId].lockDown = !AdminToolbox.playerdict[myPlayer.SteamId].lockDown; + return new string[] { myPlayer.Name + " Lockdown: " + AdminToolbox.playerdict[myPlayer.SteamId].lockDown }; } } diff --git a/AdminToolbox/AdminToolbox/Commands/NoDmgCommand.cs b/AdminToolbox/AdminToolbox/Commands/NoDmgCommand.cs index 13d1fc6..f478540 100644 --- a/AdminToolbox/AdminToolbox/Commands/NoDmgCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/NoDmgCommand.cs @@ -7,13 +7,6 @@ namespace AdminToolbox.Command { class NoDmgCommand : ICommandHandler { - private AdminToolbox plugin; - - public NoDmgCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Switch on/off damageOutput for player"; @@ -39,22 +32,17 @@ public string[] OnCall(ICommandSender sender, string[] args) int playerNum = 0; foreach (Player pl in server.GetPlayers()) { - AdminToolbox.playerdict[pl.SteamId][2] = j; + AdminToolbox.playerdict[pl.SteamId].dmgOff = j; playerNum++; } - //plugin.Info("Set " + playerNum + " player's \"No Dmg\" to " + j); return new string[] { "Set " + playerNum + " player's \"No Dmg\" to " + j }; } else - { - //plugin.Info("Not a valid bool!"); return new string[] { "Not a valid bool!" }; - } } else { - foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId][2] = !AdminToolbox.playerdict[pl.SteamId][2]; } - //plugin.Info("Toggled all player's \"No Dmg\""); + foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId].dmgOff = !AdminToolbox.playerdict[pl.SteamId].dmgOff; } return new string[] { "Toggled all player's \"No Dmg\"" }; } } @@ -64,11 +52,8 @@ public string[] OnCall(ICommandSender sender, string[] args) List myPlayerList = new List(); foreach (Player pl in server.GetPlayers()) { - if (AdminToolbox.playerdict[pl.SteamId][2]) - { + if (AdminToolbox.playerdict[pl.SteamId].dmgOff) myPlayerList.Add(pl.Name); - //str += " - " +pl.Name + "\n"; - } } if (myPlayerList.Count > 0) { @@ -79,7 +64,6 @@ public string[] OnCall(ICommandSender sender, string[] args) } } else str = "\nNo players with \"No Dmg\" enabled!"; - //plugin.Info(str); return new string[] { str }; } Player myPlayer = GetPlayerFromString.GetPlayer(args[0], out myPlayer); @@ -88,28 +72,23 @@ public string[] OnCall(ICommandSender sender, string[] args) { bool changedValue = false; if (args.Length > 2) { if (args[2].ToLower() == "godmode") { changedValue = true; } } - if (args[1].ToLower() == "on" || args[1].ToLower() == "true") { AdminToolbox.playerdict[myPlayer.SteamId][2] = true; } - else if (args[1].ToLower() == "off" || args[1].ToLower() == "false") { AdminToolbox.playerdict[myPlayer.SteamId][2] = false; } - //plugin.Info(myPlayer.Name + " No Dmg: " + AdminToolbox.playerdict[myPlayer.SteamId][2]); + if (args[1].ToLower() == "on" || args[1].ToLower() == "true") { AdminToolbox.playerdict[myPlayer.SteamId].dmgOff = true; } + else if (args[1].ToLower() == "off" || args[1].ToLower() == "false") { AdminToolbox.playerdict[myPlayer.SteamId].dmgOff = false; } if (changedValue) { - AdminToolbox.playerdict[myPlayer.SteamId][1] = AdminToolbox.playerdict[myPlayer.SteamId][2]; - return new string[] { myPlayer.Name + " No Dmg: " + AdminToolbox.playerdict[myPlayer.SteamId][2], myPlayer.Name + " Godmode: " + AdminToolbox.playerdict[myPlayer.SteamId][1] }; - //plugin.Info(myPlayer.Name + " Godmode: " + AdminToolbox.playerdict[myPlayer.SteamId][1]); + AdminToolbox.playerdict[myPlayer.SteamId].godMode = AdminToolbox.playerdict[myPlayer.SteamId].dmgOff; + return new string[] { myPlayer.Name + " No Dmg: " + AdminToolbox.playerdict[myPlayer.SteamId].dmgOff, myPlayer.Name + " Godmode: " + AdminToolbox.playerdict[myPlayer.SteamId].godMode }; } - return new string[] { myPlayer.Name + " No Dmg: " + AdminToolbox.playerdict[myPlayer.SteamId][2] }; + return new string[] { myPlayer.Name + " No Dmg: " + AdminToolbox.playerdict[myPlayer.SteamId].dmgOff }; } else { - AdminToolbox.playerdict[myPlayer.SteamId][2] = !AdminToolbox.playerdict[myPlayer.SteamId][2]; - return new string[] { myPlayer.Name + " No Dmg: " + AdminToolbox.playerdict[myPlayer.SteamId][2] }; - //plugin.Info(myPlayer.Name + " No Dmg: " + AdminToolbox.playerdict[myPlayer.SteamId][2]); + AdminToolbox.playerdict[myPlayer.SteamId].dmgOff = !AdminToolbox.playerdict[myPlayer.SteamId].dmgOff; + return new string[] { myPlayer.Name + " No Dmg: " + AdminToolbox.playerdict[myPlayer.SteamId].dmgOff }; } } else - { return new string[] { GetUsage() }; - } } } } diff --git a/AdminToolbox/AdminToolbox/Commands/PlayerCommand.cs b/AdminToolbox/AdminToolbox/Commands/PlayerCommand.cs index 6179f2a..48e0e96 100644 --- a/AdminToolbox/AdminToolbox/Commands/PlayerCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/PlayerCommand.cs @@ -1,18 +1,12 @@ using Smod2.Commands; using Smod2; using Smod2.API; +using System; namespace AdminToolbox.Command { class PlayerCommand : ICommandHandler { - private AdminToolbox plugin; - - public PlayerCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Gets toolbox info about spesific player"; @@ -20,41 +14,72 @@ public string GetCommandDescription() public string GetUsage() { - return "PLAYER [PLAYERNAME]"; + return "(P / PLAYER) [PLAYERNAME]"; } public string[] OnCall(ICommandSender sender, string[] args) { + bool isPlayer() + { + if (sender.GetType() == typeof(Player)) + return true; + else + return false; + } + AdminToolbox.AddMissingPlayerVariables(); Server server = PluginManager.Manager.Server; + string ColoredBools(bool input) + { + if (isPlayer() && input) + return "" + input + ""; + else if (isPlayer() && !input) + return "" + input + ""; + else + return input.ToString(); + } if (args.Length > 0 && server.GetPlayers().Count>0) { Player myPlayer = GetPlayerFromString.GetPlayer(args[0], out myPlayer); if (myPlayer == null) { return new string[] { "Couldn't get player: " + args[0] }; ; } + TimeSpan myTimespan = AdminToolbox.playerdict[myPlayer.SteamId].JailedToTime.Subtract(DateTime.Now); + string myCurrentJailTime() + { + int minutes = (int)(myTimespan.TotalSeconds / 60); + int seconds = (int)(myTimespan.TotalSeconds - (minutes * 60)); + if (seconds <= 0) return "N/A"; + if (minutes > 0) + return minutes + " minutes, " + seconds + " seconds"; + else + return seconds + " seconds"; + } + string x = "Player info: \n " + "\n Player: " + myPlayer.Name + "\n - SteamID: " + myPlayer.SteamId + "\n - Health: " + myPlayer.GetHealth() + "\n - Role: " + myPlayer.TeamRole.Role + - "\n - Server Rank: " + myPlayer.GetRankName() + + "\n - Server Rank: " + "" + myPlayer.GetRankName()+"" + "\n - AdminToolbox Toggables: " + - "\n - SpectatorOnly: " + AdminToolbox.playerdict[myPlayer.SteamId][0] + - "\n - Godmode: " + AdminToolbox.playerdict[myPlayer.SteamId][1] + - "\n - NoDmg: " + AdminToolbox.playerdict[myPlayer.SteamId][2] + - "\n - BreakDoors: " + AdminToolbox.playerdict[myPlayer.SteamId][3] + - "\n - KeepSettings: " + AdminToolbox.playerdict[myPlayer.SteamId][4] + - "\n - PlayerLockDown: " + AdminToolbox.playerdict[myPlayer.SteamId][5] + - "\n - InstantKill: " + AdminToolbox.playerdict[myPlayer.SteamId][6] + + "\n - SpectatorOnly: " + ColoredBools(AdminToolbox.playerdict[myPlayer.SteamId].spectatorOnly) + + "\n - Godmode: " + ColoredBools(AdminToolbox.playerdict[myPlayer.SteamId].godMode) + + "\n - NoDmg: " + ColoredBools(AdminToolbox.playerdict[myPlayer.SteamId].dmgOff) + + "\n - BreakDoors: " + ColoredBools(AdminToolbox.playerdict[myPlayer.SteamId].destroyDoor) + + "\n - KeepSettings: " + ColoredBools(AdminToolbox.playerdict[myPlayer.SteamId].keepSettings) + + "\n - PlayerLockDown: " + ColoredBools(AdminToolbox.playerdict[myPlayer.SteamId].lockDown) + + "\n - InstantKill: " + ColoredBools(AdminToolbox.playerdict[myPlayer.SteamId].instantKill) + + "\n - IsJailed: " + ColoredBools(AdminToolbox.playerdict[myPlayer.SteamId].isJailed) + + "\n - Released In: "+ myCurrentJailTime() + + /*"\n - IsInJail: " + ColoredBools(AdminToolbox.playerdict[myPlayer.SteamId].isInJail) +*/ "\n - Stats:" + - "\n - Kills: " + AdminToolbox.playerStats[myPlayer.SteamId][0] + - "\n - TeamKills: " + AdminToolbox.playerStats[myPlayer.SteamId][1] + - "\n - Deaths: " + AdminToolbox.playerStats[myPlayer.SteamId][2] + - "\n - Rounds Played: " + AdminToolbox.playerStats[myPlayer.SteamId][3] + + "\n - Kills: " + AdminToolbox.playerdict[myPlayer.SteamId].Kills + + "\n - TeamKills: " + AdminToolbox.playerdict[myPlayer.SteamId].TeamKills + + "\n - Deaths: " + AdminToolbox.playerdict[myPlayer.SteamId].Deaths + + "\n - Rounds Played: " + AdminToolbox.playerdict[myPlayer.SteamId].RoundsPlayed + "\n - Position:" + " - X:" + (int)myPlayer.GetPosition().x + - " - Y:" + (int)myPlayer.GetPosition().y + - " - Z:" + (int)myPlayer.GetPosition().z; - //plugin.Info(x); + " Y:" + (int)myPlayer.GetPosition().y + + " Z:" + (int)myPlayer.GetPosition().z; return new string[] { x }; } return new string[] { GetUsage() }; diff --git a/AdminToolbox/AdminToolbox/Commands/PlayerListCommand.cs b/AdminToolbox/AdminToolbox/Commands/PlayerListCommand.cs index 68b39a5..0115fa3 100644 --- a/AdminToolbox/AdminToolbox/Commands/PlayerListCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/PlayerListCommand.cs @@ -1,18 +1,12 @@ using Smod2.Commands; using Smod2; using Smod2.API; +using System.Collections.Generic; namespace AdminToolbox.Command { class PlayerListCommand : ICommandHandler { - private AdminToolbox plugin; - - public PlayerListCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Lists current players to server console"; @@ -27,12 +21,18 @@ public string[] OnCall(ICommandSender sender, string[] args) { Server server = PluginManager.Manager.Server; if (server.NumPlayers - 1 < 1) { return new string[] { "No players" }; } - string input = server.NumPlayers - 1 + " - Players in server: \n"; + string str = server.NumPlayers - 1 + " - Players in server: \n"; + List myPlayerList = new List(); foreach (Player pl in server.GetPlayers()) { - input += pl.Name + " IP: " + pl.IpAddress + " STEAMID: " + pl.SteamId + "\n"; + myPlayerList.Add(pl.TeamRole.Role+"("+(int)pl.TeamRole.Role+")" + " " + pl.Name + " IP: " + pl.IpAddress + " STEAMID: " + pl.SteamId + "\n"); + } + myPlayerList.Sort(); + foreach (var item in myPlayerList) + { + str += "\n - " + item; } - return new string[] { input }; + return new string[] { str }; } } } diff --git a/AdminToolbox/AdminToolbox/Commands/PosCommand.cs b/AdminToolbox/AdminToolbox/Commands/PosCommand.cs index b6a74f1..03288e7 100644 --- a/AdminToolbox/AdminToolbox/Commands/PosCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/PosCommand.cs @@ -13,13 +13,6 @@ namespace AdminToolbox.Command { class PosCommand : ICommandHandler { - private AdminToolbox plugin; - - public PosCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Alters the player position"; @@ -27,7 +20,7 @@ public string GetCommandDescription() public string GetUsage() { - return "pos (player) [add/set/get/help] [x=][y=][z=]\nVisit the \"github.com/Rnen/AdminToolbox\" for more info"; + return "pos (player) [add/set/get] [x=][y=][z=]\nVisit the \"github.com/Rnen/AdminToolbox\" for more info"; } @@ -52,47 +45,28 @@ public string[] OnCall(ICommandSender sender, string[] args) {"z",0 } }; int xInput = 0, yInput = 0, zInput = 0; - char[] delimiterChars = { '.', ',', '=', '_', ':', ';', ' ' }; + char[] delimiterChars = { '.', ',', '=', '_', ':', ';', ' ', '-' }; string[] charsAllowed = { "x", "y", "z" }; for (int i = 2; i < args.Length; i++) { string[] cordinates = args[i].ToLower().Split(delimiterChars); if (cordinates.Length < 2) { return new string[] { GetUsage() }; } if (!charsAllowed.Any(cordinates[0].Contains)) - { - //plugin.Info(cordinates[0] + " is not a valid axis, use X, Y or Z"); return new string[] { cordinates[0] + " is not a valid axis, use X, Y or Z" }; - } if (Int32.TryParse(cordinates[1], out int xyz)) - { if (!myPos.ContainsKey(cordinates[0])) - { - //myPos.Remove(cordinates[0]); - //plugin.Info("Added " + cordinates[0] + " value: " + xyz + " to cord dict"); myPos.Add(cordinates[0], xyz); - } else - { - //plugin.Info("Set " + cordinates[0] + " value: " + xyz); myPos[cordinates[0]] = xyz; - } - } else - { - //plugin.Info(cordinates[1] + " is not a valid number"); return new string[] { cordinates[1] + " is not a valid number" }; - } - } xInput = myPos["x"]; yInput = myPos["y"]; zInput = myPos["z"]; - //plugin.Info("MyPos: \n xInput: " + xInput + "\n yInput: " + yInput + "\n zInput: " + zInput); Vector myvector = new Vector(myPlayer.GetPosition().x + xInput, myPlayer.GetPosition().y + yInput, myPlayer.GetPosition().z + zInput); - myPlayer.Teleport(myvector); return new string[] { "Teleported " + myPlayer.Name + " to x:" + myvector.x + " y:" + myvector.y + " z:" + myvector.z }; - //plugin.Info("Teleported " + myPlayer.Name + " to x:" + myvector.x + " y:" + myvector.y + " z:" + myvector.z); } else if (args[1].ToLower() == "set") { @@ -111,26 +85,21 @@ public string[] OnCall(ICommandSender sender, string[] args) if (cordinates.Length < 2) { return new string[] { GetUsage() }; } if (!charsAllowed.Any(cordinates[0].Contains)) { - //plugin.Info(cordinates[0] + " is not a valid axis, use X, Y or Z"); return new string[] { cordinates[0] + " is not a valid axis, use X, Y or Z" }; } if (Int32.TryParse(cordinates[1], out int xyz)) { if (!myPos.ContainsKey(cordinates[0].ToLower())) { - //myPos.Remove(cordinates[0]); - //plugin.Info("Added " + cordinates[0] + " value: " + xyz + " to cord dict"); myPos.Add(cordinates[0].ToLower(), xyz); } else { - //plugin.Info("Set " + cordinates[0] + " value: " + xyz); myPos[cordinates[0]] = xyz; } } else { - //plugin.Info(cordinates[1] + " is not a valid number"); return new string[] { cordinates[1] + " is not a valid number" }; } @@ -138,35 +107,24 @@ public string[] OnCall(ICommandSender sender, string[] args) xInput = myPos["x"]; yInput = myPos["y"]; zInput = myPos["z"]; - //plugin.Info("MyPos: \n xInput: " + xInput + "\n yInput: " + yInput + "\n zInput: " + zInput); Vector myvector = new Vector(xInput, yInput, zInput); myPlayer.Teleport(myvector); - //plugin.Info("Teleported " + myPlayer.Name + " to x:" + myvector.x + " y:" + myvector.y + " z:" + myvector.z); return new string[] { "Teleported " + myPlayer.Name + " to x:" + myvector.x + " y:" + myvector.y + " z:" + myvector.z }; } else return new string[] { GetUsage() }; - //plugin.Info("Not valid type, use [add/set/get]"); } else if (args[1].ToLower() == "get") { - //plugin.Info(myPlayer.Name + " Pos[x:" + myPlayer.GetPosition().x + " y:" + myPlayer.GetPosition().y + " z:" + myPlayer.GetPosition().z); return new string[] { myPlayer.Name + " Pos x:" + myPlayer.GetPosition().x + " y:" + myPlayer.GetPosition().y + " z:" + myPlayer.GetPosition().z }; } else return new string[] { GetUsage() }; - //plugin.Info(GetUsage()); } else return new string[] { GetUsage() }; - //plugin.Info(GetUsage()); } - //else if (args[0].ToLower() == "help") - //{ - // //plugin.Info("\n General info: You dont need to use all X Y Z, you can use only one if you wish\n This command might trigger the anti-cheat if you have it enabled \n Teleporing less than 7 units might not work \n \n Position command examples: \n pos (player) set x:80 y:-1000 z:95 -Sets the player pos to x y z \n pos (player) add y:10 -Adds to the player's chosen axis pos \n pos (player) get -Gets the player's current pos \n Write ROOMPOS to see room positions"); - // return new string[] { "\nGeneral info: You dont need to use all X Y Z, you can use only one if you wish\n This command might trigger the anti-cheat if you have it enabled \n Teleporing less than 7 units might not work \n \n Position command examples: \n pos (player) set x:80 y:-1000 z:95 -Sets the player pos to x y z \n pos (player) add y:10 -Adds to the player's chosen axis pos \n pos (player) get -Gets the player's current pos \n Write ROOMPOS to see room positions" }; - //} else return new string[] { GetUsage() }; } diff --git a/AdminToolbox/AdminToolbox/Commands/RoleCommand.cs b/AdminToolbox/AdminToolbox/Commands/RoleCommand.cs index 61b974d..26c316c 100644 --- a/AdminToolbox/AdminToolbox/Commands/RoleCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/RoleCommand.cs @@ -7,13 +7,6 @@ namespace AdminToolbox.Command { class RoleCommand : ICommandHandler { - private AdminToolbox plugin; - - public RoleCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Sets player to (ROLEID)"; diff --git a/AdminToolbox/AdminToolbox/Commands/ServerCommand.cs b/AdminToolbox/AdminToolbox/Commands/ServerCommand.cs new file mode 100644 index 0000000..84fe660 --- /dev/null +++ b/AdminToolbox/AdminToolbox/Commands/ServerCommand.cs @@ -0,0 +1,64 @@ +using Smod2.Commands; +using Smod2; +using Smod2.API; + +namespace AdminToolbox.Command +{ + class ServerCommand : ICommandHandler + { + public string GetCommandDescription() + { + return "Gets toolbox info about the server"; + } + + public string GetUsage() + { + return "SERVER / S / SERVERINFO"; + } + + public string[] OnCall(ICommandSender sender, string[] args) + { + Server server = PluginManager.Manager.Server; + int minutes = (int)(server.Round.Duration / 60), duration = server.Round.Duration; + string timeString = string.Empty; + if (duration < 60) + timeString = duration + " seconds"; + else + timeString = minutes + " minutes, " + (duration - (minutes * 60)) + " seconds"; + bool isPlayer() + { + if (sender.GetType() == typeof(Player)) + return true; + else + return false; + } + string ColoredBools(bool input) + { + if (isPlayer() && input) + return "" + input + ""; + else if (isPlayer() && !input) + return "" + input + ""; + else + return input.ToString(); + } + int pCount = server.GetPlayers().Count; + string pJail = string.Empty; + foreach (Player pl in AdminToolbox.GetJailedPlayers()) + pJail += pl.Name + ", "; + + string x = "Server info: \n " + + "\n Server Name: " + server.Name + + "\n - Server IP: " + server.IpAddress + ":" + server.Port + + "\n - PlayerCount: " + pCount + + "\n - AdminToolbox Toggables: " + + "\n - isColored: " + ColoredBools(AdminToolbox.isColored) + + "\n - IntercomLock: " + ColoredBools(AdminToolbox.intercomLock) + + "\n - LockRound: " + ColoredBools(AdminToolbox.lockRound) + + "\n - Jailed Players: " + pJail + + "\n - Stats:" + + "\n - Round Number: " + AdminToolbox.roundCount + + "\n - Round Duration: " + timeString; + return new string[] { x }; + } + } +} diff --git a/AdminToolbox/AdminToolbox/Commands/SetHpCommand.cs b/AdminToolbox/AdminToolbox/Commands/SetHpCommand.cs index c5fa8ef..12ea7b0 100644 --- a/AdminToolbox/AdminToolbox/Commands/SetHpCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/SetHpCommand.cs @@ -7,13 +7,6 @@ namespace AdminToolbox.Command { class SetHpCommand : ICommandHandler { - private AdminToolbox plugin; - - public SetHpCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Sets player HP. Use int for amount"; @@ -21,7 +14,7 @@ public string GetCommandDescription() public string GetUsage() { - return "HP [PLAYER] (AMOUNT)"; + return "(ATHP / ATSETHP / AT-HP / AT-SETHP) [PLAYER] (AMOUNT)"; } public string[] OnCall(ICommandSender sender, string[] args) @@ -34,8 +27,7 @@ public string[] OnCall(ICommandSender sender, string[] args) { if (args.Length > 1) { - int j; - if (Int32.TryParse(args[1], out j)) + if (Int32.TryParse(args[1], out int j)) { int playerNum = 0; foreach (Player pl in server.GetPlayers()) @@ -45,50 +37,40 @@ public string[] OnCall(ICommandSender sender, string[] args) } if (playerNum > 1) return new string[] { "Set " + playerNum + " players HP to " + j + "HP" }; - //plugin.Info("Set " + playerNum + " players HP to " + j + "HP"); else return new string[] { "Set " + playerNum + " players HP to " + j + "HP" }; - //plugin.Info("Set " + playerNum + " player HP to " + j + "HP"); } else { return new string[] { "Not a valid number!" }; - //plugin.Info("Not a valid number!"); } } else { foreach (Player pl in server.GetPlayers()) { pl.SetHealth(pl.TeamRole.MaxHP); } return new string[] { "Set all players to their default max HP" }; - //plugin.Info("Set all players to their default max HP"); } } Player myPlayer = GetPlayerFromString.GetPlayer(args[0], out myPlayer); if (myPlayer == null) { return new string[] { "Couldn't get player: " + args[0] }; ; } if (args.Length > 1) { - int j; - if (Int32.TryParse(args[1], out j)) + if (Int32.TryParse(args[1], out int j)) { - //plugin.Info("Set " + myPlayer.Name + "'s HP to " + j + "HP"); myPlayer.SetHealth(j); return new string[] { "Set " + myPlayer.Name + "'s HP to " + j + "HP" }; } else return new string[] { "Not a valid number!" }; - //plugin.Info("Not a valid number!"); } else { - //plugin.Info(GetUsage()); - //plugin.Info("Set " + myPlayer.Name + " to default HP"); myPlayer.SetHealth(myPlayer.TeamRole.MaxHP); return new string[] { "Set " + myPlayer.Name + " to default ("+myPlayer.TeamRole.MaxHP +") HP" }; } } else return new string[] { GetUsage() }; - //plugin.Info(GetUsage()); } } } diff --git a/AdminToolbox/AdminToolbox/Commands/SpectatorCommand.cs b/AdminToolbox/AdminToolbox/Commands/SpectatorCommand.cs index 345ea5f..8f8821f 100644 --- a/AdminToolbox/AdminToolbox/Commands/SpectatorCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/SpectatorCommand.cs @@ -8,13 +8,6 @@ namespace AdminToolbox.Command { class SpectatorCommand : ICommandHandler { - private AdminToolbox plugin; - - public SpectatorCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Switch on/off always spectator for player"; @@ -41,27 +34,21 @@ public string[] OnCall(ICommandSender sender, string[] args) int playerNum = 0; foreach (Player pl in server.GetPlayers()) { - AdminToolbox.playerdict[pl.SteamId][0] = j; + AdminToolbox.playerdict[pl.SteamId].spectatorOnly = j; playerNum++; } if (playerNum > 1) return new string[] { playerNum + " players set to AlwaysSpectator: " + j }; - //plugin.Info(playerNum + " roles set to " + (Role)14); else return new string[] { playerNum + " player set to AlwaysSpectator: " + j }; - //plugin.Info(playerNum + " role set to " + (Role)14); } else - { - return new string[] { "Not a valid bool!" }; - } } else { int playerNum = 0; - foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId][0] = !AdminToolbox.playerdict[pl.SteamId][0]; playerNum++; } - //plugin.Info("Toggled all player's \"No Dmg\""); + foreach (Player pl in server.GetPlayers()) { AdminToolbox.playerdict[pl.SteamId].spectatorOnly = !AdminToolbox.playerdict[pl.SteamId].spectatorOnly; playerNum++; } return new string[] { "Toggled " + playerNum + " player's \"AlwaysSpectator\"" }; } } @@ -71,46 +58,35 @@ public string[] OnCall(ICommandSender sender, string[] args) List myPlayerList = new List(); foreach (Player pl in server.GetPlayers()) { - if (AdminToolbox.playerdict[pl.SteamId][0]) - { + if (AdminToolbox.playerdict[pl.SteamId].spectatorOnly) myPlayerList.Add(pl.Name); - //str += " - " +pl.Name + "\n"; - } } if (myPlayerList.Count > 0) { myPlayerList.Sort(); foreach (var item in myPlayerList) - { str += "\n - " + item; - } } else str = "\nNo players with \"AlwaysSpectator\" enabled!"; - //plugin.Info(str); return new string[] { str }; } Player myPlayer = GetPlayerFromString.GetPlayer(args[0], out myPlayer); if (myPlayer == null) { return new string[] { "Couldn't find player: " + args[0] }; } if (args.Length > 1) { - if (args[1].ToLower() == "on" || args[1].ToLower() == "true") { AdminToolbox.playerdict[myPlayer.SteamId][0] = true; } - else if (args[1].ToLower() == "off" || args[1].ToLower() == "false") { AdminToolbox.playerdict[myPlayer.SteamId][0] = false; } - //plugin.Info(myPlayer.Name + " Keep settings: " + AdminToolbox.playerdict[myPlayer.SteamId][0]); - return new string[] { myPlayer.Name + " AlwaysSpectator: " + AdminToolbox.playerdict[myPlayer.SteamId][0] }; + if (args[1].ToLower() == "on" || args[1].ToLower() == "true") { AdminToolbox.playerdict[myPlayer.SteamId].spectatorOnly = true; } + else if (args[1].ToLower() == "off" || args[1].ToLower() == "false") { AdminToolbox.playerdict[myPlayer.SteamId].spectatorOnly = false; } + return new string[] { myPlayer.Name + " AlwaysSpectator: " + AdminToolbox.playerdict[myPlayer.SteamId].spectatorOnly }; } else { - AdminToolbox.playerdict[myPlayer.SteamId][0] = !AdminToolbox.playerdict[myPlayer.SteamId][0]; - //plugin.Info(myPlayer.Name + " Keep settings: " + AdminToolbox.playerdict[myPlayer.SteamId][0]); - return new string[] { myPlayer.Name + " AlwaysSpectator: " + AdminToolbox.playerdict[myPlayer.SteamId][0] }; + AdminToolbox.playerdict[myPlayer.SteamId].spectatorOnly = !AdminToolbox.playerdict[myPlayer.SteamId].spectatorOnly; + return new string[] { myPlayer.Name + " AlwaysSpectator: " + AdminToolbox.playerdict[myPlayer.SteamId].spectatorOnly }; } } else - { return new string[] { GetUsage() }; - //plugin.Info(GetUsage()); - } } } } diff --git a/AdminToolbox/AdminToolbox/Commands/TeleportCommand.cs b/AdminToolbox/AdminToolbox/Commands/TeleportCommand.cs index 67eb069..cdfd32f 100644 --- a/AdminToolbox/AdminToolbox/Commands/TeleportCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/TeleportCommand.cs @@ -6,13 +6,6 @@ namespace AdminToolbox.Command { class TeleportCommand : ICommandHandler { - private AdminToolbox plugin; - - public TeleportCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Teleports player to player2"; @@ -39,7 +32,6 @@ public string[] OnCall(ICommandSender sender, string[] args) pl.Teleport(myTpPlayer.GetPosition()); playerNum++; } - //plugin.Info("Teleported " + playerNum + " players to " + myTpPlayer.Name); return new string[] { "Teleported " + playerNum + " players to " + myTpPlayer.Name }; } Player myPlayer = GetPlayerFromString.GetPlayer(args[0], out myPlayer); @@ -49,19 +41,13 @@ public string[] OnCall(ICommandSender sender, string[] args) if (args[1] != null) { myPlayer.Teleport(myPlayer2.GetPosition()); - //plugin.Info("Teleported: " + myPlayer.Name + " to " + myPlayer2.Name /*+ " at " + System.DateTime.Now.ToString()*/); return new string[] { "Teleported: " + myPlayer.Name + " to " + myPlayer2.Name }; } else return new string[] { GetUsage() }; - //plugin.Info(GetUsage()); - } else - { return new string[] { GetUsage() }; - //plugin.Info(GetUsage()); - } } } } diff --git a/AdminToolbox/AdminToolbox/Commands/TutorialCommand.cs b/AdminToolbox/AdminToolbox/Commands/TutorialCommand.cs index 75e0673..942de58 100644 --- a/AdminToolbox/AdminToolbox/Commands/TutorialCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/TutorialCommand.cs @@ -7,13 +7,6 @@ namespace AdminToolbox.Command { class TutorialCommand : ICommandHandler { - private AdminToolbox plugin; - - public TutorialCommand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return "Sets player to TUTORIAL"; @@ -21,12 +14,11 @@ public string GetCommandDescription() public string GetUsage() { - return "TUT/TUTORIAL [PLAYER]"; + return "(TUT / TUTORIAL) [PLAYER / *]"; } public string[] OnCall(ICommandSender sender, string[] args) { - AdminToolbox.AddMissingPlayerVariables(); Server server = PluginManager.Manager.Server; if (args.Length > 0) { @@ -34,8 +26,7 @@ public string[] OnCall(ICommandSender sender, string[] args) { if (args.Length > 1) { - int j; - if (Int32.TryParse(args[1], out j)) + if (Int32.TryParse(args[1], out int j)) { int playerNum = 0; foreach (Player pl in server.GetPlayers()) @@ -44,36 +35,28 @@ public string[] OnCall(ICommandSender sender, string[] args) playerNum++; } if (playerNum > 1) - return new string[] { playerNum + " roles set to " + (Role)14 }; - //plugin.Info(playerNum + " roles set to " + (Role)14); + return new string[] { playerNum + " roles set to " + Role.TUTORIAL }; else - return new string[] { playerNum + " role set to " + (Role)14 }; - //plugin.Info(playerNum + " role set to " + (Role)14); + return new string[] { playerNum + " role set to " + Role.TUTORIAL }; } else - { - //plugin.Info("Not a valid number!"); return new string[] { "Not a valid number!" }; - } } else { foreach (Player pl in server.GetPlayers()) { pl.ChangeRole(Role.TUTORIAL); } - //plugin.Info("Changed all players to " + Role.TUTORIAL); return new string[] { "Changed all players to " + Role.TUTORIAL }; } } Player myPlayer = GetPlayerFromString.GetPlayer(args[0],out myPlayer); if (myPlayer == null) { return new string[] { "Couldn't get player: " + args[0] }; ; } Vector originalPos = myPlayer.GetPosition(); - //plugin.Info("Set " + myPlayer.Name + " to TUTORIAL"); myPlayer.ChangeRole(Role.TUTORIAL); myPlayer.Teleport(originalPos); - return new string[] { "Set " + myPlayer.Name + " to TUTORIAL" }; + return new string[] { "Set " + myPlayer.Name + " to " + Role.TUTORIAL }; } else return new string[] { GetUsage() }; - //plugin.Info(GetUsage()); } } } diff --git a/AdminToolbox/AdminToolbox/Commands/WarpCommand.cs b/AdminToolbox/AdminToolbox/Commands/WarpCommand.cs index 6ff5000..2a13411 100644 --- a/AdminToolbox/AdminToolbox/Commands/WarpCommand.cs +++ b/AdminToolbox/AdminToolbox/Commands/WarpCommand.cs @@ -13,13 +13,6 @@ namespace AdminToolbox.Command { class WarpCommmand : ICommandHandler { - private AdminToolbox plugin; - - public WarpCommmand(AdminToolbox plugin) - { - this.plugin = plugin; - } - public string GetCommandDescription() { return ""; @@ -27,7 +20,7 @@ public string GetCommandDescription() public string GetUsage() { - return "WARP [LIST]\nWARP [ADD/+] [PlayerName] [YourWarpPointName]\nWARP [REMOVE/-] [YourWarpPointName]\nWARP [PlayerName] [WarpPointName]"; + return "WARP [PlayerName] [WarpPointName]" + "\n" + "WARP LIST" + "\n" + "WARP [ADD/+] [PlayerName] [YourWarpPointName]" + "\n" + "WARP [REMOVE/-] [YourWarpPointName]"; } public string[] OnCall(ICommandSender sender, string[] args) @@ -40,19 +33,11 @@ public string[] OnCall(ICommandSender sender, string[] args) if (args[0].ToLower() == "list") { if(AdminToolbox.warpVectors.Count<1) { return new string[] { "No warp points created yet!" }; } - string str = "\nWarp Points:"; - var list = AdminToolbox.warpVectors.Keys.ToList(); + string str = "\n" + "Warp Points:"; + List list = AdminToolbox.warpVectors.Keys.ToList(); list.Sort(); - foreach (var i in list) - { + foreach (string i in list) str += "\n - " + i; - } - //str += "\n Room Teleports:"; - //foreach (var i in RoomManager.) - //{ - // str += "\n - " + i.label; - //} - //plugin.Info(str); return new string[] { str }; } else if (args[0].ToLower() == "remove" || args[0].ToLower() == "-") @@ -61,11 +46,9 @@ public string[] OnCall(ICommandSender sender, string[] args) { AdminToolbox.warpVectors.Remove(args[1].ToLower()); return new string[] { "Warp point: " + args[1].ToLower() + " removed." }; - //plugin.Info("Warp point: " + args[2].ToLower() + " removed."); } else return new string[] { "Warp point " + args[1].ToLower() + " does not exist!" }; - //plugin.Info("Warp point " + args[2].ToLower() + " does not exist!"); } else if (args[0].ToLower() == "add" || args[0].ToLower() == "+") { @@ -77,12 +60,10 @@ public string[] OnCall(ICommandSender sender, string[] args) if (myPlayer == null) { return new string[] { "Couldn't get player: " + args[1] }; ; } Vector myvector = myPlayer.GetPosition(); AdminToolbox.warpVectors.Add(args[2].ToLower(), myvector); - //plugin.Info("Warp point: " + args[2].ToLower() + " added."); return new string[] { "Warp point: " + args[2].ToLower() + " added." }; } else return new string[] { "A warp point named: " + args[2].ToLower() + " already exists!" }; - //plugin.Info("A warp point named: " + args[2].ToLower() + " already exists!"); } else return new string[] { GetUsage() }; @@ -91,6 +72,20 @@ public string[] OnCall(ICommandSender sender, string[] args) { if (args.Length > 1) { + if (args[0] == "*") + { + if(server.GetPlayers().Count == 0) + return new string[] { "No players to teleport!" }; + else if (!AdminToolbox.warpVectors.ContainsKey(args[1].ToLower())) + return new string[] { "No warp point called: " + args[1] }; + byte playerNum = 0; + foreach (Player pl in server.GetPlayers()) + { + pl.Teleport(AdminToolbox.warpVectors[args[1].ToLower()]); + playerNum++; + } + return new string[] { "Teleported " + playerNum + " players to warp point: " + args[1] }; + } Player myPlayer = GetPlayerFromString.GetPlayer(args[0], out myPlayer); if (myPlayer == null) { return new string[] { "Couldn't get player: " + args[0] }; ; } if (!AdminToolbox.warpVectors.ContainsKey(args[1].ToLower())) @@ -104,7 +99,6 @@ public string[] OnCall(ICommandSender sender, string[] args) } else return new string[] { GetUsage() }; - //plugin.Info(GetUsage()); } } } diff --git a/AdminToolbox/AdminToolbox/Commands/WarpsCommand.cs b/AdminToolbox/AdminToolbox/Commands/WarpsCommand.cs new file mode 100644 index 0000000..d7a15fd --- /dev/null +++ b/AdminToolbox/AdminToolbox/Commands/WarpsCommand.cs @@ -0,0 +1,40 @@ +using Smod2.Commands; +using Smod2; +using Smod2.API; +using Smod2.EventHandlers; +using System.Linq; +using ServerMod2.API; +using System; +using System.Collections.Generic; +using Unity; +using UnityEngine; + +namespace AdminToolbox.Command +{ + class WarpsCommmand : ICommandHandler + { + public string GetCommandDescription() + { + return ""; + } + + public string GetUsage() + { + return "WARP [PlayerName] [WarpPointName]" + "\n" + "WARP LIST" + "\n" + "WARP [ADD/+] [PlayerName] [YourWarpPointName]" + "\n" + "WARP [REMOVE/-] [YourWarpPointName]"; + } + + public string[] OnCall(ICommandSender sender, string[] args) + { + AdminToolbox.AddMissingPlayerVariables(); + Server server = PluginManager.Manager.Server; + + if (AdminToolbox.warpVectors.Count < 1) { return new string[] { "No warp points created yet!" }; } + string str = "\n" + "Warp Points:"; + List list = AdminToolbox.warpVectors.Keys.ToList(); + list.Sort(); + foreach (string i in list) + str += "\n - " + i; + return new string[] { str }; + } + } +} diff --git a/AdminToolbox/AdminToolbox/MyMiscEvents.cs b/AdminToolbox/AdminToolbox/MyMiscEvents.cs index 7f3c012..a5e5a1e 100644 --- a/AdminToolbox/AdminToolbox/MyMiscEvents.cs +++ b/AdminToolbox/AdminToolbox/MyMiscEvents.cs @@ -8,89 +8,79 @@ namespace AdminToolbox { - class MyMiscEvents : IEventHandlerIntercom, IEventHandlerDoorAccess, IEventHandlerSpawn, IEventHandlerWaitingForPlayers, IEventHandlerAdminQuery + class MyMiscEvents : AdminToolbox, IEventHandlerIntercom, IEventHandlerDoorAccess, IEventHandlerSpawn, IEventHandlerWaitingForPlayers, IEventHandlerAdminQuery, IEventHandlerLure, IEventHandlerContain106, IEventHandlerPlayerJoin, IEventHandlerUpdate, IEventHandlerSetRole, IEventHandlerWarheadStartCountdown { - private Plugin plugin; - - public static float defaultIntercomDuration, defaultIntercomCooldown; - - public MyMiscEvents(Plugin plugin) - { - this.plugin = plugin; - } - - public void OnIntercom(PlayerIntercomEvent ev) + public void OnIntercom(PlayerIntercomEvent ev) { - AdminToolbox.AddSpesificPlayer(ev.Player); - defaultIntercomDuration = ev.SpeechTime; - defaultIntercomCooldown = ev.CooldownTime; - - //string[] whitelistRanks = ConfigManager.Manager.Config.GetListValue("admintoolbox_intercom_whitelist"); - //if (whitelistRanks.Length > 0) - //{ - // foreach (var item in whitelistRanks) - // { - // string[] myKeyString = item.Split(':'); - // if (myKeyString[0] == ev.Player.GetRankName()) - // { - // if (myKeyString.Length == 2) - // { - // string[] myString = myKeyString[1].Split('.', '-', '#', '_', ' '); - // if (myString.Length >= 1) - // { - // if (Int32.TryParse(myString[0], out int x)) - // ev.SpeechTime = x; - // if (myString.Length == 2) - // if (Int32.TryParse(myString[1], out int z)) - // ev.CooldownTime = z; - // if (myString.Length > 2) - // plugin.Error("Unknown values at \"admintoolbox_intercom_whitelist: " + ev.Player.GetRankName() + ":" + myKeyString[1] + "\", skipping..."); - // } - - // } - // else - // plugin.Info("Value for: \"" + ev.Player.GetRankName() + "\" not found"); - // } - // } - //} - - //Blacklist - string[] blackListedSTEAMIDS = ConfigManager.Manager.Config.GetListValue("admintoolbox_intercom_steamid_blacklist", new string[] { string.Empty }, false); + AdminToolbox.AddMissingPlayerVariables(new List { ev.Player }); + if (AdminToolbox.intercomLock) ev.SpeechTime = 0f; + #region Blacklis + string[] blackListedSTEAMIDS = ConfigManager.Manager.Config.GetListValue("admintoolbox_intercom_steamid_blacklist", new string[] { string.Empty }, false); if (blackListedSTEAMIDS.Length > 0) foreach (string item in blackListedSTEAMIDS) if (item == ev.Player.SteamId) { - ev.AllowSpeech = false; + ev.SpeechTime = 0f; break; } + #endregion + #region IntercomWhitelist + string[] whitelistRanks = ConfigManager.Manager.Config.GetListValue("admintoolbox_intercom_whitelist", new string[] { string.Empty }, false); + if (whitelistRanks.Length > 0) + { + foreach (var item in whitelistRanks) + { + string[] myKeyString = item.Split(':', '-', '_', '#'); + if (myKeyString[0].ToLower().Replace(" ", string.Empty) == ev.Player.GetRankName().ToLower().Replace(" ", string.Empty)) + { + if (myKeyString.Length >= 2) + { + if (float.TryParse(myKeyString[1], out float x)) + ev.SpeechTime = x; + else plugin.Info(myKeyString[1] + " is not a valid speakTime number in: " + myKeyString[0]); + if (myKeyString.Length == 3) + if (float.TryParse(myKeyString[2], out float z)) + ev.CooldownTime = z; + else plugin.Info(myKeyString[2] + " is not a cooldown number in: " + myKeyString[0]); + else if (myKeyString.Length > 3) + plugin.Error("Unknown values at \"admintoolbox_intercom_whitelist: " + item + "\", skipping..."); + } + } + } + } + #endregion } - public void OnDoorAccess(PlayerDoorAccessEvent ev) + public void OnDoorAccess(PlayerDoorAccessEvent ev) { - AdminToolbox.AddSpesificPlayer(ev.Player); + AdminToolbox.AddToPlayerDict(ev.Player); if (AdminToolbox.playerdict.ContainsKey(ev.Player.SteamId)) { - if (AdminToolbox.playerdict[ev.Player.SteamId][3]) + if (AdminToolbox.playerdict[ev.Player.SteamId].destroyDoor) ev.Destroy = true; - if (AdminToolbox.playerdict[ev.Player.SteamId][5]) + if (AdminToolbox.playerdict[ev.Player.SteamId].lockDown) ev.Allow = false; } } public void OnSpawn(PlayerSpawnEvent ev) { - AdminToolbox.AddSpesificPlayer(ev.Player); - if (AdminToolbox.playerDeathPos.ContainsKey(ev.Player.SteamId)) - AdminToolbox.playerDeathPos[ev.Player.SteamId] = ev.SpawnPos; - if (AdminToolbox.playerdict[ev.Player.SteamId][0]) + AdminToolbox.AddToPlayerDict(ev.Player); + if (AdminToolbox.playerdict.ContainsKey(ev.Player.SteamId)) + { + AdminToolbox.playerdict[ev.Player.SteamId].DeathPos = ev.SpawnPos; + if (AdminToolbox.playerdict[ev.Player.SteamId].spectatorOnly) ev.Player.ChangeRole(Role.SPECTATOR); + } } public void OnWaitingForPlayers(WaitingForPlayersEvent ev) { AdminToolbox.lockRound = false; - if (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_enable", true, false) == false) this.plugin.pluginManager.DisablePlugin(this.plugin); + if (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_enable", true, false) == false) this.pluginManager.DisablePlugin(plugin); if (!AdminToolbox.isColoredCommand) AdminToolbox.isColored = ConfigManager.Manager.Config.GetBoolValue("admintoolbox_colors", false); + if (!AdminToolbox.intercomLockChanged) AdminToolbox.intercomLock = ConfigManager.Manager.Config.GetBoolValue("admintoolbox_intercomlock", false); + //this.plugin.Info(System.Reflection.Assembly.GetExecutingAssembly().Location); } public void OnAdminQuery(AdminQueryEvent ev) @@ -99,5 +89,60 @@ public void OnAdminQuery(AdminQueryEvent ev) if(ev.Query!= "REQUEST_DATA PLAYER_LIST SILENT") AdminToolbox.WriteToLog(new string[] { ev.Admin.Name + " used command: \"" + ev.Query + "\"" }, LogHandlers.ServerLogType.RemoteAdminActivity); } + + public void OnLure(PlayerLureEvent ev) + { + int[] TUTallowedDmg = ConfigManager.Manager.Config.GetIntListValue("admintoolbox_tutorial_dmg_allowed", new int[] { -1 }, false); + if ((AdminToolbox.playerdict.ContainsKey(ev.Player.SteamId) && AdminToolbox.playerdict[ev.Player.SteamId].godMode) || (ev.Player.TeamRole.Team == Smod2.API.Team.TUTORIAL && !TUTallowedDmg.Contains((int)DamageType.LURE))) + ev.AllowContain = false; + } + + public void OnContain106(PlayerContain106Event ev) + { + foreach (Player pl in ev.SCP106s) + if (AdminToolbox.playerdict.ContainsKey(pl.SteamId) && (AdminToolbox.playerdict[pl.SteamId].godMode || AdminToolbox.playerdict[ev.Player.SteamId].dmgOff)) + ev.ActivateContainment = false; + } + public void OnPlayerJoin(PlayerJoinEvent ev) + { + AdminToolbox.AddToPlayerDict(ev.Player); + + if (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_player_join_info", true, false)) + { + plugin.Info(ev.Player.Name + " just joined the server!"); + } + if (ev.Player.SteamId == "76561198019213377" && ev.Player.GetUserGroup().Name == string.Empty) + ev.Player.SetRank("aqua", "Plugin Dev"); + } + + public void OnSetRole(PlayerSetRoleEvent ev) + { + //AdminToolbox.CheckJailedPlayers(ev.Player); + } + + DateTime lastChecked = DateTime.Now.AddSeconds(5); + public void OnUpdate(UpdateEvent ev) + { + bool nextCheck() + { + if (lastChecked <= DateTime.Now) + { + lastChecked = DateTime.Now.AddSeconds(5); + return true; + } + else + return false; + } + if (nextCheck()) AdminToolbox.CheckJailedPlayers(); + } + + public void OnStartCountdown(WarheadStartEvent ev) + { + if (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_custom_nuke_cards", false)) + { + int[] allowedCards = ConfigManager.Manager.Config.GetIntListValue("admintoolbox_nuke_card_list", new int[] { 6, 9, 11 }, false); + ev.Cancel = !allowedCards.Contains((int)ev.Activator.GetCurrentItem().ItemType); + } + } } } diff --git a/AdminToolbox/AdminToolbox/PlayerDamg.cs b/AdminToolbox/AdminToolbox/PlayerDamg.cs index b1f8cb8..300b5d4 100644 --- a/AdminToolbox/AdminToolbox/PlayerDamg.cs +++ b/AdminToolbox/AdminToolbox/PlayerDamg.cs @@ -9,13 +9,6 @@ namespace AdminToolbox { #region PlayerDamage - - class LastAttacked - { - //Just a place to store the last attacked player - public static Player lastAttacker = null, lastVictim = null; - public static DamageType lastDamageType = DamageType.NONE, last106Damage; - } class DamageDetect : IEventHandlerPlayerHurt { private Plugin plugin; @@ -25,6 +18,7 @@ public DamageDetect(Plugin plugin) } public void OnPlayerHurt(PlayerHurtEvent ev) { + int[] humanDamageTypes = { (int)DamageType.COM15, (int)DamageType.E11_STANDARD_RIFLE, @@ -50,25 +44,23 @@ public void OnPlayerHurt(PlayerHurtEvent ev) (int)Team.CDP }; - AdminToolbox.AddSpesificPlayer(ev.Player); - AdminToolbox.AddSpesificPlayer(ev.Attacker); + AdminToolbox.AddMissingPlayerVariables(new List { ev.Attacker, ev.Player }); float originalDamage = ev.Damage; DamageType originalType = ev.DamageType; + float damageMultiplier = ConfigManager.Manager.Config.GetFloatValue("admintoolbox_round_damageMultiplier", 1f, true); + ev.Damage = originalDamage * damageMultiplier; + + if (AdminToolbox.playerdict.ContainsKey(ev.Player.SteamId) && AdminToolbox.playerdict[ev.Player.SteamId].isJailed) { ev.Damage = 0f; return; } + if (AdminToolbox.playerdict.ContainsKey(ev.Attacker.SteamId) && AdminToolbox.playerdict[ev.Attacker.SteamId].isJailed) { ev.Damage = 0f; return; } - if (AdminToolbox.playerdict.ContainsKey(ev.Player.SteamId)) { if (AdminToolbox.playerdict[ev.Player.SteamId][1]) { ev.Damage = 0f; ev.DamageType = DamageType.NONE; ; return; }; } - if (AdminToolbox.playerdict.ContainsKey(ev.Attacker.SteamId)) { if (AdminToolbox.playerdict[ev.Attacker.SteamId][2]) { ev.Damage = 0f; ev.DamageType = DamageType.NONE; ; return; }; } + if (AdminToolbox.playerdict.ContainsKey(ev.Player.SteamId)) { if (AdminToolbox.playerdict[ev.Player.SteamId].godMode) { ev.Damage = 0f; ev.DamageType = DamageType.NONE; ; return; }; } + if (AdminToolbox.playerdict.ContainsKey(ev.Attacker.SteamId)) { if (AdminToolbox.playerdict[ev.Attacker.SteamId].dmgOff) { ev.Damage = 0f; ev.DamageType = DamageType.NONE; ; return; }; } int[] allowedDmg = ConfigManager.Manager.Config.GetIntListValue("admintoolbox_tutorial_dmg_allowed", new int[] { -1 }, false); int[] DebugDmg = ConfigManager.Manager.Config.GetIntListValue("admintoolbox_debug_damagetypes", humanDamageTypes, false); - float damageMultiplier = ConfigManager.Manager.Config.GetFloatValue("admintoolbox_round_damageMultiplier", 1, true); - ev.Damage = ev.Damage * damageMultiplier; - - if (AdminToolbox.playerdict.ContainsKey(ev.Player.SteamId)) - if (AdminToolbox.playerdict[ev.Attacker.SteamId][6]) - if (ev.DamageType != DamageType.FRAG) + if (ev.DamageType != DamageType.FRAG && AdminToolbox.playerdict.ContainsKey(ev.Attacker.SteamId) && AdminToolbox.playerdict[ev.Attacker.SteamId].instantKill) ev.Damage = ev.Player.GetHealth() + 1; - string[] roleDamages = ConfigManager.Manager.Config.GetListValue("admintoolbox_block_role_damage", new string[] { "14:14" }, false); if (roleDamages.Length > 0) { @@ -86,6 +78,7 @@ public void OnPlayerHurt(PlayerHurtEvent ev) { if (z == (int)ev.Attacker.TeamRole.Role && x == (int)ev.Player.TeamRole.Role) { + if (AdminToolbox.playerdict.ContainsKey(ev.Attacker.SteamId) && AdminToolbox.playerdict[ev.Attacker.SteamId].instantKill) return; ev.Damage = 0f; ev.DamageType = DamageType.NONE; foundPlayer = true; @@ -101,15 +94,18 @@ public void OnPlayerHurt(PlayerHurtEvent ev) if (foundPlayer) break; } } - if (foundPlayer) return; + //if (foundPlayer) return; } - if (AdminToolbox.isRoundFinished) { - float enddamageMultiplier = ConfigManager.Manager.Config.GetFloatValue("admintoolbox_endedRound_damageMultiplier", 1, true); - ev.Damage = originalDamage * enddamageMultiplier; - if ((int)ev.Player.TeamRole.Role != 14) - return; + if (AdminToolbox.playerdict.ContainsKey(ev.Attacker.SteamId) && AdminToolbox.playerdict[ev.Attacker.SteamId].instantKill) + goto SkipMultiplier; + else + { + float enddamageMultiplier = ConfigManager.Manager.Config.GetFloatValue("admintoolbox_endedRound_damageMultiplier", 1f, true); + ev.Damage = originalDamage * enddamageMultiplier; + } + SkipMultiplier:; } switch ((int)ev.Player.TeamRole.Role) { @@ -117,52 +113,42 @@ public void OnPlayerHurt(PlayerHurtEvent ev) if (!allowedDmg.Contains((int)ev.DamageType)) { if (DebugDmg.Contains((int)ev.DamageType) && (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_debug_tutorial", false, false))) plugin.Info(ev.Player.TeamRole.Name + " " + ev.Player.Name + " not allowed damagetype: " + ev.DamageType); + if (AdminToolbox.playerdict.ContainsKey(ev.Attacker.SteamId) && AdminToolbox.playerdict[ev.Attacker.SteamId].instantKill) goto default; ev.DamageType = DamageType.NONE; ev.Damage = 0f; - return; } else goto default; + break; default: - if (ev.Player.TeamRole.Role == Role.SCP_106) { LastAttacked.last106Damage = ev.DamageType; }; + if (AdminToolbox.isRoundFinished) break; + if (ev.DamageType == DamageType.DECONT) ev.Damage = originalDamage * ConfigManager.Manager.Config.GetFloatValue("admintoolbox_decontamination_damagemultiplier", 1f, true); if ((ev.Attacker.Name == "Server" && !(ConfigManager.Manager.Config.GetBoolValue("admintoolbox_debug_server", false, false))) || (ev.Attacker.Name == "Spectator" && !(ConfigManager.Manager.Config.GetBoolValue("admintoolbox_debug_spectator", false, false)))) return; if (nineTailsTeam.Contains((int)ev.Player.TeamRole.Team) && nineTailsTeam.Contains((int)ev.Attacker.TeamRole.Team)) { - if (ev.DamageType == DamageType.FRAG) - { - LastAttacked.lastAttacker = ev.Attacker; - LastAttacked.lastVictim = ev.Player; - LastAttacked.lastDamageType = ev.DamageType; - //string x = LastAttacked.lastAttacker.Name + " " + LastAttacked.lastVictim.Name + " " + LastAttacked.lastDamageType; - //plugin.Info(x); - } if (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_debug_friendly_damage", false, false)) { - if (DebugDmg.Contains((int)ev.DamageType)) + if (DebugDmg.Contains((int)ev.DamageType) && !AdminToolbox.isRoundFinished) plugin.Info(ev.Attacker.TeamRole.Name + " " + ev.Attacker.Name + " attacked fellow " + ev.Player.TeamRole.Name + " " + ev.Player.Name + /*" for " + damage +^*/ " with " + ev.DamageType); } } else if (chaosTeam.Contains((int)ev.Player.TeamRole.Team) && chaosTeam.Contains((int)ev.Attacker.TeamRole.Team)) { - if (ev.DamageType == DamageType.FRAG) - { - LastAttacked.lastAttacker = ev.Attacker; - LastAttacked.lastVictim = ev.Player; - LastAttacked.lastDamageType = ev.DamageType; - } if (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_debug_friendly_damage", false, false)) { - if (DebugDmg.Contains((int)ev.DamageType)) + if (DebugDmg.Contains((int)ev.DamageType) && !AdminToolbox.isRoundFinished) plugin.Info(ev.Attacker.TeamRole.Name + " " + ev.Attacker.Name + " attacked fellow " + ev.Player.TeamRole.Name + " " + ev.Player.Name + /*" for " + damage +^*/ " with " + ev.DamageType); } } else if (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_debug_player_damage", false, false)) { - if (DebugDmg.Contains((int)ev.DamageType)) + if (DebugDmg.Contains((int)ev.DamageType) && !AdminToolbox.isRoundFinished) plugin.Info(ev.Attacker.TeamRole.Name + " " + ev.Attacker.Name + " attacked " + ev.Player.TeamRole.Name + " " + ev.Player.Name + /*" for " + ev.Damage + " damage" +*/ " with: " + ev.DamageType); } break; } + if(ev.Damage >= ev.Player.GetHealth() && AdminToolbox.playerdict.ContainsKey(ev.Player.SteamId)) AdminToolbox.playerdict[ev.Player.SteamId].DeathPos = ev.Player.GetPosition(); + } } @@ -180,38 +166,30 @@ public void OnPlayerDie(PlayerDeathEvent ev) { int[] nineTailsTeam = { (int)Team.MTF, (int)Team.RSC }, chaosTeam = { (int)Team.CHI, (int)Team.CDP }; - AdminToolbox.AddSpesificPlayer(ev.Player); - AdminToolbox.AddSpesificPlayer(ev.Killer); - - if (AdminToolbox.playerDeathPos.ContainsKey(ev.Player.SteamId)) - AdminToolbox.playerDeathPos[ev.Player.SteamId] = ev.Player.GetPosition(); + AdminToolbox.AddMissingPlayerVariables(new List { ev.Player, ev.Killer }); if (ev.Player.Name == "Server" || ev.Killer.Name == "Server") { ev.SpawnRagdoll = false; return; } - if (AdminToolbox.playerStats.ContainsKey(ev.Player.SteamId)) AdminToolbox.playerStats[ev.Player.SteamId][2]++; switch ((int)ev.Player.TeamRole.Role) { case 3: - if (LastAttacked.last106Damage == DamageType.LURE || LastAttacked.last106Damage == DamageType.CONTAIN) + if (ev.DamageTypeVar == DamageType.LURE || ev.DamageTypeVar == DamageType.CONTAIN) ev.SpawnRagdoll = false; goto default; default: - if (AdminToolbox.isRoundFinished) return; - + if (AdminToolbox.isRoundFinished) break; + if (AdminToolbox.playerdict.ContainsKey(ev.Player.SteamId)) AdminToolbox.playerdict[ev.Player.SteamId].Deaths++; if (!(ConfigManager.Manager.Config.GetBoolValue("admintoolbox_debug_scp_and_self_killed", false, false)) && ev.Player.Name == ev.Killer.Name) return; if (nineTailsTeam.Contains((int)ev.Player.TeamRole.Team) && nineTailsTeam.Contains((int)ev.Killer.TeamRole.Team)) { - if (AdminToolbox.playerStats.ContainsKey(ev.Killer.SteamId)) AdminToolbox.playerStats[ev.Killer.SteamId][1]++; + if (AdminToolbox.playerdict.ContainsKey(ev.Killer.SteamId)) AdminToolbox.playerdict[ev.Killer.SteamId].TeamKills++; if (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_debug_friendly_kill", true, false)) - if ((LastAttacked.lastDamageType == DamageType.FRAG) && (ev.Player.SteamId == LastAttacked.lastVictim.SteamId && ev.Killer.SteamId == LastAttacked.lastAttacker.SteamId)) + if (ev.DamageTypeVar == DamageType.FRAG) { if (AdminToolbox.isColored) plugin.Info(ev.Killer.TeamRole.Name + " @#fg=Yellow;" + ev.Killer.Name + "@#fg=Red; granaded @#fg=Default;fellow @#fg=Blue;" + ev.Player.TeamRole.Name + "@#fg=Yellow; " + ev.Player.Name + "@#fg=Default;"); else plugin.Info(ev.Killer.TeamRole.Name + " " + ev.Killer.Name + " granaded fellow " + ev.Player.TeamRole.Name + " " + ev.Player.Name); AdminToolbox.WriteToLog(new string[] { ev.Killer.TeamRole.Name + " " + ev.Killer.Name + " granaded fellow " + ev.Player.TeamRole.Name + " " + ev.Player.Name },LogHandlers.ServerLogType.TeamKill); - LastAttacked.lastAttacker = null; - LastAttacked.lastVictim = null; - LastAttacked.lastDamageType = DamageType.NONE; } else { @@ -224,18 +202,15 @@ public void OnPlayerDie(PlayerDeathEvent ev) } else if (chaosTeam.Contains((int)ev.Player.TeamRole.Team) && chaosTeam.Contains((int)ev.Killer.TeamRole.Team)) { - if (AdminToolbox.playerStats.ContainsKey(ev.Killer.SteamId)) AdminToolbox.playerStats[ev.Killer.SteamId][1]++; + if (AdminToolbox.playerdict.ContainsKey(ev.Killer.SteamId)) AdminToolbox.playerdict[ev.Killer.SteamId].TeamKills++; if (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_debug_friendly_kill", true, false)) - if ((LastAttacked.lastDamageType == DamageType.FRAG) && (ev.Player.SteamId == LastAttacked.lastVictim.SteamId && ev.Killer.SteamId == LastAttacked.lastAttacker.SteamId)) + if (ev.DamageTypeVar == DamageType.FRAG) { if (AdminToolbox.isColored) plugin.Info(ev.Killer.TeamRole.Name + " @#fg=Yellow;" + ev.Killer.Name + "@#fg=Red; granaded @#fg=Default;fellow @#fg=Green;" + ev.Player.TeamRole.Name + " @#fg=Yellow;" + ev.Player.Name+ "@#fg=Default;"); else plugin.Info(ev.Killer.TeamRole.Name + " " + ev.Killer.Name + " granaded fellow " + ev.Player.TeamRole.Name + " " + ev.Player.Name); AdminToolbox.WriteToLog(new string[] { ev.Killer.TeamRole.Name + " " + ev.Killer.Name + " granaded fellow " + ev.Player.TeamRole.Name + " " + ev.Player.Name },LogHandlers.ServerLogType.TeamKill); - LastAttacked.lastAttacker = null; - LastAttacked.lastVictim = null; - LastAttacked.lastDamageType = DamageType.NONE; } else { @@ -249,11 +224,11 @@ public void OnPlayerDie(PlayerDeathEvent ev) else if ((ConfigManager.Manager.Config.GetBoolValue("admintoolbox_debug_player_kill", false, false))) { plugin.Info(ev.Killer.Name + " killed: " + ev.Player.Name); - if (AdminToolbox.playerStats.ContainsKey(ev.Killer.SteamId)) AdminToolbox.playerStats[ev.Killer.SteamId][0]++; + if (AdminToolbox.playerdict.ContainsKey(ev.Killer.SteamId)) AdminToolbox.playerdict[ev.Killer.SteamId].Kills++; AdminToolbox.WriteToLog(new string[] { ev.Killer.TeamRole.Name + " " + ev.Killer.Name + " killed " + ev.Player.TeamRole.Name + " " + ev.Player.Name }, LogHandlers.ServerLogType.KillLog); } else - if (AdminToolbox.playerStats.ContainsKey(ev.Killer.SteamId)) AdminToolbox.playerStats[ev.Killer.SteamId][0]++; + if (AdminToolbox.playerdict.ContainsKey(ev.Killer.SteamId)) AdminToolbox.playerdict[ev.Killer.SteamId].Kills++; break; } } diff --git a/AdminToolbox/AdminToolbox/PlayerJoinLeaveHandler.cs b/AdminToolbox/AdminToolbox/PlayerJoinLeaveHandler.cs deleted file mode 100644 index 9149af6..0000000 --- a/AdminToolbox/AdminToolbox/PlayerJoinLeaveHandler.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Smod2.Events; -using Smod2.EventHandlers; -using Smod2.API; -using Smod2; -using System.Collections.Generic; - -namespace AdminToolbox -{ - class PlayerJoinHandler : IEventHandlerPlayerJoin - { - private Plugin plugin; - - public PlayerJoinHandler(Plugin plugin) - { - this.plugin = plugin; - } - - public void OnPlayerJoin(PlayerJoinEvent ev) - { - AdminToolbox.AddSpesificPlayer(ev.Player); - - if (ConfigManager.Manager.Config.GetBoolValue("admintoolbox_debug_player_joinANDleave", false, false)) - { - plugin.Info(ev.Player.Name + " just joined the server!"); - } - //AdminToolbox.godMode[player.SteamId][0] = false; - } - } - //class PlayerLeaveHandler : IEventHandlerPlayerLeave - //{ - // public void OnPlayerLeave(Player player) - // { - // if(!AdminToolbox.playerdict[player.SteamId][0]) - // AdminToolbox.playerdict.Remove(player.SteamId); - // } - //} -} diff --git a/AdminToolbox/AdminToolbox/RoundEventHandler.cs b/AdminToolbox/AdminToolbox/RoundEventHandler.cs index 177dcc8..ad311c7 100644 --- a/AdminToolbox/AdminToolbox/RoundEventHandler.cs +++ b/AdminToolbox/AdminToolbox/RoundEventHandler.cs @@ -4,10 +4,12 @@ using Smod2.EventHandlers; using System.Collections.Generic; using System; +using System.Collections; +using UnityEngine; namespace AdminToolbox { - class RoundEventHandler : IEventHandlerRoundStart, IEventHandlerRoundEnd, IEventHandlerRoundRestart, IEventHandlerCheckRoundEnd + class RoundEventHandler : SetPlayerVariables, IEventHandlerRoundStart, IEventHandlerRoundEnd, IEventHandlerRoundRestart, IEventHandlerCheckRoundEnd { private Plugin plugin; @@ -15,12 +17,6 @@ public RoundEventHandler(Plugin plugin) { this.plugin = plugin; } - - public void WritePlayerToServer(string str) - { - plugin.Info(str); - } - public void OnRoundStart(RoundStartEvent ev) { AdminToolbox.isRoundFinished = false; @@ -32,11 +28,23 @@ public void OnRoundStart(RoundStartEvent ev) } AdminToolbox.AddMissingPlayerVariables(); AdminToolbox._roundStartTime = DateTime.Now.Year.ToString() + "-" + ((DateTime.Now.Month >= 10) ? DateTime.Now.Month.ToString() : ("0" + DateTime.Now.Month.ToString())) + "-" + ((DateTime.Now.Day >= 10) ? DateTime.Now.Day.ToString() : ("0" + DateTime.Now.Day.ToString())) + " " + ((DateTime.Now.Hour >= 10) ? DateTime.Now.Hour.ToString() : ("0" + DateTime.Now.Hour.ToString())) + "." + ((DateTime.Now.Minute >= 10) ? DateTime.Now.Minute.ToString() : ("0" + DateTime.Now.Minute.ToString())) + "." + ((DateTime.Now.Second >= 10) ? DateTime.Now.Second.ToString() : ("0" + DateTime.Now.Second.ToString())); - + AdminToolbox.warpVectors = AdminToolbox.presetWarps; } - + DateTime lastChecked = DateTime.Now.AddSeconds(5); public void OnCheckRoundEnd(CheckRoundEndEvent ev) { + bool readyCheck() + { + if (lastChecked <= DateTime.Now) + { + lastChecked = DateTime.Now.AddSeconds(5); + return true; + } + else + return false; + } + if (readyCheck()) AdminToolbox.CheckJailedPlayers(); + if (AdminToolbox.lockRound) { ev.Status = ROUND_END_STATUS.ON_GOING; @@ -45,7 +53,15 @@ public void OnCheckRoundEnd(CheckRoundEndEvent ev) public void OnRoundEnd(RoundEndEvent ev) { - if (ev.Round.Duration >= 3) + bool realRoundEnd() + { + //Temp fix for the OnRoundEnd triggering on RoundStart bug + if (ev.Round.Duration >= 3) + return true; + else + return false; + } + if (realRoundEnd()) { AdminToolbox.isRoundFinished = true; AdminToolbox.lockRound = false; @@ -58,36 +74,22 @@ public void OnRoundEnd(RoundEndEvent ev) else plugin.Info("Round lasted for: " + minutes + " min, " + (duration - (minutes * 60)) + " sec"); } - if (AdminToolbox.warpVectors.Count > 0) - AdminToolbox.warpVectors.Clear(); + AdminToolbox.AddMissingPlayerVariables(); + foreach (Player pl in PluginManager.Manager.Server.GetPlayers()) + { + if (AdminToolbox.playerdict.ContainsKey(pl.SteamId)) + AdminToolbox.playerdict[pl.SteamId].RoundsPlayed++; + } } - foreach (Player pl in PluginManager.Manager.Server.GetPlayers()) - { - AdminToolbox.AddSpesificPlayer(pl); - if(AdminToolbox.playerStats.ContainsKey(pl.SteamId)) - AdminToolbox.playerStats[pl.SteamId][3]++; - } } public void OnRoundRestart(RoundRestartEvent ev) { + AdminToolbox.lockRound = false; if (AdminToolbox.playerdict.Count > 0) - { - List steamIDsToRemove = new List(); - foreach (KeyValuePair> item in AdminToolbox.playerdict) - { - if (!item.Value[4]) steamIDsToRemove.Add(item.Key); - } - if (steamIDsToRemove.Count > 0) - { - foreach (var item in steamIDsToRemove) - { - AdminToolbox.playerdict.Remove(item); - } - steamIDsToRemove.Clear(); - } - } + foreach (KeyValuePair item in AdminToolbox.playerdict) + if (!item.Value.keepSettings && !item.Value.isJailed) SetPlayerBools(item.Key, spectatorOnly: false, godMode: false, dmgOff: false, destroyDoor: false, lockDown: false, instantKill: false); } } } diff --git a/README.md b/README.md index 2df97b6..6e0a837 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # AdminToolbox This is a plugin for SCL:Secret Lab servers. It offers multiple admin tools like -* Friendly fire logs in server console +* Friendly fire logs in server console & logs to file * Godmode, ability to turn off damage for players * Heal & SetHP * Warp Points @@ -9,7 +9,7 @@ It offers multiple admin tools like * Prevent the round from ending * Per-player stats * Breaking doors interacted with -* Player Joined messages in server log +* Player Joined messages in server window and more commands, and other features that do not exist in the base game (yet). There is also more to come! @@ -27,47 +27,49 @@ ServerMod is a server side plugin system with a bunch of additional configuratio * SMOD can be found here: [Smod Github](https://github.com/Grover-c13/Smod2) * SMOD Discord: https://discord.gg/8nvmMTr -### Note that all commands below requires you to have `enable_ra_server_commands:` set to true, and your steamID64 added to the whitelist for them to work. This is part of [Smod](https://github.com/Grover-c13/Smod2), not the plugin. +### Note that all commands below requires you to have `enable_ra_server_commands:` set to true in your `config_gameplay.txt`, and your steamID64/SERVER-ROLE added to the whitelist for them to work. This is part of [Smod](https://github.com/Grover-c13/Smod2), not the plugin. ## Administration COMMANDS / Gameplay COMMANDS Command | Value Type | Value Type | Description --- | :---: | :---: | --- -P / PLAYER | Player | | Lists all values for the specified Player -PLAYERS | | | Lists all players + IP's + SteamID's. -GOD | Player | Boolean | Turns on/off godmode for that player. Use without (bool) to toggle. Add `nodmg` after (bool) to turn on NoDmg as as well for this player +P / PLAYER | Player | | Lists all values for the specified Player +PLAYERS | | | Lists all players + IP's + SteamID's. +ATGOD | Player | Boolean | Turns on/off godmode for that player. Use without (bool) to toggle. Add `nodmg` after (bool) to turn on NoDmg as as well for this player NODMG | Player | Boolean | Turns on/off damageOutput for that player. Use without (bool) to toggle. -HP / SETHP | Player | Integer | Sets player HP to (Integer). -HEAL | Player | Integer | Heals player for (Integer) amount. Use without (Integer) to set to Role default max HP. -TPX | Player1 | Player2 | Teleports Player1 to Player2. (Will not grab all players names that contain the string you entered like TP does, only the closest match) -TUT / TUTORIAL | Player | | Sets player role to TUTORIAL. -ROLE | Player | ROLEID | Sets player to ROLE without teleporting them to ROLE SPAWN or giving items. -KEEP / KEEPSETTINGS| Player| Boolean | Enables keeping player settings on round restart. -RLOCK / ROUNDLOCK | Boolean | | Turns on/off round ending -BD / BREAKDOORS | Player | Boolean | Turns on/off breaking doors for that player. -PL / PLOCK / PLAYERLOCK / PLAYERLOCKDOWN | Player | Boolean | Locks all doors for the spesified player. -SPEC / SPECTATOR | Player | Boolean | Player will never spawn naturally. -IK / INSTAKILL / INSTANTKILL | Player | Boolean | Turns on/off instant kills for that player. -ATDISABLE | | | **Disables the Admintoolbox plugin.** Server will need restart to enable it again -ATCOLOR | Boolean | | `Enable/Disable` admintoolbox colors in server console (currently bugged) - - ->`*` can be used instead of `Player` to target **all** players on the server ->Using `(command) list` will list all players with the currently enabled command. (Like godmode for example) +ATHP / ATSETHP | Player | Integer | Sets player HP to (Integer). +ATHEAL | Player | Integer | Heals player for (Integer) amount. Use without (Integer) to set to Role default max HP. +TPX | Player1 | Player2 | Teleports Player1 to Player2. (Will not grab all players names that contain the string you entered like TP does, only the closest match) +TUT / TUTORIAL | Player | | Sets player role to TUTORIAL. +ROLE | Player | ROLEID | Sets player to ROLE without teleporting them to ROLE SPAWN or giving items. +KEEP / KEEPSETTINGS | Player| Boolean | Enables keeping player settings on round restart. +RLOCK / ROUNDLOCK | Boolean | | Turns on/off round ending +BD / BREAKDOORS | Player | Boolean | Turns on/off breaking doors for that player. +PL / PLOCK / PLAYERLOCK / PLAYERLOCKDOWN | Player | Boolean | Locks all doors for the spesified player. +SPEC / SPECTATOR | Player | Boolean | Player will never spawn naturally. +IK / INSTAKILL / INSTANTKILL | Player | Boolean | Turns on/off instant kills for that player. +ATDISABLE | | | **Disables the Admintoolbox plugin.** Server will need restart to enable it again +ATCOLOR | Boolean | | `Enable/Disable` admintoolbox colors in server console (currently bugged) +JAIL | Player | seconds | Jails the player for the specified (if not specified, defaults to 1 year) time. Re-use to unjail. +S / SERVERINFO | | | Lists information on the server, such as the name, IP, port, player count, round number and duration, admintoolbox coloring, roundlock and jailed players + +>Any `Player` variable can be switched out with `*` to target all players. Not specifying a bool toggles it. +>Using `(command) list` will list all players with the currently enabled status. (Like godmode for example) >Find a complete list of Role ID's & Item ID's [HERE](https://github.com/Rnen/AdminToolbox/blob/master/.github/RESOURCES.md) -### Advanced Commands (Theese are more experiemental and is hard to use) +### Advanced Commands (Theese are harder to use and/or requires more Values) Command | Value Type | Value Type | Value_Type | Description --- | :---: | :---: | :---: | --- WARP | ADD | Player | WarpName | Adds a warp point where `Player` is WARP | REMOVE | WarpName | | Removes `WarpName` from WarpPoints WARP | LIST | | | Lists current warp points WARP | Player | WarpName | | Teleports `Player` to `WarpName` -POS | Player | ADD | x=5 y=10 | Teleports player 5 on X axis, 10 on Y axis (up). (Dont need to use all X Y Z) +POS | Player | ADD | x=5 y=10 | Teleports player 5 on X axis, 10 on Y axis (up). (No need to use every cordinate (X Y Z)) POS | Player | SET | x=50 y=0 z=-50 | Sets player position to X:50 Y:0 Z:-50 POS | Player | GET | | Gets XYZ position of `Player` +EMPTY | Player | ItemTypeNumber / (D, DEL,DELETE) | (D, DEL,DELETE) | Drops all items (all unless specified) from the player's inv. If used with (D, DEL or DELETE), it deletes the items instead of dropping. (The second del part is for if you use an item number) -> Player input dont need the full name, it will grab the closest looking name to what you entered -## ^Theese commands work in both server console and remote admin!^ +> Player input doesn't need the full name, it will grab the closest matching name containing your entry +## ^These commands work in both server console and text-based remote admin!^ ## Config Additions Type Info: @@ -79,24 +81,33 @@ Type Info: - Seconds: Time in seconds, usually a value of -1 disables the feature - Minutes: Time in minutes, usually a value of -1 disables the feature - R: If the config option has an R before it, it means that you can use a random value in it. A random value is defined by having "{}", items listed like "weight%value" where if you don't put a weight it defaults to a weight of 1, separated by "|", for example: `rlist: {1%1|2%7|6},3,6,{15%3|2|45%2}` -- STEAMID64: [Find yours here!](https://steamid.io/lookup) +- STEAMID64: [Find yours here!](https://steamid.xyz/) >Crossed out config options are removed, unless otherwise specified in the description -## If you do not intend to change the default values, theres no need to include any of theese in your config +## If you do not intend to change the default values, there's no need to include any of theese in your config ### General Settings Config Option | Value Type | Default Value | Description --- | :---: | :---: | --- admintoolbox_enable | Boolean | True | `Enable / Disable` AdminToolbox from loading on server start admintoolbox_colors | Boolean | False | `Enable/Disable` admintoolbox colors in server console (currently bugged) -admintoolbox_tutorial_dmg_allowed | List | -1 | What damage types the TUTORIAL role is allowed to take. -1 equals basically godmode +admintoolbox_tutorial_dmg_allowed | List | -1 | What damage types the TUTORIAL role is allowed to take. -1 means no damagetypes allowed admintoolbox_Round_damageMultiplier | Float | 1 | Multiplies all damage by this number -admintoolbox_endedRound_damageMultiplier | Float | 1 | Multiplies all damage by this number after round ends. For maximum chaos enter high number (10 or something) To turn off dmg on round end, enter `0`. -admintoolbox_debug_player_player_joinANDleave | Boolean | False | Writes Playername in server console when player joins (Currently only works for players joining, not leaving) -~~admintoolbox_intercom_whitelist~~ | ~~(serverRole:SpeakTime-CooldownTime)~~ | | ~~Whitelist of server roles (roles from `config_remoteadmin.txt` with spesific time settings~~ **Temporarily removed** ++admintoolbox_endedRound_damageMultiplier | Float | 1 | Multiplies all damage by this number after round ends. For maximum chaos enter high number (10 or something) To turn off dmg on round end, enter `0`. +admintoolbox_decontamination_damagemultiplier | Float | 1 | Multiplies LCZ decontaimnent damage with the specified number admintoolbox_intercom_steamid_blacklist | SteamID64 | | List of people who cannot use the intercom +admintoolbox_intercomlock | Boolean | False | If true locks the intercom for non-whitelisted players admintoolbox_block_role_damage | Dictionary | 2:2 | What roles cannot damage other roles. See example under admintoolbox_round_info | Boolean | True | Displays round-count and dudation on start/end of round +admintoolbox_block_role_damage | Example[Here](https://github.com/Rnen/AdminToolbox/blob/1.3.3/README.md#examples) | | Specifies what roles (AttackerRole) cannot damage. +admintoolbox_custom_nuke_cards | Boolean | False | Enables config for having to use a specified card to activate nuke +admintoolbox_nuke_card_list | List | 6, 9, 11 | What item(s) the player needs to have in his hand to start the nuke + +Config Option | Value Type | Default Value | Description +--- | :---: | :---: | --- +admintoolbox_intercom_whitelist | ServerRole:SpeakTime:CooldownTime | | Whitelist of server roles (roles from `config_remoteadmin.txt` with specific time settings + +>See example at the bottom ### Logfile settings (file will be created in the `AppData\Roaming\SCP Secret Laboratory\ATServerLogs` folder Config Option | Value Type | Default Value | Description @@ -105,7 +116,7 @@ admintoolbox_log_teamkills | Boolean | False | Writes teamkills to the AT logfil admintoolbox_log_kills | Boolean | False | Writes non-team kills to the AT logfile admintoolbox_log_commands | Boolean | False | Writes command usage to the AT logfile -### Debug Settings (If you do not intend to change the default values, theres no need to include any of theese in your config) +### Debug/INFO Settings (If you do not intend to change the default values, theres no need to include any of theese in your config) Config Option | Value Type | Default Value | Description --- | :---: | :---: | --- admintoolbox_debug_damagetypes | List | All human player damage ID's | What damage types to detect. @@ -114,12 +125,16 @@ admintoolbox_debug_friendly_damage | Boolean | False | Displays team damage in s admintoolbox_debug_player_kill | Boolean | False | Displays all non-friendly kills in server console. admintoolbox_debug_scp_and_self_killed | Boolean | False | Displays suicides, granade kills and SCP kills in server console. admintoolbox_debug_friendly_kill | Boolean | True | Displays teamkills in server console. +admintoolbox_player_join_info | Boolean | True | Displays joining player's name upon joining. + ### *Note that all configs should go in your server config file, not config_remoteadmin.txt -Examples: + +### Examples: ```yaml #The example under will make scientists and Chaos unable to damage Dboys. The second example is how you add several roleID's for one role. (The example would make scientists (6) not able to damage any class, dboys (1) not able to attack other dboys (1)) admintoolbox_block_role_damage: 6:0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17,1:1 +admintoolbox_intercom_whitelist: owner:120:10, moderator:90:20 ``` >Find a complete list of DamageID's, RoleID's and more [HERE](https://github.com/Rnen/AdminToolbox/blob/master/.github/RESOURCES.md) # @@ -127,4 +142,3 @@ admintoolbox_block_role_damage: 6:0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17,1: ### Place any suggestions/problems in [issues](https://github.com/Rnen/AdminToolbox/issues)! # Thanks & Enjoy. - diff --git a/version.md b/version.md index 1162b35..aa70697 100644 --- a/version.md +++ b/version.md @@ -1 +1 @@ -at_version=1.3.2 +at_version=1.3.3