| [253] | 1 | using System; | 
|---|
|  | 2 | using System.Collections.Generic; | 
|---|
|  | 3 | using System.Text.RegularExpressions; | 
|---|
| [492] | 4 | using Platform.EOS; | 
|---|
| [253] | 5 |  | 
|---|
| [325] | 6 | namespace AllocsFixes.PersistentData { | 
|---|
| [253] | 7 | [Serializable] | 
|---|
|  | 8 | public class Players { | 
|---|
| [369] | 9 | public readonly Dictionary<PlatformUserIdentifierAbs, Player> Dict = new Dictionary<PlatformUserIdentifierAbs, Player> (); | 
|---|
| [253] | 10 |  | 
|---|
| [446] | 11 | public int Count => Dict.Count; | 
|---|
| [325] | 12 |  | 
|---|
| [446] | 13 | public Player GetOrCreate (PlatformUserIdentifierAbs _internalId, PlatformUserIdentifierAbs _platformId, PlatformUserIdentifierAbs _crossPlatformId) { | 
|---|
|  | 14 | if (_internalId == null) { | 
|---|
|  | 15 | return null; | 
|---|
|  | 16 | } | 
|---|
| [325] | 17 |  | 
|---|
| [492] | 18 | if (_internalId is UserIdentifierEos eosId) { | 
|---|
|  | 19 | string _ = eosId.ProductUserIdString; | 
|---|
|  | 20 | } | 
|---|
|  | 21 |  | 
|---|
| [446] | 22 | if (Dict.TryGetValue (_internalId, out Player pOld)) { | 
|---|
|  | 23 | return pOld; | 
|---|
|  | 24 | } | 
|---|
| [325] | 25 |  | 
|---|
| [455] | 26 | Log.Out ($"Created new player entry for ID: {_internalId}"); | 
|---|
| [446] | 27 | Player p = new Player (_internalId, _platformId, _crossPlatformId); | 
|---|
|  | 28 | Dict.Add (_internalId, p); | 
|---|
|  | 29 | return p; | 
|---|
|  | 30 | } | 
|---|
|  | 31 |  | 
|---|
|  | 32 | public Player GetByInternalId (PlatformUserIdentifierAbs _internalId) { | 
|---|
|  | 33 | if (_internalId == null) { | 
|---|
|  | 34 | return null; | 
|---|
| [253] | 35 | } | 
|---|
| [446] | 36 |  | 
|---|
|  | 37 | return Dict.TryGetValue (_internalId, out Player pOld) ? pOld : null; | 
|---|
| [253] | 38 | } | 
|---|
|  | 39 |  | 
|---|
| [446] | 40 | public Player GetByUserId (PlatformUserIdentifierAbs _userId) { | 
|---|
|  | 41 | foreach ((_, Player p) in Dict) { | 
|---|
|  | 42 | if (p.PlatformId.Equals (_userId) || p.CrossPlatformId.Equals (_userId)) { | 
|---|
|  | 43 | return p; | 
|---|
|  | 44 | } | 
|---|
|  | 45 | } | 
|---|
| [253] | 46 |  | 
|---|
| [446] | 47 | return null; | 
|---|
|  | 48 | } | 
|---|
|  | 49 |  | 
|---|
|  | 50 | public Player GetByString (string _nameOrId, bool _ignoreColorCodes) { | 
|---|
| [369] | 51 | if (string.IsNullOrEmpty (_nameOrId)) { | 
|---|
| [253] | 52 | return null; | 
|---|
|  | 53 | } | 
|---|
|  | 54 |  | 
|---|
| [369] | 55 | if (PlatformUserIdentifierAbs.TryFromCombinedString (_nameOrId, out PlatformUserIdentifierAbs userId)) { | 
|---|
| [446] | 56 | return GetByUserId (userId); | 
|---|
| [325] | 57 | } | 
|---|
| [253] | 58 |  | 
|---|
| [369] | 59 | if (int.TryParse (_nameOrId, out int entityId)) { | 
|---|
| [446] | 60 | foreach ((_, Player p) in Dict) { | 
|---|
|  | 61 | if (p.IsOnline && p.EntityID == entityId) { | 
|---|
|  | 62 | return p; | 
|---|
| [253] | 63 | } | 
|---|
|  | 64 | } | 
|---|
|  | 65 | } | 
|---|
| [325] | 66 |  | 
|---|
| [446] | 67 | foreach ((_, Player p) in Dict) { | 
|---|
|  | 68 | string name = p.Name; | 
|---|
| [325] | 69 | if (_ignoreColorCodes) { | 
|---|
|  | 70 | name = Regex.Replace (name, "\\[[0-9a-fA-F]{6}\\]", ""); | 
|---|
|  | 71 | } | 
|---|
|  | 72 |  | 
|---|
| [446] | 73 | if (p.IsOnline && name.EqualsCaseInsensitive (_nameOrId)) { | 
|---|
|  | 74 | return p; | 
|---|
| [325] | 75 | } | 
|---|
|  | 76 | } | 
|---|
|  | 77 |  | 
|---|
| [253] | 78 | return null; | 
|---|
|  | 79 | } | 
|---|
|  | 80 | } | 
|---|
| [325] | 81 | } | 
|---|