#!/bin/sh
#
#  install.sh - Happiness serverfiles (2016)
#  FreeBSD 12.4 i386 / datadir MySQL 5.5 migrat pe 5.7 (tabele MyISAM)
#  Include patch anti-expirare (game expira 07.02.2020) + user SQL ezio.
#  IP se auto-detecteaza de binar (interface vtnet0). Cai: /usr/home/game.
#
set -e
BASE_URL="${BASE_URL:-http://files.enixserver.ro/metin2/happiness}"
TS=$(date +%s 2>/dev/null || echo bak)
GAMEDIR=/usr/home/game

echo ">> [Happiness] 1/7 Descarc fisierele..."
cd /root
fetch -q -o hap_game.tar.gz  "$BASE_URL/game.tar.gz"
fetch -q -o hap_mysql.tar.gz "$BASE_URL/mysql.tar.gz"

echo ">> [Happiness] 2/7 Pregatesc datadir-ul vechi (5.5)..."
rm -rf /root/hap_old_dd
mkdir -p /root/hap_old_dd
tar xzf /root/hap_mysql.tar.gz -C /root/hap_old_dd
OLD_DD=/root/hap_old_dd/var/db/mysql

echo ">> [Happiness] 3/7 Init MySQL 5.7 fresh + import baze MyISAM..."
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
chown mysql:mysql /var/db/mysql
/usr/local/libexec/mysqld --initialize-insecure --user=mysql --datadir=/var/db/mysql >/dev/null 2>&1
for db in account common player log hotbackup Support web metin2_runup; do
    [ -d "$OLD_DD/$db" ] && cp -R "$OLD_DD/$db" "/var/db/mysql/$db"
done
chown -R mysql:mysql /var/db/mysql
sysrc mysql_enable=YES >/dev/null 2>&1
service mysql-server start
sleep 6

echo ">> [Happiness] 4/7 Creez userul SQL 'ezio'..."
mysql -u root <<'SQL'
CREATE USER IF NOT EXISTS 'ezio'@'localhost' IDENTIFIED BY 'DevelopersEzio';
CREATE USER IF NOT EXISTS 'ezio'@'%' IDENTIFIED BY 'DevelopersEzio';
GRANT ALL PRIVILEGES ON *.* TO 'ezio'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'ezio'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
SQL

echo ">> [Happiness] 5/7 Extrag server files in $GAMEDIR..."
rm -rf "$GAMEDIR"
[ -L /usr/game ] && rm -f /usr/game || rm -rf /usr/game
cd /
tar xzf /root/hap_game.tar.gz
chmod -R 755 "$GAMEDIR"
ln -sfn "$GAMEDIR" /usr/game
if ! grep -q '/usr/home/game/' /etc/libmap.conf 2>/dev/null; then
cat >> /etc/libmap.conf <<'EOF'

[/usr/home/game/]
libstdc++.so.6		/usr/local/lib/gcc12/libstdc++.so.6
libgcc_s.so.1		/usr/local/lib/gcc12/libgcc_s.so.1
EOF
fi

echo ">> [Happiness] 6/7 Patch anti-expirare (game, expira 2020)..."
python2.7 - "$GAMEDIR/mandi/game" <<'PYEOF'
import sys
f = sys.argv[1]
d = bytearray(open(f, 'rb').read())
off = 0x1ae8f1                            # VA 0x081f68f1: ja -> exit pe data expirata
cur = bytes(d[off:off+6])
if cur == b'\x0f\x87\xba\x03\x00\x00':
    d[off:off+6] = b'\x90' * 6
    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 ">> [Happiness] 7/7 Curatenie..."
rm -f /root/hap_game.tar.gz /root/hap_mysql.tar.gz
rm -rf /root/hap_old_dd

echo ""
echo "  ============================================================"
echo "   Happiness instalat cu succes!"
echo "   MySQL     : user=ezio (baze migrate 5.5 -> 5.7)"
echo "   IP        : auto-detectat de server (interfata vtnet0)"
echo "   Porneste  : cd /usr/game && ./start.sh   (alege 1/2/3)"
echo "  ============================================================"
echo ""
