Index: binary-improvements/7dtd-server-fixes/src/CustomCommands/ListKnownPlayers.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/CustomCommands/ListKnownPlayers.cs	(revision 147)
+++ binary-improvements/7dtd-server-fixes/src/CustomCommands/ListKnownPlayers.cs	(revision 147)
@@ -0,0 +1,64 @@
+using AllocsFixes.PersistentData;
+using System;
+using System.Collections.Generic;
+
+namespace AllocsFixes.CustomCommands
+{
+	public class ListKnownPlayers : ConsoleCommand
+	{
+		public ListKnownPlayers (ConsoleSdtd cons) : base(cons)
+		{
+		}
+
+		public override string Description ()
+		{
+			return "lists all players that were ever online (optionally filtered)";
+		}
+
+		public override string[] Names ()
+		{
+			return new string[] { "listknownplayers", "lkp" };
+		}
+
+		public override void Run (string[] _params)
+		{
+			try {
+				AdminTools admTools = CommonMappingFunctions.GetGameManager ().adminTools;
+
+				bool onlineOnly = false;
+				bool notBannedOnly = false;
+				string nameFilter = string.Empty;
+
+				if (_params.Length == 1) {
+					if (_params [0].ToLower ().Equals ("-online")) {
+						onlineOnly = true;
+					} else if (_params [0].ToLower ().Equals ("-notbanned")) {
+						notBannedOnly = true;
+					} else {
+						nameFilter = _params [0].ToLower ();
+					}
+				}
+
+				int num = 0;
+				foreach (string sid in PersistentContainer.Instance.Players.SteamIDs) {
+					Player p = PersistentContainer.Instance.Players [sid];
+
+					if (
+						(!onlineOnly || p.IsOnline)
+						&& (!notBannedOnly || !admTools.isBanned (sid))
+						&& (nameFilter.Length == 0 || p.Name.ToLower ().Contains (nameFilter))
+					) {
+						m_Console.SendResult (String.Format ("{0}. {1}, id={2}, steamid={3}, online={4}, ip={5}, playtime={6} m, seen={7}",
+						                                    ++num, p.Name, p.EntityID, sid, p.IsOnline, p.IP,
+						                                    p.TotalPlayTime / 60,
+						                                    p.LastOnline.ToString ("yyyy-MM-dd HH:mm"))
+						);
+					}
+				}
+				m_Console.SendResult ("Total of " + PersistentContainer.Instance.Players.Count + " known");
+			} catch (Exception e) {
+				Log.Out ("Error in ListKnownPlayers.Run: " + e);
+			}
+		}
+	}
+}
