Skip to content

事件说明 ​

本模组通过引擎事件系统抛出多种自定义事件。外部模组可用 ListenForEvent 监听。 客户端 API 见 API_客户端.md,服务端 API 见 API_服务端.md,总览见 API_列表.md。

事件总览 ​

事件常量事件名字符串方向触发时机事件数据
SettingsUIOpenEventScript_NeteaseMod9sPMlz0K_SettingsUIOpen客户端玩家打开设置界面{"playerId": str}
SettingsUICloseEventScript_NeteaseMod9sPMlz0K_SettingsUIClose客户端玩家关闭设置界面{"playerId": str}
PopUpOpenEventScript_NeteaseMod9sPMlz0K_PopUpOpen客户端弹窗压栈打开时{"playerId": str, "popupId": str, "useScroll": bool}
PopUpCloseEventScript_NeteaseMod9sPMlz0K_PopUpClose客户端弹窗出栈关闭时{"playerId": str}
SettingsOpenFromCommandEventScript_NeteaseMod9sPMlz0K_OpenSettingsFromCommand服务端→客户端/setting_open 指令触发{"main_card_id": str, "middle_card_id": str, "sub_key": str}

客户端事件常量均可从 CardRegistryApi 导入:SettingsUIOpenEvent、SettingsUICloseEvent、PopUpOpenEvent、PopUpCloseEvent。 SettingsOpenFromCommandEvent 定义在 Server.py,默认不对外导出;客户端监听时直接使用事件名字符串即可。

监听说明 ​

所有客户端事件均通过 ListenForEvent("Script_NeteaseMod9sPMlz0K", "client", ...) 监听;namespace 和 systemName 固定为 "Script_NeteaseMod9sPMlz0K" 和 "client"。

设置界面事件 ​

当玩家打开或关闭设置 UI 时,MyClientSystem 会向引擎抛出事件。

python
from CardRegistryApi import SettingsUIOpenEvent, SettingsUICloseEvent

class MyExternalSystem(ClientSystem):
    def __init__(self, namespace, systemName):
        ClientSystem.__init__(self, namespace, systemName)
        self.ListenForEvent(
            "Script_NeteaseMod9sPMlz0K", "client",
            SettingsUIOpenEvent, self, self.OnSettingsOpen
        )
        self.ListenForEvent(
            "Script_NeteaseMod9sPMlz0K", "client",
            SettingsUICloseEvent, self, self.OnSettingsClose
        )

    def OnSettingsOpen(self, args):
        playerId = args.get("playerId", "")
        print "==== Player %s opened settings UI ====" % playerId

    def OnSettingsClose(self, args):
        playerId = args.get("playerId", "")
        print "==== Player %s closed settings UI ====" % playerId

弹窗事件 ​

python
from CardRegistryApi import PopUpOpenEvent, PopUpCloseEvent

class MyExternalSystem(ClientSystem):
    def __init__(self, namespace, systemName):
        ClientSystem.__init__(self, namespace, systemName)
        self.ListenForEvent(
            "Script_NeteaseMod9sPMlz0K", "client",
            PopUpOpenEvent, self, self.OnPopUpOpen
        )
        self.ListenForEvent(
            "Script_NeteaseMod9sPMlz0K", "client",
            PopUpCloseEvent, self, self.OnPopUpClose
        )

    def OnPopUpOpen(self, args):
        # args = {"playerId": str, "popupId": str, "useScroll": bool}
        print "==== popup opened: %s scroll=%s ====" % (
            args.get("popupId", ""), args.get("useScroll", False))

    def OnPopUpClose(self, args):
        print "==== popup closed for %s ====" % args.get("playerId", "")

指令打开设置事件(服务端 → 客户端) ​

由 /setting_open 指令触发(见 API_服务端.md),MyServerSystem 将 NotifyToClient 到目标客户端。外部模组如需在指令打开设置时做额外处理,可监听:

python
class MyClientSystem(ClientSystem):
    def __init__(self, namespace, systemName):
        ClientSystem.__init__(self, namespace, systemName)
        self.ListenForEvent(
            "Script_NeteaseMod9sPMlz0K", "client",
            "Script_NeteaseMod9sPMlz0K_OpenSettingsFromCommand",
            self, self.OnOpenSettingsFromCommand
        )

    def OnOpenSettingsFromCommand(self, args):
        main_card_id = args.get("main_card_id", "")
        middle_card_id = args.get("middle_card_id", "")
        sub_key = args.get("sub_key", "")
        print "==== open settings via command: main=%s sub=%s middle=%s ====" % (
            main_card_id, sub_key, middle_card_id)

调试日志开关事件(客户端 ↔ 服务端) ​

由"设置配置"服务端"调试 > 日志输出"开关触发,用于同步服务端全局日志开关状态(见 API_服务端.md)。事件名均以 Script_NeteaseMod9sPMlz0K_ 为前缀:

事件名(后缀)方向触发时机数据
ReqServerLogclient → server客户端打开服务端调试分类、请求当前值{playerId}
SetServerLogclient → server客户端切换全局日志开关{playerId, enabled}
ServerLogSyncserver → client服务端下发全局值与被下发者 OP 状态{enabled, is_op}

这些是框架内部自管理事件,外部一般无需监听。若确需监听,注意力事件名自带唯一前缀,勿使用裸事件名。