# «Точка» 2.1 — хост на CachyOS

В архиве готовые серверы Rust/Axum для Windows x64 и Linux x64, интерфейс и собранный WebAssembly. Для запуска **не нужны Node.js, npm, Cargo или компиляция**. Комнаты хранятся в памяти: после перезапуска создай новую.

## Распаковать и настроить

Распакуй tochka-rust.zip в ~/Games файловым менеджером или:

```sh
mkdir -p ~/Games
unzip ~/Downloads/tochka-rust.zip -d ~/Games
cd ~/Games/tochka
test -f .env || cp .env.example .env
nano .env
```

Если unzip / nano отсутствуют, установи их через менеджер пакетов CachyOS. В .env впиши:

```dotenv
HOST=0.0.0.0
PORT=3000
MAPILLARY_TOKEN=вставь_Client_access_token
LOCATION_PACK=./data/locations.json
```

Нужен **Client access token**, а не Client Secret. Создай приложение в [Mapillary Developers](https://www.mapillary.com/dashboard/developers), открой настройки и скопируй Client token. Друзьям аккаунт не нужен. Токен используется просмотрщиком в браузере и доступен участникам комнаты. Локальный токен автора в архив не включён: впиши свой либо переданный клиентский токен.

В nano: Ctrl+O, Enter, Ctrl+X. Конфиг называется .env и лежит рядом с Cargo.toml. Если у хоста уже есть доверенный HTTP-прокси, добавь HTTPS_PROXY=http://127.0.0.1:ПОРТ. Это адрес на компьютере хоста: прокси Windows автоматически на CachyOS не переносится. Панорамы, метаданные и изображения Mapillary загружаются через Rust-сервер хоста. Игрокам нужен доступ к адресу игры; настройки прокси хоста им копировать не нужно.

## Запустить

```sh
cd ~/Games/tochka
sh start-linux.sh
```

Открой **http://localhost:3000**. Терминал должен оставаться открытым; остановка Ctrl+C. После изменения .env перезапусти сервер. Проверка во втором терминале:

```sh
curl --fail http://127.0.0.1:3000/api/health
```

Ответ содержит ok:true, version:2.1.0 и runtime:rust-axum. Если порт занят, проверь `ss -lntp 'sport = :3000'` или выбери PORT=3005 в .env и используй :3005 в ссылках.

Готовый Linux-сервер предназначен для **x86_64**, собран статически с musl. Для ARM или самостоятельной сборки установи Rust stable и C-компилятор через менеджер пакетов, затем `cargo build --release --locked`; запускай `./target/release/tochka-server` из папки игры. WASM уже собран; его исходник rust/geo.rs, пересборка описана в README.

На Windows: распакуй архив и запусти start-windows.cmd. Если Windows спрашивает доступ к сети, разреши его для своей частной сети.

## Подключить друга через интернет

Для закрытой игры можно использовать Tailscale на обоих компьютерах. На CachyOS:

```sh
sudo pacman -Syu tailscale
sudo systemctl enable --now tailscaled
sudo tailscale up
tailscale ip -4
```

pacman -Syu обновляет систему; выполни его в удобное время. Войди по ссылке из tailscale up. Друг на Windows устанавливает [Tailscale](https://tailscale.com/download) и входит в свой аккаунт. [Поделись компьютером хоста](https://tailscale.com/docs/features/sharing) через консоль Tailscale и отправь приглашение другу; пароль аккаунта не передавай. Команды описаны в [документации CLI](https://tailscale.com/docs/reference/tailscale-cli).

Если IP хоста 100.80.90.10, **оба** откройте http://100.80.90.10:3000. Это пример — подставь результат tailscale ip -4. Создай комнату по этому адресу и скопируй приглашение. **localhost другу не отправляй:** на его компьютере это его собственный компьютер.

В одной локальной сети Tailscale не обязателен: узнай LAN IP через ip -4 addr и открой http://LAN_IP:3000. Если firewall включён, разреши TCP 3000 только от интерфейса Tailscale или нужной локальной сети. Не отключай firewall целиком. Если сеть доступна, а игра нет, проверь HOST=0.0.0.0 и /api/health с компьютера друга. Через Tailscale проброс порта роутера не нужен.

## Как играть

«Угадай место»: всем выдаётся одна случайная панорама, игроки исследуют улицу и ставят ответ на карте. «Прятки»: все выбирают укрытия, затем по очереди ищут каждое. Владелец укрытия видит панораму выбранного искателя, направление его взгляда и маршрут; можно переключаться между искателями.

Хост выбирает весь мир либо обводит разрешённые и запрещённые зоны точками или от руки. Переход к координатам помогает приблизить город. Голубая метка — точка поиска, фиолетовая — фактическая панорама. Mapillary подбирает кадры в пределах 1 км, спрятаться можно только внутри разрешённых границ. Голубые точки показывают доступные кадры 360° около центра карты.

Друзья нажимают «Я готов», хост — «Погнали». В прятках найди панораму, пройди к укрытию и нажми «Я спрятался». Сервер проверяет координаты текущего кадра. Таймер поиска запускается после загрузки панорам у искателей либо через 20 секунд ожидания. Enter — ответ, M — карта, R — стартовый кадр. Сохранённая метка засчитывается при истечении времени. После результатов все нажимают «Готов к следующему»; хост может продолжить вручную.

Есть Moving, No Move и NMPZ. До 5000 очков за раунд, 5000 при расстоянии до 25 метров; масштаб уменьшения очков зависит от размера зоны. Музыка и тихие клики настраиваются кнопкой ♫. Эмбиент включается после первого действия; громкость сохраняется на устройстве.

## Если панорамы не появились

Проверь токен и перезапуск. Серверу нужны tiles.mapillary.com и graph.mapillary.com, браузерам — изображения и просмотрщик Mapillary. Используются только сферические кадры; покрытие отличается от Google Street View. В местах без покрытия выбери соседнюю улицу или другой город. Карта остаётся OpenStreetMap, Google-ключ не нужен.

Поиск использует векторные тайлы покрытия, кеширование и небольшие запросы к отдельным снимкам. После ошибки есть короткая пауза, повторные клики объединяются. Ошибка провайдера отличается от отсутствия кадров; метка сохраняется в обоих случаях. Доступность маршрутов зависит от Mapillary и сети игроков.

## Автозапуск (по желанию)

В deploy/tochka.service пути рассчитаны на ~/Games/tochka. Для другой папки исправь WorkingDirectory и ExecStart.

```sh
cd ~/Games/tochka
chmod +x bin/tochka-server-linux-x64
mkdir -p ~/.config/systemd/user
cp deploy/tochka.service ~/.config/systemd/user/tochka.service
systemctl --user daemon-reload
systemctl --user enable --now tochka
```

Журнал: journalctl --user -u tochka -n 50; остановка: systemctl --user stop tochka. Сервис работает в пользовательской сессии.

## Обновление

Останови старый сервер, распакуй архив в отдельную папку. Перенеси только .env, свой data/locations.json и добавленные public/media файлы. Не заменяй новую папку public старой. Запусти новую версию, проверь /api/health, обнови страницы игроков и создай новую комнату.
