一直是“正在保存”,保存不了新地图

昨天 14:04综合
根因分析
问题 1(PC端重启后不自动加载云端地图):EnterEditor() 和 EnterGame() 的加载策略是 内存缓存 → 本地文件 → 资源缓存,没有"从云端加载"这一步。重启后内存缓存消失,本地文件如果没写过也为空,所以加载不到保存在 serverCloud 里的地图。
问题 2(分享链接保存卡死):服务端 HandleWallSaveMapCloud 检查 ADMIN_IDS[userId],非管理员直接 return 不回复。客户端的 onMapSaveResultCallback_ 永远不被触发,UI 锁死在"正在保存…"。
让我来实施两个修复。 修复 #1   的思路更新:问题不仅是编辑器不自动加载云端地图,更核心的是玩家入口(EnterGame)重启后也加载不到最新地图。最优方案是:

在 EnterGame 中,当内存缓存和本地文件都没有时,通过 WallClient.OnGameMapLoaded 从云端加载"当前使用的地图"(即 game_map key 指向的地图)
在 EnterEditor 中,建立后台云端索引加载,自动加载最新地图
但实际上,根据用户截图,PC 端保存后同一会话内可以看到更新(因为内存缓存),问题是重启后加载不到。重启时 cachedMapTable_ 为 nil,本地文件可能没保存,资源缓存是初始静态地图。

关键:当 WallClient 存在时(多人模式),EnterGame 应该优先尝试从云端加载 game_map(管理员设置的当前地图)。让我检查 Server 中 game_map 的加载逻辑。
修复 #1a:在   EnterGame 的静态加载链中,当 WallClient 存在(多人模式)时,优先通过云端加载管理员"使用"的地图。

策略:在静态地图加载之后、return 之前,插入 WallClient 云端加载逻辑。如果云端有 game_map,用云端数据替换静态地图。
确认了:HandleWallLoadMapCloud 也有管理员权限检查!这意味着非管理员玩家无法通过 LoadMapCloud 加载地图数据。但 game_map 的信息(key + name)是通过 loadAndSendGameMap 在 ClientReady 时推送给所有客户端的,不需要管理员权限。
这里有两个方案:
放宽 LoadMapCloud 的权限(加载地图数据允许所有玩家)
在服务端增加一个新的"加载游戏地图数据"接口,不检查管理员
方案 1 更合理——加载地图数据本身不是敏感操作,只有保存/删除/重命名/使用需要管理员权限。让我修改 HandleWallLoadMapCloud,去掉管理员检查。
在 WallClient sync callbacks 设置完毕后、返回按钮之前,插入编辑器云端自动加载逻辑:当重启后没有缓存(cachedMapTable_ 为 nil),且 WallClient 存在时,自动从云端索引加载最新地图。
修复 #1a   — EnterGame 云端地图自动加载 (main.lua)
问题:多人模式下重启游戏后,cachedMapTable_ 为空,clientCloud 为 nil,只能加载到默认静态地图,管理员保存并"使用"的地图丢失。

修复:在 EnterGame 的加载策略中,当 WallClient 存在(多人模式)时,优先通过 WallClient.OnGameMapLoaded 获取管理员设置的"当前使用地图"key,再通过 WallClient.LoadMapCloud 加载实际地图数据。加载失败则 fallback 到静态地图。

修复
#1b   — EnterEditor 云端自动加载 (main.lua)
问题:编辑器重启后没有内存缓存,只能加载默认地图,需要手动点"加载"。

修复:在 EnterEditor 的 WallClient sync 回调设置之后,当无内存缓存时,通过 WallClient.OnMapCloudIndexLoaded 获取云端索引,自动加载最新一张地图到编辑器画布。

修复
#1c   — LoadMapCloud 权限放宽 (Server.lua)
问题:HandleWallLoadMapCloud 限制仅管理员可加载地图数据,导致普通玩家无法通过 EnterGame 的云端路径加载地图。

修复:移除 HandleWallLoadMapCloud 的管理员权限检查。加载地图数据本身不是敏感操作,保存/删除/重命名/使用仍然限管理员。

修复
#2   — 非管理员保存拒绝回复错误 (Server.lua)
问题:分享链接用户点"保存"后,服务端检测到非管理员直接 return,不发送任何响应,客户端 onMapSaveResultCallback_ 永远不触发,UI 卡死在"正在保存…"。

修复:4 个管理员权限检查点(Save、Delete、Rename、Use)在拒绝时都发送 { ok = false, error = "权限不足" } 错误响应,客户端收到后正确解除等待状态,UI 显示"保存失败: 权限不足"。
TapTap
3