feat(upserver): 保存M2客户端KV迁移至本人统计写检查点

保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。
保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。

验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。
包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
This commit is contained in:
Liubing\LB
2026-09-30 19:19:05 +08:00
parent 1c0cdf7a99
commit 6813da149a
511 changed files with 151858 additions and 2376 deletions

View File

@@ -1,4 +1,4 @@
using Activity.Services;
using Activity.Services;
using asap.core;
using Assets.Scripts.UI.SocialRush;
using cfg;
@@ -56,6 +56,17 @@ namespace GameCore
{
public partial class FishingEventData : IDisposable
{
game.PlayerDataStorage.IPlayerSaveStore boundSaveStore;
[Inject] public game.PlayerDataStorage.IPlayerSaveStore playerSaveStore
{
get => boundSaveStore;
set
{
ThanksGivingPackData.BindSaveStore(value);
ChainPackWithProgressMigrationData.BindSaveStore(value);
boundSaveStore = value;
}
}
private cfg.Tables _tables;
private MMTService _mmtService;
private IEventTokenService _eventTokenService;
@@ -578,7 +589,7 @@ namespace GameCore
id = t.ID,
endTime = ZZTimeHelper.UtcNow().UtcNowOffset().AddSeconds(fixedTime.StartTime).ToString(),
};
PlayFabMgr.Instance.UpdateUserDataValue("FixedTimeEventDic", JsonMapper.ToJson(fixedTimeEventDic));
playerSaveStore.Write("FixedTimeEventDic", JsonMapper.ToJson(fixedTimeEventDic)).RequireAccepted();
}
}
switch (t.Type)
@@ -846,7 +857,7 @@ namespace GameCore
private bool Condition_NoRechargeSeconds(int timeSeconds)
{
var lastPaymentStr = PlayFabMgr.Instance.GetLocalData("LastPaymentTime");
var lastPaymentStr = playerSaveStore.Read("LastPaymentTime").ValueOrThrow();
DateTime curTime = ZZTimeHelper.UtcNow().UtcNowOffset();
DateTime endTime = curTime;
if (string.IsNullOrEmpty(lastPaymentStr) || !lastPaymentStr.Contains("__"))
@@ -866,7 +877,8 @@ namespace GameCore
}
public static bool Condition_NoRechargeDay(int timeDay = 7)
{
var lastPaymentStr = PlayFabMgr.Instance.GetLocalData("LastPaymentTime");
var store = GContext.container.Resolve<FishingEventData>().playerSaveStore;
var lastPaymentStr = store.Read("LastPaymentTime").ValueOrThrow();
if (!string.IsNullOrEmpty(lastPaymentStr) && lastPaymentStr.Contains("__"))
return false;
DateTime curTime = ZZTimeHelper.UtcNow();
@@ -1052,7 +1064,7 @@ namespace GameCore
case 2:
// Debug.Log($"[EventBreak] Id {e.ID} activated.");
EventBreakAct.Ctx = EventBreakTableContext.ReadTables(e.ID, GContext.container.Resolve<Tables>());
var playfabData = EventBreakPfData.Deserialize(PlayFabMgr.Instance.GetLocalData(EventBreakPfData.PfKey));
var playfabData = EventBreakPfData.Deserialize(playerSaveStore.Read(EventBreakPfData.PfKey).ValueOrThrow());
var eventBreakModel = GContext.container.Resolve<DrillModel>();
if (eventBreakModel == null)
{
@@ -1074,7 +1086,7 @@ namespace GameCore
break;
case 4:
var canModel = GContext.container.Resolve<EventCanModel>();
var ecPlayfabString = PlayFabMgr.Instance.GetLocalData(EventCanPlayfabData.PlayFabKey);
var ecPlayfabString = playerSaveStore.Read(EventCanPlayfabData.PlayFabKey).ValueOrThrow();
var ecPpString = PlayerPrefs.GetString(EventCanPlayerPreferenceData.PlayerPrefsKey);
var ecPlayfabData = EventCanPlayfabData.Deserialize(ecPlayfabString);
var ecPlayerPrefsData = EventCanPlayerPreferenceData.Deserialize(ecPpString);
@@ -1150,7 +1162,7 @@ namespace GameCore
SetTurntable(t);
break;
case 3:
var pfString = PlayFabMgr.Instance.GetLocalData(EventLuckMagicPlayfabData.Key);
var pfString = playerSaveStore.Read(EventLuckMagicPlayfabData.Key).ValueOrThrow();
var pfData = EventLuckMagicPlayfabData.Deserialize(pfString);
var ppString = PlayerPrefs.GetString(EventLuckMagicPlayerPreferenceData.Key);
var ppData = EventLuckMagicPlayerPreferenceData.Deserialize(ppString);
@@ -1339,7 +1351,7 @@ namespace GameCore
SaveTransitionData(turntableEvent.ID, TurntableCoupon);
}
TurntableRed();
PlayFabMgr.Instance.UpdateUserDataValue("TurntableRoll", TurntableCoupon.ToString());
playerSaveStore.Write("TurntableRoll", TurntableCoupon.ToString()).RequireAccepted();
}
public void RewardTurntableRoll(int value, bool remote = true)
{
@@ -1358,7 +1370,7 @@ namespace GameCore
.AddContent("change_num", value);
}
#endif
PlayFabMgr.Instance.UpdateUserDataValue("TurntableRoll", TurntableCoupon.ToString(), remote);
playerSaveStore.Write("TurntableRoll", TurntableCoupon.ToString(), remote).RequireAccepted();
}
public void TurntableRed()
@@ -1443,7 +1455,7 @@ namespace GameCore
void SetLimitedTimeEventDic()
{
PlayFabMgr.Instance.UpdateUserDataValue("LimitedTimeEventDic", Newtonsoft.Json.JsonConvert.SerializeObject(limitedTimeEventDic));
playerSaveStore.Write("LimitedTimeEventDic", Newtonsoft.Json.JsonConvert.SerializeObject(limitedTimeEventDic)).RequireAccepted();
}
#region 目标奖励活动
@@ -1615,10 +1627,14 @@ namespace GameCore
public async Task<bool> CheckResourceLoadQueue(string key, List<string> label)
{
var store = playerSaveStore;
if (!store.IsCurrent) return false;
if (!collectingTargetResoure)
{
ILoadResourceService loadResourceService = GContext.container.Resolve<ILoadResourceService>();
collectingTargetResoure = await loadResourceService.CheckResourceLoadQueue(key, label);
var loaded = await loadResourceService.CheckResourceLoadQueue(key, label);
if (!store.IsCurrent) return false;
collectingTargetResoure = loaded;
}
return collectingTargetResoure;
}
@@ -2241,8 +2257,8 @@ namespace GameCore
public void UpdateTurnTableData()
{
PlayFabMgr.Instance.UpdateUserDataValue("WheelLevelCount", JsonMapper.ToJson(WheelLevelCount));
PlayFabMgr.Instance.UpdateUserDataValue("WheelLevelFreeCount", freecount.ToString());
playerSaveStore.Write("WheelLevelCount", JsonMapper.ToJson(WheelLevelCount)).RequireAccepted();
playerSaveStore.Write("WheelLevelFreeCount", freecount.ToString()).RequireAccepted();
}
/// <summary>
/// Add item by dropId and multiplier, or just return that item without giving to player, if doAdd is false.
@@ -2263,10 +2279,10 @@ namespace GameCore
{
IncreaseScore(score * multiplier);
WheelOperateCount++;
PlayFabMgr.Instance.UpdateUserDataValue("WheelOperateCount", WheelOperateCount.ToString());
playerSaveStore.Write("WheelOperateCount", WheelOperateCount.ToString()).RequireAccepted();
AllWheelOperateCount += multiplier;
PlayFabMgr.Instance.UpdateUserDataValue("AllWheelOperateCount", AllWheelOperateCount.ToString());
playerSaveStore.Write("AllWheelOperateCount", AllWheelOperateCount.ToString()).RequireAccepted();
}
public void IncreaseScore(int score)
{
@@ -2283,7 +2299,7 @@ namespace GameCore
}
else
{
PlayFabMgr.Instance.UpdateUserDataValue("WheelLevelCount", JsonMapper.ToJson(WheelLevelCount));
playerSaveStore.Write("WheelLevelCount", JsonMapper.ToJson(WheelLevelCount)).RequireAccepted();
}
}
@@ -2305,7 +2321,7 @@ namespace GameCore
{
freecount = 0;
}
PlayFabMgr.Instance.UpdateUserDataValue("WheelLevelFreeCount", freecount.ToString());
playerSaveStore.Write("WheelLevelFreeCount", freecount.ToString()).RequireAccepted();
}
//转盘等级增加函数
public void IncreaseWheelLevel()
@@ -2325,7 +2341,7 @@ namespace GameCore
// 更新积分进度
WheelLevelCount[wheelLevel.Level] = progress;
TurntableRed();
PlayFabMgr.Instance.UpdateUserDataValue("WheelLevelCount", JsonMapper.ToJson(WheelLevelCount));
playerSaveStore.Write("WheelLevelCount", JsonMapper.ToJson(WheelLevelCount)).RequireAccepted();
}
}