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

@@ -41,6 +41,7 @@ namespace GameCore
}
public class GuideDataCenter : IDisposable
{
[asap.core.Inject] public game.PlayerDataStorage.IPlayerSaveStore playerSaveStore { get; set; }
Tables _tables;
PlayerData playerData;
public GuideDataCenter(cfg.Tables tables, PlayerData playerData)
@@ -94,7 +95,10 @@ namespace GameCore
}
public async void Init()
{
guidanceDefineSetting = (GuidanceDefineSetting)await Addressables.LoadAssetAsync<object>("GuidanceConfig");
var store = playerSaveStore;
var setting = (GuidanceDefineSetting)await Addressables.LoadAssetAsync<object>("GuidanceConfig");
if (disposed || !store.IsCurrent) return;
guidanceDefineSetting = setting;
if (guidanceDefineSetting != null)
{
bool isUpdate = false;
@@ -495,7 +499,9 @@ namespace GameCore
}
async void TriggerGuide(string groupName, string curPanelName, GuidanceGroupDefine guidanceGroupDefine)
{
var store = playerSaveStore;
await System.Threading.Tasks.Task.Delay(200);
if (disposed || !store.IsCurrent) return;
curSaveData = new GuideSaveData();
curSaveData.groupName = groupName;
GuideSaveDataDic[groupName] = curSaveData;
@@ -642,6 +648,7 @@ namespace GameCore
}
async void ShowPanel(string PanelName)
{
if (disposed || !playerSaveStore.IsCurrent) return;
if (curDefine.fingerType != FingerType.None)
{
disposable3 = GContext.OnEvent<GuideNextEvent>().Subscribe(GuideNextEvent);
@@ -652,10 +659,13 @@ namespace GameCore
public async void ShowGuidancePopupPanel(string nodeName)
{
var store = playerSaveStore;
if (disposed || !store.IsCurrent) return;
popupPanelNode = nodeName;
if (!string.IsNullOrEmpty(popupPanelNode))
{
await UIManager.Instance.ShowUI(UITypes.GuidancePopupPanel);
if (disposed || !store.IsCurrent) return;
UIManager.Instance.HideUI(UITypes.GuidancePanel);
}
}
@@ -712,11 +722,13 @@ namespace GameCore
{
List<string> strings = GuideSaveDataDic.Select(kv => kv.Key + "|" + kv.Value.guideSubIndex + "|" + (kv.Value.isFinish ? "1" : "0")).ToList();
string value = string.Join(";", strings);
PlayFabMgr.Instance.UpdateUserDataValue("GuideSaveDataNew", value);
playerSaveStore.Write("GuideSaveDataNew", value).RequireAccepted();
}
bool disposed;
public void Dispose()
{
disposed = true;
disposable?.Dispose();
disposable = null;
disposable2?.Dispose();