吃 3 功能

This commit is contained in:
wenhe committed 2026-09-21 16:13:53 +08:00
1 parent 4176eb293c
commit fb817b5d34
12 files changed
+1021 -118

No files matched your search

@@ -65,6 +65,8 @@ class FeatureDispatcher(BlueFoxServerSystem):
itemUseOnAll = {} # 物品名 -> [服务...]: 同一物品可被多个服务注册(按注册顺序), 逐个 fallback
timerOwner = {}
timerSet = set()
tryUseOwner = {} # 物品名 -> 服务: 手持"直接吃"物品(长按使用)路由
tryUseSet = set()
# ---- 拆方块掉落映射: 方块名 → 掉落对应的原版生食材 ----
# 玩家左键破坏这些"放置的半成品/死鱼"方块时, 取消默认掉落, 改为掉对应的原版生食材
@@ -109,6 +111,16 @@ class FeatureDispatcher(BlueFoxServerSystem):
cls.timerOwner[block] = service
cls.timerSet.add(block)
@classmethod
def registerTryUse(cls, service):
"""
手持"直接吃"服务初始化时调用:把"手持右键直接吃(不放置)"的物品注册进 try-use
路由表。ServerItemTryUseEvent(长按使用物品) 会按此表把事件路由到对应服务。
"""
for item in service.getTryUseRules():
cls.tryUseOwner[item] = service
cls.tryUseSet.add(item)
@classmethod
def startTimerFor(cls, blockName, dim, pos, playerId=None):
"""
@@ -279,13 +291,19 @@ class FeatureDispatcher(BlueFoxServerSystem):
def OnItemTryUse(self, args):
"""
玩家尝试使用物品(喝药水、吃食物等)时触发。
如果该玩家刚被标记为"取消下一次物品使用"(_cancelItemUse),
就取消这次默认行为,避免右键转换方块时误喝药水。
1. 如果该玩家刚被标记为"取消下一次物品使用"(_cancelItemUse),
就取消这次默认行为,避免右键转换方块时误喝药水。
2. 否则按 tryUseOwner 路由:手持"直接吃"物品(饭团/水煮蛋/豆腐) -> 吃掉。
"""
playerId = args.get("playerId")
print "[FD-ItemTryUse]", args.get("itemName"), "player", playerId
if self._cancelItemUse.pop(playerId, False):
args['cancel'] = True
return
itemName = args.get("itemName")
service = self.tryUseOwner.get(itemName)
if service and service.handleItemTryUse(args):
args['cancel'] = True
# ============================================================================
# 主入口4:计时方块 tick → 按 timerOwner 路由到计时服务(持久化计时)