#!/usr/bin/env python3 import os import yaml import threading import click 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.readlines() #Собираем по строчно все названия карт в массив except: map_server = [] "--------------------------------------" def create_dir(directory): "Проверка и создание директории" if not os.path.exists(directory): os.mkdir(directory) create_dir(dir_server) create_dir(config_dodo) def yaml_edit(map_server): count_maps = 1 print("""Укажите требуется ли кластер? 1. Да 2. Нет""") count_cluster = input("") if count_cluster == "1": cluster_server = True else: cluster_server = False while cluster_server == True: count_maps = input("Укажите количество карт:\n") if count_maps.isdigit: break print("Введите цифры") for i in range(int(count_maps)): print("""Выберите карту из списка указав номер 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""") amount_map = input("") if amount_map == "1": map_server.append("TheIsland") elif amount_map == "2": map_server.append("TheCenter") elif amount_map == "3": map_server.append("ScorchedEarth_P") elif amount_map == "4": map_server.append("Ragnarok") elif amount_map == "5": map_server.append("Aberration_P") elif amount_map == "6": map_server.append("Extinction") elif amount_map == "7": map_server.append("Valguero_P") elif amount_map == "8": map_server.append("Genesis") elif amount_map == "9": map_server.append("CrystalIsles") elif amount_map == "10": map_server.append("Gen2") elif amount_map == "11": map_server.append("LostIsland") elif amount_map == "12": map_server.append("Fjordur") print("Укажите название Сервера") name_server = input("") print("Укажите порт Сервера <7777>") port_server = input("") print("Укажите Query-порт Сервера <27015>") query_port = input("") print("Укажите пароль Сервера") password_server = input("") print("Укажите максимальное количество игроков") max_players = input("") yaml_create(cluster_server, map_server, name_server, port_server, query_port, password_server, max_players) "--------------Запись в файл map_server------------------------" with open(f"{config_dodo}/map_server", "w") as file: #создаем или открываем файл с картами for line in map_server: # пробегаемся по массиву с картами file.write(line + '\n') # и записываем по строчно "--------------------------------------------------------------" return cluster_server, map_server, name_server, port_server, query_port, password_server, max_players, count_maps def yaml_create(cluster_server, map_server, name_server, port_server, query_port, password_server, max_players): settings_dodo = [ { 'Cluster' : cluster_server, 'Map' : map_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 } ] with open(config_dodo + f"{map_server[-1]}.yaml", 'w') as yamlfile: data = yaml.dump(settings_dodo, yamlfile) print("Конфиг создан") def install(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) if not os.path.isdir(dir_server + i): os.mkdir(dir_server + i) print("-"*20) print("Качаем карту " + i) print("-"*20) os.system(f"steamcmd +force_install_dir {dir_server + i} +login anonymous +app_update 376030 +quit") print("-"*20) print("Карта скачана " + i) print("-"*20) 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("-"*20) print("server " +i + " Запустился") print("-"*20) 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] print("-"*20) print(data) print(type(data)) print("-"*20) #map_server = data['Map'] 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 c = input("""Введите 1.Настроить сервера 2.Запустить сервера""") if c=="1": cluster_server, map_server, name_server, port_server, query_port, password_server, max_players, count_maps = yaml_edit(map_server) m = input("Запустить сервер? y/N") if m.lower() == "y": install(map_server) elif c=="2": install(map_server)