добавлена возможность работы через RCON

This commit is contained in:
Евгений Храмов 2023-02-26 22:26:49 +03:00
parent b4d6e5e9aa
commit 31d4baebdb
2 changed files with 53 additions and 27 deletions

3
.idea/.gitignore vendored Normal file

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

77
hlna.py

@ -6,6 +6,7 @@ from pathlib import Path
from pprint import pprint
import yaml
from rcon.source import Client
import click
import colorama
import click_completion
@ -84,6 +85,7 @@ def config(name_server=list_config):
data = {}
cluster_dir_override = ""
cluster_id = ""
rcon_p = []
count_cluster = check_int("""Укажите требуется ли кластер?
1. Да
@ -138,6 +140,7 @@ def config(name_server=list_config):
data = read_yaml(i)
port_s.append(data['Port'])
query_p.append(data['QueryPort'])
rcon_p.append(data['RCONPort'])
if amount_map == 1:
map_s = "TheIsland"
@ -176,26 +179,6 @@ def config(name_server=list_config):
else:
name_server.pop(); name_server.append(map_s) # если enter, то ставим последним элементом карту
# while True:
# id_server = input("Укажите метку для запуска или конфигурирования этой карты\n")
# if id_server == "":
# if id_srv == {}:
# print_line("Значение по умолчанию")
# else:
#
#
# if id_srv != {}: # Если есть хоть какой-то id
# # if id_server == id_srv[name_server[-1]]: # тут ошибка !
# # break
# if id_server in id_srv.values(): # Если введёное уже есть в списке меток
# print_line("Метка уже занята")
# else:
# id_srv[name_server[-1]] = id_server
# break
# else:
# id_srv[name_server[-1]] = id_server
# break
while True:
port_server = check_int("Укажите порт Сервера <7777>: \n")
if port_server == 0:
@ -214,21 +197,28 @@ def config(name_server=list_config):
if query_p == []:
query_port = 27015
else:
query_port = max(query_p) + 2
query_port = max(query_p) + 1
if query_port is query_p: # если веденный порт есть в списке портов
print("Этот порт уже занят")
else:
break
rcon_enabled = True
if rcon_p == []:
rcon_port = 27020
else:
rcon_port = max(rcon_p) + 1
password_server = input("Укажите пароль Сервера: \n")
adminpassword_server = 123
max_players = check_int("Укажите максимальное количество игроков: \n")
if max_players == 0:
max_players = 70
yaml_create(cluster_server, map_s, name_server[-1], port_server, query_port, password_server, max_players, cluster_id, cluster_dir_override)
yaml_create(cluster_server, map_s, name_server[-1], port_server, query_port, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override)
def yaml_create(cluster_server, map_s, name_server, port_server, query_port, password_server, max_players, cluster_id, cluster_dir_override):
def yaml_create(cluster_server, map_s, name_server, port_server, query_port, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override):
settings_hlna = [
{
'map' : map_s,
@ -236,6 +226,9 @@ def yaml_create(cluster_server, map_s, name_server, port_server, query_port, pas
'SessionName' : name_server,
'Port' : port_server,
'QueryPort' : query_port,
'RCONEnabled' : rcon_enabled,
'RCONPort' : rcon_port,
'ServerAdminPassword': adminpassword_server,
'ServerPassword' : password_server,
'MaxPlayers' : max_players,
'ModsId' : mods_id,
@ -321,6 +314,8 @@ def servers(map_server=list_config):
Кластер id: {data['clusterid']}
Query порт: {data['QueryPort']}
Порт сервера: {data['Port']}
Rcon включен: {data['RCONEnabled']}
Rcon порт : {data['RCONPort']}
Максимальное кол-во игроков: {data['MaxPlayers']}""")
print("-" * 40)
@ -338,6 +333,8 @@ def servers(map_server=list_config):
Кластер id: {data['clusterid']}
Query порт: {data['QueryPort']}
Порт сервера: {data['Port']}
Rcon включен: {data['RCONEnabled']}
Rcon порт : {data['RCONPort']}
Максимальное кол-во игроков: {data['MaxPlayers']}""")
print("-" * 40)
@ -370,14 +367,15 @@ def start(m, name_server=list_config):
f"steamcmd +force_install_dir {data['ServerPath'] + i} +login anonymous +app_update 376030 +quit")
def start(i):
os.chdir(data['ServerPath'] + i + "/ShooterGame/Binaries/Linux/")
def starting(i):
# os.chdir(data['ServerPath'] + i + "/ShooterGame/Binaries/Linux/")
os.chdir(dir_server + "Server" + "/ShooterGame/Binaries/Linux/")
os.system(
f"./ShooterGameServer {i}?SessionName={data['SessionName']}?Port={data['Port']}?QueryPort={data['QueryPort']}?MaxPlayers={data['MaxPlayers']}?GameModIds={data['ModsId']}?listen={data['Listen']} -clusterid={data['clusterid']} -ClusterDirOverride={data['clusterdir']}")
f"./ShooterGameServer {i}?SessionName={data['SessionName']}?Port={data['Port']}?QueryPort={data['QueryPort']}?RCONEnabled={data['RCONEnabled']}?RCONPort={data['RCONPort']}?ServerAdminPassword={data['ServerAdminPassword']}?multihome=127.0.0.1?MaxPlayers={data['MaxPlayers']}?GameModIds={data['ModsId']}?listen={data['Listen']} -clusterid={data['clusterid']} -ClusterDirOverride={data['clusterdir']}")
if x == 0:
print_line("Карта скачана: " + i)
threads = threading.Thread(target=start, args=(starting_map,))
threads = threading.Thread(target=starting, args=(starting_map,))
threads.start()
else:
print(f"Карта {i} не установлена")
@ -410,6 +408,31 @@ def read_yaml(name_server, flag=True):
data = yaml.load(yamlfile, Loader=yaml.FullLoader)
return data[0] # возвращаем словарь со всеми значениями
@hlna.command()
@click.argument('c', nargs=1)
@click.option('-m', required=True, help="Название карты для применения rcon команды")
def rcon(m,c):
print_line(c)
print_line(m)
dict_mapname = {}
dict_adminpwd = {}
for i in list_config:
data = read_yaml(i)
dict_mapname[data['RCONPort']] = data['map']
dict_adminpwd[data['RCONPort']] = data['ServerAdminPassword']
rcon_ports = []
for ns, v in dict_mapname.items():
print_line(f"переменные v и m {v} & {m}")
if v in m:
rcon_ports.append(ns)
print_line(f"Карта которая запускается {ns}")
for port in rcon_ports:
print(port)
passwd = dict_adminpwd[port]
with Client('127.0.0.1', port, passwd=str(passwd)) as client:
response = client.run(c)
print(response)
if __name__ == '__main__':
hlna()