#!/bin/sh
#
#  install.sh - Hypnotic2 serverfiles
#  FreeBSD 12.4 i386 / MySQL / MartySama (start.py Python2, ch1 + ch99)
#  Include patch anti-expirare (binarul 'game' avea "Server life time expired" -> 13.06.2024)
#  Rulat de svfile. Variabile: BASE_URL, PACK_ID, PACK_NAME
#
set -e
BASE_URL="${BASE_URL:-http://files.enixserver.ro/metin2/hypnotic2}"
GAMEDIR="/usr/game"
TS=$(date +%s 2>/dev/null || echo bak)

echo ">> [Hypnotic2] 1/6 Descarc fisierele..."
cd /root
fetch -q -o hyp_home.tar.gz  "$BASE_URL/home.tar.gz"
fetch -q -o hyp_mysql.tar.gz "$BASE_URL/mysql.tar.gz"

echo ">> [Hypnotic2] 2/6 Configurez baza de date (MySQL)..."
service mysql-server stop 2>/dev/null || service mysql-server onestop 2>/dev/null || true
pkill -9 mysqld 2>/dev/null || true
sleep 2
if [ -d /var/db/mysql ]; then mv /var/db/mysql "/var/db/mysql.old.$TS"; fi
mkdir -p /var/db/mysql
rm -rf /root/mysql
tar xzf /root/hyp_mysql.tar.gz -C /root
mv /root/mysql/* /var/db/mysql/
chown -R mysql:mysql /var/db/mysql
sysrc mysql_enable=YES >/dev/null 2>&1
service mysql-server start
sleep 6

echo ">> [Hypnotic2] 3/6 Extrag server files in $GAMEDIR..."
if [ -d "$GAMEDIR" ]; then mv "$GAMEDIR" "${GAMEDIR}.old.$TS"; fi
cd /root; rm -rf home
tar xzf /root/hyp_home.tar.gz
mv /root/home/main "$GAMEDIR"
chmod -R 755 "$GAMEDIR"
chmod +x "$GAMEDIR"/srv1/share/bin/db "$GAMEDIR"/srv1/share/bin/game 2>/dev/null || true

echo ">> [Hypnotic2] 4/6 Patch anti-expirare (Server life time)..."
python2.7 - "$GAMEDIR/srv1/share/bin/game" <<'PYEOF'
import sys
f = sys.argv[1]
d = bytearray(open(f, 'rb').read())
off = 0x1edba1                              # VA 0x08235ba1: ja -> "Server life time expired"
cur = bytes(d[off:off+6])
if cur == b'\x0f\x87\x79\x03\x00\x00':
    d[off:off+6] = b'\x90' * 6             # 6x NOP -> bomba inaccesibila
    open(f, 'wb').write(d)
    print("   anti-expirare aplicat (6x NOP)")
elif cur == b'\x90\x90\x90\x90\x90\x90':
    print("   deja patch-uit")
else:
    print("   ATENTIE: binar diferit, patch NEaplicat")
PYEOF

echo ">> [Hypnotic2] 5/6 Configurez IP-ul + start.sh..."
IP=$(ifconfig vtnet0 2>/dev/null | grep 'inet ' | awk '{print $2}' | head -1)
[ -z "$IP" ] && IP=$(ifconfig 2>/dev/null | grep 'inet ' | grep -v '127.0.0.1' | head -1 | awk '{print $2}')
find "$GAMEDIR/srv1" -name CONFIG -type f 2>/dev/null | while read f; do
    grep -q '^ADMINPAGE_IP1:' "$f" && sed -i '' "s/^ADMINPAGE_IP1:.*/ADMINPAGE_IP1: $IP/" "$f"
done
sed -i '' 's/ix0/vtnet0/g' "$GAMEDIR/gen_settings.py" 2>/dev/null || true
cat > "$GAMEDIR/start.sh" <<'SEOF'
#!/bin/sh
cd /usr/game
IP=$(ifconfig vtnet0 2>/dev/null | grep 'inet ' | awk '{print $2}' | head -1)
[ -z "$IP" ] && IP=$(ifconfig 2>/dev/null | grep 'inet ' | grep -v '127.0.0.1' | head -1 | awk '{print $2}')
echo "Pornesc Hypnotic2 pe IP $IP ..."
python2.7 start.py -I "$IP"
sleep 3
echo "Gata. Verifica porturile:  sockstat -4l | grep game"
SEOF
chmod +x "$GAMEDIR/start.sh"

echo ">> [Hypnotic2] 6/6 Curatenie..."
rm -f /root/hyp_home.tar.gz /root/hyp_mysql.tar.gz
rm -rf /root/mysql /root/home

echo ""
echo "  ============================================================"
echo "   Hypnotic2 instalat cu succes!"
echo "   IP server : $IP"
echo "   MySQL     : user=e2user! (baza vine preconfigurata)"
echo "   Porneste  : cd $GAMEDIR && ./start.sh"
echo "  ============================================================"
echo ""
