diff --git a/EUI_Modpack_Converter/EUI_Modpack_Converter.pyproj b/EUI_Modpack_Converter/EUI_Modpack_Converter.pyproj index 29f55684e59659e850f990541cc54fb0712fc998..74411fdbd075c262cc244d8fb7c18758613a5412 100644 --- a/EUI_Modpack_Converter/EUI_Modpack_Converter.pyproj +++ b/EUI_Modpack_Converter/EUI_Modpack_Converter.pyproj @@ -4,7 +4,7 @@ <SchemaVersion>2.0</SchemaVersion> <ProjectGuid>ea28d07f-cd43-45d1-b01d-1eeeb360d215</ProjectGuid> <ProjectHome>.</ProjectHome> - <StartupFile>converter_new_WIP.py</StartupFile> + <StartupFile>converter.py</StartupFile> <SearchPath> </SearchPath> <WorkingDirectory>.</WorkingDirectory> @@ -24,7 +24,7 @@ <Content Include="Process.txt" /> </ItemGroup> <ItemGroup> - <Compile Include="converter_new_WIP.py" /> + <Compile Include="converter.py" /> <Compile Include="converter_legacy.py" /> </ItemGroup> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets" /> diff --git a/EUI_Modpack_Converter/converter_new_WIP.py b/EUI_Modpack_Converter/converter.py similarity index 53% rename from EUI_Modpack_Converter/converter_new_WIP.py rename to EUI_Modpack_Converter/converter.py index 0bbbf6df6b10cf6e11794beaf035fb2625b93299..6de6a3384a7c09557bfb0ed5f7833b1206659917 100644 --- a/EUI_Modpack_Converter/converter_new_WIP.py +++ b/EUI_Modpack_Converter/converter.py @@ -1,6 +1,6 @@ ######################################################################## # # -# © 2021 - MPL 2.0 - Rsge - v2.0.1 # +# © 2021 - MPL 2.0 - Rsge - v2.1.0 # # https://github.com/Rsge/Civ-V-EUI-Modpack-Converter # # # # WINDOWS ONLY! # @@ -33,6 +33,7 @@ vanilla_packs_folder = "zz_Vanilla_Versions" # Imports import os import winreg as wr +import os.path as p from os.path import join as j from glob import glob as g import subprocess @@ -54,10 +55,6 @@ def error(msg): input("Press Enter to exit. . .") exit(1) -# Get file name -def get_file_name(file, get_folder = False): - return file.split(os.sep)[-1] - # Get 7-zip install dir def get_szip_dir(): key_location = r"SOFTWARE\7-Zip" @@ -86,11 +83,13 @@ def get_civ_install_dir(): print("Configuring variables...") # Names modpack_folder_name = "MP_MODSPACK" +preservation_extension = ".orig" +load_tag = "ContextPtr:LoadNewContext" +unit_panel_tag = "LuaEvents.UnitPanelActionAddin" +unit_panel_insert_marker = "--Insert ContextPtr for modded unit panel buttons here\n" eui_cuc_file_names = ["CityBannerManager.lua", "CityView.lua", "Highlights.xml"] -load_tag = "ContextPtr:LoadNewContext" -unit_panel_tag = "LuaEvents.UnitPanelActionAddin" unit_panel_file_name = "UnitPanel.lua" ige_compat_file_name = "IGE_Window.lua" # Paths @@ -103,20 +102,21 @@ modpack_path = j(base_path, modpack_folder_name) mods_path = j(modpack_path, "Mods") ui_folder_path = j(modpack_path, "UI") # Files -files_ext = j("**", "*.lua") -base_ui_files = j(base_path, "..", "UI", files_ext) -gnk_ui_files = j(base_path, "Expansion", "UI", files_ext) -bnw_ui_files = j(base_path, "Expansion2", "UI", files_ext) +file_ext = "*.lua" +file_ext_recursive = j("**", file_ext) vanilla_eui_zip_path = j(vanilla_packs_path, vanilla_eui_zip) modded_eui_zip_path = j(base_path, modded_eui_zip) -mod_files = j(mods_path, files_ext) -ui_files = j(ui_folder_path, files_ext) -eui_files = j(eui_folder_path, files_ext) +base_ui_files = j(base_path, "..", "UI", file_ext_recursive) +gnk_ui_files = j(base_path, "Expansion", "UI", file_ext_recursive) +bnw_ui_files = j(base_path, "Expansion2", "UI", file_ext_recursive) +mod_files = j(mods_path, file_ext_recursive) +ui_files = j(ui_folder_path, file_ext) +eui_files = j(eui_folder_path, file_ext_recursive) # Global variables eui_only = False -vanilla_ui_files = [] -unit_panel_files = [] +vanilla_ui_file_names = [] +unit_panel_addon_file_names = [] load_tags = {} @@ -136,37 +136,37 @@ while True: print("This file doesn't exist, try again.") print("") -## Remove previous modpack -#print("Removing previous modpack and EUI leftovers...") -#if os.path.isdir(modpack_path): -# shutil.rmtree(modpack_path) -#if os.path.isdir(eui_folder_path): -# shutil.rmtree(eui_folder_path) +# Remove previous modpack +print("Removing previous modpack and EUI leftovers...") +if os.path.isdir(modpack_path): + shutil.rmtree(modpack_path) +if os.path.isdir(eui_folder_path): + shutil.rmtree(eui_folder_path) -## Compile EUI with colored unlocked citizens -#if not os.path.isfile(modded_eui_zip_path): -# print("Creating colored unlocked citizens EUI...") -# subprocess.run([szip, 'x', vanilla_eui_zip_path], stdout=null, stderr=null) -# for eui_cuc_file_name in eui_cuc_file_names: -# eui_cuc_file = g(j(modsave_path, eui_cuc_file_name + "*"))[0] -# orig_eui_file = g(j(eui_folder_path, "*", eui_cuc_file_name))[0] -# shutil.move(orig_eui_file, orig_eui_file + ".orig") -# shutil.copyfile(eui_cuc_file, orig_eui_file) -# subprocess.run([szip, 'a', modded_eui_zip, eui_folder_path], stdout=null, stderr=null) -#else: -# # Unzip EUI -# print("Unzipping EUI...") -# subprocess.run([szip, 'x', modded_eui_zip_path], stdout=null, stderr=null) +# Compile EUI with colored unlocked citizens +if not os.path.isfile(modded_eui_zip_path): + print("Creating colored unlocked citizens EUI...") + subprocess.run([szip, 'x', vanilla_eui_zip_path], stdout=null, stderr=null) + for eui_cuc_file_name in eui_cuc_file_names: + eui_cuc_file = g(j(modsave_path, eui_cuc_file_name + "*"))[0] + orig_eui_file = g(j(eui_folder_path, "*", eui_cuc_file_name))[0] + shutil.move(orig_eui_file, orig_eui_file + preservation_extension) + shutil.copyfile(eui_cuc_file, orig_eui_file) + subprocess.run([szip, 'a', modded_eui_zip, eui_folder_path], stdout=null, stderr=null) +else: + # Unzip EUI + print("Unzipping EUI...") + subprocess.run([szip, 'x', modded_eui_zip_path], stdout=null, stderr=null) -## Stop here if only EUI should be converted -#if eui_only: -# quit() +# Stop here if only EUI should be converted +if eui_only: + quit() -## Unzip modpack zip -#print("Unzipping Modpack...") -#subprocess.run([szip, 'x', j(vanilla_packs_path, modpack_zip)], stdout=null, stderr=null) +# Unzip modpack zip +print("Unzipping Modpack...") +subprocess.run([szip, 'x', j(vanilla_packs_path, modpack_zip)], stdout=null, stderr=null) # Get vanilla UI files @@ -175,24 +175,24 @@ globbed = g(base_ui_files, recursive=True) globbed.extend(g(gnk_ui_files, recursive=True)) globbed.extend(g(bnw_ui_files, recursive=True)) for file in globbed: - file_name = get_file_name(file) + file_name = p.basename(file) if not file_name in ui_files: - vanilla_ui_files.append(file_name) + vanilla_ui_file_names.append(file_name) # Manage mod files print("Managing mod's files:") for mod_file in g(mod_files, recursive = True): - mod_file_name = get_file_name(mod_file) + mod_file_name = p.basename(mod_file) mod_file_short_path = mod_file.removeprefix(mods_path + os.sep) # IGE UI compat file if mod_file_name == ige_compat_file_name: print("\tProviding IGE-EUI-compat...") - #shutil.move(mod_file, mod_file + ".orig") - #shutil.copyfile(g(j(modsave_path, ige_compat_file_name + "*"))[0], mod_file) + shutil.move(mod_file, mod_file + preservation_extension) + shutil.copyfile(g(j(modsave_path, ige_compat_file_name + "*"))[0], mod_file) # Delete UI overwrite duplicates - elif mod_file_name in vanilla_ui_files: + elif mod_file_name in vanilla_ui_file_names: print("\tRemoving overwriting file \"{}\"...".format(mod_file_short_path)) - #os.remove(mod_file) + os.remove(mod_file) # Get unit panel addon files else: with open(mod_file, 'r') as file: @@ -200,56 +200,64 @@ for mod_file in g(mod_files, recursive = True): for line in lines: if unit_panel_tag in line: print("\tDetecting unit panel addon in file \"{}\"...".format(mod_file_short_path)) - unit_panel_files.append(mod_file_name) + unit_panel_addon_file_names.append(mod_file_name) break -## Delete useless desktop.ini (Thanks True...) -#ini_files = re.sub(r"\.\w+$", ".ini", mod_files) -#for ini_file in g(ini_files, recursive = True): -# ini_file_name = get_file_name(ini_file) -# if ini_file_name == "desktop.ini": -# print("Removing useless desktop.ini (Thanks True)...") -# os.remove(mod_file) - - -## Get stuff from UI files -#for ui_file in g(ui_files): -# ui_file_name = get_file_name(ui_file) -# print("Getting tags from " + ui_file_name + "...") -# load_tags[ui_file_name] = [] -# with open(ui_file, 'r') as file: -# lines = file.readlines() -# for line in lines: -# if line.startswith(load_tag): -# load_tags[ui_file_name].append(line) - -## Insert stuff into EUI files -#for eui_file in g(eui_files): -# eui_file_name = get_file_name(eui_file) -# # Base UI files -# if eui_file_name in load_tags.keys(): -# print("Writing tags to " + eui_file_name + "...") -# with open(eui_file, 'a') as file: -# file.write('\n') -# for load_tag in load_tags[eui_file_name]: -# file.write(load_tag) -# # Modcompat unit panel -# elif eui_file_name == unit_panel_file_name and unit_panel_modcompat_needed: -# print("Providing EUI-UnitPanel-Modcompat...") -# shutil.move(eui_file, eui_file + ".orig") -# shutil.copyfile(g(j(modsave_path, unit_panel_file_name + "*"))[0], eui_file) - - -## Move EUI folder -#print("Moving EUI folder...") -#shutil.move(eui_folder_path, modpack_path) -#print("Removing UI folder...") -#shutil.rmtree(ui_folder_path) - -## Zip modpack folder -#print("Zipping Modpack...") -#subprocess.run([szip, 'a', modpack_name + "_EUI.7z", modpack_path], stdout=null, stderr=null) +# Delete useless desktop.ini (Thanks True...) +ini_files = re.sub(r"\.\w+$", ".ini", mod_files) +for ini_file in g(ini_files, recursive = True): + ini_file_name = p.basename(ini_file) + if ini_file_name == "desktop.ini": + print("Removing useless desktop.ini (Thanks True)...") + os.remove(mod_file) + + +# Get stuff from UI files +for ui_file in g(ui_files): + ui_file_name = p.basename(ui_file) + print("Getting tags from modpack UI's " + ui_file_name + "...") + load_tags[ui_file_name] = [] + with open(ui_file, 'r') as file: + lines = file.readlines() + for line in lines: + if line.startswith(load_tag): + load_tags[ui_file_name].append(line) + +# Insert stuff into EUI files +for eui_file in g(eui_files): + eui_file_name = p.basename(eui_file) + # Base UI files + if eui_file_name in load_tags.keys(): + print("Writing tags to EUI's " + eui_file_name + "...") + with open(eui_file, 'a') as file: + file.write('\n') + for load_tag in load_tags[eui_file_name]: + file.write(load_tag) + # Modcompat unit panel + elif eui_file_name == unit_panel_file_name and len(unit_panel_addon_file_names) > 0: + print("Providing EUI-UnitPanel-Modcompat...") + unit_panel_load_tags = "" + for unit_panel_addon_file_name in unit_panel_addon_file_names: + unit_panel_load_tags += "{}(\"{}\")\n".format(load_tag, p.splitext(unit_panel_addon_file_name)[0]) + shutil.move(eui_file, eui_file + preservation_extension) + shutil.copyfile(g(j(modsave_path, unit_panel_file_name + "*"))[0], eui_file) + with open(eui_file, 'r') as file: + lines = file.readlines() + lines[lines.index(unit_panel_insert_marker)] = unit_panel_load_tags + with open(eui_file, 'w') as file: + file.write("".join(lines)) + + +# Move EUI folder +print("Moving EUI folder...") +shutil.move(eui_folder_path, modpack_path) +print("Removing UI folder...") +shutil.rmtree(ui_folder_path) + +# Zip modpack folder +print("Zipping Modpack...") +subprocess.run([szip, 'a', modpack_name + "_EUI.7z", modpack_path], stdout=null, stderr=null) #Finishing up quit() \ No newline at end of file diff --git a/EUI_Modpack_Converter/converter_legacy.py b/EUI_Modpack_Converter/converter_legacy.py index e4a2878d72f3e35c5ca92f4c37cc8b2a0e8c39bf..b33239f9ae042f2781d33670256052ce04c4b30a 100644 --- a/EUI_Modpack_Converter/converter_legacy.py +++ b/EUI_Modpack_Converter/converter_legacy.py @@ -1,6 +1,6 @@ ######################################################################## # # -# © 2021 - MPL 2.0 - Rsge - v1.0.0 # +# © 2021 - MPL 2.0 - Rsge - v1.0.1 # # https://github.com/Rsge/Civ-V-EUI-Modpack-Converter # # # # WINDOWS ONLY! # @@ -10,6 +10,42 @@ # # ######################################################################## + +#-----------------------------------------# +# Customize these according to your setup # +#-----------------------------------------# + +# Vanilla EUI file (in vanilla_packs_folder) +vanilla_eui_zip = "!EUI.7z" + +# CUC-version file name of EUI +modded_eui_zip = "!EUI_CUC.7z" + +# Folder containing this scripts project folder and it's needed edited files +modsave_folder = "zzz_Modsaves" + +# Folder containing the vanilla packs +vanilla_packs_folder = "zz_Vanilla_Versions" + +#-------------------------------------------# +# Maybe you also need to add to these lists # +#-------------------------------------------# + +# Mod files overwriting original UI files, conflicting with EUI +delete_file_names = ["CivilopediaScreen.lua", + "CityView.lua", + "TechTree.lua", + "TechButtonInclude.lua"] + +# Mod files adding new actions to units +unit_panel_modcompat_file_names = ["EvilSpiritsMission.lua", + "THTanukiMission.lua"] + +#----------------------------------------------------# +# Don't change anything after here # +# [except if you know what you're doing of cause ;)] # +#----------------------------------------------------# + # Imports import os from os.path import join as j @@ -18,17 +54,12 @@ import subprocess import shutil import re +# Change to base DLC directory +os.chdir("../..") ## Global Values print("Configuring variables...") - # Names -# Customize these according to your setup # -vanilla_eui_zip = "!EUI.7z" # Vanilla EUI file (in vanilla_packs_folder) -modded_eui_zip = "!EUI_CUC.7z" # CUC-version file name of EUI -modsave_folder = "zzz_Modsaves" # Folder containing this scripts project folder and it's needed edited files -vanilla_packs_folder = "zz_Vanilla_Versions" # Folder containing the vanilla packs -# Ignore these # modpack_folder_name = "MP_MODSPACK" eui_cuc_file_names = ["CityBannerManager.lua", "CityView.lua", @@ -36,23 +67,7 @@ eui_cuc_file_names = ["CityBannerManager.lua", load_tag = "ContextPtr:LoadNewContext" unit_panel_file_name = "UnitPanel.lua" ige_compat_file_name = "IGE_Window.lua" -# Maybe you also need to add to these lists # -delete_file_names = ["CivilopediaScreen.lua", # Mod files overwriting original UI files, conflicting with EUI - "CityView.lua", - "TechTree.lua", - "TechButtonInclude.lua", - unit_panel_file_name] -unit_panel_modcompat_file_names = ["EvilSpiritsMission.lua", # Mod files adding new actions to units - "THTanukiMission.lua"] - -# Don't change from here [if you don't really know what you're doing that is of cause ;)] # - -# This only runs with 7zip. If you want to use WinRar you'll have to change the methods yourself - or just download 7zip =P -szip = r"C:\Program Files\7-Zip\7z.exe" - # Paths -# Change to base DLC directory -os.chdir("../..") base_path = os.getcwd() modsave_path = j(base_path, modsave_folder) modpack_path = j(base_path, modpack_folder_name) @@ -60,11 +75,14 @@ vanilla_packs_path = j(base_path, vanilla_packs_folder) ui_path = j(modpack_path, "UI") eui_path = j(base_path, "UI_bc1") # Files +file_ext = "*.lua" base_eui_zip_path = j(vanilla_packs_path, vanilla_eui_zip) modded_eui_zip_path = j(base_path, modded_eui_zip) -mod_files = j(modpack_path, "Mods", "**", "*.lua") -ui_files = j(ui_path, "*.lua") -eui_files = j(eui_path, "*", "*.lua") +mod_files = j(modpack_path, "Mods", "**", file_ext) +ui_files = j(ui_path, file_ext) +eui_files = j(eui_path, "*", file_ext) +# This only runs with 7zip. If you want to use WinRar you'll have to change the methods yourself - or just download 7zip =P +szip = r"C:\Program Files\7-Zip\7z.exe" # Global Variables load_tags = {} @@ -72,6 +90,12 @@ unit_panel_modcompat_needed = False null = open(os.devnull, 'w') eui_only = False +# Quitting function +def quit(): + null.close() + print("Done.\n") + input("Press Enter to exit. . .") + exit(0) # Get modpack zip while True: @@ -113,9 +137,7 @@ elif not eui_only: if eui_only: if os.path.isdir(eui_path): shutil.rmtree(eui_path) - null.close() - print("Done.\n") - exit(0) + quit() # Unzip modpack zip @@ -158,14 +180,10 @@ for ini_file in g(ini_files, recursive = True): for ui_file in g(ui_files): with open(ui_file, 'r') as file: lines = file.readlines() - ui_file_path = ui_file.split(os.sep) ui_file_name = ui_file_path[len(ui_file_path) - 1] - print("Getting tags from " + ui_file_name + "...") - load_tags[ui_file_name] = [] - for line in lines: if line.startswith(load_tag): load_tags[ui_file_name].append(line) @@ -174,7 +192,6 @@ for ui_file in g(ui_files): for eui_file in g(eui_files): eui_file_path = eui_file.split(os.sep) eui_file_name = eui_file_path[len(eui_file_path) - 1] - # Base UI files if eui_file_name in load_tags.keys(): print("Writing tags to " + eui_file_name + "...") @@ -199,12 +216,5 @@ shutil.rmtree(ui_path) print("Zipping Modpack...") subprocess.run([szip, 'a', modpack_name + "_EUI.7z", modpack_path], stdout=null, stderr=null) -## Move modpack folder -#print("Moving Modspack folder") -#shutil.move(modpack_path, j(base_path, modpack_folder_name)) - #Finishing up -null.close() -print("Done.\n") -input("Press Enter to exit. . .") -exit(0) \ No newline at end of file +quit() \ No newline at end of file