using System; using System.Collections.Generic; using System.Text; using UnityEngine; public class EventPartnerStatuePlayfabData { public int EventId; public int TicketCount; public int BuffFreeMultiplier; public DateTime BuffPointExpiryTime; // public List PartnerIdList; public Dictionary DisplayScoreMap; public Dictionary RobotScoreMap; public bool IsFinalRewardClaimed; public float LureInflationRate; public bool IsEnableAutoMatch; /// UTC 时间,开启自动匹配时记录;用于关闭时的 CD 与 Gather 活动一致。 public DateTime LastAutoMatchTimeUtc = DateTime.MinValue; private const char Pipe = '|', Comma = ','; public const string Key = "EventPartnerStatueData"; public string Serialized() { var sb = new StringBuilder(); sb.Append(EventId).Append(Pipe); sb.Append(TicketCount).Append(Pipe); sb.Append(BuffFreeMultiplier).Append(Pipe); sb.Append(BuffPointExpiryTime.ToString()).Append(Pipe); sb.Append(IsFinalRewardClaimed.ToString()).Append(Pipe); sb.Append(LureInflationRate).Append(Pipe); foreach (var kv in DisplayScoreMap) sb.Append(kv.Key).Append(Comma).Append(kv.Value.self).Append(Comma).Append(kv.Value.partner).Append(Comma); sb.Append(Pipe); foreach (var kv in RobotScoreMap) sb.Append(kv.Key).Append(Comma).Append(kv.Value.self).Append(Comma).Append(kv.Value.bot).Append(Comma); sb.Append(Pipe); sb.Append(IsEnableAutoMatch.ToString()).Append(Pipe); sb.Append(LastAutoMatchTimeUtc.ToString("o")); return sb.ToString(); } /// /// Will return null if deserialization failed /// /// String from playfab /// Playfab Data. Null if fails. public static EventPartnerStatuePlayfabData Deserialize(string s) { try { var arr = s.Trim(Pipe).Split(Pipe); var res = new EventPartnerStatuePlayfabData(); res.EventId = int.Parse(arr[0]); res.TicketCount = int.Parse(arr[1]); res.BuffFreeMultiplier = int.Parse(arr[2]); res.BuffPointExpiryTime = DateTime.Parse(arr[3]); res.DisplayScoreMap = new Dictionary(); res.RobotScoreMap = new Dictionary(); res.IsFinalRewardClaimed = bool.Parse(arr[4]); res.LureInflationRate = float.Parse(arr[5]); if (arr.Length <= 6) return res; if (!string.IsNullOrEmpty(arr[6])) { var displayScoreStringList = arr[6].Trim(Comma).Split(Comma); for (int i = 0; i + 2 < displayScoreStringList.Length; i += 3) res.DisplayScoreMap.Add(displayScoreStringList[i], (int.Parse(displayScoreStringList[i + 1]), int.Parse(displayScoreStringList[i + 2]))); } if (arr.Length <= 7) return res; if (!string.IsNullOrEmpty(arr[7])) { var robotScoreStringList = arr[7].Trim(Comma).Split(Comma); for (int i = 0; i + 2 < robotScoreStringList.Length; i += 3) res.RobotScoreMap.Add(robotScoreStringList[i], (int.Parse(robotScoreStringList[i + 1]), int.Parse(robotScoreStringList[i + 2]))); } if (arr.Length > 8) res.IsEnableAutoMatch = bool.TryParse(arr[8], out var v) && v; if (arr.Length > 9 && !string.IsNullOrEmpty(arr[9]) && DateTime.TryParse(arr[9], null, System.Globalization.DateTimeStyles.RoundtripKind, out var lastAm)) res.LastAutoMatchTimeUtc = lastAm; return res; } catch (Exception e) { Debug.LogWarning(e); return null; } } public static EventPartnerStatuePlayfabData Load() { var s = PlayFabMgr.Instance.GetLocalData(Key); return Deserialize(s); } public void Save() { var s = Serialized(); PlayFabMgr.Instance.UpdateUserDataValue(Key, s); } }