吃 3 功能
This commit is contained in:
1 parent
4176eb293c
commit
fb817b5d34
12 files changed
+1021
-118
No files matched your search
+20
-2
@@ -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 路由到计时服务(持久化计时)
|
||||
|
||||
Reference in new issue
Block a user