README: подробный план ников и текстового чата (не реализовано)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
| ✅ | Управление **не зависит от раскладки** (русская и любая другая): действия `InputMap` на физические клавиши |
|
||||
| ✅ | Деплой: CI из `grid-world` на сайт; скрипты экспорта, dev-сервера, тестов без окна, выкладки сервера |
|
||||
| ❌ | Телефон: **не планируется** (решение владельца, окт 2026). Сенсорного управления нет, мобильных текстур нет |
|
||||
| ⏳ | **Ники и текстовый чат** — следующая задача (см. «Дорожная карта») |
|
||||
| ❌ | Ники и текстовый чат — **запланированы**, не сделаны (подробный план в «Дорожная карта → Ближайшее») |
|
||||
| ❌ | Настроек (чувствительность мыши, громкость), меню паузы |
|
||||
| ❌ | Серверных проверок (антиспуфинг позиций, античит): сервер только пересылает |
|
||||
| ❌ | Сохранения прогресса, аккаунтов |
|
||||
@@ -366,9 +366,25 @@ ssh root@192.168.10.110 'journalctl -u my-world -f' # лог: «+ игрок
|
||||
экран «Нажми, чтобы начать» (аудио в браузере без жеста не стартует), мобильные текстуры ETC2/ASTC (`vram_texture_compression/for_mobile`; удвоит пакеты — делать отдельными `*.mobile.pck`), отключение SSAO/glow и `scaling_3d_scale` 0,6–0,75,
|
||||
восстановление после ухода вкладки в фон (`submit_map` заново). Сначала измерить память и FPS на реальном устройстве.
|
||||
|
||||
### Ближайшее
|
||||
### Ближайшее: ники и текстовый чат (ПЛАН, не реализовано — ждёт команды владельца)
|
||||
|
||||
- **Ники и текстовый чат** (выбор владельца, окт 2026): ник игрока вместо «Игрок N» над призраком, в итогах гонки и в HUD; строка чата (физическая клавиша, работает на любой раскладке) в комнате карты. Потребует новых RPC → выкладка клиента и сервера вместе, Ctrl+F5 игрокам.
|
||||
Выбор владельца (окт 2026). Реализация отложена; ниже решения, чтобы не придумывать заново. Делать можно отдельным агентом по этому плану.
|
||||
|
||||
**Ники**
|
||||
- Хранение локально: `user://profile.cfg` (ConfigFile). При первом запуске в хабе — панель «Введите ник» (LineEdit, до 16 символов, Enter — подтвердить, Esc — пропустить; тогда прежний «Игрок N» и повторно не спрашивать). Работает на любой раскладке и со вставкой. Смена — командой чата `/ник Имя` или `/nick Имя`.
|
||||
- Нормализация и на клиенте, и **обязательно на сервере**: обрезка пробелов, без управляющих символов и переводов строк, ≤ 16 символов, пустой → «Игрок N». Одинаковые ники в комнате допустимы.
|
||||
- Сеть: клиент после подключения и при смене шлёт серверу ник; сервер хранит `peer_nicks`, при входе игрока в комнату (`submit_map`) отдаёт ему ники всех присутствующих, а остальным — его ник; на выходе чистит. Ники не должны просачиваться в чужие комнаты (как состояние игроков: `map_ready`, `_reset_room_state`).
|
||||
- Показ: подпись над призраком (`net/ghost.gd`, сейчас «Игрок N»), итоги и HUD гонки (`maps/race/race_rules.gd`), чат. Единая точка: `Net.nick_of(id)` с запасным «Игрок N» и `Net.my_nick`.
|
||||
|
||||
**Чат**
|
||||
- Открытие: действие InputMap `chat` на физические клавиши T и Enter (работает на любой раскладке); Enter — отправить и закрыть, Esc — закрыть. Чат — в комнате текущей карты (в хабе/песочнице/Backrooms/Parkour/Race разные).
|
||||
- UI: CanvasLayer, внизу слева, мрачный минимализм (тёмная полупрозрачная подложка, небольшой шрифт, без ярких цветов), последние ~8 строк, видны ~10 с и гаснут; `Ник: текст`, ник цветом игрока (цвет от id, как у призрака), системные строки серым («зашёл»/«вышел»). **Без BBCode**: чужой текст не должен менять оформление (Label или RichTextLabel с выключенным BBCode). Желательно пузырь с последним сообщением над призраком на ~6 с.
|
||||
- **Ввод при наборе:** игрок читает управление ОПРОСОМ (`Input.is_action_pressed`/`get_vector`), поэтому фокус в LineEdit сам не остановит движение — нужен отдельный флаг блокировки (не `input_frozen`: его использует гонка на отсчёте, и закрытие чата не должно его сбрасывать). Мышь на время набора освобождать, потом снова захватывать. Открывающая клавиша не должна попасть в поле; `R` (готов в гонке) и прочие игровые клавиши в поле не срабатывают.
|
||||
- Сеть: RPC `submit_chat(text)` → сервер валидирует и пересылает остальным в комнате (`recv_chat(id, text)`), отправитель видит своё сразу. **Серверные ограничения:** ≤ 200 символов, убрать управляющие, пустые отбросить, лимит ~5 сообщений за 5 с на игрока (молча отбрасывать). Команды `/…` обрабатываются на клиенте и не рассылаются.
|
||||
|
||||
**Проверка (по существу, как у гонки):** двухклиентный тест на локальном сервере (образец `tools/test/race_game_test.sh` + `race_game_check.py`): ники видны у обоих и у позже зашедшего; смена ника доходит; чат только в своей комнате; лимиты длины/частоты; «[b]» не ломает оформление; при открытом чате бот не двигается, после закрытия — двигается; R/T в поле не срабатывают как действия. Регрессия: тест гонки, `mantle_test`, `measure_movement`. Кадры панели ника и чата через `--write-movie`: не перекрывают HUD гонки (сверху таймер, по центру отсчёт), кириллица рисуется.
|
||||
|
||||
**Выкладка:** меняется набор RPC → клиент и сервер вместе (порядок из «Деплой»), игрокам Ctrl+F5; старый клиент с новым сервером падает с «rpc node checksum failed».
|
||||
|
||||
### Идеи (оценка независимого консультанта, окт 2026; не обязательства)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user