From 31d4baebdb3c90fdd0519ec4ecc6c143f1fc1ab1 Mon Sep 17 00:00:00 2001 From: xpamych Date: Sun, 26 Feb 2023 22:26:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20RCON?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 3 ++ hlna.py | 77 +++++++++++++++++++++++++++++++----------------- 2 files changed, 53 insertions(+), 27 deletions(-) create mode 100644 .idea/.gitignore diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/hlna.py b/hlna.py index 8089b13..7580188 100755 --- a/hlna.py +++ b/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()