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

@@ -20,6 +20,7 @@ public class FishingSocialPanel : BasePanel
private void Awake()
{
_socialData = GContext.container.Resolve<ClubService>();
if (!PromptOwnerIsCurrent()) return;
btn_close = transform.Find("root/btn_close").GetComponent<Button>();
for (int i = 1; i <= 3; i++)
{
@@ -36,6 +37,7 @@ public class FishingSocialPanel : BasePanel
}
protected override void Start()
{
if (!PromptOwnerIsCurrent()) return;
base.Start();
GContext.OnEvent<ClubStateChangeEvent>().Subscribe(OnChangeJoinedState).AddTo(disposables);
GContext.OnEvent<SocialFriendListChangedData>().Subscribe(OnChangeFriendListData).AddTo(disposables);
@@ -58,9 +60,10 @@ public class FishingSocialPanel : BasePanel
OnToggle();
_socialData.GetSelfClub();
_socialData.SetOpenClubRed();
try { _socialData.SetOpenClubRed(); }
catch (System.InvalidOperationException ex) { Debug.LogError(ex.Message); return; }
EventPopupData eventPopup = GContext.container.Resolve<ClubService>().eventPopupDataClub;
EventPopupData eventPopup = _socialData.eventPopupDataClub;
if (eventPopup != null && !eventPopup.IsRead)
{
eventPopup.IsRead = true;
@@ -83,6 +86,12 @@ public class FishingSocialPanel : BasePanel
}
}
bool PromptOwnerIsCurrent()
{
if (this == null || _socialData == null) return false;
try { _socialData.RequirePromptOwner(); return true; }
catch (System.InvalidOperationException ex) { Debug.LogError(ex.Message); return false; }
}
//玩家被踢出首次进入俱乐部打开提示弹窗:
// 您被会长踢出了俱乐部 You have been kicked out of the club by the club master
void KickedOut()

View File

@@ -1,4 +1,4 @@
using asap.core;
using asap.core;
using cfg;
using EnhancedUI.EnhancedScroller;
using GameCore;
@@ -14,6 +14,8 @@ namespace game
{
public class FishingFriendAddPanel : MonoBehaviour, IEnhancedScrollerDelegate
{
game.PlayerDataStorage.IPlayerSaveStore saveStore;
#region 分享
Button btn_invite;
@@ -630,6 +632,7 @@ namespace game
#region 生命周期
void Awake()
{
saveStore = GContext.container.Resolve<game.PlayerDataStorage.IPlayerSaveStore>();
loading = transform.Find("loading").gameObject;
empty = transform.Find("add").gameObject;
empty.SetActive(false);
@@ -657,7 +660,7 @@ namespace game
{
List<cfg.Invite> invites = GContext.container.Resolve<Tables>().TbInvite.DataList;
//已经领取奖励的数量
string receiveRewardCountStr = PlayFabMgr.Instance.GetLocalData(FriendService.InviteLinkRewardCountKey);
string receiveRewardCountStr = saveStore.Read(FriendService.InviteLinkRewardCountKey).ValueOrThrow();
if (receiveRewardCountStr != null)
{
int.TryParse(receiveRewardCountStr, out int InviteLinkRewardCount);