Tfe

Ongi etorri tfe-ren webgunera...

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()