-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathscvr-patcher.py
314 lines (243 loc) · 60.8 KB
/
scvr-patcher.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
import os
import json
import tkinter as tk
from tkinter import *
import tkinter.filedialog
from PIL import Image, ImageTk
from io import BytesIO
import base64
import re
from tkinter import messagebox
def is_hosts_updated():
try:
hosts_path = r"C:\Windows\System32\drivers\etc\hosts"
hosts_content = "\n#Star Citizen EAC workaround\n127.0.0.1 modules-cdn.eac-prod.on.epicgames.com"
with open(hosts_path, 'r') as hosts_file:
existing_content = hosts_file.read()
# Check if the lines are already present
return hosts_content not in existing_content
except FileNotFoundError:
return False # Indicate failure: File not found
except Exception as e:
return False # Indicate failure: An error occurred
def update_settings(directory, new_values):
try:
file_path = os.path.join(directory, 'settings.json')
# Check if the directory exists
if not os.path.exists(directory):
return f"Directory not found: {directory}"
# Load the JSON file
with open(file_path, 'r') as file:
settings = json.load(file)
# Update the specific lines
settings["productid"] = new_values["productid"]
settings["sandboxid"] = new_values["sandboxid"]
settings["clientid"] = new_values["clientid"]
settings["deploymentid"] = new_values["deploymentid"]
# Save the updated JSON back to the file
with open(file_path, 'w') as file:
json.dump(settings, file, indent=4)
return f"Settings updated successfully in {file_path}"
except FileNotFoundError:
return f"File not found: {file_path}"
except IsADirectoryError:
return f"Error: {directory} is a directory, not a file."
except Exception as e:
return f"An error occurred while updating {file_path}: {str(e)}"
def update_attributes(directory, width, height, fov):
file_path = os.path.join(directory, 'attributes.xml')
try:
# Check if the directory exists
if not os.path.exists(directory):
return f"Directory not found: {directory}"
with open(file_path, 'r') as file:
data = file.read()
# Update the specific lines
data = re.sub(r'<Attr name="FOV" value="\d+\.?\d*"/>', f'<Attr name="FOV" value="{fov:.2f}"/>', data)
data = re.sub(r'<Attr name="Height" value="\d+"/>', f'<Attr name="Height" value="{height}"/>', data)
data = re.sub(r'<Attr name="Width" value="\d+"/>', f'<Attr name="Width" value="{width}"/>', data)
# Write the updated data back to the file
with open(file_path, 'w') as file:
file.write(data)
return f"Attributes successfully updated in {file_path}"
except IsADirectoryError:
return f"Error: {directory} is a directory, not a file."
except Exception as e:
return f"An error occurred while updating {file_path}: {str(e)}"
def update_data():
# Search for Star Citizen installation directory on all available drives
star_citizen_dir = None
for drive in string.ascii_uppercase:
potential_dir = os.path.join(drive + ":", 'Program Files', 'Roberts Space Industries', 'StarCitizen')
if os.path.exists(potential_dir):
star_citizen_dir = potential_dir
break
if star_citizen_dir is None:
messagebox.showerror("Error", "Star Citizen installation directory not found at default location.\nPlease select directory manually!")
star_citizen_dir = tkinter.filedialog.askdirectory(
initialdir="C:\Program Files",
title="Select Star Citizen installation directory (Containing LIVE, PTU, EPTU, TECH-PREVIEW, HOTFIX, ...)"
)
if not os.path.exists(star_citizen_dir):
messagebox.showerror("Error", "Star Citizen installation directory not found!")
return
# Extract width and height from the selected resolution
selected_resolution = resolution_var.get()
width, height = map(int, re.findall(r'(\d+) X (\d+)', selected_resolution)[0])
# Update settings in specified directories
directories = ['PTU', 'LIVE', 'EPTU', 'TECH-PREVIEW', 'HOTFIX']
new_values = {
"productid": "vorpx-eac-workaround",
"sandboxid": "vorpx-eac-workaround",
"clientid": "vorpx-eac-workaround",
"deploymentid": "vorpx-eac-workaround",
}
result_settings = []
for directory in directories:
full_directory = os.path.join(star_citizen_dir, directory, 'EasyAntiCheat')
if os.path.exists(full_directory):
result_settings.append(update_settings(full_directory, new_values))
else:
result_settings.append(f"Directory not found: {full_directory}")
result_settings_message = '\n'.join(result for result in result_settings if not result.startswith("Directory not found"))
# Update attributes.xml
attributes_subdirectories = ['PTU', 'LIVE', 'EPTU', 'TECH-PREVIEW', 'HOTFIX']
result_attributes = []
for subdirectory in attributes_subdirectories:
full_attributes_directory = os.path.join(star_citizen_dir, subdirectory, 'USER', 'Client', '0', 'Profiles', 'default')
if os.path.exists(full_attributes_directory):
result_attributes.append(update_attributes(full_attributes_directory, width, height, fov_var.get()))
else:
result_attributes.append(f"Directory not found: {full_attributes_directory}")
result_attributes_message = '\n'.join(result for result in result_attributes if not result.startswith("Directory not found"))
# Check and update hosts file
hosts_updated = is_hosts_updated()
result_message = "Settings updated successfully in the following directories:\n\n"
updated = False
for directory, result in zip(directories, result_settings):
if result and not result.startswith("Directory not found"):
result_message += f"{os.path.join(star_citizen_dir, directory)}\n"
updated = True
if hosts_updated:
result_message += "\nHosts file updated successfully."
updated = True
elif hosts_updated is False:
result_message += "\nHosts file is already up to date."
if updated:
result_message += "\nClose the program now."
else:
result_message = "Failed to update settings. Check the paths and try again."
messagebox.showinfo("Update Result", result_message)
if updated:
# Create a Close Program button
close_button = tk.Button(root, text="Close Program", command=root.destroy, font=("Arial", 12))
close_button.pack(pady=10)
# GUI setup
root = tk.Tk()
root.title("VRCitizen Settings Updater")
root.configure(bg="green")
# GUI Image
base64_image = '''
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
'''
image = Image.open(BytesIO(base64.b64decode(base64_image)))
image = ImageTk.PhotoImage(image)
label_image = Label(root, image=image, justify="center", anchor="n")
label_image.pack(padx=10, pady=10, anchor="n")
# Additional text label
additional_text = "Very Special thanks to RifleJock for getting all the VR Headset data in one place and for the suggestions and for being an idea soundboard. Special thanks to SilvanVR at CIG and Chachi Sanchez for getting VRCitizen going. Find them both on YouTube and Twitch. See you in the 'VRse o7 "
label_text = Label(root, text=additional_text, font=("Arial", 12), wraplength=400, justify="center", anchor="n")
label_text.pack(padx=10, pady=10, anchor="n")
# Get the list of available drives
import string
drives = [f"{letter}:" for letter in string.ascii_uppercase if os.path.exists(f"{letter}:\\")]
# Load headset data from the JSON file
with open('configs.json', 'r') as json_file:
data = json.load(json_file)
brands = data["hmds"]
# Set default headset
default_brand = "Select Manufacturer"
default_headset = "Select VR Headset"
default_config = "Select Configuration"
# Label for brand selection
headset_label = tk.Label(root, text="Select VR Headset brand in the dropdown below:", anchor="c", font=("Arial", 12))
headset_label.pack(padx=10, pady=10, anchor="c")
# Dropdown for brand selection
brands_var = tk.StringVar()
brands_keys = list(brands.keys()) # Updated to get the list of headsets dynamically
brands_var.set(default_brand)
headset_dropdown = tk.OptionMenu(root, brands_var, *brands_keys)
headset_dropdown.pack(padx=10, pady=10, anchor="c")
# Label for headset selection
headset_label = tk.Label(root, text="Select VR Headset in the dropdown below \n(for PIMAX also choose lenses installed):", anchor="c", font=("Arial", 12))
headset_label.pack(padx=10, pady=10, anchor="c")
# Dropdown for headset selection
headset_var = tk.StringVar()
headset_var.set(default_headset)
headset_dropdown = tk.OptionMenu(root, headset_var, "No headsets")
headset_dropdown.pack(padx=10, pady=10, anchor="c")
# Label for lens selection
lense_label = tk.Label(root, text="Select Lense configuration in the dropdown below:", anchor="c", font=("Arial", 12))
lense_label.pack(padx=10, pady=10, anchor="c")
# Dropdown for lens selection
lense_var = tk.StringVar()
lense_var.set(default_config)
lense_dropdown = tk.OptionMenu(root, lense_var, "No configurations")
lense_dropdown.pack(padx=10, pady=10, anchor="c")
# Label for resolution selection
resolution_label = tk.Label(root, text="Select Resolution in dropdown below and then hit UPDATE:", anchor="c", font=("Arial", 12))
resolution_label.pack(padx=10, pady=10, anchor="c")
# Dropdown for resolution selection
resolution_var = tk.StringVar()
resolution_menu = tk.OptionMenu(root, resolution_var, "No Resolutions")
resolution_menu.config(font=("Arial", 12))
resolution_menu.pack(padx=10, pady=10, anchor="c")
def update_brand_data(*args):
selected_brand = brands_var.get()
if not selected_brand: return
headset_dropdown['menu'].delete(0, 'end') # Clear the existing menu
for hmd in brands[selected_brand].keys():
headset_dropdown['menu'].add_command(label=hmd, command=tk._setit(headset_var, hmd))
headset_var.set(list(brands[selected_brand].keys())[0])
# Bind the update function to the brand dropdown
brands_var.trace_add("write", lambda *args: update_brand_data(*args))
def update_lens_data(*args):
selected_brand = brands_var.get()
if not selected_brand: return
selected_headset = headset_var.get()
if not selected_headset: return
lense_dropdown['menu'].delete(0, 'end') # Clear the existing menu
keys = brands[selected_brand][selected_headset].keys()
for config in keys:
lense_dropdown['menu'].add_command(label=config, command=tk._setit(lense_var, config))
lense_var.set(list(brands[selected_brand][selected_headset].keys())[0])
# Bind the update function to the brand dropdown
headset_var.trace_add("write", lambda *args: update_lens_data(*args))
def get_selections():
return brands_var.get(), headset_var.get(), lense_var.get(), resolution_var.get()
def get_selected_data():
return brands[brands_var.get()][headset_var.get()][lense_var.get()]
# Update FOV and resolutions based on the selected headset
def update_headset_data(fov_var, *args):
selected_headset = get_selected_data()
if selected_headset:
# Fetch FOV and clamp it to a maximum of 120
fov_value = min(selected_headset.get("SC Attributes FOV", 0), 120)
fov_var.set(fov_value)
# Fetch resolutions and update the dropdown
custom_resolutions = selected_headset.get("Custom Resolution List", [])
resolution_menu['menu'].delete(0, 'end') # Clear the existing menu
for resolution in custom_resolutions:
resolution_menu['menu'].add_command(label=resolution, command=tk._setit(resolution_var, resolution))
if custom_resolutions:
resolution_var.set(custom_resolutions[0])
else:
resolution_var.set("No Resolutions")
# Bind the update function to the headset dropdown
lense_var.trace_add("write", lambda *args: update_headset_data(fov_var, *args))
fov_var = tk.DoubleVar()
# Button to update settings
update_button = tk.Button(root, text="UPDATE", command=update_data, font=("Arial", 14), bg="blue", fg="white")
update_button.pack(padx=10, pady=10, anchor="c")
# Run the Tkinter event loop
root.mainloop()