Files
netease-modsdk-wiki/docs/mcdocs/1-ModAPI/接口/通用/事件.md
2025-03-18 14:46:12 +08:00

478 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
sidebarDepth: 1
---
# 事件
## BroadcastEvent
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
method in mod.common.system.baseSystem.BaseSystem
- 描述
本地广播事件客户端system广播的事件仅客户端system能监听服务器system广播的事件仅服务端system能监听。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| eventName | str | 事件名 |
| eventData | dict | 事件参数一般用CreateEventData的返回值 |
- 返回值
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def BroadCastEventTest(self, args):
self.BroadcastEvent("bulletShootEvent", args)
```
## BroadcastToAllClient
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.system.serverSystem.ServerSystem
- 描述
服务器广播事件到所有客户端
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| eventName | str | 事件名 |
| eventData | dict | 事件参数一般用CreateEventData的返回值 |
- 返回值
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def BroadCastEventTest(self, args):
self.BroadcastToAllClient("bulletShootEvent", args)
```
## CreateEventData
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
method in mod.common.system.baseSystem.BaseSystem
- 描述
创建自定义事件的数据eventData用于发送事件。创建的eventData可以理解为一个dict可以嵌套赋值dict,list和基本数据类型但不支持tuple
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| dict | 事件数据 |
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def shoot(self):
shootData = self.CreateEventData()
shootData["id"] = self.mPlayerId
# 向客户端发送事件传递了一个playerId
self.NotifyToClient('-12345678910','BulletHit', shootData)
```
## GetEngineNamespace
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
### 服务端接口
<span id="s0"></span>
method in mod.server.extraServerApi
- 描述
获取引擎事件的命名空间。监听引擎事件时namespace传该接口返回的namespace
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 引擎的命名空间 |
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def __init__(self, namespace, systemName):
ServerSystem.__init__(self, namespace, systemName)
self.ListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(), AddServerPlayerEvent, self, self.OnPlayerAdd)
```
### 客户端接口
<span id="c0"></span>
method in mod.client.extraClientApi
- 描述
获取引擎事件的命名空间。监听引擎事件时namespace传该接口返回的namespace
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 引擎的命名空间 |
- 示例
```python
import mod.client.extraClientApi as clientApi
ClientSystem = clientApi.GetClientSystemCls()
class FpsClientSystem(ClientSystem):
def __init__(self, namespace, systemName):
ClientSystem.__init__(self, namespace, systemName)
self.ListenForEvent(clientApi.GetEngineNamespace(), clientApi.GetEngineSystemName(), 'UiInitFinished', self, self.OnUIInitFinished)
```
## GetEngineSystemName
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
### 服务端接口
<span id="s0"></span>
method in mod.server.extraServerApi
- 描述
获取引擎系统名。监听引擎事件时systemName传该接口返回的systemName
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 引擎的systemName |
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def __init__(self, namespace, systemName):
ServerSystem.__init__(self, namespace, systemName)
self.ListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(), AddServerPlayerEvent, self, self.OnPlayerAdd)
```
### 客户端接口
<span id="c0"></span>
method in mod.client.extraClientApi
- 描述
获取引擎系统名。监听引擎事件时systemName传该接口返回的systemName
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 引擎的systemName |
- 示例
```python
import mod.client.extraClientApi as clientApi
ClientSystem = clientApi.GetClientSystemCls()
class FpsClientSystem(ClientSystem):
def __init__(self, namespace, systemName):
ClientSystem.__init__(self, namespace, systemName)
self.ListenForEvent(clientApi.GetEngineNamespace(), clientApi.GetEngineSystemName(), 'UiInitFinished', self, self.OnUIInitFinished)
```
## ListenForEvent
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
method in mod.common.system.baseSystem.BaseSystem
- 描述
注册监听某个系统抛出的事件。若监听引擎事件时namespace和systemName分别为GetEngineNamespace()和GetEngineSystemName()。具体每个事件的详细事件data可以参考"事件"分类下的内容
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| namespace | str | 所监听事件的来源系统的namespace |
| systemName | str | 所监听事件的来源系统的systemName |
| eventName | str | 事件名 |
| instance | any | 回调函数所属的类的实例 |
| func | function | 回调函数 |
| priority | int | 这个回调函数的优先级。默认值为0这个数值越大表示被执行的优先级越高最高为10。 |
- 返回值
- 备注
- 服务端system监听的客户端系统事件的回调参数中会自带一个叫"\_\_id\_\_"的key值为对应客户端的玩家id
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def ListenEvent(self):
# 监听了引擎事件'ServerChatEvent'
self.ListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(), 'ServerChatEvent', self, self.OnServerChat)
# 监听客户端系统事件
self.ListenForEvent("MyFpsMod", "FpsClientSystem", "MyEvent", self, self.OnMyEvent)
def OnServerChat(self, args):
print 'OnServerChat', args
def OnMyEvent(self, args):
print 'OnMyEvent', args['__id__'], args
```
## NotifyToClient
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.system.serverSystem.ServerSystem
- 描述
服务器发送事件到指定客户端
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| targetId | str | 客户端对应的Id一般就是玩家Id |
| eventName | str | 事件名 |
| eventData | dict | 事件参数一般用CreateEventData的返回值 |
- 返回值
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def NotifyToClientTest(self, args):
self.NotifyToClient('-1234567890',"bulletShootEvent", args)
```
## NotifyToMultiClients
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.system.serverSystem.ServerSystem
- 描述
服务器发送事件到指定一批客户端相比于在for循环内使用NotifyToClient性能更好
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| targetIdList | list(str) | 客户端对应的playerId列表playerId为玩家的entityId |
| eventName | str | 事件名 |
| eventData | dict | 事件参数一般用CreateEventData的返回值 |
- 返回值
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def NotifyToClientTest(self, args):
self.NotifyToMultiClients(['-1234567890', '-321654987'],"bulletShootEvent", args)
```
## NotifyToServer
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.system.clientSystem.ClientSystem
- 描述
客户端发送事件到服务器
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| eventName | str | 事件名 |
| eventData | dict | 事件参数一般用CreateEventData的返回值 |
- 返回值
- 示例
```python
import mod.client.extraClientApi as clientApi
ClientSystem = clientApi.GetClientSystemCls()
class FpsClientSystem(ClientSystem):
def NotifyToServerTest(self, args):
self.NotifyToServer("bulletShootEvent", args)
```
## UnListenAllEvents
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
method in mod.common.system.baseSystem.BaseSystem
- 描述
反注册监听某个系统抛出的所有事件,即不再监听。
- 参数
- 返回值
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def ListenEvent(self):
# 服务端脚本自定义了1个事件
self.DefineEvent('BulletHit')
# 服务器端脚本监听了引擎的1个事件'ServerChatEvent'
# 具体每个事件的详细事件data可以参考《MODSDK文档》
self.ListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(), 'ServerChatEvent', self, self.OnServerChat)
def UnListenEvent(self):
# 取消自定义的事件
self.UnDefineEvent('BulletHit')
# 取消监听的系统事件
self.UnListenAllEvents()
```
## UnListenForEvent
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
method in mod.common.system.baseSystem.BaseSystem
- 描述
反注册监听某个系统抛出的事件即不再监听。若是引擎事件则namespace和systemName分别为[GetEngineNamespace](#getenginenamespace)和[GetEngineSystemName](#getenginesystemname)。与ListenForEvent对应。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| namespace | str | 所监听事件的来源系统的namespace |
| systemName | str | 所监听事件的来源系统的systemName |
| eventName | str | 事件名 |
| instance | any | 回调函数所属的类的实例 |
| func | function | 回调函数 |
| priority | int | 这个回调函数的优先级。默认值为0这个数值越大表示被执行的优先级越高。 |
- 返回值
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def ListenEvent(self):
# 服务端脚本自定义了1个事件
self.DefineEvent('BulletHit')
# 服务器端脚本监听了引擎的1个事件'ServerChatEvent'
self.ListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(), 'ServerChatEvent', self, self.OnServerChat)
def UnListenEvent(self):
# 取消自定义的事件
self.UnDefineEvent('BulletHit')
# 取消监听的系统事件
self.UnListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(), 'ServerChatEvent', self, self.OnServerChat)
```