From 7398f372113f3b583f52a68046894bc0f9dfcecc Mon Sep 17 00:00:00 2001 From: SuhEugene <32931701+SuhEugene@users.noreply.github.com> Date: Sat, 23 Sep 2023 19:49:55 +0300 Subject: [PATCH] Add mod-creating scripts --- maps/mapsystem/maps.dm | 1 + mods/CREATE_MOD.ps1 | 58 ++++++++++++++++++++++++++++++++++++++ mods/CREATE_MOD.py | 63 ++++++++++++++++++++++++++++++++++++++++++ mods/CREATE_MOD.sh | 62 +++++++++++++++++++++++++++++++++++++++++ mods/README.md | 20 ++++++++++++++ 5 files changed, 204 insertions(+) create mode 100644 mods/CREATE_MOD.ps1 create mode 100644 mods/CREATE_MOD.py create mode 100644 mods/CREATE_MOD.sh diff --git a/maps/mapsystem/maps.dm b/maps/mapsystem/maps.dm index 45051aae18d3a..eb87216210b51 100644 --- a/maps/mapsystem/maps.dm +++ b/maps/mapsystem/maps.dm @@ -355,6 +355,7 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable return // don't build away sites during unit testing #else report_progress("Loading away sites...") + return var/list/guaranteed = list() var/list/selected = list() diff --git a/mods/CREATE_MOD.ps1 b/mods/CREATE_MOD.ps1 new file mode 100644 index 0000000000000..8add13e2aa775 --- /dev/null +++ b/mods/CREATE_MOD.ps1 @@ -0,0 +1,58 @@ +$COLOR_RESET = [char]27 + '[0m' +$COLOR_GREEN = [char]27 + '[32m' +$COLOR_BLUE = [char]27 + '[36m' + +$script_dir = Split-Path -Parent $MyInvocation.MyCommand.Path +$mod_name = "" +$mod_name_upper = "" +$mod_name_lower = "" + +while (-not $mod_name) { + Write-Host "${COLOR_GREEN}| ${COLOR_RESET}Название мода пишется заглавными буквами, а также с" + Write-Host "${COLOR_GREEN}| ${COLOR_RESET}использованием подчёркиваний вместо пробелов или тире." + Write-Host "${COLOR_GREEN}| ${COLOR_RESET}Пример: COOKIE_FACTORY" + $mod_name = Read-Host "${COLOR_BLUE}> ${COLOR_RESET}Введи название мода" + Write-Host + $mod_name = $mod_name -replace '\s|-', '_' + + $mod_name_upper = $mod_name.ToUpper() + $mod_name_lower = $mod_name.ToLower() + + Write-Host "${COLOR_GREEN}| ${COLOR_RESET}Выбранное название: ${mod_name_upper} / ${mod_name_lower}" + $confirmation = Read-Host "${COLOR_BLUE}> ${COLOR_RESET}Всё верно? (Y/n)" + Write-Host + if ($confirmation -and $confirmation.ToLower() -ne "y") { + $mod_name = "" + } +} + +if (-Not (Test-Path "$script_dir\_example" -PathType Container)) { + Write-Host "Папка mods\_example не найдена. Убедись что она существует и попробуй ещё раз." + Exit +} + +$modpack_dir = Join-Path -Path $script_dir -ChildPath $mod_name_lower +if (Test-Path "$modpack_dir" -PathType Container) { + Write-Host "Папка mods\$mod_name_lower уже существует." + Exit +} + +New-Item -ItemType Directory -Path "$modpack_dir" | Out-Null +Copy-Item -Path "$script_dir\_example\*" -Destination "$modpack_dir" + +# Rename files +Get-ChildItem "$modpack_dir" | ForEach-Object { + $newName = $_.Name -replace "_example", "_$mod_name_lower" + Rename-Item -Path $_.FullName -NewName $newName +} + +# Process and update content of all the files +Get-ChildItem "$modpack_dir\*.*" | ForEach-Object { + $content = Get-Content $_.FullName | ForEach-Object { + $_ -creplace "EXAMPLE", $mod_name_upper -creplace "example", $mod_name_lower + } + $content | Set-Content $_.FullName +} + +Write-Host "Готово! Файлы для мода $mod_name_upper созданы." +Write-Host "Находятся они в папке mods/$mod_name_lower." diff --git a/mods/CREATE_MOD.py b/mods/CREATE_MOD.py new file mode 100644 index 0000000000000..4f93a30663198 --- /dev/null +++ b/mods/CREATE_MOD.py @@ -0,0 +1,63 @@ +import os + +COLOR_RESET = '\033[0m' +COLOR_GREEN = '\033[32m' +COLOR_BLUE = '\033[36m' + +script_dir = os.path.dirname(os.path.realpath(__file__)) +mod_name = "" +mod_name_upper = "" +mod_name_lower = "" + + +while not mod_name: + print(f"{COLOR_GREEN}| {COLOR_RESET}Название мода пишется заглавными буквами, а также с") + print(f"{COLOR_GREEN}| {COLOR_RESET}использованием подчёркиваний вместо пробелов или тире.") + print(f"{COLOR_GREEN}| {COLOR_RESET}Пример: COOKIE_FACTORY") + mod_name = input(f"{COLOR_BLUE}> {COLOR_RESET}Введи название мода: ") + print() + mod_name = mod_name.replace(' ', '_') + mod_name = mod_name.replace('-', '_') + + mod_name_upper = mod_name.upper() + mod_name_lower = mod_name.lower() + + print(f"{COLOR_GREEN}| {COLOR_RESET}Выбранное название: {mod_name_upper} / {mod_name_lower}") + confirmation = input(f"{COLOR_BLUE}> {COLOR_RESET}Всё верно? (Y/n) ").lower() + print() + if confirmation and confirmation != "y": + mod_name = "" + +if not os.path.exists("mods/_example"): + print("Папка mods/_example не найдена. Убедись что она существует и попробуй ещё раз.") + print() + input("Нажмите Enter для закрытия...") + exit() + +if os.path.exists(f"{script_dir}/{mod_name_lower}"): + print(f"Папка mods/{mod_name_lower} уже существует.") + print() + input("Нажмите Enter для закрытия...") + exit() + +os.mkdir(f"{script_dir}/{mod_name_lower}") + +for filename in os.listdir(f"{script_dir}/_example"): + source = f"{script_dir}/_example/{filename}" + destination = f"{script_dir}/{mod_name_lower}/{filename}" + if os.path.isdir(source): + continue + with open(source, 'r', encoding="utf8") as src_file, open(destination, 'w', encoding="utf8") as dest_file: + dest_file.write(src_file.read().replace("EXAMPLE", mod_name_upper).replace("example", mod_name_lower)) + + +# Rename files +for filename in os.listdir(f"{script_dir}/{mod_name_lower}"): + new_name = filename.replace("_example", f"_{mod_name_lower}") + os.rename(f"{script_dir}/{mod_name_lower}/{filename}", f"{script_dir}/{mod_name_lower}/{new_name}") + + +print(f"Готово! Файлы для мода {mod_name_upper} созданы.") +print(f"Находятся они в папке mods/{mod_name_lower}.") +print() +input("Нажмите Enter для закрытия...") diff --git a/mods/CREATE_MOD.sh b/mods/CREATE_MOD.sh new file mode 100644 index 0000000000000..1b20f822258b1 --- /dev/null +++ b/mods/CREATE_MOD.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +COLOR_RESET='\033[0m' +COLOR_GREEN='\033[32m' +COLOR_BLUE='\033[36m' + +mod_name="" +mod_name_upper="" +mod_name_lower="" + +script_dir=$(dirname "$0") + +while [ -z "$mod_name" ]; do + echo -e "${COLOR_GREEN}| ${COLOR_RESET}Название мода пишется заглавными буквами, а также с" + echo -e "${COLOR_GREEN}| ${COLOR_RESET}использованием подчёркиваний вместо пробелов или тире." + echo -e "${COLOR_GREEN}| ${COLOR_RESET}Пример: COOKIE_FACTORY" + echo -en "${COLOR_BLUE}> ${COLOR_RESET}Введи название мода: " + read mod_name + echo + + mod_name=$(echo "$mod_name" | sed -E 's/\s|-/_/g') + + mod_name_upper=$(echo "$mod_name" | tr '[:lower:]' '[:upper:]') + mod_name_lower=$(echo "$mod_name" | tr '[:upper:]' '[:lower:]') + + echo -e "${COLOR_GREEN}| ${COLOR_RESET}Выбранное название: ${mod_name_upper} / ${mod_name_lower}" + echo -en "${COLOR_BLUE}> ${COLOR_RESET}Всё верно? (Y/n) " + read confirmation + echo + + confirmation=${confirmation:-y} + if [ "${confirmation,,}" != "y" ]; then + mod_name="" + fi +done + +if [ ! -d "$script_dir/_example" ]; then + echo "Папка mods/_example не найдена. Убедись что она существует и попробуй ещё раз." + exit 1 +fi + +if [ -d "$script_dir/$mod_name_lower" ]; then + echo "Папка mods/$mod_name_lower уже существует." + exit 1 +fi + +mkdir -p "$script_dir/$mod_name_lower" +cp "$script_dir/_example/"* "$script_dir/$mod_name_lower/" + +# Rename files +for file in "$script_dir/$mod_name_lower"/*example*; do + new_name=$(echo "$file" | sed -E "s/_example/_$mod_name_lower/") + mv "$file" "$new_name" +done + +# Process and update content of all the files +for file in "$script_dir/$mod_name_lower"/*; do + sed -i'' -e "s/EXAMPLE/$mod_name_upper/g" -e "s/example/$mod_name_lower/g" "$file" +done + +echo "Готово! Файлы для мода $mod_name_upper созданы." +echo "Находятся они в папке mods/$mod_name_lower." diff --git a/mods/README.md b/mods/README.md index 5a48d264f27d4..857a29a00994b 100644 --- a/mods/README.md +++ b/mods/README.md @@ -127,6 +127,26 @@ mods/hello_world ``` ### Быстрое создание основы мода +#### Автоматически + +**Для любой системы** с установленным Python 3 - запустить файл `mods/CREATE_MOD.py`. + +В **Windows** можно это сделать ещё двумя способами: +1. Открыть конмандную строку в папке SierraBay и прописать: + ```bat + powershell mods\CREATE_MOD.ps1 + ``` +2. Открыть PowerShell в папке SierraBay и прописать: + ```ps + .\mods\CREATE_MOD.ps1 + ``` + +Те, кто пользуется **Linux или WSL** могут использовать bash файл: +```bash +./mods/CREATE_MOD.sh +``` + +#### Вручную Чтобы реализовать основу мода достаточно выполнить три действия: - Создать папку `mods/hello_world/`. - Скопировать в папку `mods/hello_world/` все файлы из [`/mods/_example/`](/mods/_example/).