import os import requests import zipfile import shutil import platform from pathlib import Path import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk from io import BytesIO def get_hl_path(): """Get the Half-Life installation path based on the operating system.""" if platform.system() == "Windows": return Path(os.getenv('ProgramFiles(x86)')) / "Steam/steamapps/common/Half-Life" elif platform.system() == "Linux": return Path.home() / ".steam/steam/steamapps/common/Half-Life" else: raise OSError("Unsupported operating system") def download_file(url, dest): response = requests.get(url, stream=True) with open(dest, 'wb') as file: for chunk in response.iter_content(chunk_size=8192): if chunk: file.write(chunk) def is_new_version_available(local_version_path, server_version_url): if not local_version_path.exists(): return True with open(local_version_path, 'r') as local_version_file: local_version = local_version_file.read().strip() response = requests.get(server_version_url) server_version = response.text.strip() return local_version != server_version def update_version_file(version_url, version_file_path): response = requests.get(version_url) with open(version_file_path, 'w') as file: file.write(response.text.strip()) def unzip_file(zip_path, extract_to_path): if extract_to_path.exists(): shutil.rmtree(extract_to_path) extract_to_path.mkdir(parents=True, exist_ok=True) with zipfile.ZipFile(zip_path, 'r') as zip_ref: zip_ref.extractall(extract_to_path) def update_mod(): print("Downloading new version...") download_file(mod_url, mod_zip_file) print(f"Unzipping the mod into {spacelife_path}...") unzip_file(mod_zip_file, spacelife_path) update_version_file(version_url, version_file) print("Update complete!") messagebox.showinfo("Update Complete", "Your mod has been updated to the latest version.") version_label.config(text=f"Version: {get_version()} (up to date)") update_button.pack_forget() if mod_zip_file.exists(): mod_zip_file.unlink() def get_version(): if version_file.exists(): with open(version_file, 'r') as file: return file.read().strip() return "Unknown" hl_path = get_hl_path() spacelife_path = hl_path / "SpaceLife" version_file = hl_path / "SpaceLifeVersion.txt" mod_url = "https://deadzone.tf/SpaceLife.zip" version_url = "https://deadzone.tf/SpaceLifeVersion.txt" mod_zip_file = hl_path / "SpaceLife.zip" spacelife_path.mkdir(parents=True, exist_ok=True) root = tk.Tk() root.title("SpaceLife Updater") root.geometry("345x200") background_url = "https://deadzone.tf/background.png" response = requests.get(background_url) img_data = response.content img = Image.open(BytesIO(img_data)) background_image = ImageTk.PhotoImage(img) background_label = tk.Label(root, image=background_image) background_label.place(x=0, y=0, relwidth=1, relheight=1) top_frame = tk.Frame(root, bg='blue') top_frame.pack(side='top', fill='x') version_label = tk.Label(top_frame, text=f"Version: {get_version()}", bg='blue', fg='black') version_label.pack(side='right', padx=10, pady=20) update_needed = is_new_version_available(version_file, version_url) if update_needed: update_button = tk.Button(top_frame, text="Update", command=update_mod) update_button.pack(side='left', padx=10) else: version_label.config(text=f"Version: {get_version()} (up to date)") root.mainloop()