hln-a/dodo.py

172 lines
6.9 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
import os
import yaml
import threading
#import click
import fire
from pathlib import Path
home_dir = Path.home()
dir_server = f"{home_dir}/ARK_Servers/"
config_dodo = f"{home_dir}/.config/dodo/"
mods_id = ""
listen_server = True
"------Узнаем список карт--------------"
# Это все же надо сделать перед запуском карт
try: #пробуем открыть конфиг с названиями карт
with open(config_dodo + "map_server") as x: #открытие конфига с названиями карт
map_server = x.read().splitlines() #Собираем по строчно все названия карт в массив
except:
map_server = [] #если ошибка или файла нет создаем пустой массив
"--------------------------------------"
def print_line(text):
"Добавление тире вокруг текста, потом сюда можно поместить и расскраску текста"
print("-"*20)
print(text)
print("-"*20)
def create_dir(directory):
"Проверка и создание директории"
if not os.path.exists(directory):
os.mkdir(directory)
def check_int(number=""):
"Проверка на ввод числа"
while True:
try:
x = int(input(number))
return x
except ValueError:
print("Введите число")
create_dir(dir_server)
create_dir(config_dodo)
def yaml_edit(map_server=map_server):
claster_id = None
count_maps = 1
count_cluster = check_int("""Укажите требуется ли кластер?
1. Да
2. Нет
: """)
if count_cluster == 1:
cluster_server = True
else:
cluster_server = False
if cluster_server == True:
claster_id = input("Укажите id для кластера, любое сочитание символов: \n")
if map_server != []:
print("Уже установленные карты: ", map_server)
count_maps = check_int("Укажите количество карт: \n")
for i in range(int(count_maps)):
amount_map = check_int("""Выберите карту из списка указав номер
1. The Island
2. The Center
3. Scorched Earth
4. Ragnarok
5. Aberration
6. Extinction
7. Valguero
8. Genesis: Part 1
9. Crystal Isles
10. Genesis: Part 2
11. Lost Island
12. Fjordur
: """)
match amount_map:
case 1:
map_server.append("TheIsland")
case 2:
map_server.append("TheCenter")
case 3:
map_server.append("ScorchedEarth_P")
case 4:
map_server.append("Ragnarok")
case 5:
map_server.append("Aberration_P")
case 6:
map_server.append("Extinction")
case 7:
map_server.append("Valguero_P")
case 8:
map_server.append("Genesis")
case 9:
map_server.append("CrystalIsles")
case 10:
map_server.append("Gen2")
case 11:
map_server.append("LostIsland")
case 12:
map_server.append("Fjordur")
name_server = input("Укажите название Сервера: \n")
port_server = check_int("Укажите порт Сервера <7777>: \n")
query_port = check_int("Укажите Query-порт Сервера <27015>: \n")
password_server = input("Укажите пароль Сервера: \n")
max_players = check_int("Укажите максимальное количество игроков: \n")
yaml_create(cluster_server, map_server, name_server, port_server, query_port, password_server, max_players, claster_id)
"--------------Запись в файл map_server------------------------"
with open(f"{config_dodo}/map_server", "w") as file: #создаем или открываем файл с картами
for line in map_server: # пробегаемся по массиву с картами
file.write(line + '\n') # и записываем по строчно
"--------------------------------------------------------------"
def yaml_create(cluster_server, map_server, name_server, port_server, query_port, password_server, max_players, claster_id):
settings_dodo = [
{
'Cluster' : cluster_server,
'SessionName' : name_server,
'Port' : port_server,
'QueryPort' : query_port,
'ServerPassword' : password_server,
'MaxPlayers' : max_players,
'ModsId' : mods_id,
'Listen' : listen_server,
'ServerPath' : dir_server
}
]
print(claster_id)
if claster_id != None:
settings_dodo[0]['clasterid'] = claster_id
with open(config_dodo + f"{map_server[-1]}.yaml", 'w') as yamlfile:
data = yaml.dump(settings_dodo, yamlfile)
print("Конфиг создан")
def install(map_server=map_server):
for i in map_server:
cluster_server, name_server, port_server, query_port, password_server, max_players, dir_server, mods_id, listen_server = read_yaml(i)
create_dir(dir_server + i)
print_line("Качаем карту: " + i)
os.system(f"steamcmd +force_install_dir {dir_server + i} +login anonymous +app_update 376030 +quit")
print_line("Карта скачана: " + i)
def start(i):
os.chdir(dir_server + i + "/ShooterGame/Binaries/Linux/")
os.system(f"./ShooterGameServer {i}?SessionName={name_server}?Port={port_server}?QueryPort={query_port}?MaxPlayers={max_players}?GameModIds={mods_id}?listen={listen_server}")
print_line("server " +i + " запустился")
threads = threading.Thread(target=start, args=(i,))
threads.start()
def read_yaml(map_server):
print(map_server)
with open(f"{home_dir}/.config/dodo/{map_server}.yaml", "r") as yamlfile:
data = yaml.load(yamlfile, Loader=yaml.FullLoader)
data = data[0]
dir_server = data['ServerPath']
name_server = data['SessionName']
port_server = data['Port']
query_port = data['QueryPort']
password_server = data['ServerPassword']
max_players = data['MaxPlayers']
mods_id = data['ModsId']
listen_server = data['Listen']
cluster_server = data['Cluster']
return cluster_server, name_server, port_server, query_port, password_server, max_players, dir_server, mods_id, listen_server
#print("Запуск программы в формате: dodo.py <название функции> параметры")
fire.Fire()