diff --git a/GAME_IMPROVEMENTS_README.md b/GAME_IMPROVEMENTS_README.md deleted file mode 100644 index 6a44950..0000000 --- a/GAME_IMPROVEMENTS_README.md +++ /dev/null @@ -1,134 +0,0 @@ -# Улучшения игры - Полный список - -## 🆕 Новые функции - -### 1. Уведомления о сообщениях в Telegram -- **Описание**: Показываются уведомления о новых сообщениях, когда Telegram не открыт -- **Как работает**: - - WebSocket событие `newMessage` обрабатывается на клиенте - - Уведомление появляется в правом верхнем углу экрана - - Автоматически исчезает через 5 секунд - - Анимированное появление и исчезновение -- **Файлы**: `src/Game.js` - добавлена функция `showMessageNotification()` - -### 2. Уведомления о перезагрузке сервера -- **Описание**: Игроки получают предупреждение о перезагрузке сервера -- **Как работает**: - - Сервер отправляет событие `serverRestart` всем клиентам - - Показывается красное уведомление с обратным отсчетом - - Сервер корректно завершает работу через 5 секунд -- **Файлы**: - - `server.js` - добавлена функция `gracefulShutdown()` - - `src/Game.js` - добавлена функция `showServerRestartNotification()` - -## 🎮 Улучшения управления - -### 3. Исправление застревания в текстурах -- **Проблема**: Игрок застревал в текстурах и не мог выбраться -- **Решение**: - - Уменьшены размеры коллизионной коробки игрока (с 0.25 до 0.2) - - Добавлено скольжение вдоль стен при столкновении - - Увеличен зазор между игроком и объектами (с 0.01 до 0.05) - - Улучшена система определения направления скольжения -- **Файлы**: `src/Game.js` - улучшена функция `updateFirstPersonMovement()` - -### 4. Улучшенное управление камерой -- **Новые возможности**: - - `Ctrl + колесо` = вертикальный поворот камеры (как было) - - `Shift + Ctrl + колесо` = горизонтальный поворот камеры (±90 градусов) -- **Ограничения**: Горизонтальный поворот ограничен для предотвращения дезориентации -- **Файлы**: `src/Game.js` - улучшена функция `onMouseWheel()` - -### 5. Отключение браузерного масштабирования -- **Проблема**: Браузер масштабировал страницу при Ctrl + колесо -- **Решение**: Добавлены обработчики событий для предотвращения масштабирования -- **Файлы**: `src/Game.js` - добавлены обработчики `wheel` и `keydown` - -## 🚀 Оптимизация производительности - -### 6. Улучшенная система загрузки ресурсов -- **Проблема**: Панель загрузки блокировала управление игрой -- **Решение**: - - Панель показывается только при начальной загрузке или загрузке >5 ресурсов - - Малые загрузки происходят в фоне без блокировки - - Добавлен флаг `isInitialLoad` для контроля отображения -- **Файлы**: `src/Game.js` - улучшен `LoadingManager` - -## 🔧 Технические улучшения - -### 7. Graceful Shutdown сервера -- **Описание**: Сервер корректно завершает работу при получении сигналов -- **Сигналы**: `SIGTERM`, `SIGINT` (Ctrl+C) -- **Процесс**: - 1. Уведомление всех клиентов - 2. Ожидание 5 секунд - 3. Закрытие HTTP сервера - 4. Принудительное завершение через 10 секунд - -### 8. Улучшенная система коллизий -- **Алгоритм скольжения**: - - Определение ближайшего препятствия - - Вычисление направления скольжения - - Проверка возможности движения в направлении скольжения - - Применение скольжения с уменьшенной дистанцией - -## 📱 Пользовательский интерфейс - -### 9. Подсказки по управлению -- **Описание**: Автоматически показывается подсказка об управлении камерой -- **Время**: Появляется через 3 секунды после загрузки игры -- **Длительность**: Висит 10 секунд, затем плавно исчезает -- **Стиль**: Темная полупрозрачная панель с анимацией - -## 🧪 Тестирование - -### 10. Тестовые файлы -- `test_telegram_status.html` - тест API статуса пользователей -- `TELEGRAM_STATUS_README.md` - документация по системе статусов -- `TESTING_INSTRUCTIONS.md` - инструкции по тестированию -- `GAME_IMPROVEMENTS_README.md` - этот файл - -## 🚀 Как запустить - -1. **Запуск сервера**: - ```bash - node server.js - ``` - -2. **Тестирование уведомлений**: - - Откройте игру в браузере - - Войдите в систему - - Откройте Telegram и отправьте сообщение - - Проверьте уведомления - -3. **Тестирование перезагрузки**: - - Нажмите Ctrl+C в терминале сервера - - Проверьте уведомление о перезагрузке - -4. **Тестирование управления**: - - `Ctrl + колесо` = вертикальный поворот - - `Shift + Ctrl + колесо` = горизонтальный поворот - -## 🔍 Отладка - -- **Сервер**: Логи в консоли терминала -- **Клиент**: Логи в консоли браузера (F12) -- **WebSocket**: Проверка соединения в Network tab - -## 📋 Чек-лист тестирования - -- [ ] Уведомления о сообщениях работают -- [ ] Уведомления о перезагрузке сервера работают -- [ ] Игрок не застревает в текстурах -- [ ] Управление камерой работает корректно -- [ ] Браузерное масштабирование отключено -- [ ] Панель загрузки не блокирует игру -- [ ] Подсказки по управлению отображаются - -## 🎯 Следующие шаги - -1. **Кэширование**: Добавить кэширование статуса пользователей -2. **Группировка**: Группировать пользователей по статусу в Telegram -3. **Уведомления**: Push-уведомления для важных событий -4. **Статистика**: Время онлайн, активность пользователей -5. **Оптимизация**: Дальнейшее улучшение производительности diff --git a/TELEGRAM_IMPROVEMENTS_README.md b/TELEGRAM_IMPROVEMENTS_README.md deleted file mode 100644 index 02ff1a3..0000000 --- a/TELEGRAM_IMPROVEMENTS_README.md +++ /dev/null @@ -1,164 +0,0 @@ -# Улучшения Telegram в игре - -## Обзор - -Этот документ описывает улучшения, внесенные в приложение Telegram (Shipgram) в игре, включая систему уведомлений, индикаторы непрочитанных сообщений и исправление проблемы "неизвестного отправителя". - -## Основные улучшения - -### 1. Уведомления о новых сообщениях - -**Проблема**: При получении новых сообщений в Telegram не было уведомлений, если приложение не было открыто. - -**Решение**: Реализована система уведомлений, которая показывает красивые всплывающие уведомления в правом верхнем углу экрана. - -**Функциональность**: -- Уведомления появляются только когда Telegram не открыт -- Отображают имя отправителя и текст сообщения -- Автоматически исчезают через 5 секунд -- Красивый дизайн с градиентом и анимацией - -**Код**: `showMessageNotification(senderId, messageText)` в `src/Game.js` - -### 2. Исправление проблемы "неизвестного отправителя" - -**Проблема**: В уведомлениях отображалось "Неизвестный" вместо имени отправителя. - -**Решение**: Реализована система поиска информации об отправителе: -1. Сначала ищет в списке контактов -2. Если не найден, загружает информацию с сервера через новый API endpoint - -**Новые API endpoints**: -- `GET /api/users/:userId` - получение информации о пользователе по ID -- `GET /api/messages-read/:contactId` - получение количества непрочитанных сообщений - -**Код**: Обновленная функция `showMessageNotification` в `src/Game.js` - -### 3. Индикаторы непрочитанных сообщений - -**Проблема**: Не было визуального индикатора непрочитанных сообщений в списке контактов. - -**Решение**: Добавлены счетчики непрочитанных сообщений: -- Красные бейджи с количеством непрочитанных сообщений -- Имена контактов выделяются жирным шрифтом при наличии непрочитанных сообщений -- Автоматическое обновление счетчиков - -**Функциональность**: -- `updateUnreadCount(senderId)` - обновляет счетчик для конкретного отправителя -- Автоматическое обновление при получении новых сообщений -- Периодическое обновление каждые 30 секунд - -**Код**: Функция `updateUnreadCount` и обновленный UI в `src/Game.js` - -## Технические детали - -### Серверная часть (`server.js`) - -#### Новые API endpoints - -```javascript -// Получение информации о пользователе по ID -app.get('/api/users/:userId', authenticate, async (req, res) => { - // Возвращает: id, firstName, lastName, avatarURL, isOnline, lastSeen -}); - -// Получение количества непрочитанных сообщений -app.get('/api/messages-read/:contactId', authenticate, async (req, res) => { - // Возвращает: { unreadCount: number } -}); -``` - -#### Исправления для onlineUsers и lastSeenTimes - -- Заменены `onlineUsers.hasOwnProperty()` на `onlineUsers.has()` -- Заменены `lastSeenTimes[userId]` на `lastSeenTimes.get(userId)` -- Исправлен `console.log` для отображения ключей Map - -### Клиентская часть (`src/Game.js`) - -#### Новые функции - -```javascript -// Показ уведомлений о сообщениях -const showMessageNotification = async (senderId, messageText) => { - // Логика поиска имени отправителя и показа уведомления -}; - -// Обновление счетчика непрочитанных сообщений -const updateUnreadCount = async (senderId) => { - // Загрузка и обновление счетчика -}; -``` - -#### Обновленный UI - -- Счетчики непрочитанных сообщений (красные бейджи) -- Выделение имен контактов жирным шрифтом -- Улучшенная структура контактов - -### API функции (`src/api/auth.js`) - -```javascript -// Загрузка информации о пользователе по ID -export const loadUserInfo = async (userId, token) => { - // Запрос к /api/users/:userId -}; - -// Обновленная функция получения статуса пользователей -export const getUsersStatus = async (token) => { - // Улучшенная обработка ошибок -}; -``` - -## Тестирование - -### Тестовый файл - -Создан `test_telegram_improvements.html` для тестирования новых API endpoints: - -1. **Тест статуса пользователей** - `/api/users/status` -2. **Тест информации о пользователе** - `/api/users/:userId` -3. **Тест количества непрочитанных сообщений** - `/api/messages-read/:contactId` - -### Инструкции по тестированию - -1. Откройте `test_telegram_improvements.html` в браузере -2. Введите JWT токен пользователя -3. Протестируйте каждый endpoint -4. Проверьте корректность возвращаемых данных - -## Интеграция с существующим кодом - -### WebSocket события - -- `newMessage` - автоматически вызывает `updateUnreadCount` и `showMessageNotification` -- `userStatusChanged` - обновляет статус пользователей в реальном времени - -### Интервалы обновления - -- `statusInterval` - каждые 30 секунд обновляет статусы и счетчики непрочитанных сообщений - -### Состояние компонента - -- `telegramContacts` - расширен для хранения `unreadCount` -- Автоматическое обновление при изменении данных - -## Преимущества - -1. **Лучший UX**: Пользователи видят уведомления о новых сообщениях -2. **Информативность**: Четко видно, от кого пришло сообщение -3. **Отслеживание**: Легко понять, какие чаты требуют внимания -4. **Производительность**: Эффективное обновление данных через интервалы -5. **Надежность**: Обработка ошибок и fallback для неизвестных отправителей - -## Возможные улучшения в будущем - -1. **Звуковые уведомления** - добавление звуковых сигналов -2. **Настройки уведомлений** - возможность отключения для определенных контактов -3. **Push-уведомления** - интеграция с браузерными push-уведомлениями -4. **Группировка уведомлений** - объединение уведомлений от одного отправителя -5. **История уведомлений** - сохранение истории показанных уведомлений - -## Заключение - -Реализованные улучшения значительно повышают удобство использования Telegram в игре, решая основные проблемы с уведомлениями и отображением информации об отправителях. Система стала более информативной и удобной для пользователей. diff --git a/TELEGRAM_STATUS_README.md b/TELEGRAM_STATUS_README.md deleted file mode 100644 index c437472..0000000 --- a/TELEGRAM_STATUS_README.md +++ /dev/null @@ -1,78 +0,0 @@ -# Система статуса пользователей для Telegram (Shipgram) - -## Описание - -Реализована система отображения статуса "online/offline" для пользователей в Telegram приложении (Shipgram) игрового телефона. Статус показывает, действительно ли игрок находится онлайн в игре. - -## Что реализовано - -### 1. Серверная часть (server.js) - -- **Отслеживание онлайн пользователей**: Переменная `onlineUsers` хранит ID пользователей, которые в данный момент подключены к WebSocket -- **Отслеживание времени последнего онлайн**: Переменная `lastSeenTimes` хранит время последнего подключения/отключения каждого пользователя -- **WebSocket события**: - - При подключении: `userStatusChanged` с `isOnline: true` - - При отключении: `userStatusChanged` с `isOnline: false` -- **API endpoint**: `/api/users/status` возвращает список пользователей с их статусом - -### 2. Клиентская часть (Game.js) - -- **Обновленный API вызов**: `loadTelegramContacts()` теперь использует `/api/users/status` вместо `/api/users` -- **WebSocket обработчик**: Слушает события `userStatusChanged` и обновляет статус в реальном времени -- **Периодическое обновление**: Каждые 30 секунд обновляет статус пользователей -- **Визуальные индикаторы**: - - Зеленая точка для онлайн пользователей - - Цветной текст статуса (зеленый для онлайн, серый для офлайн) - - Время последнего онлайн для офлайн пользователей - -### 3. API функции (auth.js) - -- Добавлена функция `getUsersStatus()` для получения статуса пользователей - -## Как это работает - -1. **Подключение пользователя**: - - Пользователь входит в игру - - WebSocket middleware добавляет его в `onlineUsers` - - Обновляется `lastSeenTimes` - - Отправляется событие `userStatusChanged` всем клиентам - -2. **Отключение пользователя**: - - Пользователь выходит из игры или теряет соединение - - Обновляется `lastSeenTimes` - - Отправляется событие `userStatusChanged` всем клиентам - - Пользователь удаляется из `onlineUsers` - -3. **Отображение в Telegram**: - - При открытии Telegram загружается список пользователей с их статусом - - Статус обновляется в реальном времени через WebSocket - - Периодически обновляется через API для синхронизации - -## Файлы, которые были изменены - -- `server.js` - добавлена логика отслеживания статуса и WebSocket события -- `src/Game.js` - обновлено Telegram приложение для отображения статуса -- `src/api/auth.js` - добавлена функция для получения статуса пользователей -- `test_telegram_status.html` - тестовый файл для проверки API - -## Тестирование - -1. Запустите сервер -2. Откройте `test_telegram_status.html` в браузере -3. Введите JWT токен пользователя -4. Нажмите "Тестировать API" -5. Проверьте, что статус пользователей отображается корректно - -## Особенности - -- **Реальное время**: Статус обновляется мгновенно при подключении/отключении -- **Надежность**: Периодическое обновление через API обеспечивает синхронизацию -- **Производительность**: WebSocket события отправляются только при изменении статуса -- **Визуальная обратная связь**: Зеленые точки и цветной текст для лучшего UX - -## Возможные улучшения - -1. **Кэширование**: Добавить кэширование статуса пользователей -2. **Группировка**: Группировать пользователей по статусу -3. **Уведомления**: Уведомления о том, что пользователь стал онлайн -4. **Статистика**: Время, проведенное онлайн, активность и т.д. diff --git a/TESTING_INSTRUCTIONS.md b/TESTING_INSTRUCTIONS.md deleted file mode 100644 index 291b48f..0000000 --- a/TESTING_INSTRUCTIONS.md +++ /dev/null @@ -1,60 +0,0 @@ -# Инструкция по тестированию системы статуса пользователей - -## Быстрый тест - -1. **Запустите сервер**: - ```bash - node server.js - ``` - -2. **Откройте игру в браузере** и войдите в систему - -3. **Откройте Telegram в игровом телефоне** и проверьте: - - Отображается ли статус "Онлайн" для текущего пользователя - - Есть ли зеленая точка рядом с аватаром - - Показывает ли статус "Офлайн" для других пользователей - -## Детальное тестирование - -### Тест 1: Проверка API -1. Откройте `test_telegram_status.html` в браузере -2. Введите JWT токен из localStorage браузера -3. Нажмите "Тестировать API" -4. Проверьте, что возвращается список пользователей с полями: - - `isOnline`: boolean - - `lastSeen`: timestamp или null - -### Тест 2: Проверка WebSocket событий -1. Откройте консоль браузера -2. Войдите в игру -3. Проверьте логи: - ``` - Статус пользователя изменился: {userId: X, isOnline: true} - ``` - -### Тест 3: Проверка реального времени -1. Откройте игру в двух вкладках браузера -2. Войдите под разными пользователями -3. В одной вкладке откройте Telegram -4. В другой вкладке закройте игру -5. Проверьте, что статус изменился на "Офлайн" в реальном времени - -## Ожидаемые результаты - -- ✅ Статус "Онлайн" отображается только для пользователей, которые действительно в игре -- ✅ Зеленая точка появляется рядом с аватаром онлайн пользователей -- ✅ Статус обновляется в реальном времени при подключении/отключении -- ✅ Время последнего онлайн отображается для офлайн пользователей -- ✅ В консоли сервера видны логи подключения/отключения пользователей - -## Возможные проблемы - -1. **Статус не обновляется**: Проверьте WebSocket соединение -2. **API возвращает ошибку**: Проверьте JWT токен и права доступа -3. **Статус не синхронизируется**: Проверьте логи сервера на наличие ошибок - -## Отладка - -- **Сервер**: Смотрите логи в консоли сервера -- **Клиент**: Смотрите логи в консоли браузера -- **WebSocket**: Проверьте соединение в Network tab браузера diff --git a/on NewAugust with updated local version b/on NewAugust with updated local version deleted file mode 100644 index f60d10f..0000000 --- a/on NewAugust with updated local version +++ /dev/null @@ -1,14 +0,0 @@ -warning: in the working copy of '.env', LF will be replaced by CRLF the next time Git touches it -warning: in the working copy of '.gitignore', LF will be replaced by CRLF the next time Git touches it -warning: in the working copy of 'db.js', LF will be replaced by CRLF the next time Git touches it -warning: in the working copy of 'db1.js', LF will be replaced by CRLF the next time Git touches it -warning: in the working copy of 'package-lock.json', LF will be replaced by CRLF the next time Git touches it -warning: in the working copy of 'server.js', LF will be replaced by CRLF the next time Git touches it -warning: in the working copy of 'src/Game.js', LF will be replaced by CRLF the next time Git touches it - .env | 4 [32m++[m[31m--[m - db.js | 4 [32m+[m[31m---[m - db1.js | 2 [32m+[m[31m-[m - package-lock.json | 57 [32m+++++++++++++++++++++++++++++[m[31m--------------------------[m - server.js | 10 [32m++++[m[31m------[m - src/Game.js | 40 [32m+++++++++++++[m[31m-------------------------[m - 6 files changed, 51 insertions(+), 66 deletions(-) diff --git a/test_telegram_fix.html b/test_telegram_fix.html deleted file mode 100644 index d233d4a..0000000 --- a/test_telegram_fix.html +++ /dev/null @@ -1,217 +0,0 @@ - - -
- - -