Skip to content

联机大厅 ​

索引 ​


接口
描述
GetHostPlayerUid服务端获取当前联机大厅房主的uid,非联机大厅时返回空字符串
GetPlayerRoomId服务端异步获取uid对应的玩家所在的房间id,非联机大厅时回调返回None
GetPlayerUid服务端获取玩家的uid。只有在线玩家才可获取
GetRoomInfo服务端获取当前所在联机大厅的房间信息,非联机大厅时返回None
GetRoomMeta服务端异步获取指定房间的所有元数据。非联机大厅时返回False
KickPlayer服务端踢出玩家,可传入自定义提示信息在客户端断线提示中展示,非联机大厅时返回False
KickPlayerByUid服务端通过uid踢出玩家,可传入自定义提示信息。
LobbyGetStorage服务端获取存储的数据。仅联机大厅可用
LobbyGetStorageBySort服务端排序获取存储的数据。仅联机大厅可用
LobbySetStorageAndUserItem服务端设置订单已发货或者存数据。仅联机大厅可用
QueryLobbyUserItem服务端查询还没发货的订单。仅联机大厅可用
SetRoomMeta服务端设置当前联机大厅房间的元数据,房间关闭时清除数据。非联机大厅返回False
TransferRoomHost服务端将联机大厅房主转移给指定在线玩家。仅联机大厅可用,且目标玩家必须在线。
TransferRoomHostByUid服务端通过uid将联机大厅房主转移给指定在线玩家。仅联机大厅可用,且目标玩家必须在线。

GetHostPlayerUid ​

服务端

method in mod.server.component.lobbyGameCompServer.LobbyGameCompServer

  • 描述

    获取当前联机大厅房主的uid,非联机大厅时返回空字符串

  • 参数

    无

  • 返回值

    数据类型
    说明
    int房主uid;非联机大厅或房主uid不存在时返回0
  • 示例

python
import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
lobbyComp = serverApi.GetEngineCompFactory().CreateLobbyGame(levelId)
uid = lobbyComp.GetHostPlayerUid()

GetPlayerRoomId ​

服务端

method in mod.server.component.lobbyGameCompServer.LobbyGameCompServer

  • 描述

    异步获取uid对应的玩家所在的房间id,非联机大厅时回调返回None

  • 参数

    参数名
    数据类型
    说明
    callbackfunction回调函数,需接受一个参数:成功时为玩家所在房间id(int),失败/非联机大厅时为None
    uidint玩家uid
  • 返回值

    数据类型
    说明
    bool是否已发起请求,非联机大厅时返回False。结果经callback异步返回
  • 备注

    • callback(int)的参数为玩家所在的房间id,为None表示该玩家当前不在线/不在该作品房间内
    • 当玩家进入房间(此时玩家不一定已经进入游戏里),接口即可返回房间id
  • 示例

python
import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
lobbyComp = serverApi.GetEngineCompFactory().CreateLobbyGame(levelId)
def cb(roomId):
    if roomId is None:
        print("获取失败或玩家不在联机大厅")
    else:
        print(roomId)
lobbyComp.GetPlayerRoomId(cb, playerUid)

GetPlayerUid ​

服务端

method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer

  • 描述

    获取玩家的uid。只有在线玩家才可获取

  • 参数

    参数名
    数据类型
    说明
    playerIdstr玩家实体id
  • 返回值

    数据类型
    说明
    int玩家uid
  • 示例

python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateHttp(levelId)
uid = comp.GetPlayerUid(playerId)

GetRoomInfo ​

服务端

method in mod.server.component.lobbyGameCompServer.LobbyGameCompServer

  • 描述

    获取当前所在联机大厅的房间信息,非联机大厅时返回None

  • 参数

    无

  • 返回值

    数据类型
    说明
    dict/None房间信息字典,
  • 备注

    • 房间信息字典字段说明:包含 roomId、modId、playerCount、maxCount、ownerEntityId、ownerUid 字段
    • ownerEntityId 为 None 表示房主不在当前游戏世界中
  • 示例

