下载 App
设计方案:菜品名字编辑 + 菜品配图选择
一、菜品名字可编辑
改动范围:仅 Leaderboard.lua 的做菜 UI 第三步面板
项 设计
交互 菜品预览区的名字改为 UI.TextInput,默认值 = CookingSystem.MakeDishName(...) 自动生成的名字
字数限制 1-8 个字
空值处理 提交时若为空,回退到自动生成名
数据流 用户输入的名字覆盖 dish.dishName 和 dish.name 字段
改

西米:
问题确认了。NpcEditor 的 refreshNpcIndex 优先从云端加载 "npc_index",如果云端不可用则从本地 npc_sprites/index.json 读取。而 NpcPickerPanel 只读本地文件,如果本地 index 文件不存在就直接返回空。
修复方案:给 NpcPickerPanel 添加云端 fallback,异步加载 index 后再打开弹窗。同时增加扫描本地 npc_sprites/ 目录作为兜底。
排行榜投喂扮演口腔等都要即时本地化持久化
让我分析问题:
当前问题:
扮演(Register/Unregister) — 乐观更新了 organRoles_ 但仅存在于内存,页面重开就丢失。且非多人模式下 IsMultiplayer()=false 时直接 return,完全无效
投喂(Feed/FoodAlert) — foodAlerts_ 仅内存计数,SendFoodGift 在非多人模式下直接 return,单机投喂无法触发 al

:
问题明确了 — WASM 平台上 File API 写入内存文件系统,页面刷新即丢失。必须用 clientCloud 云存储才能真正持久化。
让我先查阅 clientCloud API 确认可用的存储方式。
构建成功。以下是本次 clientCloud 云持久化迁移的完整改动总结:
变更内容
问题根因:WASM 平台 File API 写入的是内存文件系统,页面刷新即丢失,导致扮演/投喂数据无法持久化。
解决方案:全部改用 clientCloud 云存储,数据跨刷新存活。
具体改动(scripts/Leaderboard.lua):
写入侧 — SaveLocalRoles() / SaveLocalAlerts() 内部从 File 改为 clientCloud:Set()
云 key:lb_organ_roles(器官扮演)、lb_food_alerts(投喂提醒)
table 类型自动 JSON 编解码
读取侧 — 新增 LoadCloudState(onDone) 异步函数
使用 clientCloud:BatchGet():Key():Key():Fetch() 一次性读取两个 key
恢复到内存 organRoles_ / foodAlerts_
初始化流程 — Leaderboard.Create() 改为异步链式:
LoadCloudState() → 恢复扮演/投喂数据 → FetchLeaderboard() 拉取排行榜
确保 UI 渲染时已有正确的器官标签和投喂徽标
清理 — 删除无用的 LOCAL_ROLES_PATH / LOCAL_ALERTS_PATH 常量
现在可以刷新页面测试,扮演和投喂数据应在刷新后正确恢复。
:
引擎内置的 cloud API 能力比你想象的强,但有前提条件
一、clientCloud vs serverCloud —— 能力差距巨大
能力 clientCloud serverCloud
自身数据读写 有 有
排行榜 有 有
跨玩家消息(邮箱) 没有 有 message:Send/Get/MarkRead
跨玩家数据查询 没有 有 BatchGet():Player(uid1):Player(uid2)
货币系统 没有 有 money:Add/Cost
结构化列表(背包) 没有 有 list:Add/Get/Modify/Delete
消耗品 没有 有 item:Add/Use
配额(每日限次) 没有 有 quota:Add/Reset
跨域原子事务 没有 有 BatchCommit
关键判断:你提出的"信道互通"需求(器官间消息传递、跨玩家数据交换),clientCloud 做不到,必须用 serverCloud。
二、serverCloud 的 Message 子系统可以实现你要的信道互通
引擎已经内置了邮箱系统,API 如下:
serverCloud.message:Send(senderUid, key, targetUid, value, events)
serverCloud.message:Get(uid, key, read, events)
serverCloud.message:MarkRead(messageId, events)
serverCloud.message:Delete(messageId, events)
这意味着你方案中提到的消息类型全部可以用这套 API 实现:
消息类型 key 设计 value 内容
器官 → 大脑 闯关报告 "organ_report" { organId, health, score, ... }
大脑 → 器官 控制指令 "brain_signal" { command, params, ... }
投喂者 → 目标 食物投喂 "food_gift" { foodType, nutrients, ... }
胃 → 口腔 返流事件 "reflux" { entities, acidLevel, ... }
三、但有一个前提条件:必须启用多人模式
serverCloud 只在 multiplayer.enabled = true 的服务端环境中可用。你当前的状态是:
multiplayer 模式下 clientCloud 为 nil —— 这说明配置或初始化有问题
单机模式下没有 serverCloud
所以你面临的真正问题不是"用什么方案",而是"多人模式下 clientCloud 为 nil"这个 bug 需要先解决。



