排行榜、大脑监控室两套数据系统不同步
昨天 19:29综合
现在我明白了。排行榜中的 foodAlerts_ 是一个独立的投喂计数系统(每次投喂+1),而大脑监控室使用的是 FoodPipeline.GetOrganQueue 从云变量读取的实际食物队列。这两个数据来源不同。
关键问题:排行榜里口腔显示"5份食物待处理"是投喂计数(foodAlerts_),而大脑监控室从 food_queue_oral 云变量拉取的是实际传递到口腔的食物队列。口腔是第一个器官,食物是从"投喂"直接进入口腔关卡的,并不是通过 FoodPipeline.TransferToNextOrgan 传递进来的。所以 food_queue_oral 可能为空。
让我确认口腔的食物来源。
口腔的食物队列确实有数据来源(FeedPanel.PushToOrgan("oral", ...) 和 main.lua 中的投喂逻辑)。那问题就是:大脑监控室拉取了 food_queue_oral 但没有显示。
让我检查一下 organFoodQueues_ 数据与 Config.OrganLevels 器官列表的匹配。Config.OrganLevels 中还有 lungs(肺部)和其他器官,而 PIPELINE_ORGANS 只有 oral, stomach, small_intestine——但在器官详情页的 for _, organ in ipairs(Config.OrganLevels) 循环中,所有器官都会检查 organFoodQueues_[organ.id],包括 oral。
让我看看 FoodPipeline.GetOrganQueue 的回调函数是否有问题——它是异步的,可能 RebuildUI() 的条件不对。
现在找到了关键线索。Leaderboard 使用 foodAlerts_ 本地计数器(key 是 "mouth"),而 BrainDashboard 使用 FoodPipeline.GetOrganQueue 从云端读取(key 是 "oral")。这是两套完全独立的数据系统。
让我确认 BrainDashboard 的 FetchOrganFoodQueues 执行时机问题。
现在完全搞清楚了根本原因。
问题分析:
玩家投喂食物 → FoodPipeline.PushToOrgan("oral", ...) 写入云端 food_queue_oral
玩家进入口腔关卡 → ConsumeAndInjectFoods("oral") 消费掉了云端队列中的食物
打开大脑监控室 → FetchOrganFoodQueues() 读取 food_queue_oral → 队列已空(被消费了)
但 Leaderboard 的 foodAlerts_ 是只增不减的累计计数器,仍然显示 5
胃的队列之所以显示正确,是因为玩家还没进入胃关卡,胃的食物没被消费。
修复方案:让 Leaderboard 暴露 foodAlerts_ 接口,BrainDashboard 同时读取两个数据源 —— 优先用云端队列(有详情可点击),回退用 Leaderboard 的计数器(显示投喂累计)。
不对,这样两个数据含义不一致。更合理的方案是:当食物被消费时,递减 Leaderboard 的 foodAlerts_ 计数器,使两者保持同步。



