Files

109 lines
5.0 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# L2 Interlude SPP - запуск одной командой (Docker-вариант).
# Использование:
# powershell -ExecutionPolicy Bypass -File start.ps1 # поднять всё
# powershell -ExecutionPolicy Bypass -File start.ps1 -Down # остановить
# powershell -ExecutionPolicy Bypass -File start.ps1 -Reset # остановить и стереть базу (полный сброс)
# powershell -ExecutionPolicy Bypass -File start.ps1 -Client "D:\Games\L2Interlude" # + запустить клиент
param(
[switch]$Down,
[switch]$Reset,
[string]$Client = ""
)
$ErrorActionPreference = "Stop"
$Base = $PSScriptRoot
$ServerDir = Join-Path $Base "server"
$Zip = Join-Path $Base "server_interlude.zip"
$Compose = Join-Path $ServerDir "docker\docker-compose.yml"
function Compose { docker compose -f $Compose @args }
# --- Docker есть? ---
try { docker info *>$null } catch {
Write-Host "Docker не запущен или не установлен. Поставь Docker Desktop и запусти его." -ForegroundColor Red
exit 1
}
# --- Остановка / сброс ---
if ($Down -or $Reset) {
if (Test-Path $Compose) {
if ($Reset) {
Compose down -v
Write-Host "Остановлено, база стёрта. Следующий запуск начнёт с чистой базы (боты - со стартовых уровней)." -ForegroundColor Yellow
} else {
Compose down
Write-Host "Остановлено. Прогресс ботов и персонажи сохранены." -ForegroundColor Green
}
} else {
Write-Host "Сервер ещё не разворачивался, останавливать нечего."
}
exit 0
}
# --- Распаковка сервера при первом запуске ---
if (-not (Test-Path (Join-Path $ServerDir "game"))) {
if (-not (Test-Path $Zip)) {
Write-Host "Не найден $Zip" -ForegroundColor Red
exit 1
}
Write-Host "Распаковываю сервер (~700 МБ, минуту-другую)..."
New-Item -ItemType Directory -Force -Path $ServerDir | Out-Null
Expand-Archive -Path $Zip -DestinationPath $Base -Force
# в архиве корневая папка server_interlude - переименуем в server
if (Test-Path (Join-Path $Base "server_interlude\game")) {
if (Test-Path $ServerDir) { Remove-Item $ServerDir -Recurse -Force }
Rename-Item (Join-Path $Base "server_interlude") $ServerDir
}
}
# --- Docker-файлы внутрь папки сервера ---
if (-not (Test-Path $Compose)) {
Copy-Item -Recurse -Force (Join-Path $Base "docker") (Join-Path $ServerDir "docker")
}
# --- Поднимаем ---
Write-Host "Собираю и запускаю контейнеры (первый раз - несколько минут)..."
Compose up --build -d
# --- Ждём готовности гейм-сервера ---
Write-Host "Жду старта гейм-сервера (загрузка геодаты ~1 мин)..."
$deadline = (Get-Date).AddMinutes(10)
$ready = $false
while ((Get-Date) -lt $deadline) {
Start-Sleep -Seconds 5
$logs = Compose logs game --tail 100 2>$null | Out-String
if ($logs -match "Registered on login") { $ready = $true; break }
if ($logs -match "OutOfMemoryError") {
Write-Host "Гейм-серверу не хватило памяти. Docker Desktop -> Settings -> Resources: дай WSL2 минимум 6 ГБ RAM." -ForegroundColor Red
exit 1
}
}
if ($ready) {
Write-Host ""
Write-Host "=== Сервер готов ===" -ForegroundColor Green
Write-Host "Логин-сервер: 127.0.0.1:2106"
Write-Host "В клиенте: system\l2.ini -> ServerAddr=127.0.0.1, запускать system\l2.exe"
Write-Host "Аккаунт: любые логин/пароль на экране входа - создастся сам."
Write-Host ""
Write-Host "Админка (после первого входа в игру):"
Write-Host " docker compose -f `"$Compose`" exec db mariadb -uroot -pl2j l2jmobiusinterlude -e `"UPDATE accounts SET accessLevel=100 WHERE login='ЛОГИН'`"" -ForegroundColor DarkGray
Write-Host "Логи: docker compose -f `"$Compose`" logs -f game"
Write-Host "Стоп: powershell -File start.ps1 -Down"
} else {
Write-Host "Гейм-сервер не отрапортовал готовность за 10 минут. Смотри логи:" -ForegroundColor Red
Write-Host " docker compose -f `"$Compose`" logs game --tail 50"
exit 1
}
# --- Клиент ---
if ($Client -ne "") {
$l2exe = Join-Path $Client "system\l2.exe"
if (Test-Path $l2exe) {
Write-Host "Запускаю клиент..."
Start-Process -FilePath $l2exe -WorkingDirectory (Join-Path $Client "system")
} else {
Write-Host "Не нашёл $l2exe - проверь путь к клиенту." -ForegroundColor Yellow
}
}