python
import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
lobbyComp = serverApi.GetEngineCompFactory().CreateLobbyGame(levelId)
roomInfo = lobbyComp.GetRoomInfo()
if roomInfo:
    roomId = roomInfo["roomId"]
    modId = roomInfo["modId"]
    ownerEntityId = roomInfo["ownerEntityId"]

GetRoomMeta ​

服务端

method in mod.server.component.lobbyGameCompServer.LobbyGameCompServer

  • 描述

    异步获取指定房间的所有元数据。非联机大厅时返回False

  • 参数

    参数名
    数据类型
    说明
    callbackfunction回调函数,需接受一个参数:成功时为包含房间所有元数据的dict,失败/房间不存在时为None
    roomIdint目标房间id
  • 返回值

    数据类型
    说明
    bool是否已发起请求,非联机大厅时返回False。结果经callback异步返回
  • 示例

python
import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
lobbyComp = serverApi.GetEngineCompFactory().CreateLobbyGame(levelId)
def cb(meta):
    if meta is None:
        print("获取失败或房间不存在")
    else:
        print(meta)
roomInfo = lobbyComp.GetRoomInfo()
if roomInfo:
    lobbyComp.GetRoomMeta(cb, roomInfo["roomId"])

KickPlayer ​

服务端

method in mod.server.component.lobbyGameCompServer.LobbyGameCompServer

  • 描述

    踢出玩家,可传入自定义提示信息在客户端断线提示中展示,非联机大厅时返回False

  • 参数

    参数名
    数据类型
    说明
    playerIdstr被踢出玩家的entityId
    messagestr自定义踢出提示信息,默认为None,使用默认提示
  • 返回值

    数据类型
    说明
    bool是否踢出成功
  • 备注

    • 返回true表示该玩家必定被踢出,但因退出逻辑是异步,所以此时玩家仍然在playerList中。
    • 该接口不能踢房主
  • 示例

python
import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
lobbyComp = serverApi.GetEngineCompFactory().CreateLobbyGame(levelId)
# 使用默认提示踢出玩家
lobbyComp.KickPlayer(playerId)
# 使用自定义提示踢出玩家
lobbyComp.KickPlayer(playerId, "自定义踢出信息")

KickPlayerByUid ​

服务端

method in mod.server.component.lobbyGameCompServer.LobbyGameCompServer

  • 描述

    通过uid踢出玩家,可传入自定义提示信息。

  • 参数

    参数名
    数据类型
    说明
    uidint玩家uid
    messagestr自定义踢出提示信息,默认None,使用默认提示
  • 返回值

    数据类型
    说明
    bool是否踢出成功
  • 备注

    • 返回true表示该玩家必定被踢出,但因退出逻辑是异步,所以此时玩家仍然在playerList中。
    • 该接口不能踢房主
  • 示例

python
import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
lobbyComp = serverApi.GetEngineCompFactory().CreateLobbyGame(levelId)
lobbyComp.KickPlayerByUid(uid, "自定义踢出信息")

LobbyGetStorage ​

服务端

method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer

  • 描述

    获取存储的数据。仅联机大厅可用

  • 参数

    参数名
    数据类型
    说明
    callbackfunction请求回调函数
    uidint玩家uid,如果传0表示获取全局数据
    keyslist(str)查询数据的key列表,排序key与非排序key都可获取
  • 返回值

    无

  • 备注

    • 可以使用uid为0,key为op_config获取开发者平台的运营管理配置中配置的json
    • callback需要接受一个参数 当请求失败时,参数返回None,当请求成功时,参数为一个dict,格式如下。(获取的key如果没有设置过,就不会出现在返回的最新数据中)
      python
      {
          "entity": {
              "data": [
                  {
                      "key": str,     # 数据的key
                      "value": int/float/str  # 数据的值
                  },
                  ...
              ]
          }
      }
    • 该接口有调用频率限流,同一个组件所有联机大厅房间的请求频率最多为每秒200次。如果请求超过该频率会导致阻塞,请求的相应时间变长。
  • 示例

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 ​

