使用机器人开房拉玩家加入
创建房间的设置部分列表: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() # 如果需要长时间在线,这个需要调用下,不然会自己离线