Ich bin grade Dabei mir einen Manger zu Erstellen mit Tinker womit ich mir meine Ark Survival Ascended Schneller erstellen und verwalten kann.
Aber ich bekomme es irgendwie nicht hin das wenn ich auf neuen Server Hinzufügen Drücke das es dann auch Den Ark Survival Ascended Server Automatisch installiert und Steam CMD.
Kann mir da jemand vielleicht weiterhelfen das ist mein Code wie er im moment aussieht.
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk, messagebox, filedialog
import subprocess
import os
import threading
import json
import requests
import zipfile
import time
import schedule
import psutil
from rcon.source import Client
CONFIG_FILE = "servers.json"
STEAMCMD_DIR = r"E:\\HigFiveManger\\steamcmd"
STEAMCMD_PATH = os.path.join(STEAMCMD_DIR, "steamcmd.exe")
STEAMCMD_URL = "https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip"
ARK_APP_ID = "376030"
def load_servers():
if os.path.exists(CONFIG_FILE):
with open(CONFIG_FILE, "r") as file:
return json.load(file)
return {"servers": {}}
def save_servers():
with open(CONFIG_FILE, "w") as file:
json.dump(servers, file, indent=4)
def install_steamcmd():
if not os.path.exists(STEAMCMD_DIR):
os.makedirs(STEAMCMD_DIR)
if os.path.exists(STEAMCMD_PATH):
print("SteamCMD bereits installiert.")
return
print("Lade SteamCMD herunter...")
response = requests.get(STEAMCMD_URL, stream=True)
zip_path = os.path.join(STEAMCMD_DIR, "steamcmd.zip")
with open(zip_path, "wb") as file:
for chunk in response.iter_content(chunk_size=1024):
file.write(chunk)
print("Entpacke SteamCMD...")
with zipfile.ZipFile(zip_path, "r") as zip_ref:
zip_ref.extractall(STEAMCMD_DIR)
os.remove(zip_path)
print("SteamCMD Installation abgeschlossen.")
def install_ark_server(server_path, log_widget):
install_steamcmd()
command = [STEAMCMD_PATH, "+login", "anonymous", "+force_install_dir", server_path, "+app_update", ARK_APP_ID, "validate", "+quit"]
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True)
for line in process.stdout:
log_widget.insert(tk.END, line + "\n")
log_widget.see(tk.END)
process.wait()
log_widget.insert(tk.END, "Installation abgeschlossen!\n")
log_widget.see(tk.END)
servers = load_servers()
class ArkServerManager:
def __init__(self, root):
self.root = root
self.root.title("ARK: Survival Ascended Server Manager")
self.root.geometry("800x600")
self.tabs = ttk.Notebook(root)
self.tabs.pack(expand=1, fill="both")
self.servers = servers.get("servers", {})
self.add_server_tab = ttk.Frame(self.tabs)
self.tabs.add(self.add_server_tab, text="+ Neuer Server")
self.setup_add_server_tab()
for server_name, server_data in self.servers.items():
self.create_server_tab(server_name, server_data)
# SteamCMD sofort beim Start prüfen und installieren
threading.Thread(target=install_steamcmd, daemon=True).start()
def setup_add_server_tab(self):
label = tk.Label(self.add_server_tab, text="Neuen Server hinzufügen")
label.pack()
self.new_server_name = tk.Entry(self.add_server_tab, width=30)
self.new_server_name.pack(pady=5)
self.new_server_path = tk.Entry(self.add_server_tab, width=50)
self.new_server_path.pack(pady=5)
browse_btn = tk.Button(self.add_server_tab, text="Verzeichnis wählen", command=self.browse_server_path)
browse_btn.pack(pady=5)
add_btn = tk.Button(self.add_server_tab, text="Hinzufügen", command=self.add_server)
add_btn.pack(pady=5)
def browse_server_path(self):
path = filedialog.askdirectory()
if path:
self.new_server_path.delete(0, tk.END)
self.new_server_path.insert(0, path)
def add_server(self):
name = self.new_server_name.get()
path = self.new_server_path.get()
if name and path:
self.servers[name] = {"path": path}
servers["servers"] = self.servers
save_servers()
self.create_server_tab(name, {"path": path})
self.new_server_name.delete(0, tk.END)
self.new_server_path.delete(0, tk.END)
def create_server_tab(self, name, data):
tab = ttk.Frame(self.tabs)
self.tabs.add(tab, text=name)
server_path = data["path"]
log_text = tk.Text(tab, height=15, width=80)
log_text.pack(pady=5)
install_btn = tk.Button(tab, text="📥 Server Installieren", command=lambda: self.install_server(server_path, log_text))
install_btn.pack(pady=5)
start_btn = tk.Button(tab, text="▶ Server Starten", command=lambda: self.start_server(server_path))
start_btn.pack(pady=5)
stop_btn = tk.Button(tab, text="⏹ Server Stoppen", command=self.stop_server)
stop_btn.pack(pady=5)
# Automatisch die Installation starten
self.install_server(server_path, log_text)
def install_server(self, server_path, log_widget):
threading.Thread(target=install_ark_server, args=(server_path, log_widget), daemon=True).start()
def start_server(self, server_path):
command = f'cd "{server_path}" && start ShooterGameServer.exe TheIsland?listen'
subprocess.Popen(command, shell=True)
def stop_server(self):
os.system("taskkill /f /im ShooterGameServer.exe")
if __name__ == "__main__":
root = tk.Tk()
app = ArkServerManager(root)
root.mainloop()