Changeset 369 for binary-improvements


Ignore:
Timestamp:
Nov 9, 2021, 6:28:33 PM (3 years ago)
Author:
alloc
Message:

Preparations for A20 release
Changes usage of "SteamID" to "UserID" in console commands
Also changes a bunch of the WebAPI stuff to show / use UserIDs

Location:
binary-improvements
Files:
32 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/7dtd-server-fixes/src/API.cs

    r354 r369  
    11using System.Collections.Generic;
    22using AllocsFixes.PersistentData;
    3 using System;
     3using Platform.Steam;
    44
    55namespace AllocsFixes {
    66        public class API : IModApi {
    7                 public void InitMod () {
     7                public void InitMod (Mod _modInstance) {
    88                        ModEvents.GameStartDone.RegisterHandler (GameAwake);
    99                        ModEvents.GameShutdown.RegisterHandler (GameShutdown);
     
    1616
    1717                public void GameAwake () {
    18                         try {
    19                                 PersistentContainer.Load ();
    20                         } catch (Exception e) {
    21                                 Log.Out ("Error in StateManager.Awake: " + e);
    22                         }
     18                        PersistentContainer.Load ();
    2319                }
    2420
    2521                public void GameShutdown () {
    26                         try {
    27                                 Log.Out ("Server shutting down!");
    28                                 PersistentContainer.Instance.Save ();
    29                         } catch (Exception e) {
    30                                 Log.Out ("Error in StateManager.Shutdown: " + e);
    31                         }
    3222                }
    3323
    3424                public void SavePlayerData (ClientInfo _cInfo, PlayerDataFile _playerDataFile) {
    35                         try {
    36                                 PersistentContainer.Instance.Players [_cInfo.playerId, true].Update (_playerDataFile);
    37                         } catch (Exception e) {
    38                                 Log.Out ("Error in GM_SavePlayerData: " + e);
    39                         }
     25                        PersistentContainer.Instance.Players [_cInfo.PlatformId, true].Update (_playerDataFile);
    4026                }
    4127
    4228                public void PlayerSpawning (ClientInfo _cInfo, int _chunkViewDim, PlayerProfile _playerProfile) {
    43                         try {
    44                                 Log.Out ("Player connected" +
    45                                         ", entityid=" + _cInfo.entityId +
    46                                         ", name=" + _cInfo.playerName +
    47                                         ", steamid=" + _cInfo.playerId +
    48                                         ", steamOwner=" + _cInfo.ownerId +
    49                                         ", ip=" + _cInfo.ip
    50                                 );
    51                         } catch (Exception e) {
    52                                 Log.Out ("Error in AllocsLogFunctions.RequestToSpawnPlayer: " + e);
     29                        string owner = null;
     30                        if (_cInfo.PlatformId is UserIdentifierSteam identifierSteam) {
     31                                owner = identifierSteam.OwnerId.ToString ();
    5332                        }
     33
     34                        Log.Out ("Player connected" +
     35                                 ", entityid=" + _cInfo.entityId +
     36                                 ", name=" + _cInfo.playerName +
     37                                 ", pltfmid=" + (_cInfo.PlatformId?.CombinedString ?? "<unknown>") +
     38                                 ", crossid=" + (_cInfo.CrossplatformId?.CombinedString ?? "<unknown/none>") +
     39                                 ", steamOwner=" + (owner ?? "<unknown/none>") +
     40                                 ", ip=" + _cInfo.ip
     41                        );
    5442                }
    5543
    5644                public void PlayerDisconnected (ClientInfo _cInfo, bool _bShutdown) {
    57                         try {
    58                                 Player p = PersistentContainer.Instance.Players [_cInfo.playerId, false];
    59                                 if (p != null) {
    60                                         p.SetOffline ();
    61                                 } else {
    62                                         Log.Out ("Disconnected player not found in client list...");
    63                                 }
     45                        Player p = PersistentContainer.Instance.Players [_cInfo.PlatformId, false];
     46                        if (p != null) {
     47                                p.SetOffline ();
     48                        } else {
     49                                Log.Out ("Disconnected player not found in client list...");
     50                        }
    6451
    65                                 PersistentContainer.Instance.Save ();
    66                         } catch (Exception e) {
    67                                 Log.Out ("Error in AllocsLogFunctions.PlayerDisconnected: " + e);
    68                         }
     52                        PersistentContainer.Instance.Save ();
    6953                }
    7054
    7155                public void PlayerSpawned (ClientInfo _cInfo, RespawnType _respawnReason, Vector3i _spawnPos) {
    72                         try {
    73                                 PersistentContainer.Instance.Players [_cInfo.playerId, true].SetOnline (_cInfo);
    74                                 PersistentContainer.Instance.Save ();
    75                         } catch (Exception e) {
    76                                 Log.Out ("Error in AllocsLogFunctions.PlayerSpawnedInWorld: " + e);
    77                         }
     56                        PersistentContainer.Instance.Players [_cInfo.PlatformId, true].SetOnline (_cInfo);
     57                        PersistentContainer.Instance.Save ();
    7858                }
    7959
     
    8868
    8969                        if (_cInfo != null) {
    90                                 Log.Out ("Sent chat hook reply to {0}", _cInfo.playerId);
     70                                Log.Out ("Sent chat hook reply to {0}", _cInfo.InternalId);
    9171                                _cInfo.SendPackage (NetPackageManager.GetPackage<NetPackageChat> ().Setup (EChatType.Whisper, -1, ANSWER, "", false, null));
    9272                        } else {
  • binary-improvements/7dtd-server-fixes/src/LandClaimList.cs

    r351 r369  
    44
    55namespace AllocsFixes {
    6         public class LandClaimList {
     6        public static class LandClaimList {
    77                public delegate bool OwnerFilter (Player _owner);
    88
     
    4141
    4242                        foreach (KeyValuePair<PersistentPlayerData, List<Vector3i>> kvp in owners) {
    43                                 Player p = PersistentContainer.Instance.Players [kvp.Key.PlayerId, false];
     43                                Player p = PersistentContainer.Instance.Players [kvp.Key.UserIdentifier, false];
    4444                                if (p == null) {
    45                                         p = new Player (kvp.Key.PlayerId);
     45                                        p = new Player (kvp.Key.UserIdentifier);
    4646                                }
    4747
     
    6767                }
    6868
    69                 public static OwnerFilter SteamIdFilter (string _steamId) {
    70                         return _p => _p.SteamID.Equals (_steamId);
     69                public static OwnerFilter UserIdFilter (PlatformUserIdentifierAbs _userId) {
     70                        return _p => _p.PlatformId.Equals (_userId);
    7171                }
    7272
  • binary-improvements/7dtd-server-fixes/src/PersistentData/PersistentContainer.cs

    r326 r369  
    4646
    4747                public void Save () {
    48                         Stream stream = File.Open (GameUtils.GetSaveGameDir () + "/AllocsPeristentData.bin", FileMode.Create);
     48                        Stream stream = File.Open (GameIO.GetSaveGameDir () + "/AllocsPeristentData.bin", FileMode.Create);
    4949                        BinaryFormatter bFormatter = new BinaryFormatter ();
    5050                        bFormatter.Serialize (stream, this);
     
    5353
    5454                public static bool Load () {
    55                         if (!File.Exists (GameUtils.GetSaveGameDir () + "/AllocsPeristentData.bin")) {
     55                        if (!File.Exists (GameIO.GetSaveGameDir () + "/AllocsPeristentData.bin")) {
    5656                                return false;
    5757                        }
     
    5959                        try {
    6060                                PersistentContainer obj;
    61                                 Stream stream = File.Open (GameUtils.GetSaveGameDir () + "/AllocsPeristentData.bin", FileMode.Open);
     61                                Stream stream = File.Open (GameIO.GetSaveGameDir () + "/AllocsPeristentData.bin", FileMode.Open);
    6262                                BinaryFormatter bFormatter = new BinaryFormatter ();
    6363                                obj = (PersistentContainer) bFormatter.Deserialize (stream);
  • binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs

    r351 r369  
    11using System;
    2 using System.Runtime.Serialization;
    32using UnityEngine;
    43
     
    65        [Serializable]
    76        public class Player {
    8                 private readonly string steamId;
     7                private readonly PlatformUserIdentifierAbs platformId;
    98                private int entityId;
    109                private string name;
     
    1211                private long totalPlayTime;
    1312
    14                 [OptionalField] private DateTime lastOnline;
     13                private DateTime lastOnline;
    1514
    1615                private Inventory inventory;
    1716
    18                 [OptionalField] private int lastPositionX, lastPositionY, lastPositionZ;
     17                private int lastPositionX, lastPositionY, lastPositionZ;
    1918
    20                 [OptionalField] [Obsolete ("experience no longer available, use level and expToNextLevel instead")]
    21                 private uint experience;
    22 
    23                 [OptionalField] private bool chatMuted;
    24                 [OptionalField] private int maxChatLength;
    25                 [OptionalField] private string chatColor;
    26                 [OptionalField] private bool chatName;
    27                 [OptionalField] private uint expToNextLevel;
    28                 [OptionalField] private int level;
     19                private bool chatMuted;
     20                private int maxChatLength;
     21                private string chatColor;
     22                private bool chatName;
     23                private uint expToNextLevel;
     24                private int level;
    2925
    3026                [NonSerialized] private ClientInfo clientInfo;
    3127
    32                 public string SteamID {
    33                         get { return steamId; }
    34                 }
     28                public PlatformUserIdentifierAbs PlatformId => platformId;
    3529
    36         public int EntityID {
    37             get { return entityId; }
    38         }
     30                public int EntityID => entityId;
    3931
    40                 public string Name {
    41                         get { return name == null ? string.Empty : name; }
    42                 }
     32                public string Name => name ?? string.Empty;
    4333
    44                 public string IP {
    45                         get { return ip == null ? string.Empty : ip; }
    46                 }
     34                public string IP => ip ?? string.Empty;
    4735
    48                 public Inventory Inventory {
    49                         get {
    50                                 if (inventory == null) {
    51                                         inventory = new Inventory ();
    52                                 }
     36                public Inventory Inventory => inventory ?? (inventory = new Inventory ());
    5337
    54                                 return inventory;
    55                         }
    56                 }
     38                public bool IsOnline => clientInfo != null;
    5739
    58                 public bool IsOnline {
    59                         get { return clientInfo != null; }
    60                 }
     40                public ClientInfo ClientInfo => clientInfo;
    6141
    62                 public ClientInfo ClientInfo {
    63                         get { return clientInfo; }
    64                 }
    65 
    66                 public EntityPlayer Entity {
    67                         get {
    68                                 if (IsOnline) {
    69                                         return GameManager.Instance.World.Players.dict [clientInfo.entityId];
    70                                 }
    71 
    72                                 return null;
    73                         }
    74                 }
     42                public EntityPlayer Entity => IsOnline ? GameManager.Instance.World.Players.dict [clientInfo.entityId] : null;
    7543
    7644                public long TotalPlayTime {
     
    8452                }
    8553
    86                 public DateTime LastOnline {
    87                         get {
    88                                 if (IsOnline) {
    89                                         return DateTime.Now;
    90                                 }
     54                public DateTime LastOnline => IsOnline ? DateTime.Now : lastOnline;
    9155
    92                                 return lastOnline;
    93                         }
    94                 }
     56                public Vector3i LastPosition => IsOnline ? new Vector3i (Entity.GetPosition ()) : new Vector3i (lastPositionX, lastPositionY, lastPositionZ);
    9557
    96                 public Vector3i LastPosition {
    97                         get {
    98                                 if (IsOnline) {
    99                                         return new Vector3i (Entity.GetPosition ());
    100                                 }
     58                public bool LandProtectionActive =>
     59                        GameManager.Instance.World.IsLandProtectionValidForPlayer (GameManager.Instance
     60                                .GetPersistentPlayerList ().GetPlayerData (PlatformId));
    10161
    102                                 return new Vector3i (lastPositionX, lastPositionY, lastPositionZ);
    103                         }
    104                 }
    105 
    106                 public bool LandProtectionActive {
    107                         get {
    108                                 return GameManager.Instance.World.IsLandProtectionValidForPlayer (GameManager.Instance
    109                                         .GetPersistentPlayerList ().GetPlayerData (SteamID));
    110                         }
    111                 }
    112 
    113                 public float LandProtectionMultiplier {
    114                         get {
    115                                 return GameManager.Instance.World.GetLandProtectionHardnessModifierForPlayer (GameManager.Instance
    116                                         .GetPersistentPlayerList ().GetPlayerData (SteamID));
    117                         }
    118                 }
    119 
    120 
    121                 [Obsolete ("Experience no longer available, use Level instead")]
    122                 public uint Experience {
    123                         get { return 0; }
    124                 }
     62                public float LandProtectionMultiplier =>
     63                        GameManager.Instance.World.GetLandProtectionHardnessModifierForPlayer (GameManager.Instance
     64                                .GetPersistentPlayerList ().GetPlayerData (PlatformId));
    12565
    12666                public float Level {
     
    13575
    13676                public bool IsChatMuted {
    137                         get { return chatMuted; }
    138                         set { chatMuted = value; }
     77                        get => chatMuted;
     78                        set => chatMuted = value;
    13979                }
    14080
     
    14787                                return maxChatLength;
    14888                        }
    149                         set { maxChatLength = value; }
     89                        set => maxChatLength = value;
    15090                }
    15191
    15292                public string ChatColor {
    15393                        get {
    154                                 if (chatColor == null || chatColor == "") {
     94                                if (string.IsNullOrEmpty (chatColor)) {
    15595                                        chatColor = "";
    15696                                }
     
    15999                        }
    160100
    161                         set { chatColor = value; }
     101                        set => chatColor = value;
    162102                }
    163103
    164104                public bool ChatName {
    165                         get { return chatName; }
    166 
    167                         set { chatName = value; }
     105                        get => chatName;
     106                        set => chatName = value;
    168107                }
    169108
    170                 public Player (string _steamId) {
    171                         steamId = _steamId;
     109                public Player (PlatformUserIdentifierAbs _platformId) {
     110                        platformId = _platformId;
    172111                        inventory = new Inventory ();
    173112                }
     
    178117                        }
    179118
    180                         Log.Out ("Player set to offline: " + steamId);
     119                        Log.Out ("Player set to offline: " + platformId);
    181120                        lastOnline = DateTime.Now;
    182121                        try {
     
    194133
    195134                public void SetOnline (ClientInfo _ci) {
    196                         Log.Out ("Player set to online: " + steamId);
     135                        Log.Out ("Player set to online: " + platformId);
    197136                        clientInfo = _ci;
    198137            entityId = _ci.entityId;
     
    222161                        }
    223162                }
     163
    224164        }
    225165}
  • binary-improvements/7dtd-server-fixes/src/PersistentData/Players.cs

    r351 r369  
    22using System.Collections.Generic;
    33using System.Text.RegularExpressions;
     4using Platform.Steam;
    45
    56namespace AllocsFixes.PersistentData {
    67        [Serializable]
    78        public class Players {
    8                 public readonly Dictionary<string, Player> Dict = new Dictionary<string, Player> (StringComparer.OrdinalIgnoreCase);
     9                public readonly Dictionary<PlatformUserIdentifierAbs, Player> Dict = new Dictionary<PlatformUserIdentifierAbs, Player> ();
    910
    10                 public Player this [string _steamId, bool _create] {
     11                public Player this [PlatformUserIdentifierAbs _platformId, bool _create] {
    1112                        get {
    12                                 if (string.IsNullOrEmpty (_steamId)) {
     13                                if (_platformId == null) {
    1314                                        return null;
    1415                                }
    1516
    16                                 if (Dict.ContainsKey (_steamId)) {
    17                                         return Dict [_steamId];
     17                                if (Dict.TryGetValue (_platformId, out Player pOld)) {
     18                                        return pOld;
    1819                                }
    1920
    20                                 if (!_create || _steamId.Length != 17) {
     21                                if (!_create) {
    2122                                        return null;
    2223                                }
    2324
    24                                 Log.Out ("Created new player entry for ID: " + _steamId);
    25                                 Player p = new Player (_steamId);
    26                                 Dict.Add (_steamId, p);
     25                                Log.Out ("Created new player entry for ID: " + _platformId);
     26                                Player p = new Player (_platformId);
     27                                Dict.Add (_platformId, p);
    2728                                return p;
    2829                        }
    2930                }
    3031
    31                 public int Count {
    32                         get { return Dict.Count; }
    33                 }
     32                public int Count => Dict.Count;
    3433
    35 //              public Player GetPlayerByNameOrId (string _nameOrId, bool _ignoreColorCodes)
    36 //              {
    37 //                      string sid = GetSteamID (_nameOrId, _ignoreColorCodes);
    38 //                      if (sid != null)
    39 //                              return this [sid];
    40 //                      else
    41 //                              return null;
    42 //              }
    43 
    44                 public string GetSteamID (string _nameOrId, bool _ignoreColorCodes) {
    45                         if (_nameOrId == null || _nameOrId.Length == 0) {
     34                public PlatformUserIdentifierAbs GetSteamID (string _nameOrId, bool _ignoreColorCodes) {
     35                        if (string.IsNullOrEmpty (_nameOrId)) {
    4636                                return null;
    4737                        }
    4838
    49                         long tempLong;
    50                         if (_nameOrId.Length == 17 && long.TryParse (_nameOrId, out tempLong)) {
    51                                 return _nameOrId;
     39                        if (PlatformUserIdentifierAbs.TryFromCombinedString (_nameOrId, out PlatformUserIdentifierAbs userId)) {
     40                                return userId;
    5241                        }
    5342
    54                         int entityId;
    55                         if (int.TryParse (_nameOrId, out entityId)) {
    56                                 foreach (KeyValuePair<string, Player> kvp in Dict) {
     43                        if (int.TryParse (_nameOrId, out int entityId)) {
     44                                foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in Dict) {
    5745                                        if (kvp.Value.IsOnline && kvp.Value.EntityID == entityId) {
    5846                                                return kvp.Key;
     
    6149                        }
    6250
    63                         foreach (KeyValuePair<string, Player> kvp in Dict) {
     51                        foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in Dict) {
    6452                                string name = kvp.Value.Name;
    6553                                if (_ignoreColorCodes) {
  • binary-improvements/AllocsCommands/API.cs

    r328 r369  
    11namespace AllocsFixes.CustomCommands {
    22        public class API : IModApi {
    3                 public void InitMod () {
     3                public void InitMod (Mod _modInstance) {
    44                }
    55        }
  • binary-improvements/AllocsCommands/Commands/ListKnownPlayers.cs

    r359 r369  
    1 using System;
    21using System.Collections.Generic;
    32using AllocsFixes.PersistentData;
     
    1413                               "  2. listknownplayers -online\n" +
    1514                               "  3. listknownplayers -notbanned\n" +
    16                                "  4. listknownplayers <player name / steamid>\n" +
     15                               "  4. listknownplayers <player name / userid>\n" +
    1716                               "1. Lists all players that have ever been online\n" +
    1817                               "2. Lists only the players that are currently online\n" +
    1918                               "3. Lists only the players that are not banned\n" +
    20                                "4. Lists all players whose name contains the given string or matches the given SteamID";
     19                               "4. Lists all players whose name contains the given string or matches the given UserID";
    2120                }
    2221
     
    3130                        bool notBannedOnly = false;
    3231                        string nameFilter = string.Empty;
    33                         bool isSteamId = false;
     32                        PlatformUserIdentifierAbs userIdFilter = null;
    3433
    3534                        if (_params.Count == 1) {
    36                                 long steamid;
    3735                                if (_params [0].EqualsCaseInsensitive ("-online")) {
    3836                                        onlineOnly = true;
    3937                                } else if (_params [0].EqualsCaseInsensitive ("-notbanned")) {
    4038                                        notBannedOnly = true;
    41                                 } else if (_params [0].Length == 17 && long.TryParse (_params [0], out steamid)) {
    42                                         isSteamId = true;
     39                                } else if (PlatformUserIdentifierAbs.TryFromCombinedString (_params [0], out userIdFilter)) {
     40                                        // if true nothing to do, set by the out parameter
    4341                                } else {
    4442                                        nameFilter = _params [0];
     
    4644                        }
    4745
    48                         if (isSteamId) {
    49                                 Player p = PersistentContainer.Instance.Players [_params [0], false];
     46                        if (userIdFilter != null) {
     47                                Player p = PersistentContainer.Instance.Players [userIdFilter, false];
    5048
    5149                                if (p != null) {
    52                                         SdtdConsole.Instance.Output (string.Format (
    53                                                 "{0}. {1}, id={2}, steamid={3}, online={4}, ip={5}, playtime={6} m, seen={7}",
    54                                                 0, p.Name, p.EntityID, _params [0], p.IsOnline, p.IP,
    55                                                 p.TotalPlayTime / 60,
    56                                                 p.LastOnline.ToString ("yyyy-MM-dd HH:mm"))
     50                                        SdtdConsole.Instance.Output (
     51                                                $"{0}. {p.Name}, id={p.EntityID}, steamid={_params [0]}, online={p.IsOnline}, ip={p.IP}, playtime={p.TotalPlayTime / 60} m, seen={p.LastOnline:yyyy-MM-dd HH:mm}"
    5752                                        );
    5853                                } else {
    59                                         SdtdConsole.Instance.Output (string.Format ("SteamID {0} unknown!", _params [0]));
     54                                        SdtdConsole.Instance.Output ($"SteamID {_params [0]} unknown!");
    6055                                }
    6156                        } else {
    6257                                int num = 0;
    63                                 foreach (KeyValuePair<string, Player> kvp in PersistentContainer.Instance.Players.Dict) {
     58                                foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in PersistentContainer.Instance.Players.Dict) {
    6459                                        Player p = kvp.Value;
    6560
    6661                                        if (
    6762                                                (!onlineOnly || p.IsOnline)
    68                                                 && (!notBannedOnly || !admTools.IsBanned (kvp.Key))
     63                                                && (!notBannedOnly || !admTools.IsBanned (kvp.Key, out _, out _))
    6964                                                && (nameFilter.Length == 0 || p.Name.ContainsCaseInsensitive (nameFilter))
    7065                                        ) {
    71                                                 SdtdConsole.Instance.Output (string.Format (
    72                                                         "{0}. {1}, id={2}, steamid={3}, online={4}, ip={5}, playtime={6} m, seen={7}",
    73                                                         ++num, p.Name, p.EntityID, kvp.Key, p.IsOnline, p.IP,
    74                                                         p.TotalPlayTime / 60,
    75                                                         p.LastOnline.ToString ("yyyy-MM-dd HH:mm"))
     66                                                SdtdConsole.Instance.Output (
     67                                                        $"{++num}. {p.Name}, id={p.EntityID}, steamid={kvp.Key}, online={p.IsOnline}, ip={p.IP}, playtime={p.TotalPlayTime / 60} m, seen={p.LastOnline:yyyy-MM-dd HH:mm}"
    7668                                                );
    7769                                        }
    7870                                }
    7971
    80                                 SdtdConsole.Instance.Output ("Total of " + PersistentContainer.Instance.Players.Count + " known");
     72                                SdtdConsole.Instance.Output ($"Total of {PersistentContainer.Instance.Players.Count} known");
    8173                        }
    8274                }
  • binary-improvements/AllocsCommands/Commands/ListLandProtection.cs

    r359 r369  
    1212                        return "Usage:\n" +
    1313                               "  1. listlandprotection summary\n" +
    14                                "  2. listlandprotection <steam id / player name / entity id> [parseable]\n" +
     14                               "  2. listlandprotection <user id / player name / entity id> [parseable]\n" +
    1515                               "  3. listlandprotection nearby [length]\n" +
    1616                               "1. Lists only players that own claimstones, the number they own and the protection status\n" +
    17                                "2. Lists only the claims of the player given by his SteamID / entity id / playername, including the individual claim positions.\n" +
     17                               "2. Lists only the claims of the player given by his UserID / entity id / playername, including the individual claim positions.\n" +
    1818                               "   If \"parseable\" is specified the output of the individual claims will be in a format better suited for programmatical readout.\n" +
    1919                               "3. Lists claims in a square with edge length of 64 (or the optionally specified size) around the executing player\n";
     
    2525
    2626                public override void Execute (List<string> _params, CommandSenderInfo _senderInfo) {
    27                         if (_senderInfo.RemoteClientInfo != null) {
    28                                 if (_params.Count >= 1 && _params [0].EqualsCaseInsensitive ("nearby")) {
    29                                         _params.Add (_senderInfo.RemoteClientInfo.playerId);
     27                        if (_params.Count >= 1 && _params [0].EqualsCaseInsensitive ("nearby")) {
     28                                if (_senderInfo.RemoteClientInfo != null) {
     29                                        _params.Add (_senderInfo.RemoteClientInfo.entityId.ToString ());
     30                                } else if (_senderInfo.IsLocalGame && !GameManager.IsDedicatedServer) {
     31                                        _params.Add (GameManager.Instance.World.GetPrimaryPlayerId ().ToString ());
    3032                                }
    3133                        }
     
    3537
    3638                        bool summaryOnly = false;
    37                         string steamIdFilter = string.Empty;
     39                        PlatformUserIdentifierAbs userIdFilter = null;
    3840                        Vector3i closeTo = default (Vector3i);
    3941                        bool onlyCloseToPlayer = false;
     
    4749
    4850                        if (_params.Count == 1) {
    49                                 long tempLong;
    50 
    5151                                if (_params [0].EqualsCaseInsensitive ("summary")) {
    5252                                        summaryOnly = true;
    53                                 } else if (_params [0].Length == 17 && long.TryParse (_params [0], out tempLong)) {
    54                                         steamIdFilter = _params [0];
     53                                } else if (PlatformUserIdentifierAbs.TryFromCombinedString (_params[0], out userIdFilter)) {
    5554                                } else {
    5655                                        ClientInfo ci = ConsoleHelper.ParseParamIdOrName (_params [0]);
    5756                                        if (ci != null) {
    58                                                 steamIdFilter = ci.playerId;
     57                                                userIdFilter = ci.PlatformId;
    5958                                        } else {
    6059                                                SdtdConsole.Instance.Output ("Player name or entity id \"" + _params [0] + "\" not found.");
     
    7473                                                }
    7574
    76                                                 ClientInfo ci = ConsoleHelper.ParseParamSteamIdOnline (_params [_params.Count - 1]);
    77                                                 EntityPlayer ep = w.Players.dict [ci.entityId];
     75                                                int entityId = int.Parse (_params [_params.Count - 1]);
     76                                                EntityPlayer ep = w.Players.dict [entityId];
    7877                                                closeTo = new Vector3i (ep.GetPosition ());
    7978                                                onlyCloseToPlayer = true;
     
    9190
    9291                        LandClaimList.OwnerFilter[] ownerFilters = null;
    93                         if (!string.IsNullOrEmpty (steamIdFilter)) {
    94                                 ownerFilters = new[] {LandClaimList.SteamIdFilter (steamIdFilter)};
     92                        if (userIdFilter != null) {
     93                                ownerFilters = new[] {LandClaimList.UserIdFilter (userIdFilter)};
    9594                        }
    9695
     
    106105                                        "Player \"{0} ({1})\" owns {4} keystones (protected: {2}, current hardness multiplier: {3})",
    107106                                        kvp.Key.Name,
    108                                         kvp.Key.SteamID,
     107                                        kvp.Key.PlatformId,
    109108                                        kvp.Key.LandProtectionActive,
    110109                                        kvp.Key.LandProtectionMultiplier,
     
    113112                                        foreach (Vector3i v in kvp.Value) {
    114113                                                if (parseableOutput) {
    115                                                         SdtdConsole.Instance.Output ("LandProtectionOf: id=" + kvp.Key.SteamID +
     114                                                        SdtdConsole.Instance.Output ("LandProtectionOf: id=" + kvp.Key.PlatformId +
    116115                                                                                     ", playerName=" + kvp.Key.Name + ", location=" + v);
    117116                                                } else {
     
    122121                        }
    123122
    124                         if (string.IsNullOrEmpty (steamIdFilter)) {
     123                        if (userIdFilter == null) {
    125124                                SdtdConsole.Instance.Output ("Total of " + ppl.m_lpBlockMap.Count + " keystones in the game");
    126125                        }
  • binary-improvements/AllocsCommands/Commands/RemoveLandProtection.cs

    r359 r369  
    1111                public override string GetHelp () {
    1212                        return "Usage:" +
    13                                "  1. removelandprotection <steamid>\n" +
     13                               "  1. removelandprotection <userid>\n" +
    1414                               "  2. removelandprotection <x> <y> <z>\n" +
    1515                               "  3. removelandprotection nearby [length]\n" +
    16                                "1. Remove all land claims owned by the user with the given SteamID\n" +
     16                               "1. Remove all land claims owned by the user with the given UserID\n" +
    1717                               "2. Remove only the claim block on the exactly given block position\n" +
    1818                               "3. Remove all claims in a square with edge length of 64 (or the optionally specified size) around the executing player";
     
    2525                private void removeById (string _id) {
    2626                        try {
    27                                 PersistentPlayerList ppl = GameManager.Instance.GetPersistentPlayerList ();
    28 
    29                                 if (_id.Length < 1 || !ppl.Players.ContainsKey (_id)) {
     27                                if (!PlatformUserIdentifierAbs.TryFromCombinedString (_id, out PlatformUserIdentifierAbs userId)) {
    3028                                        SdtdConsole.Instance.Output (
    3129                                                "Not a valid Steam ID or user has never logged on. Use \"listlandprotection\" to get a list of keystones.");
    3230                                        return;
    3331                                }
     32                               
     33                                PersistentPlayerList ppl = GameManager.Instance.GetPersistentPlayerList ();
    3434
    35                                 if (ppl.Players [_id].LPBlocks == null || ppl.Players [_id].LPBlocks.Count == 0) {
     35                                if (ppl.Players [userId].LPBlocks == null || ppl.Players [userId].LPBlocks.Count == 0) {
    3636                                        SdtdConsole.Instance.Output (
    3737                                                "Player does not own any keystones. Use \"listlandprotection\" to get a list of keystones.");
     
    4040
    4141                                List<BlockChangeInfo> changes = new List<BlockChangeInfo> ();
    42                                 foreach (Vector3i pos in ppl.Players [_id].LPBlocks) {
     42                                foreach (Vector3i pos in ppl.Players [userId].LPBlocks) {
    4343                                        BlockChangeInfo bci = new BlockChangeInfo (pos, new BlockValue (0), true, false);
    4444                                        changes.Add (bci);
     
    5858
    5959                private void removeByPosition (List<string> _coords) {
    60                         int x, y, z;
    61                         int.TryParse (_coords [0], out x);
    62                         int.TryParse (_coords [1], out y);
    63                         int.TryParse (_coords [2], out z);
     60                        int.TryParse (_coords [0], out int x);
     61                        int.TryParse (_coords [1], out int y);
     62                        int.TryParse (_coords [2], out int z);
    6463
    6564                        if (x == int.MinValue || y == int.MinValue || z == int.MinValue) {
     
    8180                        BlockChangeInfo bci = new BlockChangeInfo (v, new BlockValue (0), true, false);
    8281
    83                         List<BlockChangeInfo> changes = new List<BlockChangeInfo> ();
    84                         changes.Add (bci);
     82                        List<BlockChangeInfo> changes = new List<BlockChangeInfo> {bci};
    8583
    8684                        GameManager.Instance.SetBlocksRPC (changes);
     
    9088
    9189                public override void Execute (List<string> _params, CommandSenderInfo _senderInfo) {
    92                         try {
     90                        if (_params.Count > 0 && _params [0].EqualsCaseInsensitive ("nearby")) {
    9391                                if (_senderInfo.RemoteClientInfo != null) {
    94                                         if (_params.Count >= 1 && _params [0].EqualsCaseInsensitive ("nearby")) {
    95                                                 _params.Add (_senderInfo.RemoteClientInfo.playerId);
    96                                         }
     92                                        _params.Add (_senderInfo.RemoteClientInfo.entityId.ToString ());
     93                                } else if (_senderInfo.IsLocalGame && !GameManager.IsDedicatedServer) {
     94                                        _params.Add (GameManager.Instance.World.GetPrimaryPlayerId ().ToString ());
    9795                                }
    9896
    99                                 if (_params.Count > 0 && _params [0].EqualsCaseInsensitive ("nearby")) {
    100                                         try {
    101                                                 int closeToDistance = 32;
    102                                                 if (_params.Count == 3) {
    103                                                         if (!int.TryParse (_params [1], out closeToDistance)) {
    104                                                                 SdtdConsole.Instance.Output ("Given length is not an integer!");
    105                                                                 return;
    106                                                         }
    107 
    108                                                         closeToDistance /= 2;
     97                                try {
     98                                        int closeToDistance = 32;
     99                                        if (_params.Count == 3) {
     100                                                if (!int.TryParse (_params [1], out closeToDistance)) {
     101                                                        SdtdConsole.Instance.Output ("Given length is not an integer!");
     102                                                        return;
    109103                                                }
    110104
    111                                                 ClientInfo ci = ConsoleHelper.ParseParamSteamIdOnline (_params [_params.Count - 1]);
    112                                                 EntityPlayer ep = GameManager.Instance.World.Players.dict [ci.entityId];
    113                                                 Vector3i closeTo = new Vector3i (ep.GetPosition ());
    114                                                 LandClaimList.PositionFilter[] posFilters =
    115                                                         {LandClaimList.CloseToFilter2dRect (closeTo, closeToDistance)};
    116                                                 Dictionary<Player, List<Vector3i>> claims = LandClaimList.GetLandClaims (null, posFilters);
     105                                                closeToDistance /= 2;
     106                                        }
    117107
    118                                                 try {
    119                                                         List<BlockChangeInfo> changes = new List<BlockChangeInfo> ();
    120                                                         foreach (KeyValuePair<Player, List<Vector3i>> kvp in claims) {
    121                                                                 foreach (Vector3i v in kvp.Value) {
    122                                                                         BlockChangeInfo bci = new BlockChangeInfo (v, new BlockValue (0), true, false);
    123                                                                         changes.Add (bci);
    124                                                                 }
     108                                        int entityId = int.Parse (_params [_params.Count - 1]);
     109                                        EntityPlayer ep = GameManager.Instance.World.Players.dict [entityId];
     110                                        Vector3i closeTo = new Vector3i (ep.GetPosition ());
     111                                        LandClaimList.PositionFilter[] posFilters =
     112                                                {LandClaimList.CloseToFilter2dRect (closeTo, closeToDistance)};
     113                                        Dictionary<Player, List<Vector3i>> claims = LandClaimList.GetLandClaims (null, posFilters);
     114
     115                                        try {
     116                                                List<BlockChangeInfo> changes = new List<BlockChangeInfo> ();
     117                                                foreach (KeyValuePair<Player, List<Vector3i>> kvp in claims) {
     118                                                        foreach (Vector3i v in kvp.Value) {
     119                                                                BlockChangeInfo bci = new BlockChangeInfo (v, new BlockValue (0), true, false);
     120                                                                changes.Add (bci);
    125121                                                        }
     122                                                }
    126123
    127                                                         GameManager.Instance.SetBlocksRPC (changes);
    128                                                 } catch (Exception e) {
    129                                                         SdtdConsole.Instance.Output ("Error removing claims");
    130                                                         Log.Out ("Error in RemoveLandProtection.Run: " + e);
    131                                                 }
     124                                                GameManager.Instance.SetBlocksRPC (changes);
    132125                                        } catch (Exception e) {
    133                                                 SdtdConsole.Instance.Output ("Error getting current player's position");
     126                                                SdtdConsole.Instance.Output ("Error removing claims");
    134127                                                Log.Out ("Error in RemoveLandProtection.Run: " + e);
    135128                                        }
    136                                 } else if (_params.Count == 1) {
    137                                         removeById (_params [0]);
    138                                 } else if (_params.Count == 3) {
    139                                         removeByPosition (_params);
    140                                 } else {
    141                                         SdtdConsole.Instance.Output ("Illegal parameters");
     129                                } catch (Exception e) {
     130                                        SdtdConsole.Instance.Output ("Error getting current player's position");
     131                                        Log.Out ("Error in RemoveLandProtection.Run: " + e);
    142132                                }
    143                         } catch (Exception e) {
    144                                 Log.Out ("Error in RemoveLandProtection.Run: " + e);
     133                        } else if (_params.Count == 1) {
     134                                removeById (_params [0]);
     135                        } else if (_params.Count == 3) {
     136                                removeByPosition (_params);
     137                        } else {
     138                                SdtdConsole.Instance.Output ("Illegal parameters");
    145139                        }
    146140                }
  • binary-improvements/AllocsCommands/Commands/ShowInventory.cs

    r359 r369  
    1111                public override string GetHelp () {
    1212                        return "Usage:\n" +
    13                                "   showinventory <steam id / player name / entity id> [tag]\n" +
    14                                "Show the inventory of the player given by his SteamID, player name or\n" +
     13                               "   showinventory <user id / player name / entity id> [tag]\n" +
     14                               "Show the inventory of the player given by his UserID, player name or\n" +
    1515                               "entity id (as given by e.g. \"lpi\").\n" +
    1616                               "Optionally specify a tag that is included in each line of the output. In\n" +
     
    3030                        }
    3131
    32                         string steamid = PersistentContainer.Instance.Players.GetSteamID (_params [0], true);
     32                        PlatformUserIdentifierAbs steamid = PersistentContainer.Instance.Players.GetSteamID (_params [0], true);
    3333                        if (steamid == null) {
    3434                                SdtdConsole.Instance.Output (
  • binary-improvements/AllocsCommands/PrivateMessageConnections.cs

    r326 r369  
    44namespace AllocsFixes.CustomCommands {
    55        public class PrivateMessageConnections {
    6                 private static readonly Dictionary<CSteamID, CSteamID> senderOfLastPM = new Dictionary<CSteamID, CSteamID> ();
     6                private static readonly Dictionary<PlatformUserIdentifierAbs, PlatformUserIdentifierAbs> senderOfLastPM = new Dictionary<PlatformUserIdentifierAbs, PlatformUserIdentifierAbs> ();
    77
    88                public static void SetLastPMSender (ClientInfo _sender, ClientInfo _receiver) {
    9                         senderOfLastPM [_receiver.steamId] = _sender.steamId;
     9                        senderOfLastPM [_receiver.InternalId] = _sender.InternalId;
    1010                }
    1111
    1212                public static ClientInfo GetLastPMSenderForPlayer (ClientInfo _player) {
    13                         if (!senderOfLastPM.ContainsKey (_player.steamId)) {
     13                        if (!senderOfLastPM.TryGetValue (_player.InternalId, out PlatformUserIdentifierAbs recUserId)) {
    1414                                return null;
    1515                        }
    1616
    17                         CSteamID recSteamId = senderOfLastPM [_player.steamId];
    18                         ClientInfo recInfo = ConnectionManager.Instance.Clients.ForSteamId (recSteamId);
     17                        ClientInfo recInfo = ConnectionManager.Instance.Clients.ForUserId (recUserId);
    1918                        return recInfo;
    2019                }
  • binary-improvements/MapRendering/API.cs

    r367 r369  
    66                private Web webInstance;
    77               
    8                 public void InitMod () {
     8                public void InitMod (Mod _modInstance) {
    99                        ModEvents.GameStartDone.RegisterHandler (GameStartDone);
    1010                        ModEvents.GameShutdown.RegisterHandler (GameShutdown);
     
    1414                private void GameStartDone () {
    1515                        // ReSharper disable once ObjectCreationAsStatement
     16                        if (!ConnectionManager.Instance.IsServer) {
     17                                return;
     18                        }
     19                       
    1620                        webInstance = new Web ();
    1721                        LogBuffer.Init ();
     
    2327
    2428                private void GameShutdown () {
    25                         webInstance.Shutdown ();
     29                        webInstance?.Shutdown ();
    2630                        MapRendering.MapRendering.Shutdown ();
    2731                }
  • binary-improvements/MapRendering/MapRendering/MapRendering.cs

    r351 r369  
    2626
    2727                private MapRendering () {
    28                         Constants.MAP_DIRECTORY = GameUtils.GetSaveGameDir () + "/map";
     28                        Constants.MAP_DIRECTORY = GameIO.GetSaveGameDir () + "/map";
    2929
    3030                        lock (lockObject) {
     
    5959
    6060                public static void Shutdown () {
    61                         if (Instance.renderCoroutineRef != null) {
     61                        if (Instance?.renderCoroutineRef != null) {
    6262                                ThreadManager.StopCoroutine (Instance.renderCoroutineRef);
    6363                                Instance.renderCoroutineRef = null;
     
    6666
    6767                public static void RenderSingleChunk (Chunk _chunk) {
    68                         if (renderingEnabled) {
     68                        if (renderingEnabled && Instance != null) {
    6969                                // TODO: Replace with regular thread and a blocking queue / set
    7070                                ThreadPool.UnsafeQueueUserWorkItem (_o => {
     
    101101                        MicroStopwatch microStopwatch = new MicroStopwatch ();
    102102
    103                         string regionSaveDir = GameUtils.GetSaveGameRegionDir ();
     103                        string regionSaveDir = GameIO.GetSaveGameRegionDir ();
    104104                        RegionFileManager rfm = new RegionFileManager (regionSaveDir, regionSaveDir, 0, false);
    105105                        Texture2D fullMapTexture = null;
  • binary-improvements/MapRendering/Web/API/GetLandClaims.cs

    r351 r369  
    88                public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
    99                        int _permissionLevel) {
    10                         string requestedSteamID = string.Empty;
    11 
    12                         if (_req.QueryString ["steamid"] != null) {
    13                                 ulong lViewersSteamID;
    14                                 requestedSteamID = _req.QueryString ["steamid"];
    15                                 if (requestedSteamID.Length != 17 || !ulong.TryParse (requestedSteamID, out lViewersSteamID)) {
     10                        PlatformUserIdentifierAbs requestedUserId = null;
     11                        if (_req.QueryString ["userid"] != null) {
     12                                if (!PlatformUserIdentifierAbs.TryFromCombinedString (_req.QueryString ["userid"], out requestedUserId)) {
    1613                                        _resp.StatusCode = (int) HttpStatusCode.BadRequest;
    17                                         Web.SetResponseTextContent (_resp, "Invalid SteamID given");
     14                                        Web.SetResponseTextContent (_resp, "Invalid user id given");
    1815                                        return;
    1916                                }
     
    2118
    2219                        // default user, cheap way to avoid 'null reference exception'
    23                         _user = _user ?? new WebConnection ("", IPAddress.None, 0L);
     20                        PlatformUserIdentifierAbs userId = _user?.UserId;
    2421
    2522                        bool bViewAll = WebConnection.CanViewAllClaims (_permissionLevel);
     
    3229
    3330                        LandClaimList.OwnerFilter[] ownerFilters = null;
    34                         if (!string.IsNullOrEmpty (requestedSteamID) || !bViewAll) {
    35                                 if (!string.IsNullOrEmpty (requestedSteamID) && !bViewAll) {
     31                        if (requestedUserId != null || !bViewAll) {
     32                                if (requestedUserId != null && !bViewAll) {
    3633                                        ownerFilters = new[] {
    37                                                 LandClaimList.SteamIdFilter (_user.SteamID.ToString ()),
    38                                                 LandClaimList.SteamIdFilter (requestedSteamID)
     34                                                LandClaimList.UserIdFilter (userId),
     35                                                LandClaimList.UserIdFilter (requestedUserId)
    3936                                        };
    4037                                } else if (!bViewAll) {
    41                                         ownerFilters = new[] {LandClaimList.SteamIdFilter (_user.SteamID.ToString ())};
     38                                        ownerFilters = new[] {LandClaimList.UserIdFilter (userId)};
    4239                                } else {
    43                                         ownerFilters = new[] {LandClaimList.SteamIdFilter (requestedSteamID)};
     40                                        ownerFilters = new[] {LandClaimList.UserIdFilter (requestedUserId)};
    4441                                }
    4542                        }
     
    5047
    5148                        foreach (KeyValuePair<Player, List<Vector3i>> kvp in claims) {
    52 //                              try {
    53                                         JSONObject owner = new JSONObject ();
    54                                         claimOwners.Add (owner);
     49                                JSONObject owner = new JSONObject ();
     50                                claimOwners.Add (owner);
    5551
    56                                         owner.Add ("steamid", new JSONString (kvp.Key.SteamID));
    57                                         owner.Add ("claimactive", new JSONBoolean (kvp.Key.LandProtectionActive));
     52                                owner.Add ("steamid", new JSONString (kvp.Key.PlatformId.CombinedString));
     53                                owner.Add ("claimactive", new JSONBoolean (kvp.Key.LandProtectionActive));
    5854
    59                                         if (kvp.Key.Name.Length > 0) {
    60                                                 owner.Add ("playername", new JSONString (kvp.Key.Name));
    61                                         } else {
    62                                                 owner.Add ("playername", new JSONNull ());
    63                                         }
     55                                if (kvp.Key.Name.Length > 0) {
     56                                        owner.Add ("playername", new JSONString (kvp.Key.Name));
     57                                } else {
     58                                        owner.Add ("playername", new JSONNull ());
     59                                }
    6460
    65                                         JSONArray claimsJson = new JSONArray ();
    66                                         owner.Add ("claims", claimsJson);
     61                                JSONArray claimsJson = new JSONArray ();
     62                                owner.Add ("claims", claimsJson);
    6763
    68                                         foreach (Vector3i v in kvp.Value) {
    69                                                 JSONObject claim = new JSONObject ();
    70                                                 claim.Add ("x", new JSONNumber (v.x));
    71                                                 claim.Add ("y", new JSONNumber (v.y));
    72                                                 claim.Add ("z", new JSONNumber (v.z));
     64                                foreach (Vector3i v in kvp.Value) {
     65                                        JSONObject claim = new JSONObject ();
     66                                        claim.Add ("x", new JSONNumber (v.x));
     67                                        claim.Add ("y", new JSONNumber (v.y));
     68                                        claim.Add ("z", new JSONNumber (v.z));
    7369
    74                                                 claimsJson.Add (claim);
    75                                         }
    76 //                              } catch {
    77 //                              }
     70                                        claimsJson.Add (claim);
     71                                }
    7872                        }
    7973
  • binary-improvements/MapRendering/Web/API/GetPlayerInventories.cs

    r349 r369  
    88                public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
    99                        int _permissionLevel) {
    10 
    11                         bool showIconColor, showIconName;
    12                         GetPlayerInventory.GetInventoryArguments (_req, out showIconColor, out showIconName);
     10                        GetPlayerInventory.GetInventoryArguments (_req, out bool showIconColor, out bool showIconName);
    1311
    1412                        JSONArray AllInventoriesResult = new JSONArray ();
    1513
    16                         foreach (KeyValuePair<string, Player> kvp in PersistentContainer.Instance.Players.Dict) {
     14                        foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in PersistentContainer.Instance.Players.Dict) {
    1715                                Player p = kvp.Value;
    1816
     
    2220
    2321                                if (p.IsOnline) {
    24                                         AllInventoriesResult.Add (GetPlayerInventory.DoPlayer (kvp.Key, p, showIconColor, showIconName));
     22                                        AllInventoriesResult.Add (GetPlayerInventory.DoPlayer (kvp.Key.CombinedString, p, showIconColor, showIconName));
    2523                                }
    2624                        }
  • binary-improvements/MapRendering/Web/API/GetPlayerInventory.cs

    r348 r369  
    88                public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
    99                        int _permissionLevel) {
    10                         if (_req.QueryString ["steamid"] == null) {
     10                        if (_req.QueryString ["userid"] == null) {
    1111                                _resp.StatusCode = (int) HttpStatusCode.BadRequest;
    12                                 Web.SetResponseTextContent (_resp, "No SteamID given");
     12                                Web.SetResponseTextContent (_resp, "No user id given");
    1313                                return;
    1414                        }
    1515
    16                         string steamId = _req.QueryString ["steamid"];
    17 
    18                         Player p = PersistentContainer.Instance.Players [steamId, false];
    19                         if (p == null) {
    20                                 _resp.StatusCode = (int) HttpStatusCode.NotFound;
    21                                 Web.SetResponseTextContent (_resp, "Invalid or unknown SteamID given");
     16                        string userIdString = _req.QueryString ["userid"];
     17                        if (!PlatformUserIdentifierAbs.TryFromCombinedString (userIdString, out PlatformUserIdentifierAbs userId)) {
     18                                _resp.StatusCode = (int) HttpStatusCode.BadRequest;
     19                                Web.SetResponseTextContent (_resp, "Invalid user id given");
    2220                                return;
    2321                        }
    2422
    25                         bool showIconColor, showIconName;
    26                         GetInventoryArguments (_req, out showIconColor, out showIconName);
     23                        Player p = PersistentContainer.Instance.Players [userId, false];
     24                        if (p == null) {
     25                                _resp.StatusCode = (int) HttpStatusCode.NotFound;
     26                                Web.SetResponseTextContent (_resp, "Unknown user id given");
     27                                return;
     28                        }
    2729
    28                         JSONObject result = DoPlayer (steamId, p, showIconColor, showIconName);
     30                        GetInventoryArguments (_req, out bool showIconColor, out bool showIconName);
     31
     32                        JSONObject result = DoPlayer (userIdString, p, showIconColor, showIconName);
    2933
    3034                        WriteJSON (_resp, result);
     
    4953                        JSONArray belt = new JSONArray ();
    5054                        JSONObject equipment = new JSONObject ();
    51                         result.Add ("steamid", new JSONString (_steamId));
     55                        result.Add ("userid", new JSONString (_steamId));
    5256                        result.Add ("entityid", new JSONNumber (_player.EntityID));
    5357                        result.Add ("playername", new JSONString (_player.Name));
     
    8690
    8791                        for (int i = 0; i < slotindices.Length; i++) {
    88                                 if (_items != null && _items [slotindices [i]] != null) {
     92                                if (_items? [slotindices [i]] != null) {
    8993                                        InvItem item = _items [slotindices [i]];
    9094                                        _eq.Add (_slotname, GetJsonForItem (item, _showIconColor, _showIconName));
  • binary-improvements/MapRendering/Web/API/GetPlayerList.cs

    r351 r369  
    66using AllocsFixes.JSON;
    77using AllocsFixes.PersistentData;
    8 using UnityEngine.Profiling;
    98
    109namespace AllocsFixes.NetConnections.Servers.Web.API {
     
    1413
    1514#if ENABLE_PROFILER
    16                 private static readonly CustomSampler jsonSerializeSampler = CustomSampler.Create ("JSON_Build");
     15                private static readonly UnityEngine.Profiling.CustomSampler jsonSerializeSampler = UnityEngine.Profiling.CustomSampler.Create ("JSON_Build");
    1716#endif
    1817
     
    2019                        int _permissionLevel) {
    2120                        AdminTools admTools = GameManager.Instance.adminTools;
    22                         _user = _user ?? new WebConnection ("", IPAddress.None, 0L);
     21                        PlatformUserIdentifierAbs userId = _user?.UserId;
    2322
    2423                        bool bViewAll = WebConnection.CanViewAllPlayers (_permissionLevel);
     
    4746#endif
    4847
    49                         foreach (KeyValuePair<string, Player> kvp in playersList.Dict) {
     48                        foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in playersList.Dict) {
    5049                                Player p = kvp.Value;
    5150
    52                                 ulong player_steam_ID;
    53                                 if (!ulong.TryParse (kvp.Key, out player_steam_ID)) {
    54                                         player_steam_ID = 0L;
    55                                 }
    56 
    57                                 if (player_steam_ID == _user.SteamID || bViewAll) {
     51                                if (bViewAll || p.PlatformId.Equals (userId)) {
    5852                                        JSONObject pos = new JSONObject ();
    5953                                        pos.Add ("x", new JSONNumber (p.LastPosition.x));
     
    6256
    6357                                        JSONObject pJson = new JSONObject ();
    64                                         pJson.Add ("steamid", new JSONString (kvp.Key));
     58                                        pJson.Add ("steamid", new JSONString (kvp.Key.CombinedString));
    6559                                        pJson.Add ("entityid", new JSONNumber (p.EntityID));
    6660                                        pJson.Add ("ip", new JSONString (p.IP));
     
    7468                                        pJson.Add ("ping", new JSONNumber (p.IsOnline ? p.ClientInfo.ping : -1));
    7569
    76                                         JSONBoolean banned;
    77                                         if (admTools != null) {
    78                                                 banned = new JSONBoolean (admTools.IsBanned (kvp.Key));
    79                                         } else {
    80                                                 banned = new JSONBoolean (false);
    81                                         }
     70                                        JSONBoolean banned = admTools != null ? new JSONBoolean (admTools.IsBanned (kvp.Key, out _, out _)) : new JSONBoolean (false);
    8271
    8372                                        pJson.Add ("banned", banned);
  • binary-improvements/MapRendering/Web/API/GetPlayersLocation.cs

    r351 r369  
    99                        int _permissionLevel) {
    1010                        AdminTools admTools = GameManager.Instance.adminTools;
    11                         _user = _user ?? new WebConnection ("", IPAddress.None, 0L);
     11                        PlatformUserIdentifierAbs userId = _user?.UserId;
    1212
    1313                        bool listOffline = false;
     
    2222                        Players playersList = PersistentContainer.Instance.Players;
    2323
    24                         foreach (KeyValuePair<string, Player> kvp in playersList.Dict) {
     24                        foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in playersList.Dict) {
    2525                                if (admTools != null) {
    26                                         if (admTools.IsBanned (kvp.Key)) {
     26                                        if (admTools.IsBanned (kvp.Key, out _, out _)) {
    2727                                                continue;
    2828                                        }
     
    3232
    3333                                if (listOffline || p.IsOnline) {
    34                                         ulong player_steam_ID;
    35                                         if (!ulong.TryParse (kvp.Key, out player_steam_ID)) {
    36                                                 player_steam_ID = 0L;
    37                                         }
    38 
    39                                         if (player_steam_ID == _user.SteamID || bViewAll) {
     34                                        if (bViewAll || p.PlatformId.Equals (userId)) {
    4035                                                JSONObject pos = new JSONObject ();
    4136                                                pos.Add ("x", new JSONNumber (p.LastPosition.x));
     
    4439
    4540                                                JSONObject pJson = new JSONObject ();
    46                                                 pJson.Add ("steamid", new JSONString (kvp.Key));
     41                                                pJson.Add ("steamid", new JSONString (kvp.Key.CombinedString));
    4742
    4843                                                //                                      pJson.Add("entityid", new JSONNumber (p.EntityID));
  • binary-improvements/MapRendering/Web/API/GetPlayersOnline.cs

    r351 r369  
    1313                        foreach (KeyValuePair<int, EntityPlayer> current in w.Players.dict) {
    1414                                ClientInfo ci = ConnectionManager.Instance.Clients.ForEntityId (current.Key);
    15                                 Player player = PersistentContainer.Instance.Players [ci.playerId, false];
     15                                Player player = PersistentContainer.Instance.Players [ci.PlatformId, false];
    1616
    1717                                JSONObject pos = new JSONObject ();
     
    2121
    2222                                JSONObject p = new JSONObject ();
    23                                 p.Add ("steamid", new JSONString (ci.playerId));
     23                                p.Add ("steamid", new JSONString (ci.PlatformId.CombinedString));
    2424                                p.Add ("entityid", new JSONNumber (ci.entityId));
    2525                                p.Add ("ip", new JSONString (ci.ip));
     
    2828                                p.Add ("position", pos);
    2929
    30                                 // Deprecated!
    31                                 p.Add ("experience", new JSONNumber (-1));
    32 
    33                                 p.Add ("level", new JSONNumber (player != null ? player.Level : -1));
     30                                p.Add ("level", new JSONNumber (player?.Level ?? -1));
    3431                                p.Add ("health", new JSONNumber (current.Value.Health));
    3532                                p.Add ("stamina", new JSONNumber (current.Value.Stamina));
     
    3936                                p.Add ("score", new JSONNumber (current.Value.Score));
    4037
    41                                 p.Add ("totalplaytime", new JSONNumber (player != null ? player.TotalPlayTime : -1));
     38                                p.Add ("totalplaytime", new JSONNumber (player?.TotalPlayTime ?? -1));
    4239                                p.Add ("lastonline", new JSONString (player != null ? player.LastOnline.ToString ("s") : string.Empty));
    4340                                p.Add ("ping", new JSONNumber (ci.ping));
  • binary-improvements/MapRendering/Web/ConnectionHandler.cs

    r351 r369  
    22using System.Collections.Generic;
    33using System.Net;
     4using Platform.Steam;
    45
    56namespace AllocsFixes.NetConnections.Servers.Web {
     
    3637                public WebConnection LogIn (ulong _steamId, IPAddress _ip) {
    3738                        string sessionId = Guid.NewGuid ().ToString ();
    38                         WebConnection con = new WebConnection (sessionId, _ip, _steamId);
     39                        PlatformUserIdentifierAbs userId = new UserIdentifierSteam (_steamId);
     40                        WebConnection con = new WebConnection (sessionId, _ip, userId);
    3941                        connections.Add (sessionId, con);
    4042                        return con;
  • binary-improvements/MapRendering/Web/Handlers/ItemIconHandler.cs

    r367 r369  
    7777
    7878                                try {
    79                                         loadIconsFromFolder (Utils.GetGameDir ("Data/ItemIcons"), tintedIcons);
     79                                        loadIconsFromFolder (GameIO.GetGameDir ("Data/ItemIcons"), tintedIcons);
    8080                                } catch (Exception e) {
    8181                                        Log.Error ("Failed loading icons from base game");
  • binary-improvements/MapRendering/Web/Handlers/UserStatusHandler.cs

    r351 r369  
    1313
    1414                        result.Add ("loggedin", new JSONBoolean (_user != null));
    15                         result.Add ("username", new JSONString (_user != null ? _user.SteamID.ToString () : string.Empty));
     15                        result.Add ("username", new JSONString (_user != null ? _user.UserId.ToString () : string.Empty));
    1616
    1717                        JSONArray perms = new JSONArray ();
  • binary-improvements/MapRendering/Web/LogBuffer.cs

    r350 r369  
    11using System;
    22using System.Collections.Generic;
    3 using System.Text.RegularExpressions;
    43using UnityEngine;
    54
     
    87                private const int MAX_ENTRIES = 3000;
    98                private static LogBuffer instance;
    10 
    11                 private static readonly Regex logMessageMatcher =
    12                         new Regex (@"^([0-9]{4}-[0-9]{2}-[0-9]{2})T([0-9]{2}:[0-9]{2}:[0-9]{2}) ([0-9]+[,.][0-9]+) [A-Z]+ (.*)$");
    139
    1410                private readonly List<LogEntry> logEntries = new List<LogEntry> ();
     
    2319
    2420                private LogBuffer () {
    25                         Logger.Main.LogCallbacks += LogCallback;
     21                        Log.LogCallbacksExtended += LogCallback;
    2622                }
    2723
     
    7268                }
    7369
    74                 private void LogCallback (string _msg, string _trace, LogType _type) {
     70                private void LogCallback (string _formattedMsg, string _plainMsg, string _trace, LogType _type, DateTime _timestamp, long _uptime) {
    7571                        LogEntry le = new LogEntry ();
    7672
    77                         Match match = logMessageMatcher.Match (_msg);
    78                         if (match.Success) {
    79                                 le.date = match.Groups [1].Value;
    80                                 le.time = match.Groups [2].Value;
    81                                 le.uptime = match.Groups [3].Value;
    82                                 le.message = match.Groups [4].Value;
    83                         } else {
    84                                 DateTime dt = DateTime.Now;
    85                                 le.date = string.Format ("{0:0000}-{1:00}-{2:00}", dt.Year, dt.Month, dt.Day);
    86                                 le.time = string.Format ("{0:00}:{1:00}:{2:00}", dt.Hour, dt.Minute, dt.Second);
    87                                 le.uptime = "";
    88                                 le.message = _msg;
    89                         }
    90 
     73                        le.date = $"{_timestamp.Year:0000}-{_timestamp.Month:00}-{_timestamp.Day:00}";
     74                        le.time = $"{_timestamp.Hour:00}:{_timestamp.Minute:00}:{_timestamp.Second:00}";
     75                        le.uptime = _uptime.ToString ();
     76                        le.message = _plainMsg;
    9177                        le.trace = _trace;
    9278                        le.type = _type;
  • binary-improvements/MapRendering/Web/SSE/EventLog.cs

    r367 r369  
    11using System;
    2 using System.Net;
    3 using System.Text;
    4 using System.Text.RegularExpressions;
    52using AllocsFixes.JSON;
    63using UnityEngine;
     
    85namespace AllocsFixes.NetConnections.Servers.Web.SSE {
    96        public class EventLog : EventBase {
    10                 private static readonly Regex logMessageMatcher =
    11                         new Regex (@"^([0-9]{4}-[0-9]{2}-[0-9]{2})T([0-9]{2}:[0-9]{2}:[0-9]{2}) ([0-9]+[,.][0-9]+) [A-Z]+ (.*)$");
    12 
    137                public EventLog (SseHandler _parent) : base (_parent, _name: "log") {
    14                         Logger.Main.LogCallbacks += LogCallback;
     8                        Log.LogCallbacksExtended += LogCallback;
    159                }
    1610
    17 
    18                 private void LogCallback (string _msg, string _trace, LogType _type) {
    19                         Match match = logMessageMatcher.Match (_msg);
    20 
    21                         string date;
    22                         string time;
    23                         string uptime;
    24                         string message;
    25                         if (match.Success) {
    26                                 date = match.Groups [1].Value;
    27                                 time = match.Groups [2].Value;
    28                                 uptime = match.Groups [3].Value;
    29                                 message = match.Groups [4].Value;
    30                         } else {
    31                                 DateTime dt = DateTime.Now;
    32                                 date = $"{dt.Year:0000}-{dt.Month:00}-{dt.Day:00}";
    33                                 time = $"{dt.Hour:00}:{dt.Minute:00}:{dt.Second:00}";
    34                                 uptime = "";
    35                                 message = _msg;
    36                         }
     11                private void LogCallback (string _formattedMsg, string _plainMsg, string _trace, LogType _type, DateTime _timestamp, long _uptime) {
     12                        string date = $"{_timestamp.Year:0000}-{_timestamp.Month:00}-{_timestamp.Day:00}";
     13                        string time = $"{_timestamp.Hour:00}:{_timestamp.Minute:00}:{_timestamp.Second:00}";
     14                        string uptime = _uptime.ToString ();
     15                        string message = _plainMsg;
    3716
    3817                        JSONObject data = new JSONObject ();
     
    4625                        SendData ("logLine", data);
    4726                }
    48                
    4927        }
    5028}
  • binary-improvements/MapRendering/Web/Web.cs

    r367 r369  
    5959                                RegisterPathHandler ("/itemicons/", new ItemIconHandler (true));
    6060                                RegisterPathHandler ("/map/", new StaticHandler (
    61                                                 GameUtils.GetSaveGameDir () + "/map",
     61                                                GameIO.GetSaveGameDir () + "/map",
    6262                                                MapRendering.MapRendering.GetTileCache (),
    6363                                                false,
     
    111111                }
    112112
    113                 public void SendLog (string _text, string _trace, LogType _type) {
     113                public void SendLog (string _formattedMessage, string _plainMessage, string _trace, LogType _type, DateTime _timestamp, long _uptime) {
    114114                        // Do nothing, handled by LogBuffer internally
    115115                }
     
    248248                                if (con != null) {
    249249                                        _con = con;
    250                                         return GameManager.Instance.adminTools.GetUserPermissionLevel (_con.SteamID.ToString ());
     250                                        return GameManager.Instance.adminTools.GetUserPermissionLevel (_con.UserId);
    251251                                }
    252252                        }
     
    270270                                                WebConnection con = connectionHandler.LogIn (id, _req.RemoteEndPoint.Address);
    271271                                                _con = con;
    272                                                 int level = GameManager.Instance.adminTools.GetUserPermissionLevel (id.ToString ());
     272                                                int level = GameManager.Instance.adminTools.GetUserPermissionLevel (con.UserId);
    273273                                                Log.Out ("Steam OpenID login from {0} with ID {1}, permission level {2}",
    274                                                         remoteEndpointString, con.SteamID, level);
     274                                                        remoteEndpointString, con.UserId, level);
    275275                                                return level;
    276276                                        }
  • binary-improvements/MapRendering/Web/WebCommandResult.cs

    r332 r369  
    9595                }
    9696
    97                 public void SendLog (string _msg, string _trace, LogType _type) {
     97                public void SendLog (string _formattedMessage, string _plainMessage, string _trace, LogType _type, DateTime _timestamp, long _uptime) {
    9898                        //throw new NotImplementedException ();
    9999                }
  • binary-improvements/MapRendering/Web/WebConnection.cs

    r332 r369  
    1111                private readonly string conDescription;
    1212
    13                 public WebConnection (string _sessionId, IPAddress _endpoint, ulong _steamId) {
     13                public WebConnection (string _sessionId, IPAddress _endpoint, PlatformUserIdentifierAbs _userId) {
    1414                        SessionID = _sessionId;
    1515                        Endpoint = _endpoint;
    16                         SteamID = _steamId;
     16                        UserId = _userId;
    1717                        login = DateTime.Now;
    1818                        lastAction = login;
     
    2020                }
    2121
    22                 public string SessionID { get; private set; }
     22                public string SessionID { get; }
    2323
    24                 public IPAddress Endpoint { get; private set; }
     24                public IPAddress Endpoint { get; }
    2525
    26                 public ulong SteamID { get; private set; }
     26                public PlatformUserIdentifierAbs UserId { get; }
    2727
    28                 public TimeSpan Age {
    29                         get { return DateTime.Now - lastAction; }
    30                 }
     28                public TimeSpan Age => DateTime.Now - lastAction;
    3129
    3230                public static bool CanViewAllPlayers (int _permissionLevel) {
     
    5452                }
    5553
    56                 public override void SendLog (string _msg, string _trace, LogType _type) {
     54                public override void SendLog (string _formattedMsg, string _plainMsg, string _trace, LogType _type, DateTime _timestamp, long _uptime) {
    5755                        // Do nothing, handled by LogBuffer
    5856                }
  • binary-improvements/MapRendering/Web/WebPermissions.cs

    r351 r369  
    191191                        modules.Clear ();
    192192
    193                         if (!Utils.FileExists (GetFullPath ())) {
     193                        if (!File.Exists (GetFullPath ())) {
    194194                                Log.Out (string.Format ("Permissions file '{0}' not found, creating.", GetFileName ()));
    195195                                Save ();
  • binary-improvements/MapRendering/WebAndMapRendering.csproj

    r367 r369  
    3131  </PropertyGroup>
    3232  <ItemGroup>
     33    <Reference Include="Assembly-CSharp-firstpass, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
     34      <HintPath>..\7dtd-binaries\Assembly-CSharp-firstpass.dll</HintPath>
     35      <Private>False</Private>
     36    </Reference>
    3337    <Reference Include="LogLibrary">
    3438      <HintPath>..\7dtd-binaries\LogLibrary.dll</HintPath>
  • binary-improvements/webserver/index.html

    r297 r369  
    159159        <div id="playerInventoryDialog" title="Player inventory">
    160160                Player: <span id="invPlayerName"></span><br/>
    161                 SteamID: <span id="invSteamId"></span><br/>
     161                UserID: <span id="invSteamId"></span><br/>
    162162                <br/>
    163163                <table>
  • binary-improvements/webserver/js/inventory_dialog.js

    r361 r369  
    4444//      }
    4545       
    46         $.getJSON( "../api/getplayerinventory", { steamid: steamid  })
     46        $.getJSON( "../api/getplayerinventory", { userid: steamid  })
    4747        .done(function(data) {
    4848                $("#invPlayerName").text(data.playername);
  • binary-improvements/webserver/js/players.js

    r320 r369  
    2424        // Define columns to be shown
    2525        var columns = [
    26                 [ "steamid", "SteamID" ],
     26                [ "steamid", "UserID" ],
    2727                [ "entityid", "EntityID" ],
    2828                [ "ip", "IP" ],
Note: See TracChangeset for help on using the changeset viewer.