SPP bot world as of 2026-08-26: merged state of all Cowork sessions (brain, combat data, chat seams 2.0, idiolect, heard/context, headless players, name generator, crests, seeds)
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
# 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user