Files
netease-modsdk-wiki/docs/mcdocs/1-ModAPI/接口/联机大厅.md
2025-03-17 13:24:39 +08:00

321 lines
10 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
---
# 联机大厅
# 索引
---
| 接口 | <div style="width: 3em"></div> | 描述 |
| --- | --- | --- |
| [GetPlayerUid](联机大厅.md#getplayeruid) | <span style="display:inline;color:#ff5555">服务端</span> | 获取玩家的uid。只有在线玩家才可获取 |
| [LobbyGetStorage](联机大厅.md#lobbygetstorage) | <span style="display:inline;color:#ff5555">服务端</span> | 获取存储的数据。仅联机大厅可用 |
| [LobbyGetStorageBySort](联机大厅.md#lobbygetstoragebysort) | <span style="display:inline;color:#ff5555">服务端</span> | 排序获取存储的数据。仅联机大厅可用 |
| [LobbySetStorageAndUserItem](联机大厅.md#lobbysetstorageanduseritem) | <span style="display:inline;color:#ff5555">服务端</span> | 设置订单已发货或者存数据。仅联机大厅可用 |
| [QueryLobbyUserItem](联机大厅.md#querylobbyuseritem) | <span style="display:inline;color:#ff5555">服务端</span> | 查询还没发货的订单。仅联机大厅可用 |
## GetPlayerUid
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer
- 描述
获取玩家的uid。只有在线玩家才可获取
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 玩家uid |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateHttp(levelId)
uid = comp.GetPlayerUid(playerId)
```
## LobbyGetStorage
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer
- 描述
获取存储的数据。仅联机大厅可用
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| callback | function | 请求回调函数 |
| uid | int | 玩家uid如果传0表示获取全局数据 |
| keys | list(str) | 查询数据的key列表排序key与非排序key都可获取 |
- 返回值
- 备注
- 可以使用uid为0key为op_config获取开发者平台的运营管理配置中配置的json
- callback需要接受一个参数
当请求失败时参数返回None当请求成功时参数为一个dict格式如下。获取的key如果没有设置过就不会出现在返回的最新数据中
```python
{
"entity": {
"data": [
{
"key": str, # 数据的key
"value": int/float/str # 数据的值
},
...
]
}
}
```
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateHttp(levelId)
def cb(data):
if data:
print { i["key"]: i["value"] for i in data["entity"]["data"] }
else:
print "获取数据失败"
keys = ["money"]
comp.LobbyGetStorage(cb, uid, keys)
```
## LobbyGetStorageBySort
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer
- 描述
排序获取存储的数据。仅联机大厅可用
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| callback | function | 请求回调函数 |
| key | str | 查询数据的key。在开发者平台上配置的可排序的key才可以查询 |
| ascend | bool | 是否升序 |
| offset | int | 从排序后的第几个数据开始返回从0开始计算 |
| length | int | 返回多少个数据上限为50 |
- 返回值
- 备注
- 全局数据即uid为0不参与排序
- 返回的结果不一定是最新数据,建议只用来作客户端显示,获取业务逻辑所需的数据请使用[LobbyGetStorage](#lobbygetstorage)
- callback需要接受一个参数
当请求失败时参数返回None当请求成功时参数为一个dict格式如下。获取的key如果没有设置过就不会出现在返回的最新数据中
```python
{
"entity": {
"data": [
{
"uid": int, # 玩家uid
"nickname": str # 玩家的用户名
"value": int/float/str, # 数据的值
},
...
]
}
}
```
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateHttp(levelId)
def cb(data):
if data:
print data["entity"]["data"]
else:
print "获取数据失败"
# 获取money从大到小排序第1到第50的数据
comp.LobbyGetStorageBySort(cb, 'money', False, 0, 50)
# 获取money从大到小排序第51到第100的数据
comp.LobbyGetStorageBySort(cb, 'money', False, 50, 50)
```
## LobbySetStorageAndUserItem
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer
- 描述
设置订单已发货或者存数据。仅联机大厅可用
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| callback | function | 请求回调函数 |
| uid | int | 玩家uid如果传0表示设置全局数据 |
| orderId | int或None | 订单Id可选 |
| entitiesGetter | function或None | 用于返回存储的数据的函数,可选 |
- 返回值
- 备注
- uid为0key为op_config对应开发者平台的运营管理配置中配置的json使用这个接口时请避免覆盖掉
- callback需要接受一个参数
当请求**失败**时参数返回None。
当请求**成功**时参数为一个dict包含返回码最新数据等信息。
- 当code为0时表示设置成功。
- 当code为2时表示数据冲突例如多个房间同时设置同一个玩家的数据或者全局数据。
- 当code为5时表示订单冲突例如该订单已经标记为发货了。
当请求成功时,无论返回码是多少,都应该使用返回的最新数据更新本地数据。
当数据冲突时callback回调结束后会自动重新调用entitiesGetter获取数据并发起重试。
当订单冲突时callback回调结束后不会重试。
当发生冲突时设置的key如果之前没有设置过就不会出现在返回的最新数据中
具体格式如下:
```python
{
“code”: int, # 返回码
"message": str # 返回信息
"entity": {
"data": [ # 数据库最新值
{
"key": str, # 数据的key
"value": object # 数据的值
},
...
]
}
}
```
- entitiesGetter需要返回一个list(dict),格式为:
```python
[
{
"key": str, # 数据的key长度最大为64个字符
# uid为0key为op_config对应开发者平台的运营管理配置中配置的json请注意避免覆盖掉
"value": object # 数据的值
# 1. 如果是排序的keyvalue只能是int或者long范围为-2^63到2^63-1
# 2. 如果是非排序的keyvalue需要是可以被json序列化的对象如int/float/str/list/dict等
# 该object序列化为json字符串后最大不能超过1024*1024个字符
# 中文字符串需要是utf8编码不要用unicode
# 请留意json跟dict的区分例如json的key一定要是字符串json没有tuple等
},
...
]
```
- **该接口有调用频率限流同一个组件所有联机大厅房间的请求频率最多为每秒50次。如果请求超过该频率会导致阻塞请求的相应时间变长。**
- 同一个uid的LobbyGetStorage与LobbySetStorageAndUserItem调用会保证顺序执行
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateHttp(levelId)
playerId = "12345"
orderId = 12345
money = { playerId: 100 }
def cb(data):
if data:
# 更新本地数据
newData = { i["key"]: i["value"] for i in data["entity"]["data"] }
money[playerId] = newData["money"]
else:
print "发货/设置数据失败"
def getter():
return [
{
"key": "money",
value": money[playerId] + 100
}
]
comp.LobbySetStorageAndUserItem(cb, uid, orderId, getter)
```
## QueryLobbyUserItem
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer
- 描述
查询还没发货的订单。仅联机大厅可用
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| callback | function | 请求回调函数 |
| uid | int | 玩家uid |
- 返回值
- 备注
- callback需要接受一个参数
当请求失败时参数返回None当请求成功时参数为一个dict格式为
```python
{
"entity": {
"orders": [
{
"order_id": int, # 订单id
"timestamp": int, # 购买时间
"cmd": str # 实现指令
"product_count": int # 购买数量。目前不允许一次购买多个所以返回都是1
},
...
]
}
}
```
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateHttp(levelId)
def cb(data):
if data:
print data["entity"]["orders"]
else:
print "查询订单失败"
comp.QueryLobbyUserItem(cb, uid)
```