创建房间的设置部分列表:Options

详细和最新的列表可以在Protobufs中找到,搜索CMsgPracticeLobbySetDetails

使用这种方式时,记得需要处理下机器人,进入游戏会有一个未知玩家也在队伍,需要把他排除下

简答的测试代码 Test.py

from steam.client import SteamClient
from dota2.client import Dota2Client
import signal
from dota2.proto_enums import DOTA_GameMode
from dota2.common_enums import EServerRegion

client = SteamClient()
dota = Dota2Client(client)

password = '1230.'

options = {
    # 是否可以作弊
    'allow_cheats': False,
    # 是否可以观看
    'allow_spectating': True,
    # 机器人填充
    'fill_with_bots': False,
    # 需要设置为自定义
    'game_mode': DOTA_GameMode.DOTA_GAMEMODE_CUSTOM,
    'game_name': 'TestChess',
    # 服务器
    'server_region': EServerRegion.PerfectWorldTelecom,
    # 地图id 没有设置这个无法正确开始自定义地图
    'custom_game_mode': '2503332598',
    # 地图id 不设置无法正确开始游戏
    'custom_game_id': 2503332598,
    # 在创建自定义游戏那会可以选择的地图名
    'custom_map_name': 'dotaChessSoul'
}

@dota.on('ready')
def dota_ready():
    print("创建 dota2 房间!!!")

    # https://github.com/Arcana/node-dota2#module_Dota2.Dota2Client+Lobby.Options
    dota.create_practice_lobby(password, options)

@dota.on('lobby_new')
def lobby_new(arg):
    # 邀请玩家加入房间
    dota.invite_to_lobby(76561198968115940)

@dota.on('lobby_changed')
def lobby_change(arg):
    # 加入了一个玩家,那就准备开始游戏
    if(len(arg.all_members) == 2):
        # 设置最大玩家数为1
        options['custom_max_players'] = 1
        dota.config_practice_lobby(options)
        # 机器人离开房间,游戏开始
        dota.leave_practice_lobby()

@dota.on('notready')
def dota_notready():
    print("Dota 连接失败...... 退出游戏和登录中,")
    client.logout()

@client.on('logged_on')
def start_dota():
    print("登录成功.")
    print("启动 dota2")
    dota.launch()

@dota.on("lobby_removed")
def lobby_removed(arg):
    try:
        dota.exit()
    finally:
        try:
            client.logout()
        finally:
            exit()

def exitApp(signum, frame):
    dota.leave_practice_lobby()

signal.signal(signal.SIGINT, exitApp)
signal.signal(signal.SIGTERM, exitApp)

client.cli_login("Steam账号", "登录密码")
client.run_forever() # 如果需要长时间在线,这个需要调用下,不然会自己离线