добавлена возможность работы через RCON
This commit is contained in:
parent
b4d6e5e9aa
commit
31d4baebdb
3
.idea/.gitignore
vendored
Normal file
3
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
77
hlna.py
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()
|
||||
|
Loading…
Reference in New Issue
Block a user