Ignore:
Timestamp:
Jun 12, 2023, 3:21:34 PM (17 months ago)
Author:
alloc
Message:

24_27_41

Location:
binary-improvements/7dtd-server-fixes/src
Files:
4 edited

Legend:

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

    r443 r446  
    2323
    2424                public void SavePlayerData (ClientInfo _cInfo, PlayerDataFile _playerDataFile) {
    25                         PersistentContainer.Instance.Players [_cInfo.InternalId, true].Update (_cInfo, _playerDataFile);
     25                        PersistentContainer.Instance.Players.GetOrCreate (_cInfo.InternalId, _cInfo.PlatformId, _cInfo.CrossplatformId).Update (_cInfo, _playerDataFile);
    2626                }
    2727
     
    4343
    4444                public void PlayerDisconnected (ClientInfo _cInfo, bool _bShutdown) {
    45                         Player p = PersistentContainer.Instance.Players [_cInfo.InternalId, false];
     45                        Player p = PersistentContainer.Instance.Players.GetByInternalId (_cInfo.InternalId);
    4646                        if (p != null) {
    4747                                p.SetOffline ();
     
    5454
    5555                public void PlayerSpawned (ClientInfo _cInfo, RespawnType _respawnReason, Vector3i _spawnPos) {
    56                         PersistentContainer.Instance.Players [_cInfo.InternalId, true].SetOnline (_cInfo);
     56                        PersistentContainer.Instance.Players.GetOrCreate (_cInfo.InternalId, _cInfo.PlatformId, _cInfo.CrossplatformId).SetOnline (_cInfo);
    5757                        PersistentContainer.Instance.Save ();
    5858                }
  • binary-improvements/7dtd-server-fixes/src/LandClaimList.cs

    r369 r446  
    4141
    4242                        foreach (KeyValuePair<PersistentPlayerData, List<Vector3i>> kvp in owners) {
    43                                 Player p = PersistentContainer.Instance.Players [kvp.Key.UserIdentifier, false];
     43                                Player p = PersistentContainer.Instance.Players.GetByInternalId (kvp.Key.UserIdentifier);
    4444                                if (p == null) {
    45                                         p = new Player (kvp.Key.UserIdentifier);
     45                                        PlatformUserIdentifierAbs platformId = kvp.Key.PlatformUserIdentifier;
     46                                        PlatformUserIdentifierAbs internalId = kvp.Key.UserIdentifier;
     47                                        PlatformUserIdentifierAbs crossPlatformId = platformId.Equals (internalId) ? null : internalId;
     48                                        p = new Player (internalId, platformId, crossPlatformId);
    4649                                }
    4750
     
    6871
    6972                public static OwnerFilter UserIdFilter (PlatformUserIdentifierAbs _userId) {
    70                         return _p => _p.PlatformId.Equals (_userId);
     73                        return _p => _p.InternalId.Equals (_userId);
    7174                }
    7275
  • binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs

    r443 r446  
    55        [Serializable]
    66        public class Player {
    7                 private readonly PlatformUserIdentifierAbs platformId;
    87                private int entityId;
    98                private string name;
     
    2625                [NonSerialized] private ClientInfo clientInfo;
    2726
    28                 public PlatformUserIdentifierAbs PlatformId => platformId;
     27                public PlatformUserIdentifierAbs InternalId { get; }
     28                public PlatformUserIdentifierAbs PlatformId { get; }
     29                public PlatformUserIdentifierAbs CrossPlatformId { get; }
    2930
    3031                public int EntityID => entityId;
     
    3435                public string IP => ip ?? string.Empty;
    3536
    36                 public Inventory Inventory => inventory ?? (inventory = new Inventory ());
     37                public Inventory Inventory => inventory ??= new Inventory ();
    3738
    3839                public bool IsOnline => clientInfo != null;
     
    5859                public bool LandProtectionActive =>
    5960                        GameManager.Instance.World.IsLandProtectionValidForPlayer (GameManager.Instance
    60                                 .GetPersistentPlayerList ().GetPlayerData (PlatformId));
     61                                .GetPersistentPlayerList ().GetPlayerData (InternalId));
    6162
    6263                public float LandProtectionMultiplier =>
    6364                        GameManager.Instance.World.GetLandProtectionHardnessModifierForPlayer (GameManager.Instance
    64                                 .GetPersistentPlayerList ().GetPlayerData (PlatformId));
     65                                .GetPersistentPlayerList ().GetPlayerData (InternalId));
    6566
    6667                public float Level {
     
    107108                }
    108109
    109                 public Player (PlatformUserIdentifierAbs _platformId) {
    110                         platformId = _platformId;
     110                public Player (PlatformUserIdentifierAbs _internalId, PlatformUserIdentifierAbs _platformId, PlatformUserIdentifierAbs _crossPlatformId) {
     111                        InternalId = _internalId;
     112                        PlatformId = _platformId;
     113                        CrossPlatformId = _crossPlatformId;
    111114                        inventory = new Inventory ();
    112115                }
     
    117120                        }
    118121
    119                         Log.Out ("Player set to offline: " + platformId);
     122                        Log.Out ("Player set to offline: " + InternalId);
    120123                        lastOnline = DateTime.Now;
    121124                        try {
     
    133136
    134137                public void SetOnline (ClientInfo _ci) {
    135                         Log.Out ("Player set to online: " + platformId);
     138                        Log.Out ("Player set to online: " + InternalId);
    136139                        clientInfo = _ci;
    137140            entityId = _ci.entityId;
  • binary-improvements/7dtd-server-fixes/src/PersistentData/Players.cs

    r369 r446  
    22using System.Collections.Generic;
    33using System.Text.RegularExpressions;
    4 using Platform.Steam;
    54
    65namespace AllocsFixes.PersistentData {
     
    98                public readonly Dictionary<PlatformUserIdentifierAbs, Player> Dict = new Dictionary<PlatformUserIdentifierAbs, Player> ();
    109
    11                 public Player this [PlatformUserIdentifierAbs _platformId, bool _create] {
    12                         get {
    13                                 if (_platformId == null) {
    14                                         return null;
    15                                 }
     10                public int Count => Dict.Count;
    1611
    17                                 if (Dict.TryGetValue (_platformId, out Player pOld)) {
    18                                         return pOld;
    19                                 }
     12                public Player GetOrCreate (PlatformUserIdentifierAbs _internalId, PlatformUserIdentifierAbs _platformId, PlatformUserIdentifierAbs _crossPlatformId) {
     13                        if (_internalId == null) {
     14                                return null;
     15                        }
    2016
    21                                 if (!_create) {
    22                                         return null;
    23                                 }
     17                        if (Dict.TryGetValue (_internalId, out Player pOld)) {
     18                                return pOld;
     19                        }
    2420
    25                                 Log.Out ("Created new player entry for ID: " + _platformId);
    26                                 Player p = new Player (_platformId);
    27                                 Dict.Add (_platformId, p);
    28                                 return p;
    29                         }
     21                        Log.Out ("Created new player entry for ID: " + _internalId);
     22                        Player p = new Player (_internalId, _platformId, _crossPlatformId);
     23                        Dict.Add (_internalId, p);
     24                        return p;
    3025                }
    3126
    32                 public int Count => Dict.Count;
     27                public Player GetByInternalId (PlatformUserIdentifierAbs _internalId) {
     28                        if (_internalId == null) {
     29                                return null;
     30                        }
    3331
    34                 public PlatformUserIdentifierAbs GetSteamID (string _nameOrId, bool _ignoreColorCodes) {
     32                        return Dict.TryGetValue (_internalId, out Player pOld) ? pOld : null;
     33                }
     34
     35                public Player GetByUserId (PlatformUserIdentifierAbs _userId) {
     36                        foreach ((_, Player p) in Dict) {
     37                                if (p.PlatformId.Equals (_userId) || p.CrossPlatformId.Equals (_userId)) {
     38                                        return p;
     39                                }
     40                        }
     41
     42                        return null;
     43                }
     44
     45                public Player GetByString (string _nameOrId, bool _ignoreColorCodes) {
    3546                        if (string.IsNullOrEmpty (_nameOrId)) {
    3647                                return null;
     
    3849
    3950                        if (PlatformUserIdentifierAbs.TryFromCombinedString (_nameOrId, out PlatformUserIdentifierAbs userId)) {
    40                                 return userId;
     51                                return GetByUserId (userId);
    4152                        }
    4253
    4354                        if (int.TryParse (_nameOrId, out int entityId)) {
    44                                 foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in Dict) {
    45                                         if (kvp.Value.IsOnline && kvp.Value.EntityID == entityId) {
    46                                                 return kvp.Key;
     55                                foreach ((_, Player p) in Dict) {
     56                                        if (p.IsOnline && p.EntityID == entityId) {
     57                                                return p;
    4758                                        }
    4859                                }
    4960                        }
    5061
    51                         foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in Dict) {
    52                                 string name = kvp.Value.Name;
     62                        foreach ((_, Player p) in Dict) {
     63                                string name = p.Name;
    5364                                if (_ignoreColorCodes) {
    5465                                        name = Regex.Replace (name, "\\[[0-9a-fA-F]{6}\\]", "");
    5566                                }
    5667
    57                                 if (kvp.Value.IsOnline && name.EqualsCaseInsensitive (_nameOrId)) {
    58                                         return kvp.Key;
     68                                if (p.IsOnline && name.EqualsCaseInsensitive (_nameOrId)) {
     69                                        return p;
    5970                                }
    6071                        }
Note: See TracChangeset for help on using the changeset viewer.