🎉 | Added project files.
This commit is contained in:
parent
c371d25dc3
commit
74047499ff
BIN
assets/background.png
Normal file
BIN
assets/background.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 MiB |
133
main.py
Normal file
133
main.py
Normal file
@ -0,0 +1,133 @@
|
||||
from tkinter import *
|
||||
from PIL import ImageTk, Image
|
||||
import time
|
||||
import re
|
||||
import userdata
|
||||
import asyncio
|
||||
import subprocess
|
||||
|
||||
def save_preferences():
|
||||
userdata.save_preferences({"server": server_address_field.get(), "username": username_field.get()})
|
||||
save_preferences_button.config(state=DISABLED, text="Saved!")
|
||||
root.after(5000, lambda: save_preferences_button.config(state=NORMAL, text="Save"))
|
||||
|
||||
def launch_exe():
|
||||
# Check for valid server address (Currently only supports numerical addresses (not domains))
|
||||
if not validate_server_address(server_address_field.get()):
|
||||
print("Invalid address \"" + server_address_field.get() + "\", please use a proper one...")
|
||||
server_address_field.delete(0, END)
|
||||
server_address_field.insert(0, userdata.default_server_address)
|
||||
return
|
||||
|
||||
if not validate_username(username_field.get()):
|
||||
print("Username \"" + username_field.get() + "\" is too long, please use a shorter one...")
|
||||
username_field.delete(0, END)
|
||||
username_field.insert(0, userdata.default_username)
|
||||
return
|
||||
|
||||
print("IP Address: " + server_address_field.get())
|
||||
print("Username: " + username_field.get())
|
||||
subprocess.call(
|
||||
["BF1942.exe","+game","FinnWars","+restart","1","+game","FinnWars","+joinServer",server_address_field.get()]
|
||||
)
|
||||
|
||||
def validate_server_address(server_address):
|
||||
ip_regex = r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"
|
||||
port_regex = r"^\d+$"
|
||||
|
||||
|
||||
try:
|
||||
if ":" in server_address:
|
||||
ip, port = server_address.split(":")
|
||||
|
||||
if not re.match(ip_regex, ip):
|
||||
return False
|
||||
|
||||
port = int(port)
|
||||
if port < 1 or port > 65535:
|
||||
return False
|
||||
else:
|
||||
ip = server_address
|
||||
if not re.match(ip_regex, ip):
|
||||
return False
|
||||
|
||||
return True
|
||||
except ValueError:
|
||||
return False
|
||||
|
||||
def validate_username(username):
|
||||
return len(username) <= 16
|
||||
|
||||
preferences = userdata.get_preferences()
|
||||
|
||||
# Create the main window
|
||||
root = Tk()
|
||||
root.title("FinnWarsLauncher | Koitelinkoski (v0.0.1)")
|
||||
#width = 720
|
||||
#height = 360
|
||||
|
||||
scaling = 1.5
|
||||
window_width = int(720*scaling)
|
||||
window_height = int(360*scaling)
|
||||
|
||||
root.geometry(str(window_width) + "x" + str(window_height))
|
||||
|
||||
# Background image scaled correctly
|
||||
image = Image.open("./assets/background.png")
|
||||
resized_image = image.resize((window_width, window_height))
|
||||
photo = ImageTk.PhotoImage(resized_image)
|
||||
|
||||
background_label = Label(root, image=photo)
|
||||
background_label.pack(fill=BOTH, expand = YES)
|
||||
|
||||
# Create the text fields
|
||||
font = ("arial", int(window_height/36))
|
||||
box_width = int(window_width/24)
|
||||
server_address_label = Label(root, text="Server Address:", font=font, fg="black", width=box_width)
|
||||
server_address_field = Entry(root, font=font, width=box_width)
|
||||
username_label = Label(root, text="Username:", font=font, fg="black", width=box_width)
|
||||
username_field = Entry(root, font=font, width=box_width)
|
||||
|
||||
if "server" in preferences:
|
||||
server_address_field.insert(0, preferences["server"])
|
||||
else:
|
||||
preferences["server"] = "23.88.63.235:14572"
|
||||
server_address_field.insert(0, "23.88.63.235:14572")
|
||||
if "username" in preferences:
|
||||
username_field.insert(0, preferences["username"])
|
||||
else:
|
||||
preferences["username"] = "FinnWarsLauncher"
|
||||
username_field.insert(0, "FinnWarsLauncher")
|
||||
|
||||
# Create the button and link it to the print_hello function
|
||||
button_width = int(window_width/48)
|
||||
save_preferences_button = Button(root, text="Save", command=save_preferences, width=button_width)
|
||||
launch_game = Button(root, text="Launch", command=launch_exe, width=button_width)
|
||||
|
||||
menu_bar = Menu(root)
|
||||
root.config(menu=menu_bar)
|
||||
|
||||
file_menu = Menu(root, tearoff=0)
|
||||
file_menu.add_command(label="Open")
|
||||
file_menu.add_command(label="Save")
|
||||
file_menu.add_separator()
|
||||
file_menu.add_command(label="Exit", command=root.quit)
|
||||
menu_bar.add_cascade(label="File", menu=file_menu)
|
||||
|
||||
# Place the widgets on the window
|
||||
server_address_label.place(x=window_width/72, y=window_height/36)
|
||||
server_address_field.place(x=window_width/72, y=int(window_height/7.2))
|
||||
username_label.place(x=int(window_width/1.95), y=window_height/36)
|
||||
username_field.place(x=int(window_width/1.95), y=int(window_height/7.2))
|
||||
save_preferences_button.place(x=int(window_width/2.4), y=int(window_height/1.16))
|
||||
launch_game.place(x=int(window_width/1.4), y=int(window_height/1.16))
|
||||
|
||||
#server_address_label.place(x=10, y=20)
|
||||
#server_address_field.place(x=10, y=50)
|
||||
#username_label.place(x=370, y=20)
|
||||
#username_field.place(x=370, y=50)
|
||||
#save_preferences_button.place(x=300, y=310)
|
||||
#launch_game.place(x=510, y=310)
|
||||
|
||||
# Start the main event loop
|
||||
root.mainloop()
|
7
requirements.txt
Normal file
7
requirements.txt
Normal file
@ -0,0 +1,7 @@
|
||||
appdirs==1.4.4
|
||||
asyncio==3.4.3
|
||||
pillow==11.0.0
|
||||
pyasn1==0.6.1
|
||||
PySimpleGUI==5.0.7
|
||||
rsa==4.9
|
||||
tk==0.1.0
|
24
userdata.py
Normal file
24
userdata.py
Normal file
@ -0,0 +1,24 @@
|
||||
import os
|
||||
import json
|
||||
import appdirs
|
||||
|
||||
app_name = 'FinnWarsLauncher'
|
||||
author_name = 'NikkeDoy, NuffMan'
|
||||
default_server_address = "23.88.63.235:14572"
|
||||
default_username = "FinnWarsLauncher"
|
||||
|
||||
def save_preferences(data):
|
||||
config_dir = appdirs.user_config_dir(app_name, author_name)
|
||||
os.makedirs(config_dir, exist_ok=True)
|
||||
file_path = os.path.join(config_dir, 'config.json')
|
||||
with open(file_path, 'w') as f:
|
||||
json.dump(data, f)
|
||||
|
||||
def get_preferences():
|
||||
config_dir = appdirs.user_config_dir(app_name, author_name)
|
||||
file_path = os.path.join(config_dir, 'config.json')
|
||||
if(os.path.isfile(file_path)):
|
||||
with open(file_path, 'r') as f:
|
||||
return json.load(f)
|
||||
else:
|
||||
return {"server": default_server_address, "username": default_username}
|
Loading…
Reference in New Issue
Block a user