Blog/jokoak_euskaraz/stray/Stray_Euskara_Mod/sortu_scripta.py
(Deskargatu)
#!/usr/bin/env python3
"""
stray_euskaraz.sh (instalatzaile bakarra) sortzen du.
build/Game_eu.locres-etik abiatuta, 16 hizkuntzetako pak-a eraiki
eta base64 bezala txertatzen du script bakarrean.
"""
import base64
import os
import shutil
import subprocess
import textwrap
BASE = os.path.dirname(os.path.abspath(__file__))
REPAK = "/tmp/opencode/repak/repak_cli-x86_64-unknown-linux-gnu/repak"
CULTURES = "de en es es-419 fr it ja ko nl pl pt-BR pt-PT ru tr zh-Hans zh-Hant".split()
LOCRES = os.path.join(BASE, "build", "Game_eu.locres")
MODCONTENT = os.path.join(BASE, "modcontent16")
PAK16 = os.path.join(BASE, "build16", "Hk_project-WindowsNoEditor_Override.pak")
SCRIPT = os.path.join(BASE, "stray_euskaraz.sh")
HEADER = r'''#!/usr/bin/env bash
# ============================================================
# STRAY EUSKARAZ — instalatzaile bakarra
# Kopiatu, exekutatu eta jolastu euskaraz.
#
# Erabilera:
# bash stray_euskaraz.sh -> instalatu eta jokoa piztu
# bash stray_euskaraz.sh --instalatu -> soilik instalatu
# bash stray_euskaraz.sh --kendu -> desinstalatu
# bash stray_euskaraz.sh --info -> diagnostikoa (non bilatzen duen)
# ============================================================
set -e
APPID=1332010
PAK_NAME="Hk_project-WindowsNoEditor_Override.pak"
MAIN_PAK="Hk_project-WindowsNoEditor.pak"
# ---------- Steam liburutegien erroak aurkitu ----------
LIBRARIES=()
VDF=""
for b in "$HOME/.local/share/Steam/steamapps" "$HOME/.steam/steam/steamapps"; do
if [ -f "$b/libraryfolders.vdf" ]; then VDF="$b/libraryfolders.vdf"; break; fi
done
if [ -n "$VDF" ]; then
# formatu zaharra: "0" "/ruta"
while IFS= read -r p; do [ -n "$p" ] && LIBRARIES+=("$p"); done \
< <(grep -oP '^\s*"\d+"\s+"\K[^"]+' "$VDF")
# formatu berria: "path" "/ruta"
while IFS= read -r p; do [ -n "$p" ] && LIBRARIES+=("$p"); done \
< <(grep -oP '^\s*"path"\s+"\K[^"]+' "$VDF")
fi
LIBRARIES+=("$HOME/.local/share/Steam")
LIBRARIES+=("$HOME/.steam/steam")
# ---------- Stray-ren Paks karpeta aurkitu ----------
GAME_PAKS=""
search_common() {
local base="$1"
[ -d "$base" ] || return 0
local dir p
for dir in "$base"/STRAY "$base"/Stray "$base"/stray; do
[ -d "$dir" ] || continue
p=$(find "$dir" -name "$MAIN_PAK" 2>/dev/null | head -1)
if [ -n "$p" ]; then GAME_PAKS="$(dirname "$p")"; return 1; fi
done
return 0
}
for lib in "${LIBRARIES[@]}"; do
search_common "${lib%/}/steamapps/common" && continue || break
done
if [ -z "$GAME_PAKS" ]; then
for m in /run/media/* /media/*; do
[ -d "$m" ] || continue
search_common "$m/steamapps/common" && continue || break
done
fi
# ---------- Diagnostikoa ----------
if [ "$1" = "--info" ]; then
echo "HOME=$HOME"
echo "VDF=$VDF"
echo "Liburutegiak:"
for lib in "${LIBRARIES[@]}"; do echo " - $lib"; done
if [ -n "$GAME_PAKS" ]; then
echo "Stray aurkitua: $GAME_PAKS"
else
echo "Stray EZ da aurkitu."
for lib in "${LIBRARIES[@]}"; do
echo " Begiratua: ${lib%/}/steamapps/common/{STRAY,Stray,stray}"
done
fi
exit 0
fi
if [ -z "$GAME_PAKS" ]; then
echo "ERRORE: ez da Stray instalazioa aurkitu."
echo " Laguntzarako: bash stray_euskaraz.sh --info"
exit 1
fi
DEST="$GAME_PAKS/$PAK_NAME"
# ---------- Desinstalatu ----------
if [ "$1" = "--kendu" ] || [ "$1" = "-k" ]; then
if [ -f "$DEST" ]; then rm -f "$DEST"; echo "==> Mod-a kendu da."; else echo "==> Ez zegoen instalatuta."; fi
exit 0
fi
# ---------- Instalatu (pak-a base64-tik deskodetu) ----------
TMP="$(mktemp)"
cat > "$TMP" << 'PAK_EOF'
'''
FOOTER = r'''
PAK_EOF
base64 -d "$TMP" > "$DEST"
rm -f "$TMP"
echo "==> EUSKARAZ MOD-A INSTALATUTA"
echo " Kokapena: $DEST"
echo " Hizkuntza: edozein dela ere (16 hizkuntza euskaraz) euskaraz ikusiko duzu."
echo ""
if [ "$1" = "--instalatu" ] || [ "$1" = "-i" ]; then
echo "Piztu jokoa Steam-etik normalean."
exit 0
fi
# ---------- Jokoa piztu ----------
if command -v steam >/dev/null 2>&1 || [ -x "$HOME/.local/share/Steam/steam.sh" ]; then
echo "==> Jokoa Steam bidez pizten..."
( nohup steam "steam://rungameid/$APPID" >/dev/null 2>&1 & )
echo "Stray abiarazten ari da. Gozatu euskaraz!"
else
echo "Steam ez da aurkitu; piztu Stray Steam-etik eskuz."
fi
'''
def build_16_pak():
if os.path.exists(MODCONTENT):
shutil.rmtree(MODCONTENT)
os.makedirs(MODCONTENT)
for c in CULTURES:
d = os.path.join(MODCONTENT, "Hk_project/Content/Localization/Game", c)
os.makedirs(d, exist_ok=True)
shutil.copy(LOCRES, os.path.join(d, "Game.locres"))
os.makedirs(os.path.dirname(PAK16), exist_ok=True)
subprocess.run([REPAK, "pack", MODCONTENT, PAK16, "-m", "../../../",
"--version", "V11", "-p", "397643129", "--compression", "Zlib"],
check=True, capture_output=True)
def generate_script():
data = open(PAK16, "rb").read()
b64 = base64.b64encode(data).decode()
with open(SCRIPT, "w", encoding="utf-8") as f:
f.write(HEADER)
for line in textwrap.wrap(b64, 76):
f.write(line + "\n")
f.write(FOOTER)
os.chmod(SCRIPT, 0o755)
print("Sortuta:", SCRIPT, f"({os.path.getsize(SCRIPT)} bytes, pak {len(data)} bytes)")
if __name__ == "__main__":
if not os.path.exists(LOCRES):
raise SystemExit("Ez da aurkitu " + LOCRES + " — lehenik itzulpenak berreraiki (build.sh).")
build_16_pak()
generate_script()