/// <summary> /// Returns <see cref="Player"/> from jail /// </summary> public static void ReturnFromJail(Player player) { if (player == null || string.IsNullOrEmpty(player.SteamId.Trim())) { return; } if (AdminToolbox.ATPlayerDict.ContainsKey(player.SteamId)) { API.PlayerSettings psetting = AdminToolbox.ATPlayerDict[player.SteamId]; psetting.isJailed = false; psetting.JailedToTime = DateTime.Now; player.ChangeRole(psetting.previousRole, true, false); player.Teleport(psetting.originalPos, true); player.SetHealth(psetting.previousHealth); if (psetting.playerPrevInv != null) { foreach (Smod2.API.Item item in player.GetInventory()) { item.Remove(); } foreach (Smod2.API.Item item in psetting.playerPrevInv) { player.GiveItem(item.ItemType); } } player.SetAmmo(AmmoType.DROPPED_5, psetting.prevAmmo5); player.SetAmmo(AmmoType.DROPPED_7, psetting.prevAmmo7); player.SetAmmo(AmmoType.DROPPED_9, psetting.prevAmmo9); AdminToolbox.ATPlayerDict[player.SteamId].playerPrevInv = null; } else { AdminToolbox.plugin.Info("Could not return player from jail! Player not in PlayerDict!"); } }
/// <summary> /// For setting <see cref="API.PlayerSettings"/> stats /// <para>Returns false if <paramref name="steamID"/> is not in <see cref="AdminToolbox.ATPlayerDict"/></para> /// </summary> public static bool SetPlayerStats(string steamID, int?Kills = null, int?TeamKills = null, int?Deaths = null, int?RoundsPlayed = null, int?BanCount = null) { if (!AdminToolbox.ATPlayerDict.ContainsKey(steamID)) { return(false); } API.PlayerSettings setting = AdminToolbox.ATPlayerDict[steamID]; setting.Kills = Kills ?? setting.Kills; setting.TeamKills = TeamKills ?? setting.TeamKills; setting.Deaths = Deaths ?? setting.Deaths; setting.RoundsPlayed = RoundsPlayed ?? setting.RoundsPlayed; setting.banCount = BanCount ?? setting.banCount; AdminToolbox.ATPlayerDict[steamID] = setting; return(true); }
/// <summary> /// For setting <see cref="API.PlayerSettings"/> bools by <paramref name="steamID"/> /// <para>Returns false if <paramref name="steamID"/> is not in <see cref="AdminToolbox.ATPlayerDict"/></para> /// </summary> public static bool 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.ATPlayerDict.ContainsKey(steamID)) { return(false); } API.PlayerSettings setting = AdminToolbox.ATPlayerDict[steamID]; setting.overwatchMode = spectatorOnly ?? setting.overwatchMode; setting.godMode = godMode ?? setting.godMode; setting.dmgOff = dmgOff ?? setting.dmgOff; setting.destroyDoor = destroyDoor ?? setting.destroyDoor; setting.lockDown = lockDown ?? setting.lockDown; setting.instantKill = instantKill ?? setting.instantKill; setting.isJailed = isJailed ?? setting.isJailed; AdminToolbox.ATPlayerDict[steamID] = setting; return(true); }
/// <summary> /// Sends <see cref="Player"/> to jail /// </summary> public static bool SendToJail(Player player, DateTime?jailedToTime) { if (player.TeamRole.Role == Role.SPECTATOR) { return(false); } if (AdminToolbox.ATPlayerDict.ContainsKey(player.SteamId)) { API.PlayerSettings psetting = AdminToolbox.ATPlayerDict[player.SteamId]; psetting.JailedToTime = jailedToTime ?? ((psetting.JailedToTime > DateTime.Now) ? psetting.JailedToTime : DateTime.Now.AddYears(1)); //Saves original variables psetting.originalPos = player.GetPosition(); if (!psetting.isJailed) { psetting.previousRole = player.TeamRole.Role; psetting.playerPrevInv = player.GetInventory(); psetting.previousHealth = player.GetHealth(); psetting.prevAmmo5 = player.GetAmmo(AmmoType.DROPPED_5); psetting.prevAmmo7 = player.GetAmmo(AmmoType.DROPPED_7); psetting.prevAmmo9 = player.GetAmmo(AmmoType.DROPPED_9); } //Changes role to Tutorial, teleports to jail, removes inv. player.ChangeRole(Role.TUTORIAL, true, false); player.Teleport(JailPos, true); foreach (Smod2.API.Item item in player.GetInventory()) { item.Remove(); } psetting.isJailed = true; return(true); } else { AdminToolbox.plugin.Debug("Could not send player to jail! Player not in PlayerDict!"); return(false); } }
public string[] OnCall(ICommandSender sender, string[] args) { if (Server.GetPlayers().Count > 0) { Player myPlayer = (args.Length > 0) ? API.GetPlayerFromString.GetPlayer(args[0]) : null; if (myPlayer == null && sender is Player sendingPlayer) { myPlayer = sendingPlayer; } else if (myPlayer == null) { if (args.Length > 0) { return new string[] { "Could not find player: " + args[0] } } } ; else { return new string[] { GetUsage() } }; //Handling player stats AdminToolbox.AddMissingPlayerVariables(new List <Player> { myPlayer }); AdminToolbox.atfileManager.PlayerStatsFileManager(new List <Player> { myPlayer }, Managers.ATFileManager.PlayerFile.Write); API.PlayerSettings playerDict = (AdminToolbox.ATPlayerDict.ContainsKey(myPlayer.SteamId)) ? AdminToolbox.ATPlayerDict[myPlayer.SteamId] : new API.PlayerSettings(myPlayer.SteamId); //Inventory string playerInv = string.Empty; foreach (Smod2.API.Item i in myPlayer.GetInventory().Where(i => i.ItemType != ItemType.NULL)) { playerInv += i.ItemType + ", "; } if (playerInv == string.Empty) { playerInv = "Empty Inventory"; } //Calculating remaining jail time int remainingJailTime = ((int)playerDict.JailedToTime.Subtract(DateTime.Now).TotalSeconds >= 0) ? (int)playerDict.JailedToTime.Subtract(DateTime.Now).TotalSeconds : 0; string _playerRole = (IsPlayer(sender)) ? ColoredRole(myPlayer) : myPlayer.TeamRole.Role + ""; //Building string string playerInfoString = Environment.NewLine + Environment.NewLine + "Player: (" + myPlayer.PlayerId + ") " + myPlayer.Name + Environment.NewLine + BuildTwoLiner(" - SteamID: " + myPlayer.SteamId, " - IP: " + myPlayer.IpAddress.Replace("::ffff:", string.Empty)) + Environment.NewLine + BuildTwoLiner(" - Server Rank: " + "<color=" + myPlayer.GetUserGroup().Color + ">" + myPlayer.GetRankName() + "</color>") + Environment.NewLine + BuildTwoLiner(" - Role: " + _playerRole, " - Health: " + myPlayer.GetHealth()) + Environment.NewLine + BuildTwoLiner(" - AdminToolbox Toggables: ") + Environment.NewLine + BuildTwoLiner(" - Godmode: " + (playerDict.godMode), " - NoDmg: " + (playerDict.dmgOff)) + Environment.NewLine + BuildTwoLiner(" - OverwatchMode: " + (myPlayer.OverwatchMode), " - KeepSettings: " + (playerDict.keepSettings)) + Environment.NewLine + BuildTwoLiner(" - BreakDoors: " + (playerDict.destroyDoor), " - PlayerLockDown: " + (playerDict.lockDown)) + Environment.NewLine + BuildTwoLiner(" - InstantKill: " + (playerDict.instantKill), " - GhostMode: " + myPlayer.GetGhostMode()) + Environment.NewLine + BuildTwoLiner(" - IsJailed: " + (playerDict.isJailed), " - Released In: " + remainingJailTime) + Environment.NewLine + BuildTwoLiner(" - Stats:") + Environment.NewLine + BuildTwoLiner(" - Kills: " + playerDict.Kills, " - TeamKills: " + playerDict.TeamKills) + Environment.NewLine + BuildTwoLiner(" - Deaths: " + playerDict.Deaths, " - Times Banned: " + playerDict.banCount) + Environment.NewLine + BuildTwoLiner(" - Playtime: " + (int)playerDict.MinutesPlayed + " minutes", " - Rounds Played: " + playerDict.RoundsPlayed) + Environment.NewLine + BuildTwoLiner(" - Position:") + Environment.NewLine + BuildTwoLiner(" - X:" + (int)myPlayer.GetPosition().x + " Y:" + (int)myPlayer.GetPosition().y + " Z:" + (int)myPlayer.GetPosition().z) + Environment.NewLine + BuildTwoLiner(" - Inventory: " + playerInv) + Environment.NewLine; if (IsPlayer(sender)) { return new string[] { playerInfoString.Replace("True ", "<color=green>" + "True" + " </color>").Replace("False", "<color=red>" + "False" + "</color>") } } ; else { return new string[] { playerInfoString } }; }
/// <summary> /// Read/Writes stats to/from <see cref="File"/> for each steamID in the <see cref="List{T}"/> /// </summary> public void PlayerStatsFileManager(List <string> steamIdList, PlayerFile FileOperation = PlayerFile.Read) { if (Directory.Exists(FileManager.GetAppFolder())) { char splitChar = ';'; if (!Directory.Exists(AdminToolboxFolder)) { Directory.CreateDirectory(AdminToolboxFolder); } if (!Directory.Exists(AdminToolboxPlayerStats)) { Directory.CreateDirectory(AdminToolboxPlayerStats); } if (steamIdList != null && steamIdList.Count > 0) { foreach (string sid in steamIdList) { ReadWriteHandler(sid, FileOperation); } } else { foreach (string steamID in AdminToolbox.ATPlayerDict.Keys) { ReadWriteHandler(steamID, FileOperation); } } void ReadWriteHandler(string steamID, PlayerFile Operation) { if (string.IsNullOrEmpty(steamID)) { return; } if (!AdminToolbox.ATPlayerDict.ContainsKey(steamID)) { AdminToolbox.AddMissingPlayerVariables(PluginManager.Manager.Server.GetPlayers(steamID)); return; } ; switch (Operation) { case PlayerFile.Read: ReadFromFile(steamID); break; case PlayerFile.Write: WriteToFile(steamID); break; default: ReadFromFile(steamID); break; } } void WriteToFile(string steamID) { if (!AdminToolbox.ATPlayerDict.ContainsKey(steamID)) { if (PluginManager.Manager.Server.GetPlayers(steamID).Count < 1) { return; } AdminToolbox.AddMissingPlayerVariables(PluginManager.Manager.Server.GetPlayers(steamID).FirstOrDefault()); } if (!AdminToolbox.ATPlayerDict.ContainsKey(steamID)) { return; } string playerFilePath = (AdminToolbox.ATPlayerDict.ContainsKey(steamID)) ? AdminToolboxPlayerStats + Path.DirectorySeparatorChar + steamID + ".txt" : AdminToolboxPlayerStats + Path.DirectorySeparatorChar + "server" + ".txt"; if (!File.Exists(playerFilePath)) { File.Create(playerFilePath).Dispose(); } API.PlayerSettings setting = (AdminToolbox.ATPlayerDict.ContainsKey(steamID)) ? AdminToolbox.ATPlayerDict[steamID] : new API.PlayerSettings(steamID); int Kills = (AdminToolbox.ATPlayerDict.ContainsKey(steamID) && AdminToolbox.ATPlayerDict[steamID].Kills > 0) ? AdminToolbox.ATPlayerDict[steamID].Kills : 0; int TeamKills = (AdminToolbox.ATPlayerDict.ContainsKey(steamID) && AdminToolbox.ATPlayerDict[steamID].TeamKills > 0) ? AdminToolbox.ATPlayerDict[steamID].TeamKills : 0; int Deaths = (AdminToolbox.ATPlayerDict.ContainsKey(steamID) && AdminToolbox.ATPlayerDict[steamID].Deaths > 0) ? AdminToolbox.ATPlayerDict[steamID].Deaths : 0; double minutesPlayed = (AdminToolbox.ATPlayerDict.ContainsKey(steamID) && AdminToolbox.ATPlayerDict[steamID].MinutesPlayed > 0) ? DateTime.Now.Subtract(AdminToolbox.ATPlayerDict[steamID].JoinTime).TotalMinutes + AdminToolbox.ATPlayerDict[steamID].MinutesPlayed : 0; int BanCount = (AdminToolbox.ATPlayerDict.ContainsKey(steamID) && AdminToolbox.ATPlayerDict[steamID].banCount > 0) ? AdminToolbox.ATPlayerDict[steamID].banCount : 0; if (AdminToolbox.ATPlayerDict.ContainsKey(steamID)) { AdminToolbox.ATPlayerDict[steamID].JoinTime = DateTime.Now; } string str = string.Empty + Kills + splitChar + TeamKills + splitChar + Deaths + splitChar + minutesPlayed + splitChar + BanCount; using (StreamWriter streamWriter = new StreamWriter(playerFilePath, false)) { streamWriter.Write(str); streamWriter.Close(); } ReadFromFile(steamID); } void ReadFromFile(string steamID) { string playerFilePath = (AdminToolbox.ATPlayerDict.ContainsKey(steamID)) ? AdminToolboxPlayerStats + Path.DirectorySeparatorChar + steamID + ".txt" : AdminToolboxPlayerStats + Path.DirectorySeparatorChar + "server" + ".txt"; if (!File.Exists(playerFilePath)) { PlayerStatsFileManager(new List <string> { steamID }, PlayerFile.Write); } string[] fileStrings = (File.ReadAllLines(playerFilePath).Length > 0) ? File.ReadAllLines(playerFilePath) : new string[] { "0;0;0;0;0" }; string[] playerStats = fileStrings.FirstOrDefault().Split(splitChar); if (AdminToolbox.ATPlayerDict.ContainsKey(steamID)) { API.PlayerSettings setting = AdminToolbox.ATPlayerDict[steamID]; setting.Kills = (playerStats.Length > 0 && int.TryParse(playerStats[0], out int x0) && x0 > setting.Kills) ? x0 : setting.Kills; setting.TeamKills = (playerStats.Length > 1 && int.TryParse(playerStats[1], out int x1) && x1 > setting.TeamKills) ? x1 : setting.TeamKills; setting.Deaths = (playerStats.Length > 2 && int.TryParse(playerStats[2], out int x2) && x2 > setting.Deaths) ? x2 : setting.Deaths; setting.MinutesPlayed = (playerStats.Length > 3 && double.TryParse(playerStats[3], out double x3) && x3 > setting.MinutesPlayed) ? x3 : setting.MinutesPlayed; setting.banCount = (playerStats.Length > 4 && int.TryParse(playerStats[4], out int x4) && x4 > setting.banCount) ? x4 : setting.banCount; AdminToolbox.ATPlayerDict[steamID] = setting; } } } }