Add files via upload

This commit is contained in:
seuyh
2026-06-30 12:53:58 +07:00
committed by GitHub
parent 0d6aba7e45
commit f87469052e
+229 -129
View File
@@ -39,52 +39,54 @@ t() {
_t_en() {
case "$1" in
title) echo "Stellaris DLC Unlocker — Linux Edition" ;;
title) echo "Stellaris DLC Unlocker" ;;
menu_header) echo "MAIN MENU" ;;
m_status) echo "Status & paths" ;;
m_install) echo "Install / Update DLC unlocker" ;;
m_steam_launch) echo "Patch Steam launch options" ;;
m_lang) echo "Change language" ;;
m_log) echo "Show log" ;;
m_status) echo "Status" ;;
m_install) echo "Install / Update" ;;
m_steam_launch) echo "Set Steam launch options" ;;
m_lang) echo "Language" ;;
m_log) echo "Log" ;;
m_exit) echo "Exit" ;;
choose) echo "Choose an option: " ;;
detect_steam) echo "Detecting Steam installation..." ;;
steam_found) echo "Steam found:" ;;
steam_not_found) echo "Steam installation not found." ;;
detect_game) echo "Detecting Stellaris installation..." ;;
game_found) echo "Stellaris found:" ;;
game_not_found) echo "Stellaris installation not found." ;;
native_build) echo "Native Linux build detected — CreamLinux is compatible." ;;
not_native) echo "Native Linux build NOT detected (no 'stellaris' ELF binary). CreamLinux requires the native build, not Proton/Wine." ;;
choose) echo "> " ;;
steam_found) echo "Steam:" ;;
steam_not_found) echo "Steam not found." ;;
game_found) echo "Stellaris:" ;;
game_not_found) echo "Stellaris not found." ;;
native_build) echo "Native Linux build." ;;
not_native) echo "Not a native Linux build. CreamLinux needs the native build, not Proton/Wine." ;;
downloading) echo "Downloading" ;;
fetching_dlc_list) echo "Fetching DLC list..." ;;
dlc_list_ok) echo "DLC list loaded." ;;
dlc_list_fail) echo "Failed to fetch DLC list from GitHub and jsDelivr." ;;
fetching_creamlinux) echo "Downloading CreamLinux..." ;;
dlc_list_fail) echo "Failed to fetch DLC list." ;;
fetching_creamlinux) echo "Downloading CreamLinux files..." ;;
creamlinux_ok) echo "CreamLinux files ready." ;;
copying_files) echo "Copying CreamLinux files into game folder..." ;;
checking_hashes) echo "Checking file integrity (hashes.json)..." ;;
to_download) echo "DLC archives to download:" ;;
unpacking) echo "Unpacking archives..." ;;
updating_ini) echo "Updating cream_api.ini via SteamCMD API..." ;;
ini_updated) echo "cream_api.ini updated, added DLC:" ;;
ini_skip) echo "SteamCMD API unavailable, skipped." ;;
install_done) echo "Installation complete!" ;;
patch_launch_header) echo "Patching Steam launch options" ;;
patch_userdata_not_found) echo "Could not find Steam userdata folder." ;;
patch_localconfig_not_found) echo "localconfig.vdf not found for any user." ;;
patch_backup) echo "Backup created:" ;;
patch_done) echo "Launch options set to: sh ./cream.sh %command%" ;;
patch_already) echo "Launch options already set correctly." ;;
patch_steam_running_warn) echo "WARNING: Steam appears to be running. Close Steam fully before/after patching, otherwise it may overwrite the change." ;;
copying_files) echo "Copying files to game folder..." ;;
to_download) echo "DLC to download:" ;;
unpacking) echo "Unpacking..." ;;
updating_ini) echo "Updating cream_api.ini..." ;;
ini_updated) echo "cream_api.ini: added" ;;
ini_skip) echo "SteamCMD unavailable, skipped." ;;
install_done) echo "Done." ;;
patch_launch_header) echo "Steam launch options" ;;
patch_userdata_not_found) echo "Steam userdata folder not found." ;;
patch_localconfig_not_found) echo "localconfig.vdf not found." ;;
patch_backup) echo "Backup:" ;;
patch_done) echo "Launch options set." ;;
steam_running_prompt) echo "Steam is running and must be closed to apply launch options. Close it now? [y/N]: " ;;
steam_closing) echo "Closing Steam..." ;;
steam_close_ok) echo "Steam closed." ;;
steam_close_fail) echo "Could not close Steam, aborting." ;;
abort_steam_running) echo "Skipped: Steam is still running." ;;
press_enter) echo "Press Enter to continue..." ;;
enter_game_path) echo "Enter Stellaris game path manually (or press Enter to skip): " ;;
enter_game_path) echo "Game path (or Enter to cancel): " ;;
invalid_game_path) echo "Path does not exist." ;;
enter_steam_path) echo "Steam not auto-detected. Enter Steam folder path (or Enter to cancel): " ;;
invalid_steam_path) echo "Not a valid Steam folder (no 'steamapps' inside)." ;;
invalid_choice) echo "Invalid choice." ;;
lang_set) echo "Language set to English." ;;
log_empty) echo "Log is empty." ;;
confirm_install) echo "Proceed with installation? [y/N]: " ;;
confirm_install) echo "Proceed? [y/N]: " ;;
cancelled) echo "Cancelled." ;;
no_dlc_to_download) echo "All DLC are up to date." ;;
no_dlc_to_download) echo "All DLC up to date." ;;
flatpak_steam) echo "(Flatpak)" ;;
*) echo "$1" ;;
esac
@@ -92,50 +94,52 @@ _t_en() {
_t_ru() {
case "$1" in
title) echo "Stellaris DLC Unlocker — версия для Linux" ;;
title) echo "Stellaris DLC Unlocker" ;;
menu_header) echo "ГЛАВНОЕ МЕНЮ" ;;
m_status) echo "Статус и пути" ;;
m_install) echo "Установить / обновить разблокировщик DLC" ;;
m_steam_launch) echo "Прописать параметры запуска в Steam" ;;
m_lang) echo "Сменить язык" ;;
m_log) echo "Показать лог" ;;
m_status) echo "Статус" ;;
m_install) echo "Установить / обновить" ;;
m_steam_launch) echo "Прописать параметры запуска Steam" ;;
m_lang) echo "Язык" ;;
m_log) echo "Лог" ;;
m_exit) echo "Выход" ;;
choose) echo "Выберите пункт: " ;;
detect_steam) echo "Поиск установки Steam..." ;;
steam_found) echo "Steam найден:" ;;
steam_not_found) echo "Установка Steam не найдена." ;;
detect_game) echo "Поиск установки Stellaris..." ;;
game_found) echo "Stellaris найден:" ;;
game_not_found) echo "Установка Stellaris не найдена." ;;
native_build) echo "Обнаружена нативная Linux-версия — CreamLinux подходит." ;;
not_native) echo "Нативная Linux-версия не обнаружена (нет ELF-файла 'stellaris'). CreamLinux работает только с нативной версией, не с Proton/Wine." ;;
choose) echo "> " ;;
steam_found) echo "Steam:" ;;
steam_not_found) echo "Steam не найден." ;;
game_found) echo "Stellaris:" ;;
game_not_found) echo "Stellaris не найден." ;;
native_build) echo "Нативная Linux-версия." ;;
not_native) echo "Не нативная Linux-версия. CreamLinux работает только с нативной сборкой, не с Proton/Wine." ;;
downloading) echo "Скачивание" ;;
fetching_dlc_list) echo "Получение списка DLC..." ;;
dlc_list_ok) echo "Список DLC загружен." ;;
dlc_list_fail) echo "Не удалось получить список DLC ни с GitHub, ни с jsDelivr." ;;
fetching_creamlinux) echo "Скачивание CreamLinux..." ;;
dlc_list_fail) echo "Не удалось получить список DLC." ;;
fetching_creamlinux) echo "Скачивание файлов CreamLinux..." ;;
creamlinux_ok) echo "Файлы CreamLinux готовы." ;;
copying_files) echo "Копирование файлов CreamLinux в папку игры..." ;;
checking_hashes) echo "Проверка целостности файлов (hashes.json)..." ;;
to_download) echo "Архивов DLC к скачиванию:" ;;
unpacking) echo "Распаковка архивов..." ;;
updating_ini) echo "Обновление cream_api.ini через SteamCMD API..." ;;
ini_updated) echo "cream_api.ini обновлён, добавлено DLC:" ;;
ini_skip) echo "SteamCMD API недоступен, пропущено." ;;
install_done) echo "Установка завершена!" ;;
patch_launch_header) echo "Прописывание параметров запуска Steam" ;;
patch_userdata_not_found) echo "Не удалось найти папку userdata Steam." ;;
patch_localconfig_not_found) echo "Файл localconfig.vdf не найден ни для одного пользователя." ;;
patch_backup) echo "Создана резервная копия:" ;;
patch_done) echo араметры запуска установлены: sh ./cream.sh %command%" ;;
patch_already) echo "Параметры запуска уже выставлены верно." ;;
patch_steam_running_warn) echo "ВНИМАНИЕ: похоже, Steam запущен. Полностью закройте Steam до/после патчинга, иначе он может перезаписать изменение." ;;
copying_files) echo "Копирование файлов в папку игры..." ;;
to_download) echo "DLC к скачиванию:" ;;
unpacking) echo "Распаковка..." ;;
updating_ini) echo "Обновление cream_api.ini..." ;;
ini_updated) echo "cream_api.ini: добавлено" ;;
ini_skip) echo "SteamCMD недоступен, пропущено." ;;
install_done) echo "Готово." ;;
patch_launch_header) echo "Параметры запуска Steam" ;;
patch_userdata_not_found) echo "Папка userdata Steam не найдена." ;;
patch_localconfig_not_found) echo "localconfig.vdf не найден." ;;
patch_backup) echo "Бэкап:" ;;
patch_done) echo "Параметры запуска установлены." ;;
steam_running_prompt) echo "Steam запущен, для применения параметров запуска его нужно закрыть. Закрыть сейчас? [y/N]: " ;;
steam_closing) echo "Закрытие Steam..." ;;
steam_close_ok) echo "Steam закрыт." ;;
steam_close_fail) echo "Не удалось закрыть Steam, отмена." ;;
abort_steam_running) echo "Пропущено: Steam всё ещё запущен." ;;
press_enter) echo "Нажмите Enter для продолжения..." ;;
enter_game_path) echo "Введите путь к игре Stellaris вручную (или Enter, чтобы пропустить): " ;;
enter_game_path) echo "Путь к игре (или Enter, чтобы отменить): " ;;
invalid_game_path) echo "Такого пути не существует." ;;
enter_steam_path) echo "Steam не найден автоматически. Введите путь к папке Steam (или Enter, чтобы отменить): " ;;
invalid_steam_path) echo "Это не папка Steam (внутри нет 'steamapps')." ;;
invalid_choice) echo "Неверный выбор." ;;
lang_set) echo "Язык переключён на русский." ;;
log_empty) echo "Лог пуст." ;;
confirm_install) echo "Продолжить установку? [y/N]: " ;;
confirm_install) echo "Продолжить? [y/N]: " ;;
cancelled) echo "Отменено." ;;
no_dlc_to_download) echo "Все DLC актуальны." ;;
flatpak_steam) echo "(Flatpak)" ;;
@@ -145,50 +149,52 @@ _t_ru() {
_t_zh() {
case "$1" in
title) echo "Stellaris DLC 解锁器 — Linux 版" ;;
title) echo "Stellaris DLC Unlocker" ;;
menu_header) echo "主菜单" ;;
m_status) echo "状态与路径" ;;
m_install) echo "安装 / 更新 DLC 解锁器" ;;
m_status) echo "状态" ;;
m_install) echo "安装 / 更新" ;;
m_steam_launch) echo "设置 Steam 启动选项" ;;
m_lang) echo "切换语言" ;;
m_log) echo "查看日志" ;;
m_lang) echo "语言" ;;
m_log) echo "日志" ;;
m_exit) echo "退出" ;;
choose) echo "请选择: " ;;
detect_steam) echo "正在检测 Steam 安装..." ;;
steam_found) echo "找到 Steam:" ;;
steam_not_found) echo "未找到 Steam 安装。" ;;
detect_game) echo "正在检测 Stellaris 安装..." ;;
game_found) echo "已找到 Stellaris:" ;;
game_not_found) echo "未找到 Stellaris 安装。" ;;
native_build) echo "检测到原生 Linux 版本 — CreamLinux 兼容。" ;;
not_native) echo "未检测到原生 Linux 版本(缺少 'stellaris' ELF 文件)。CreamLinux 仅支持原生版本,不支持 Proton/Wine。" ;;
choose) echo "> " ;;
steam_found) echo "Steam:" ;;
steam_not_found) echo "找到 Steam" ;;
game_found) echo "Stellaris:" ;;
game_not_found) echo "未找到 Stellaris" ;;
native_build) echo "原生 Linux 版本。" ;;
not_native) echo "非原生 Linux 版本。CreamLinux 仅支持原生版本,不支持 Proton/Wine。" ;;
downloading) echo "下载中" ;;
fetching_dlc_list) echo "正在获取 DLC 列表..." ;;
dlc_list_ok) echo "DLC 列表已加载。" ;;
dlc_list_fail) echo "从 GitHub 和 jsDelivr 获取 DLC 列表失败。" ;;
fetching_creamlinux) echo "正在下载 CreamLinux..." ;;
dlc_list_fail) echo "获取 DLC 列表失败。" ;;
fetching_creamlinux) echo "正在下载 CreamLinux 文件..." ;;
creamlinux_ok) echo "CreamLinux 文件已就绪。" ;;
copying_files) echo "正在将 CreamLinux 文件复制到游戏目录..." ;;
checking_hashes) echo "正在校验文件完整性 (hashes.json)..." ;;
to_download) echo "待下载的 DLC 压缩包:" ;;
copying_files) echo "正在复制文件到游戏目录..." ;;
to_download) echo "待下载 DLC:" ;;
unpacking) echo "正在解压..." ;;
updating_ini) echo "正在通过 SteamCMD API 更新 cream_api.ini..." ;;
ini_updated) echo "cream_api.ini 已更新,新增 DLC:" ;;
ini_skip) echo "SteamCMD API 不可用,已跳过。" ;;
install_done) echo "安装完成" ;;
patch_launch_header) echo "设置 Steam 启动选项" ;;
updating_ini) echo "正在更新 cream_api.ini..." ;;
ini_updated) echo "cream_api.ini:添加" ;;
ini_skip) echo "SteamCMD 不可用,已跳过。" ;;
install_done) echo "完成" ;;
patch_launch_header) echo "Steam 启动选项" ;;
patch_userdata_not_found) echo "未找到 Steam userdata 目录。" ;;
patch_localconfig_not_found) echo "未找到任何用户的 localconfig.vdf。" ;;
patch_backup) echo "已创建备份:" ;;
patch_done) echo "启动选项已设置为: sh ./cream.sh %command%" ;;
patch_already) echo "启动选项已正确设置。" ;;
patch_steam_running_warn) echo "警告: Steam 似乎正在运行。请在修改前后完全关闭 Steam,否则更改可能被覆盖。" ;;
patch_localconfig_not_found) echo "未找到 localconfig.vdf。" ;;
patch_backup) echo "备份:" ;;
patch_done) echo "启动选项已设置" ;;
steam_running_prompt) echo "Steam 正在运行,需关闭后才能应用启动选项。现在关闭吗?[y/N]: " ;;
steam_closing) echo "正在关闭 Steam..." ;;
steam_close_ok) echo "Steam 已关闭。" ;;
steam_close_fail) echo "无法关闭 Steam,已中止。" ;;
abort_steam_running) echo "已跳过:Steam 仍在运行。" ;;
press_enter) echo "按 Enter 继续..." ;;
enter_game_path) echo "请手动输入 Stellaris 游戏路径(直接 Enter 跳过: " ;;
enter_game_path) echo "游戏路径(直接 Enter 取消: " ;;
invalid_game_path) echo "路径不存在。" ;;
enter_steam_path) echo "未自动检测到 Steam。请输入 Steam 文件夹路径(直接 Enter 取消): " ;;
invalid_steam_path) echo "不是有效的 Steam 文件夹(内部没有 'steamapps')。" ;;
invalid_choice) echo "无效选择。" ;;
lang_set) echo "语言已切换为中文。" ;;
log_empty) echo "日志为空。" ;;
confirm_install) echo "是否继续安装[y/N]: " ;;
confirm_install) echo "继续[y/N]: " ;;
cancelled) echo "已取消。" ;;
no_dlc_to_download) echo "所有 DLC 均为最新。" ;;
flatpak_steam) echo "(Flatpak)" ;;
@@ -326,6 +332,88 @@ is_native_build() {
[ -f "$GAME_DIR/stellaris" ] && file "$GAME_DIR/stellaris" 2>/dev/null | grep -qi "ELF"
}
resolve_steam_dir() {
if [ -n "$STEAM_DIR" ]; then
return 0
fi
if find_steam_dir; then
return 0
fi
while true; do
ask "$(t enter_steam_path)" manual
[ -z "$manual" ] && return 1
manual="${manual%/}"
if [ -d "$manual/steamapps" ]; then
STEAM_DIR="$manual"
[[ "$manual" == *".var/app/com.valvesoftware.Steam"* || "$manual" == *"flatpak"* || "$manual" == *"snap/steam"* ]] && IS_FLATPAK_STEAM=1
return 0
fi
log ERROR "$(t invalid_steam_path)"
done
}
resolve_game_dir() {
if find_game_dir; then
return 0
fi
while true; do
ask "$(t enter_game_path)" manual
[ -z "$manual" ] && return 1
manual="${manual%/}"
if [ -d "$manual" ]; then
GAME_DIR="$manual"
return 0
fi
log ERROR "$(t invalid_game_path)"
done
}
is_steam_running() {
pgrep -x steam >/dev/null 2>&1 && return 0
pgrep -f "com.valvesoftware.Steam" >/dev/null 2>&1 && return 0
return 1
}
close_steam() {
log INFO "$(t steam_closing)"
if [ "$IS_FLATPAK_STEAM" = 1 ] && command -v flatpak >/dev/null 2>&1; then
flatpak kill com.valvesoftware.Steam >/dev/null 2>&1
fi
command -v steam >/dev/null 2>&1 && steam -shutdown >/dev/null 2>&1 &
pkill -x steam >/dev/null 2>&1
local waited=0
while is_steam_running && [ "$waited" -lt 15 ]; do
sleep 1
waited=$((waited+1))
done
if is_steam_running; then
pkill -9 -x steam >/dev/null 2>&1
sleep 1
fi
if is_steam_running; then
log ERROR "$(t steam_close_fail)"
return 1
fi
log OK "$(t steam_close_ok)"
return 0
}
ensure_steam_closed() {
if ! is_steam_running; then
return 0
fi
ask "$(t steam_running_prompt)" ans
if [[ "$ans" =~ ^[yYдД]$ ]]; then
close_steam || return 1
return 0
fi
log WARN "$(t abort_steam_running)"
return 1
}
DLC_DATA_JSON=""
fetch_dlc_data() {
@@ -494,23 +582,15 @@ download_dlc_content() {
done
}
patch_launch_options() {
header
echo -e "${C_BOLD}$(t patch_launch_header)${C_RESET}"
hr
patch_launch_options_core() {
resolve_steam_dir || { log ERROR "$(t steam_not_found)"; return 1; }
if [ -z "$STEAM_DIR" ]; then
find_steam_dir || { log ERROR "$(t steam_not_found)"; pause; return 1; }
fi
if pgrep -x steam >/dev/null 2>&1 || pgrep -f "com.valvesoftware.Steam" >/dev/null 2>&1; then
log WARN "$(t patch_steam_running_warn)"
fi
ensure_steam_closed || return 1
local userdata_dir="$STEAM_DIR/userdata"
if [ ! -d "$userdata_dir" ]; then
log ERROR "$(t patch_userdata_not_found)"
pause; return 1
return 1
fi
local patched_any=0
@@ -577,17 +657,25 @@ patch_launch_options() {
if grep -q "$APPID" "$tmp"; then
mv "$tmp" "$vdf"
patched_any=1
log OK "$(t patch_done) ($user_dir)"
log OK "$(t patch_done)"
else
rm -f "$tmp"
log WARN "AppID $APPID not found in $vdf (game never launched from this Steam account?)"
log WARN "AppID $APPID not found in $vdf"
fi
done
if [ "$patched_any" -eq 0 ]; then
log ERROR "$(t patch_localconfig_not_found)"
return 1
fi
return 0
}
patch_launch_options() {
header
echo -e "${C_BOLD}$(t patch_launch_header)${C_RESET}"
hr
patch_launch_options_core
pause
}
@@ -596,22 +684,17 @@ do_install() {
echo -e "${C_BOLD}$(t m_install)${C_RESET}"
hr
find_steam_dir
resolve_steam_dir
if [ -z "$STEAM_DIR" ]; then
log ERROR "$(t steam_not_found)"
pause; return 1
fi
log OK "$(t steam_found) $STEAM_DIR $([ "$IS_FLATPAK_STEAM" = 1 ] && t flatpak_steam)"
find_game_dir
resolve_game_dir
if [ -z "$GAME_DIR" ]; then
log WARN "$(t game_not_found)"
ask "$(t enter_game_path)" manual_path
if [ -n "$manual_path" ] && [ -d "$manual_path" ]; then
GAME_DIR="$manual_path"
else
pause; return 1
fi
log ERROR "$(t game_not_found)"
pause; return 1
fi
log OK "$(t game_found) $GAME_DIR"
@@ -636,9 +719,12 @@ do_install() {
update_cream_ini
download_dlc_content
echo
echo -e "${C_BOLD}$(t patch_launch_header)${C_RESET}"
patch_launch_options_core
echo
log OK "$(t install_done)"
echo -e "${C_DIM}sh ./cream.sh %command%${C_RESET}"
pause
}
@@ -702,7 +788,7 @@ change_language() {
3) LANGUAGE="zh" ;;
esac
echo "$LANGUAGE" > "$CONFIG_FILE"
log OK "$(t lang_set)"
log OK "$LANGUAGE"
pause
}
@@ -744,6 +830,20 @@ main_menu() {
done
}
[ -f "$CONFIG_FILE" ] && LANGUAGE="$(cat "$CONFIG_FILE")"
detect_system_lang() {
local loc="${LANG:-en}"
loc="$(echo "$loc" | tr '[:upper:]' '[:lower:]')"
case "$loc" in
ru*) echo ru ;;
zh*) echo zh ;;
*) echo en ;;
esac
}
if [ -f "$CONFIG_FILE" ]; then
LANGUAGE="$(cat "$CONFIG_FILE")"
else
LANGUAGE="$(detect_system_lang)"
fi
check_deps
main_menu