This commit is contained in:
wenhe committed 2026-09-23 14:27:13 +08:00
1 parent 9eb9edbb8a
commit b768ff1555
10 files changed
+618 -15

No files matched your search

+46
View File
@@ -705,6 +705,10 @@ FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher)
【提示/体验】倒油/取油/放料/出锅均有提示(含消耗数量与计时时长); 数量不足/油锅下无点燃炉灶
有提示并拦截; 右键冷却0.4秒; 手持方块物品右键油锅类功能方块取消默认放置(全局) [已实现]
【盛出消闪 2026-09-23】手持盘子右键熟炸物(盘子 take_out, 6条), 改走客户端拦截+显式触发
(同汤锅): 客户端 ClientItemUseOnEvent ret=True 消闪 + NotifyToServer('TakeoutRequest')
-> YouguoService.handleTakeoutRequest(校验落点仍是成品防重复). 由 InterceptData.TAKEOUT_CANCEL
自动派生 [已实现]
【留后】各盘装成品 右键吃(总食用功能后续实现)、天妇罗炸虾递减吃(整份->半份 plate_49a)、
盘子用后变脏
@@ -787,6 +791,14 @@ FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher)
【提示/体验】所有转换有提示(含消耗数量与下一步指引: "可继续加料 或 等计时结束变成X,
手持木碗出锅"); 数量不足/下方无点燃炉灶有提示并拦截; 右键冷却0.4秒; 手持方块物品右键
汤锅类功能方块取消默认放置(全局) [已实现]
【盛出消闪 2026-09-23】手持木碗/盘子右键成品汤方块(碗/盘 take_out), 改走客户端拦截+
显式触发: 客户端 ClientItemUseOnEvent 对该组合 ret=True(取消放置前摇, 消除"闪一下"),
再 NotifyToServer('TakeoutRequest') 显式通知服务端执行盛出(FeatureDispatcher.OnTakeoutRequest
-> TangguoService.handleTakeoutRequest, 校验落点仍是成品防重复). 空手取出/菜刀切豆腐不走此路,
照旧 ServerBlockUseEvent. 由 InterceptData.TAKEOUT_CANCEL 自动派生 [已实现]
- 后续修复: 客户端新增 1.5 秒放置冷却(_afterCd): 盛出/出锅后, 同一坐标短时间内再被引擎
当作"放置"直接 ret 吞掉, 消除"变锅后多放置一次碗/盘"的闪烁 (2026-09-23 修) [已实现]
- 服务端 OnTakeoutRequest 不再设 _cancelItemUse(避免标记残留吞后续 itemUseOn), 由客户端 CD 兜 [已实现]
【留后】各碗装成品/汤面 右键吃(总食用功能后续实现)
@@ -881,10 +893,18 @@ FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher)
- 反向: 手持 米饭(形态1/2/3任一) 右键 上述成品菜方块, 消耗1个米饭, 菜品原地变对应盖饭 [已实现]
- 蛋炒饭加米饭: 手持米饭(任一形态)右键 炒锅_86(蛋炒饭_加胡萝卜_熟) -> 炒锅_87(蛋炒饭_加米饭_熟) [已实现]
- 手持成品菜/米饭 右键 本分类功能方块 无对应转换时直接取消默认放置(不"先放再消失") [已实现]
- 修复: 盖饭被客户端白名单吞掉而"点无反应"(成品菜/米饭组合在 ITEM_USE_ON_CANCEL,
客户端 ret=True 吞掉服务端 ServerItemUseOnEvent) -> 改走客户端拦放置预览(消闪)
+ 显式 NotifyToServer('GaifanRequest') -> FeatureDispatcher.OnGaifanRequest
-> ChaoguoService.handleItemUseOn(构造 itemUseOn args), 同盛出机制 (2026-09-23 修) [已实现]
【提示/体验】所有转换有提示(含消耗数量与下一步指引); 数量不足/翻炒无下方点燃炉灶/
出锅门控未达成(煎蛋未熟/酱香饼未翻炒) 有提示并拦截; 翻炒冷却0.3秒, 其余右键冷却0.4秒;
手持方块物品右键炒锅类功能方块取消默认放置(全局) [已实现]
【盛出消闪 2026-09-23】手持盘子右键炒锅熟成品(盘子 take_out, 38条), 改走客户端拦截+
显式触发(同汤锅): 客户端 ClientItemUseOnEvent ret=True 消闪 + NotifyToServer('TakeoutRequest')
-> ChaoguoService.handleTakeoutRequest(校验落点仍是成品防重复). 空手出锅(煎饼/馍等 item=None)
不走此路, 照旧 ServerBlockUseEvent. 由 InterceptData.TAKEOUT_CANCEL 自动派生 [已实现]
【留后】各盘装成品/盖饭 右键吃(总食用功能后续实现)、半份/部分份变体出锅(见 全部功能没做什么.txt)
@@ -982,3 +1002,29 @@ FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher)
成品菜/米饭右键炒锅中间态方块→取消放置"的服务端兜底, 因要使客户端白名单宁少勿多
(避免误拦正常放置), 该边缘防误触仍只服务端处理(功能正确, 仅轻微闪烁), 暂不搬客户端 [已复查]
########################################
【统一 itemUseOn 转换 消闪修复】(2026-09-23)
########################################
背景: [总食用转化关系.txt] 中"盖饭/盛出"等走 handleItemUseOn / handleBlockUse 的转换
被客户端纯 ret=True 吞掉服务端 ServerItemUseOnEvent / ServerBlockUseEvent, 导致"点无反应"
(盖饭此前已用 GAI_FAN_CANCEL + GaifanRequest 修复)。
本轮审计其余所有"走 handleItemUseOn 的 itemUseOn 转换", 发现同款风险, 统一修复:
- 覆盖: 原版相邻放置 / 盘子装盘 / 面食手持转换(烤炉/木碗/蒸笼) / 汤锅手持转换(熟面条碗)
/ 裹粉(面粉块) / 厨具锅铲蘸油(油罐/炒锅) / 种水稻 / 寿司堆叠 / 手持直接吃(右键表面)
- 方案:
①新增 FeatureDispatcher.OnItemUseOnRequest(服务端), 按 itemName 路由 itemUseOnAll
各服务 handleItemUseOn(与 OnGaifanRequest 同机制, 逐个 fallback)
②客户端 ClientFeatureDispatcher.OnItemUseOn 将这些纯 ret 分支统一改为
ret=True(消闪) + NotifyToServer('ItemUseOnRequest') 显式触发
③去重: 各服务 handleItemUseOn 自带 checkCooldown(同坐标/同物品), 重复触发被冷却拦截
- 细节:
①"相邻放置/装盘"(ITEM_USE_ON_CANCEL_BY_ITEM) 分支【不设 _afterCd】, 因被点表面坐标
不变, 设了会误吞同一表面 1.5s 内连续放置(如连摆多个切配块); 去重靠服务端冷却
②"盖饭/蛋炒饭"(GAI_FAN_CANCEL)、"盛出/出锅"(TAKEOUT_CANCEL) 仍用各自专用事件, 不变
- 文件:
①FeatureDispatcher.py: 新增 ITEM_USE_ON_REQUEST 常量 / ListenEvent / UnListenEvent /
OnItemUseOnRequest
②ClientFeatureDispatcher.py: 导入 SUSHI_CANCEL, 新增 ITEM_USE_ON_REQUEST 常量,
OnItemUseOn 的 BY_ITEM / ITEM_USE_ON_CANCEL / SUSHI / COATING 分支全部改为 ret+显式事件
③白名单清单: 新增"十三、其余 itemUseOn 转换 统一显式事件修复" [已实现]
+14
View File
@@ -295,3 +295,17 @@ todo 需要 对油罐 进行一个 打碎 后 在右键依然是多少的使用
- 烤鸡/烤乳猪"生命提升 10点"按 生命提升III(30秒) 实现(10点≈2.5级取III, 每级+4点血)
- 原版食物成品盘(plate_16/17/18/20/21/4)按 txt 无增益效果
- 饭团/水煮蛋 已补 use_animation:eat+food 组件(长按右键可触发食用事件)
########################################
【统一 itemUseOn 转换】(2026-09-23)
########################################
四、其余 itemUseOn 转换的"点无反应"根治
- 与其他 itemUseOn 转换(面食/汤锅/装盘/相邻放置/厨具蘸油/寿司/裹粉/种水稻/手持吃)
经审计确认与盖饭同款风险(客户端纯 ret 吞 ServerItemUseOnEvent), 已统一用
OnItemUseOnRequest 显式事件修复(见做了什么.txt)。本次为完整修复, 无遗留。
- 暂未单测验证每一项的实际效果(用户需逐个进游戏验证): 因网易双端事件吞食行为
对"原版非方块物品 vs 方块物品"可能有差异, 若某项仍点无反应, 说明该组合的吞食
路径不同, 需再单独排查(不按此统一方案重复改)。
五、盖饭/盛出/出锅 专用事件(GAI_FAN_CANCEL / TAKEOUT_CANCEL) 维持专用, 不再并入统一事件
- 原因: 已跑通, 保持不回退; 统一事件只覆盖其余 itemUseOn 组合 [2026-09-23]
+61 -1
View File
@@ -137,4 +137,64 @@
取消key: 手持item (ClientItemTryUseEvent cancel)
- rtdd:rice_balls(饭团) -> 直接吃
- rtdd:boiled_egg(水煮蛋) -> 直接吃
- rtdd:beancurd(豆腐) -> 直接吃
- rtdd:beancurd(豆腐) -> 直接吃
========================================
十一、盛出/出锅消闪 (InterceptData.TAKEOUT_CANCEL, 2026-09-23)
========================================
右键场景: 手持 木碗/盘子 右键 成品方块(汤锅成品/炒锅熟盘装/油锅熟炸物) -> 盛出/出锅。
问题: 手持可放置方块物品右键, 客户端先渲染一帧"放置前摇/幽灵方块",
服务端取消指令往返后才撤掉 -> "闪一下"(服务端顺序正确, 碗/盘从未真落, 见日志 FD-Placed-AFTER=air)。
方案: 客户端对该组合 ClientItemUseOnEvent ret=True(取消放置预览, 消闪)
+ NotifyToServer('TakeoutRequest') 显式通知服务端执行盛出(纠正"客户端拦截吞服务端盛出")。
取消key: (手持item, 被点block), 由 汤锅/炒锅/油锅 SWITCH_RULES 里 action=="take_out"
且 item 是容器(木碗bowlasoup / 盘子plate_0) 的规则自动派生。
- 汤锅: 木碗(bowlasoup)/盘子(plate_0) + 各成品汤方块(30条, 含 美味饺子全份盘装plate_30a)
- 炒锅: 盘子(plate_0) + 各炒锅熟成品(38条, 含蛋炒饭 riceegg_3)
- 油锅: 盘子(plate_0) + 6条熟炸物方块
特殊:
- 空手取出(item=None, 捏饭团/取水煮蛋/煎饼/馍出锅)、菜刀(item=CLEAVER)不走此路, 照旧 ServerBlockUseEvent。
- 服务端在 FeatureDispatcher.OnTakeoutRequest -> 各 Service.handleTakeoutRequest,
校验落点仍是成品方块才执行(防客户端事件与服务端事件双份)。
========================================
十二、盖饭/蛋炒饭 消闪 (InterceptData.GAI_FAN_CANCEL, 2026-09-23)
========================================
右键场景: 手持 成品菜 右键 米饭(盖饭正向) / 手持 米饭 右键 成品菜(盖饭反向) /
手持 米饭 右键 炒锅蛋炒饭(蛋炒饭改造)。
问题: 这些组合走 ServerItemUseOnEvent, 但也被 ITEM_USE_ON_CANCEL 纯 ret=True 吞掉,
导致服务端 ServerItemUseOnEvent 不触发 -> 盖饭"点无反应"(与盛出被吞同机制)。
方案: 客户端对该组合 ret=True(消闪) + NotifyToServer('GaifanRequest') 显式触发
-> FeatureDispatcher.OnGaifanRequest -> ChaoguoService.handleItemUseOn。
取消key: (手持item, 被点block), 由 ChaoguoData.ITEM_USE_ON_RULES 的 surface 字段自动派生
(盖饭正向/反向 + 蛋炒饭改造, 共若干组)。
【通用】客户端 1.5 秒放置冷却(_afterCd): 盛出/盖饭/出锅后, 同一坐标短时间内引擎
再触发的"放置"直接 ret 吞掉, 消除"转换后多放置一次"的闪烁 (2026-09-23)。
========================================
十三、其余 itemUseOn 转换 统一显式事件修复 (InterceptData / FeatureDispatcher, 2026-09-23)
========================================
问题: 与盖饭同款 —— 客户端对"走 handleItemUseOn 的 itemUseOn 转换"纯 ret=True 时,
会吞掉服务端 ServerItemUseOnEvent, 导致一端(面食/汤锅/装盘/相邻放置/厨具蘸油/寿司/
裹粉/种水稻)转换"点无反应"。
方案: 客户端对所有这些组合改为 ret=True(消闪) + NotifyToServer('ItemUseOnRequest')
显式触发; 服务端新增 FeatureDispatcher.OnItemUseOnRequest, 复用按 itemName 路由到
itemUseOnAll 各服务 handleItemUseOn(与 OnGaifanRequest 同机制), 逐个 fallback。
去重: 各服务 handleItemUseOn 自带 checkCooldown(同坐标/同物品), 即使与真实
ServerItemUseOnEvent 重复触发也会被冷却拦截, 不双重消耗。
- 一、原版相邻放置(手持原版生食右键任意表面 -> 相邻格放切配块/生肉) [已统一]
- 二、盘子装盘(手持原版食物右键 plate_0 -> 盘子变换) [已统一]
- 三、面食.甜食 手持转换(右键 烤炉/木碗/蒸笼) [已统一]
- 四、汤锅 手持转换(右键 熟面条碗 -> 汤面) [已统一]
- 六、乡野食材 裹粉(手持生食材右键 面粉块) [已统一]
- 七、厨具 锅铲/带油锅铲(右键 油罐/炒锅) [已统一]
- 八、乡野自然 水稻种植(手持稻谷右键地面) [已统一]
- 九、寿司 手持方块物品右键自家寿司方块(取消默认放置) [已统一]
- 十、总食用 手持直接吃(饭团/水煮蛋/豆腐, 右键表面吃) [已统一]
【注意】"相邻放置/装盘"分支(ITEM_USE_ON_CANCEL_BY_ITEM)因被点【表面坐标】不变,
不设 _afterCd(避免误吞同一表面 1.5s 内连续放置), 去重交给服务端 handleItemUseOn 冷却。
"盖饭/蛋炒饭"(GAI_FAN_CANCEL)、"盛出/出锅"(TAKEOUT_CANCEL) 仍用各自专用事件, 不变。