下载 App

优化存档

昨天 07:231 浏览综合
新方案(scripts/game/Save.lua 重写)
写云硬门控:新增 cloudDone_(云端真实读取成功并完成合并)标志,在它之前任何存档只写本地,绝不碰云 —— 彻底堵死"空档覆盖云端"。
持续重试:Save.Update 每 1.5s 重试 BatchGet,登录完成后自动补上云同步;启动 2.5s 内云没回来就先用本地档开局游玩(不卡启动),云合并完成后继续正常同步。
时间戳合并(换设备跟档):profile 新增 ts 秒级时间戳,读取后双向比较:云新 → 覆盖本地(换设备能拿到档);本地新(离线玩过)→ 推回云。合并时按默认字段兜底,防旧档缺字段。
退出强存:订阅一次 ExitRequested,关游戏时刷时间戳并立即存档。
本地永远先写:wj_save.json 兜底不变,云不可用时离线可玩,回到有网自动合并。
2 秒自动存档节奏保持(auto2s),结算/升级/买组件等强存点全部不变。
注意一点:由于 TapTap 云变量按登录账号隔离,同账号换设备即可跟档;这次上线后之前已被空档覆盖过的账号,云端是出厂默认值,如果玩家本机沙箱里 wj_save.json 还有旧档,第一次进游戏会按"本地新→推回云"自动找回;两处都丢的只能重开,无法恢复。
修复(scripts/game/Save.lua)
1. 用「登录就绪信号」区分两种空(核心修复)
新增 loginReady():检查 clientCloud.userId/GetUserId() 是否已注入(这是项目里 ChatNet 已验证过的同步可用信号)。
云返回空 + 登录未就绪 → 绝不当真,cloudDone_ 保持 false,阻断一切云写(含 2s 自动档、退出档,只写本地),1.5s 静默重试;
云返回空 + 登录已就绪 → 才是真的无档(新号首建/离线后首次上线),本地推上去建基线。
2. 等级单调真值锚(防一切降级)
游戏没有降级玩法 → 等级序=时间序。合并时:两边等级不一致,高等级方必胜;同等级才比 ts。彻底封死「被污染的旧档靠 ts 赢过高等级云档」。内存等级也永不回退
3. 修掉我自己引入的回归(诚实汇报)
第一轮我把 merge 里的推云改成直接调 doCloudSave,但没注意 doCloudSave 内部有 cloudDone_ 门,而 merge 发生在置 cloudDone_ 之前——本地为真值时的推云会被静默吞掉。改为 merge 只标记 pendingPush_,由 syncCloud 在放行云写门之后再落地推送。