Jump to content
Korean Random

StranikS_Scan

Premium Member
  • Posts

    7,880
  • Joined

  • Last visited

  • Days Won

    265

Everything posted by StranikS_Scan

  1. Не получится, не пайтановский объект. Тут только скопировать код функции PlayerAvatar.shoot(), продублировать как пользовательскую, вписать в неё свой код перед и/или после self.cell.vehicle_shoot() и затем прописать её как хук PlayerAvatar.shoot()
  2. Все верно, если хукнуть self.cell.vehicle_shoot() и в хуке запоминать time = BigWorld.time(), то в PlayerAvatar.updateGunMarker() можно посчитать реальный тайумаут сервера timeout = BigWorld.time() - time и он будет по факту складываться из времени формирования пакета на ПК, времени отсылки, времени работы сервера, времени отправки ответа и времени расшифровки пакета клиентом игры. А если еще хукнуть __doShot() из vehicle_extras и туда тоже вставить код выше, то можно аналогично вычислять таймаут клиента игры.
  3. Вышло обновление программы 2.2.0 1. Оптимизированы и ускорены алгоритмы обработки файлов и создания wotmod-пакетов 2. Обновлен формат cfg-файлов, введены маски с поддержкой звездочки, файлы проверены и актуализированы под клиент игры 1.24.0.0 3. Внесены правки и улучшения в GUI-версию программы, добавлено окно выбора клиента игры из тех, что установлены на ПК, доработано окно выбора цвета, исправлены ошибки и вылеты при выборе цвета, исправлены опечатки в текстах 4. Файл 7z.dll вынесен из ресурсов exe-файла в папку с программой, при отсутствии файла он будет автоматически скачен с сайта программы 5. Убран код на передачу статистики автору программы, соответственно убран ключ --no-send-statistic 6. Убран ключ --split-2gb-parts, теперь все пакеты объемом более 2 Гб делятся программой на части автоматически 7. Если нет файлов для обработки, то пустые wotmod-пакеты не создаются 8. Добавлена вставка файла properties.xml в wotmod-пакеты, он содержит информацию о версии пакета, мода, игры и опциях, с которыми мод был создан 9. Добавлен ключ --downsizing-ratio для уменьшения размеров текстур камуфляжей и ускорения их обработки, поддерживаются коэффициенты сжатия 2, 4 и 8 10. Добавлен ключ --rewrite-log, для перезаписи лог-файла
  4. Клиентское сведение живет своей жизнью и синхронизируется с сервером только, когда прилетает вызов PlayerAvatar.updateGunMarker(). Потому лучше его хукать, так надежнее, а не VehicleGunRotator.setShotPosition(). Сервер присылает в updateGunMarker() реальную величину тангенса угла разброса dispersionAngle, которая вписывается в первую ячейку переменной-массива VehicleGunRotator.__dispersionAngles[0] и тем самым заменяет клиентский тангенс угла разброса на серверный с последующим вызовом перерисовки сведения через PlayerAvatar.inputHandler.updateClientGunMarker(). Все остальное время клиент перерисовывает сведение путем периодического вызова функций VehicleGunRotator.__rotate() и за ней VehicleGunRotator.__updateGunMarker() в цикле VehicleGunRotator.__onTick c общим тиком 0.1 сек. При этом первая функция нужна для пересчета значения переменной VehicleGunRotator.__dispersionAngles с учетом динамики танка, а вторая - для непосредственной отрисовки сведения. Пересчет VehicleGunRotator.__dispersionAngles выполняется путем вызова функции PlayerAvatar.getOwnVehicleShotDispersionAngle(). В ней с помощью коэффициентов-модификаторов разброса и клиентских значения скоростей вращения башни и движения и вращения корпуса танка высчитывается текущее значение клиентского тангенса угла разброса. У этой функции есть входящий аргумент withShot, принимающий два значения либо "0", либо "1". Если вызов с единицей, то разброс будет пересчитан, как для выстрелившего орудия, т.е. будет применен соответствующий модификатор. Еще есть значение "2", что соответствует модификатору разброса при серии выстрелов. Вызов PlayerAvatar.getOwnVehicleShotDispersionAngle() с ненулевым withShot прописан только в одном месте клиента игры, это функция __doShot() в модуле vehicle_extras. Срабатывает эта функция при вызове функции showShooting() в модуле Vehicle. А его делает функция PlayerAvatar.__showTimedOutShooting() таймера-колбэка, который запускается через функцию PlayerAvatar.__startWaitingForShot(), которая вызывается внутри функции PlayerAvatar.shoot(), срабатывающей, когда юзвер жмет на кнопку выстрела. Задержка у таймера-колбэка задается вот таким образом: timeout = BigWorld.LatencyInfo().value[3] * 0.5 timeout = min(_SHOT_WAITING_MAX_TIMEOUT, timeout) timeout = max(_SHOT_WAITING_MIN_TIMEOUT, timeout) берется половина значения сглаженного пинга Ping/2 и накладывается ограничение в виде диапазона [0,12...0,2] сек (границы прописаны как константы прямо в модуле). Так как у большинства игроков пинг явно меньше 240 мс, то получаем таймер на 120 мс. Что же касается сервера, то команда выстрела на сервер уходит внутри функции PlayerAvatar.shoot() через нативный вызов self.cell.vehicle_shoot(), расположенный перед вызовом функции __startWaitingForShot() ---------------------------- Таким образом, при нажатии кнопки выстрела на сервер улетает команда выстрела, сервер обрабатывает её, делает выстрел и присылает новый тангенс угла разброса уже с учетом выстрела и на всё это у него уходит T1 = 2*Ping+ServerTime времени, а клиент с момента нажатия кнопки выстрела ждет T2 = 120 мс и затем сам пересчитывает тангенс угла разброса и перерисовывает сведение с учетом выстрела. Как результат, если окажется, что T1<<T2, то серверный разброс отреагирует раньше на выстрел чем клиентский, а если Т1>>T2, то клиентский разброс отреагирует на выстрел раньше серверного. Классическая проблема синхронизации клиент-сервер.
  5. Я так понимаю должно быть кэширование, чтоб прямые запросы, коих мульоны могут быть как юзверов, не задолбали базу данных?
  6. Не понял, ты про api лесты? Всё есть как и у ВГ и работает. Заходи в личный кабинет и внизу ссылка на кабинет разработчика И там создаешь аккаунт доступа для своего приложения/сервера и получаешь ключ XXXX для запросов к https://api.tanki.su/wgn/servers/info/?application_id=XXXX&game=wot Если у тебя сервер, то указываешь его IP-адреса и доступ будет разрешен только с них. Так XVM данные получает. У ВГ на сайте такой же механизм сделан, только у него свой api сервис https://api.worldoftanks.eu/wgn/servers/info/?application_id=XXXX&game=wot ================================================== А я максимум вот такое смог сделать https://straniks.ru/pub/api/v2/wot_online.php?online=all. Штатная БД, какая была из коробки, и ПХП. На ПХП мне понравилось писать. А вот фронтэнд я до сих пор не осилил, всё хочу прикрутить график реального времени и всё руки не доходят разобраться как это делается.
  7. Можешь убирать их, у них нет своей механики, они выделены только на уровне интерфейсной части клиента игры. ARMOR_PIERCING_HE это ARMOR_PIERCING, а FLAME это HIGH_EXPLOSIVE
  8. Гугли моды на парсинг результатов боя - https://github.com/chipsi007/wotstat/blob/c822afd7de938e846a0c84afdfd2e123aa509254/src/stat.py#L172
  9. Обновление программы 1.3.5 Список изменений: Исправлена проблема с редактированием значений в таблице параметров на некоторых компьютерах В окне выбора цвета исправлены ошибки при завершении работы окна, возникающие на некоторых компьютерах Обновлен список кластеров, добавлены адреса для тестовых серверов
  10. Если файлы с танками поменялись - то с этими танками могут быть в игре проблемы: вылеты, зависания, не отображения, пропадания частей, кривое отображение моделей и и.д. и т.п. А правки в модели танков разработчики вносят почти каждый микропатч.
  11. Потому что это общедоступная инфа и предоставляется разработчиками. Чтобы её не было видно нужно вкл. анонимайзер в настройках клиента игры.
  12. Покажи код мода чтобы увидеть как и где хочешь угол посчитать.
  13. Ну логично, поэтому я ничего не писал про PlayerAvatar Давай учи матчасть, декомпилы игры тебе в помощь.
  14. Вышло обновление программы 1.2.0 --------------------------------------------- [Fix] Внесены правки в интерфейс главного меню, добавлены диалоги при вызове некоторых команд [Fix] Исправлено самопроизвольное смещение редактора и вертикальной полосы вправо на пару пикселей при первом редактировании текста [Upd] При загрузке конфига первый в списке редактор автоматически становится активным и получает фокус ввода [Upd] Доработан код распознавания относительных путей в ссылках на файлы [Add] Добавлена опция для задания кодировки по умолчанию для открываемых файлов [Add] Добавлена опция для автоматического определения кодировки файлов при их открытии (включена по умолчанию) [Add] Добавлена возможность поменять вид кодировки для открытого файла через контекстное меню в строке состояния [Add] В выпадающем меню добавлены варианты логических констант с заглавной первой буквой True и False [Upd] Обновлен функционал валидации текста на соответствие формату файла и изменены соответствующие пункты в главном меню [Add] Добавлен выбор нотации при валидации JSON формата: классическая или расширенная (выбрана по умолчанию), в расширенной нотации распознаются в тексте файла комментарии и ссылки на файлы, записанные в XVM-стиле, в классической нотации комментарии и ссылки воспринимаются как ошибки синтаксиса, а также считаются ошибкой имена полей не обрамленные кавычками '...' или "..." [Add] Добавлено распознавание следующих ошибок синтаксиса: если стоит символ "," или "}" или "]" после двоеточия, например {key:}; если имя поля потеряло кавычку слева или справа от себя, например {"key: value}; если стоит запятая "," перед скобкой "]" или "}", например {key: value,} [Add] Реализована валидация *.xml и *.ini файлов и добавлены соответствующие опции в главном меню
  15. Вышло обновление программы 1.1.5 --------------------------------------------- [Upd] Внесены правки и улучшения в интерфейс и главное меню программы [Fix] Исправлены опечатки в названиях и в текстах интерфейса [Upd] Файл 7z.dll убран их ресурсов программы, при необходимости он автоматически скачивается с сервера [Add] В строке состояния добавлено отображение числа выделенных строк и выделенных символов [Fix] В окне выбора цвета исправлены ошибки при завершении работы окна, возникающие на некоторых компьютерах [Add] В окне выбора цвета добавлены кнопки отмены и повторения выбора цвета и всплывающие подсказки, возникающие при наведении мышки на образцы цвета [Add] Добавлено окно выбора клиента игры из тех, что установлены на ПК, окно вызывается из главного меню "Файл - Найти и выбрать клиент из списка" [Add] Добавлен пункт в меню "Анализ - Распознавать в тексте - Ссылки на файлы" [Add] Расширение *.sample добавлено в перечень расширений, поддерживаемых программой и регистрируемых ею в системном реестре
  16. Это проблема с памятью и выделением/освобождением. Как только число файлов в конфиге как у тебя или больше - то бац и проблема. Если число файлов меньше твоего хотя бы на один - то всё ОК. Буду искать источник проблемы.
  17. @2rokk на твоем конфиге ошибка воспроизводится, как ты и писал. Теперь смогу найти в чем проблема и пофиксить программу. Кто-то когда-то писал о такой проблеме, но связать это с конфигом тогда я не догадался.
  18. Ты писал, если один файл открыть, то проблем нет. Может как-то связано с открываемым конфигом XVM. Можешь папку конфига XVM сжать в архив и кинуть мне? И еще напиши по какому пути конфиг лежит (может тоже имеет значение, или нет).
×
×
  • Create New...