English version: README.en.md
Лаунчер фанатского Star Conflict Community Server: скачивает и обновляет файлы игры с патч-сервера (со сверкой SHA256), после чего запускает игру. Проверка умеет быстрый режим по размеру + времени изменения и полную проверку с пересчётом хешей.
Создан для проекта Star Conflict Community Server и развивается в его рамках.
Состав репозитория:
- корень — Electron-лаунчер (React + TypeScript);
server/— маленький Rust-сервер, который генерирует манифест и раздаёт файлы;.github/workflows/build.yml— CI: сборка Windows-установщика.
- Windows 10/11 x64, либо Linux / macOS через Wine (CrossOver, Whisky, обычный Wine).
- Место на диске под полную установку игры (~13 ГБ на данный момент).
- Скачай установщик
sccs-launcher-*-setup.exeиз Releases и установи. - При первом запуске выбери:
- Сервер — по умолчанию основной
https://cdn.sccs.dsrt.app, его убрать нельзя; свои можно добавлять через «Свой сервер» → «Добавить» и выбирать из списка.⚠️ Добавляй только серверы, которым доверяешь: игра скачивается с выбранного сервера, чужой сервер может подсунуть вредоносное ПО. - Папку установки — кнопкой «Выбрать…» или вручную.
- Потоки загрузки (1–16) — сколько файлов качать одновременно.
- Сервер — по умолчанию основной
- Нажми «Проверить» — лаунчер сверит локальные файлы с манифестом сервера. «Полная проверка» — то же, но с пересчётом хешей всех файлов (медленно, зато точно).
- Нажми «Обновить» — недостающие/изменённые файлы скачаются с прогрессом.
- Нажми «Играть» — запустится
win64/game.exeиз папки установки.
Язык интерфейса (RU/EN) переключается кнопками вверху, выбор запоминается.
Установщик Electron проверяет запущенные процессы через PowerShell, а его
Wine-заглушка работает криво и установщик может бесконечно жаловаться
sccs-launcher is running. Лечится отключением powershell-заглушки на время установки:
WINEDLLOVERRIDES=powershell.exe=d wine sccs-launcher-1.0.1-setup.exeВ CrossOver то же самое задаётся переменной окружения бутылки (или в команде запуска).
Если сам лаунчер под Wine падает/виснет с графикой (чёрное окно, краш GPU-процесса), запускай его с флагом Chromium:
wine sccs-launcher.exe --in-process-gpuОба флага нужны только при проблемах: на обычном Windows и на здоровых Wine-бутылках всё работает без них.
cd server
cargo build --release
# бинарник: server/target/release/sccs-serverПоложи файлы игры в отдельную папку (или сделай симлинк — в git он не попадёт):
ln -s "/path/to/star conflict" game # либо укажи свой --game-dir
./target/release/sccs-server generate --game-dir game --version v1Манифест manifest.json ляжет в корень папки игры. Формат:
{
"version": "v1",
"generated_at": "1791757489",
"files": [{ "path": "win64/game.exe", "size": 15826704, "sha256": "hex", "mtime": 1791540653 }]
}path — относительный путь с /, mtime — время изменения (unix-секунды):
по совпадению размера + mtime лаунчер пропускает хеширование (проверка за секунды).
./target/release/sccs-server serve --game-dir game --host 127.0.0.1 --port 8080Эндпоинты:
GET /health→ok;GET /manifest.json— манифест;GET /files/<path>— файлы, поддерживаетсяRange(докачка на стороне сервера из коробки через tower-http).
Сервис запускаем отдельным пользователем без root-прав — под root его запускать не надо (порт 8081 > 1024, поэтому привилегии не нужны):
# Пользователь и права на папку раздачи:
useradd -r -s /usr/sbin/nologin -d /opt/sccs-cdn sccs
chown -R sccs:sccs /opt/sccs-cdn
cat > /etc/systemd/system/sccs-cdn.service <<'EOF'
[Unit]
Description=SCCS Star Conflict patch server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=sccs
Group=sccs
WorkingDirectory=/opt/sccs-cdn
ExecStart=/opt/sccs-cdn/target/release/sccs-server serve --game-dir /opt/sccs-cdn/game --host 127.0.0.1 --port 8081
Restart=always
RestartSec=5
LimitNOFILE=65536
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now sccs-cdn
curl http://127.0.0.1:8081/healthЕсли знаешь, что делаешь: сам
serveдля раздачи не обязателен. Протокол — обычная статика (GET /manifest.json+GET /files/<path>сRange, который nginx/caddy умеют из коробки), так что раздавать файлы может напрямую nginx/caddy или любой другой веб-сервер. От sccs-server тогда нужен толькоgenerateдля сборки манифеста.
Сервер отдаёт HTTP без TLS — наружу его лучше выпускать через nginx/Caddy с HTTPS. Для nginx важно отключить буферизацию, иначе многогигабайтные файлы пойдут через память/диск прокси:
location / {
proxy_pass http://127.0.0.1:8081;
proxy_buffering off;
proxy_read_timeout 1h;
}- Замени/доложи файлы в папке игры.
- Перегенерируй манифест с новой версией:
sccs-server generate --game-dir game --version v2. - Рестарт сервиса не нужен — файлы и манифест читаются с диска при каждом запросе.
Лаунчеры игроков сами подтянут изменения при следующей проверке.
Чтобы игроки могли подключиться — дай им URL вида https://твой-домен,
его можно добавить в лаунчере через «Свой сервер».