478 lines
12 KiB
Markdown
478 lines
12 KiB
Markdown
---
|
||
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)
|
||
```
|
||
|
||
|
||
|