Files
ft/Client/Assets/Scripts/UI/PartnerStatue/EventPartnerStatuePlayfabData.cs
2026-06-29 21:18:33 +08:00

110 lines
4.2 KiB
C#

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<string> PartnerIdList;
public Dictionary<string, (int self, int partner)> DisplayScoreMap;
public Dictionary<string, (int self, int bot)> RobotScoreMap;
public bool IsFinalRewardClaimed;
public float LureInflationRate;
public bool IsEnableAutoMatch;
/// <summary>UTC 时间,开启自动匹配时记录;用于关闭时的 CD 与 Gather 活动一致。</summary>
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();
}
/// <summary>
/// Will return null if deserialization failed
/// </summary>
/// <param name="s">String from playfab</param>
/// <returns>Playfab Data. Null if fails.</returns>
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<string, (int self, int partner)>();
res.RobotScoreMap = new Dictionary<string, (int self, int bot)>();
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);
}
}