服务端

method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer

  • 描述

    排序获取存储的数据。仅联机大厅可用

  • 参数

    参数名
    数据类型
    说明
    callbackfunction请求回调函数
    keystr查询数据的key。在开发者平台上配置的可排序的key才可以查询
    ascendbool是否升序
    offsetint从排序后的第几个数据开始返回(从0开始计算)
    lengthint返回多少个数据,上限为50
  • 返回值

    无

  • 备注

    • 全局数据(即uid为0)不参与排序
    • 最多只能获取前200的数据(升序前200及降序前200)
    • 返回的结果不一定是最新数据,会有两分钟的刷新间隔,建议只用来作客户端显示,获取业务逻辑所需的数据请使用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 ​

服务端

method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer

  • 描述

    设置订单已发货或者存数据。仅联机大厅可用

  • 参数

    参数名
    数据类型
    说明
    callbackfunction请求回调函数
    uidint玩家uid,如果传0表示设置全局数据
    orderIdint或None订单Id,可选
    entitiesGetterfunction或None用于返回存储的数据的函数,可选
  • 返回值

    无

  • 备注

    • uid为0,key为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为0,key为op_config对应开发者平台的运营管理配置中配置的json,请注意避免覆盖掉
              "value": object  # 数据的值
                               # 1. 如果是排序的key,value只能是int或者long,范围为-2^63到2^63-1
                               # 2. 如果是非排序的key,value需要是可以被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 ​

服务端

method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer

  • 描述

    查询还没发货的订单。仅联机大厅可用

  • 参数

    参数名
    数据类型
    说明
    callbackfunction请求回调函数
    uidint玩家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)

SetRoomMeta ​

服务端

method in mod.server.component.lobbyGameCompServer.LobbyGameCompServer

  • 描述

    设置当前联机大厅房间的元数据,房间关闭时清除数据。非联机大厅返回False

  • 参数

    参数名
    数据类型
    说明
    keystr元数据键名
    valueany元数据值,须为JSON可序列化类型(dict/list/str/int/float/bool/None及其嵌套),非JSON可序列化时返回False
  • 返回值

    数据类型
    说明
    bool是否设置成功。
  • 备注

    • 非联机大厅、key非str、value非JSON可序列化时返回False
  • 示例

python
import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
lobbyComp = serverApi.GetEngineCompFactory().CreateLobbyGame(levelId)
lobbyComp.SetRoomMeta("seasonId", 2026)
lobbyComp.SetRoomMeta("scores", {"p1": 10})

TransferRoomHost ​

服务端

method in mod.server.component.lobbyGameCompServer.LobbyGameCompServer

  • 描述

    将联机大厅房主转移给指定在线玩家。仅联机大厅可用,且目标玩家必须在线。

  • 参数

    参数名
    数据类型
    说明
    playerIdstr目标玩家entityId,必须为当前在线玩家
  • 返回值

    数据类型
    说明
    bool是否转移成功。非联机大厅、目标不在线、目标非玩家、或与当前房主相同时返回False
  • 示例

python
import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
lobbyComp = serverApi.GetEngineCompFactory().CreateLobbyGame(levelId)
lobbyComp.TransferRoomHost(targetPlayerId)

TransferRoomHostByUid ​

服务端

method in mod.server.component.lobbyGameCompServer.LobbyGameCompServer

  • 描述

    通过uid将联机大厅房主转移给指定在线玩家。仅联机大厅可用,且目标玩家必须在线。

  • 参数

    参数名
    数据类型
    说明
    playerUidstr目标玩家uid,必须为当前在线玩家
  • 返回值

    数据类型
    说明
    bool是否转移成功。非联机大厅、目标不在线、或与当前房主相同时返回False
  • 示例

python
import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
lobbyComp = serverApi.GetEngineCompFactory().CreateLobbyGame(levelId)
lobbyComp.TransferRoomHostByUid(targetUid)