菜单功能

This commit is contained in:
Giao committed 2026-09-28 11:18:26 +08:00
1 parent a647878ac1
commit 3b63794fe4
42 files changed
+1627 -106

No files matched your search

@@ -81,12 +81,16 @@ class ClientFeatureDispatcher(BlueFoxClientSystem):
def Destroy(self):
print "===== ClientFeatureDispatcher Destroy ====="
self.UnListenForEvent(clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientItemUseOnEvent", self, self.OnItemUseOn)
self.UnListenForEvent(clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientItemTryUseEvent", self, self.OnItemTryUse)
self.UnListenForEvent(
clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientItemUseOnEvent", self, self.OnItemUseOn
)
self.UnListenForEvent(
clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientItemTryUseEvent", self, self.OnItemTryUse
)
# ============================================================================
# 入口1: 手持物品右键方块表面 -> 白名单组合才 ret (取消默认放置/吃)
@@ -128,7 +132,7 @@ class ClientFeatureDispatcher(BlueFoxClientSystem):
if blockName and (itemName, blockName) in BLOCKUSE_CANCEL:
args["ret"] = True
self._blockCd[cdKey] = time.time()
self._blockCdPlayer[pId] = time.time() # 玩家级短标记, 取消随后 0.2s 内投掷动画
self._blockCdPlayer[pId] = time.time() # 玩家级短标记, 取消随后 0.2s 内投掷动画
self.NotifyToServer(BLOCK_USE_REQUEST, {
"playerId": pId,
"x": args.get("x"), "y": args.get("y"), "z": args.get("z"),
@@ -228,17 +232,16 @@ class ClientFeatureDispatcher(BlueFoxClientSystem):
# 饭团/水煮蛋/豆腐 在 ITEM_USE_ON_CANCEL_BY_ITEM 里(EAT_ITEMS)
if itemName in ITEM_USE_ON_CANCEL_BY_ITEM:
args["cancel"] = True
# 投掷/使用抑制: 玩家刚做过 BlockUse 转换(0.2s 内, 如放蛋/放料), 引擎重置右键会立即
# 再触发一次"投掷/使用"动画(鸡蛋右键鸡窝放蛋 -> 扔蛋)。此窗口内若手持 BlockUse 可投掷/
# 可用物品, 直接 cancel 掉投掷; 窗口过后放行(对地扔蛋正常)。
# 注意: 玩家级标记(pId)而非坐标——投掷事件无目标方块坐标, 只有玩家。0.2s 极短且仅在
# 刚做完方块转换后生效, 不会影响玩家正常对地面/空中扔蛋。
_pId = args.get("playerId") or args.get("entityId")
_pc = self._blockCdPlayer.get(_pId, 0)
if _pc and (time.time() - _pc) < 0.2 and itemName in BLOCKUSE_CANCEL_ITEMS:
args["cancel"] = True
# 投掷/使用抑制: 玩家刚做过 BlockUse 转换(0.2s 内, 如放蛋/放料), 引擎重置右键会立即
# 再触发一次"投掷/使用"动画(鸡蛋右键鸡窝放蛋 -> 扔蛋)。此窗口内若手持 BlockUse 可投掷/
# 可用物品, 直接 cancel 掉投掷; 窗口过后放行(对地扔蛋正常)。
# 注意: 玩家级标记(pId)而非坐标——投掷事件无目标方块坐标, 只有玩家。0.2s 极短且仅在
# 刚做完方块转换后生效, 不会影响玩家正常对地面/空中扔蛋。
_pId = args.get("playerId") or args.get("entityId")
_pc = self._blockCdPlayer.get(_pId, 0)
if _pc and (time.time() - _pc) < 0.2 and itemName in BLOCKUSE_CANCEL_ITEMS:
args["cancel"] = True
# 注: 客户端系统需在客户端进程被实例化。modMain 只能在服务端 import 服务端
# 系统; 客户端系统由 BlueFox 框架自动注册其子类。为确保本类被加载, 需在
# modMain 客户端分支(IsInServer()==False)里 import 本模块。
# modMain 客户端分支(IsInServer()==False)里 import 本模块。