Система автоматизированной рассылки личных сообщений игрокам в игре «Мир Танков» / «World of Tanks».<p>Данный документ описывает <b>модовую часть</b> проекта (клиент игры). Веб-часть рассматривается отдельно.</p><hr /><h3>1. Общая цель модовой части</h3><p>Мод должен обеспечивать полностью автоматизированную работу игрового клиента для массовой рассылки личных сообщений игрокам, получая команды и данные от веб-приложения (или локального сервиса), без участия пользователя.</p><p>Ключевые задачи:</p><ul><li><p>Автоматический вход в игру</p></li><li><p>Пропуск всех стартовых и уведомительных окон</p></li><li><p>Минимизация нагрузки на ПК (графика, анимации)</p></li><li><p>Получение списка игроков и текста сообщений</p></li><li><p>Отправка личных сообщений</p></li><li><p>Смена аккаунта после выполнения заданий</p></li></ul><hr /><h3>2. Совместимость и ограничения</h3><ul><li><p>Игра: <b>Мир Танков (WG / Lesta)</b></p></li><li><p>Версия клиента: актуальная на момент запуска проекта (мод должен быть легко адаптируем под обновления)</p></li><li><p>Тип мода: клиентский мод (Python + Scaleform / BigWorld)</p></li><li><p>Работа в оконном и полноэкранном режимах</p></li></ul><hr /><h3>3. Архитектура модовой части</h3><p>Мод состоит из следующих логических компонентов:</p><ol><li><p><b>Инициализационный модуль</b></p></li><li><p><b>Модуль управления интерфейсом</b></p></li><li><p><b>Модуль рассылки сообщений</b></p></li><li><p><b>Модуль связи с веб-частью</b></p></li><li><p><b>Модуль смены аккаунтов</b></p></li><li><p><b>Модуль логирования и статусов</b></p></li></ol><p>**На усмотрение мододела</p><hr /><h3>4. Инициализация и запуск</h3><h3>4.1 Автозапуск</h3><ul><li><p>Мод автоматически загружается при старте клиента</p></li><li><p>Не требует ручного включения</p></li></ul><h3>4.2 Пропуск вступительных экранов</h3><p>Мод должен автоматически:</p><ul><li><p>Закрывать приветственные окна</p></li><li><p>Скипать обучающие подсказки</p></li><li><p>Принимать лицензионные соглашения (если появляются)</p></li><li><p>Закрывать всплывающие акции / новости / ивенты</p></li><li><p>Закрывать уведомления о достижениях</p></li></ul><p>Приоритет — максимально быстрый выход в <b>ангар</b>.</p><hr /><h3>5. Минимизация графики и нагрузки</h3><p>По возможности мод должен:</p><ul><li><p>Автоматически выставлять минимальные настройки графики</p></li><li><p>Отключать:</p></li><li><p>Тени</p></li><li><p>Постобработку</p></li><li><p>Анимации ангара</p></li><li><p>Динамическое освещение</p></li><li><p>Эффекты частиц</p></li><li><p>При возможности — включать режим «пустого ангара»</p></li><li><p>Ограничивать FPS (например, до 30 или ниже)</p></li></ul><p>Настройки должны применяться <b>автоматически при каждом запуске клиента</b>.</p><hr /><h3>6. Связь с веб-частью</h3><h3>6.1 Тип связи</h3><p>Один из вариантов (должно быть заложено в архитектуру):</p><ul><li><p>HTTP (локальный сервер)</p></li></ul><p>или</p><ul><li><p>WebSocket</p></li><li><p>Очередь команд</p></li></ul><h3>6.2 Получаемые данные</h3><p>Мод должен уметь принимать:</p><ul><li><p>Список никнеймов игроков</p></li><li><p>Текст сообщения</p></li><li><p>Ограничения по скорости рассылки</p></li><li><p>Команды:</p></li><li><p>start</p></li><li><p>pause</p></li><li><p>stop</p></li><li><p>switch_account</p></li></ul><hr /><h3>7. Модуль рассылки сообщений</h3><h3>7.1 Поиск игрока</h3><ul><li><p>Открытие интерфейса личных сообщений</p></li><li><p>Поиск игрока по никнейму</p></li><li><p>Проверка, что игрок существует</p></li></ul><h3>7.2 Отправка сообщений</h3><ul><li><p>Вставка текста сообщения</p></li><li><p>Отправка сообщения</p></li><li><p>Обработка задержек между сообщениями</p></li></ul><h3>7.3 Ограничения</h3><ul><li><p>Настраиваемая задержка между сообщениями</p></li><li><p>Возможность ограничения количества сообщений за сессию</p></li></ul><hr /><h3>8. Обработка ошибок</h3><p>Мод должен корректно обрабатывать:</p><ul><li><p>Игрок не найден</p></li><li><p>Бан чата</p></li><li><p>Ошибка интерфейса</p></li><li><p>Потеря соединения</p></li><li><p>Критические ошибки клиента</p></li></ul><p>При ошибке:</p><ul><li><p>Логировать причину</p></li><li><p>Переходить к следующему игроку</p></li><li><p>Или отправлять статус в веб-часть</p></li></ul><hr /><h3>9. Смена аккаунтов</h3><h3>9.1 Условия смены аккаунта</h3><ul><li><p>Достигнут лимит сообщений</p></li><li><p>Получена команда switch_account</p></li><li><p>Ошибка/блокировка</p></li></ul><h3>9.2 Процесс смены</h3><p>Мод должен:</p><ul><li><p>Выйти из текущего аккаунта</p></li><li><p>Вернуться на экран авторизации</p></li><li><p>Выбрать следующий аккаунт (по данным от веб-части или конфигу)</p></li><li><p>Выполнить вход</p></li><li><p>Повторить инициализацию (скип окон, графика)</p></li></ul><hr /><h3>10. Логирование и статусы</h3><p>Мод должен вести логи:</p><ul><li><p>Успешные сообщения</p></li><li><p>Ошибки</p></li><li><p>Смены аккаунтов</p></li><li><p>Статус текущей задачи</p></li></ul><p>Логи должны быть:</p><ul><li><p>В локальном файле</p></li><li><p>Или передаваться в веб-часть</p></li></ul><hr /><h3>11. Конфигурация</h3><p>Мод должен иметь конфигурационный файл:</p><ul><li><p>Задержки</p></li><li><p>Лимиты</p></li><li><p>Графические настройки</p></li><li><p>Параметры подключения</p></li></ul><p>Формат: JSON / YAML</p><hr /><h3>12. Требования к стабильности</h3><ul><li><p>Работа в длительных сессиях (несколько часов)</p></li><li><p>Работа в несколько потоков (клиентов игры)</p></li><li><p>Отсутствие утечек памяти</p></li><li><p>Корректная работа после крашей клиента</p></li></ul><hr /><h3>13. Безопасность</h3><ul><li><p>Отсутствие хранения паролей в открытом виде</p></li><li><p>Минимизация следов вмешательства в клиент</p></li></ul><hr /><h3>14. Результат</h3><p>Результатом является клиентский мод, который:</p><ul><li><p>Сам запускает игру</p></li><li><p>Сам доходит до ангара</p></li><li><p>Сам рассылает ЛС</p></li><li><p>Сам меняет аккаунты</p></li><li><p>Управляется извне (веб-часть)</p></li></ul><hr /><h3>15. Дополнительно (по согласованию)</h3><ul><li><p>Режим «без интерфейса»</p></li><li><p>Автовосстановление после вылета</p></li></ul><p> </p><p>Ошибка в превью?</p>