Jump to content
Korean Random

StranikS_Scan

Premium Member
  • Content Count

    7,774
  • Joined

  • Last visited

  • Days Won

    237

Posts posted by StranikS_Scan


  1. Клиентское сведение живет своей жизнью и синхронизируется с сервером только, когда прилетает вызов 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, то клиентский разброс отреагирует на выстрел раньше серверного. Классическая проблема синхронизации клиент-сервер.

    • Upvote 7

  2. 3 часа назад, Kurzdor сказал:

    @StranikS_Scan 
    https://github.com/WOT-STAT/AnalyticsFrontend/blob/main/src/pages/sessionInfographics/Damage.vue#L95

    Хехе, запросы в БД прям из под frontend, как будто попал в эпоху PHP.

     

    Я так понимаю должно быть кэширование, чтоб прямые запросы, коих мульоны могут быть как юзверов, не задолбали базу данных?


  3. 41 минуту назад, SoprachevAK сказал:

    А такой вопрос есть ещё
    Знает может кто API чтоб статистику пользователей по нику/wgid получать, интересно было бы ещё добавить статистику своей/чужой команды. Предлагали брать статистику по танку, говорят где то в игре есть
    Но как я понял, к официальной API доступ леста не выдаёт, может есть сторонние сервисы

     

    Не понял, ты про api лесты? Всё есть как и у ВГ и работает. Заходи в личный кабинет и внизу ссылка на кабинет разработчика

     

    image.thumb.png.df8993d40b335a6f0391c4470a1e64df.png

     

    И там создаешь аккаунт доступа для своего приложения/сервера и получаешь ключ 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. Штатная БД, какая была из коробки, и ПХП. На ПХП мне понравилось писать. А вот фронтэнд я до сих пор не осилил, всё хочу прикрутить график реального времени и всё руки не доходят разобраться как это делается.


  4. 1 час назад, SoprachevAK сказал:

    'ARMOR_PIERCING': ['ББ', 'Бронебойный'],
     'ARMOR_PIERCING_CR': ['БП', 'Подкалиберный'],
     'ARMOR_PIERCING_HE': ['БК', 'Бронебойный каморный'],
     'FLAME': ['ОC', 'Огнемётная смесь'],
     'HIGH_EXPLOSIVE': ['ОФ', 'Осколочно-фугасный'],
     'HOLLOW_CHARGE': ['КС', 'Кумулятивный']

    Не поверите, брал из перевода игры https://github.com/IzeBerg/wot-src/blob/535676785ded8c9401016373b8819abd93d33352/sources/res/text/lc_messages/item_types.po#L188. Термин "каморный" в контексте танков слышу первый раз)

    Судя по всему никто на них не играет, можно будет убрать потом

     

    Можешь убирать их, у них нет своей механики, они выделены только на уровне интерфейсной части клиента игры. ARMOR_PIERCING_HE это ARMOR_PIERCING, а FLAME это HIGH_EXPLOSIVE

    • Upvote 1

  5. 4 часа назад, SoprachevAK сказал:

    Паршу результаты боя, и столкнулся с проблемой:

    В детальной статистике о машинах известны только `typeCompDescr`. Подскажите как кастануть его к человеческому виду (название, уровень, нация) 

    по сорцам поползал, вроде бы есть фабрика для UI, но конкретной реализации не нашел 

     

    Гугли моды на парсинг результатов боя - https://github.com/chipsi007/wotstat/blob/c822afd7de938e846a0c84afdfd2e123aa509254/src/stat.py#L172

    • Upvote 2

  6. Обновление программы 1.3.5

     

    Список изменений:

    1. Исправлена проблема с редактированием значений в таблице параметров на некоторых компьютерах
    2. В окне выбора цвета исправлены ошибки при завершении работы окна, возникающие на некоторых компьютерах
    3. Обновлен список кластеров, добавлены адреса для тестовых серверов
    • Upvote 2

  7. 1 минуту назад, Jack_ppc сказал:

    @Scharfhobel , я правильно понимаю - если в клиенте убрались или добавились танки, то старые wotmod-файлы могут не корректно работать?

     

    Если файлы с танками поменялись - то с этими танками могут быть в игре проблемы: вылеты, зависания, не отображения, пропадания частей, кривое отображение моделей и и.д. и т.п.

     

    А правки в модели танков разработчики вносят почти каждый микропатч.

    • Upvote 2

  8. 19 часов назад, necro6996 сказал:

    Использую мод пак от Джова. Установлены прицелы, полезные мелочи в бою, PMOD, и прочее. Но ничего из комплексного мода XVM. Статистику других игроков не вижу, анонимайзером не пользуюсь(так как XVM установлен), но моя стата WN8 почему то отображается для других игроков. Почему так?

     

    Потому что это общедоступная инфа и предоставляется разработчиками. Чтобы её не было видно нужно вкл. анонимайзер в настройках клиента игры.


  9. 20 минут назад, Valberton сказал:

     

    Не лень, но уже расшиб голову об стену. Никак не могу поймать направление корпуса.

     

    PlayerAvatar.matrix передает BigWorld.EntityMPov, у которого нет никаких методов/атрибутов.

     

    Ну логично, поэтому я ничего не писал про PlayerAvatar :Default: Давай учи матчасть, декомпилы игры тебе в помощь.


  10. Вышло обновление программы 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 файлов и добавлены соответствующие опции в главном меню

    • Upvote 3

  11. Вышло обновление программы 1.1.5

     

    ---------------------------------------------

    [Upd] Внесены правки и улучшения в интерфейс и главное меню программы
    [Fix] Исправлены опечатки в названиях и в текстах интерфейса
    [Upd] Файл 7z.dll убран их ресурсов программы, при необходимости он автоматически скачивается с сервера
    [Add] В строке состояния добавлено отображение числа выделенных строк и выделенных символов
    [Fix] В окне выбора цвета исправлены ошибки при завершении работы окна, возникающие на некоторых компьютерах
    [Add] В окне выбора цвета добавлены кнопки отмены и повторения выбора цвета и всплывающие подсказки, возникающие при наведении мышки на образцы цвета
    [Add] Добавлено окно выбора клиента игры из тех, что установлены на ПК, окно вызывается из главного меню "Файл - Найти и выбрать клиент из списка"
    [Add] Добавлен пункт в меню "Анализ - Распознавать в тексте - Ссылки на файлы"
    [Add] Расширение *.sample добавлено в перечень расширений, поддерживаемых программой и регистрируемых ею в системном реестре

    • Upvote 2

  12. 14 часов назад, 2rokk сказал:

    а вот интересно, с чем это вообще может быть связано?

     

    Это проблема с памятью и выделением/освобождением. Как только число файлов в конфиге как у тебя или больше - то бац и проблема. Если число файлов меньше твоего хотя бы на один - то всё ОК. Буду искать источник проблемы.


  13. @2rokk на твоем конфиге ошибка воспроизводится, как ты и писал. Теперь смогу найти в чем проблема и пофиксить программу. Кто-то когда-то писал о такой проблеме, но связать это с конфигом тогда я не догадался.


  14. 2 часа назад, 2rokk сказал:

    посмотрел.
    к сожалению - нет : (
    XCPad.exe_debug.log

     

    Ты писал, если один файл открыть, то проблем нет. Может как-то связано с открываемым конфигом XVM. Можешь папку конфига XVM сжать в архив и кинуть мне? И еще напиши по какому пути конфиг лежит (может тоже имеет значение, или нет).


  15. 35 минут назад, 2rokk сказал:

    @StranikS_Scan хорошо. спасибо. сейчас оформлю.

     

    готово.XCPad.exe_debug.log

     

     Module Name: "DebugInfo.dll" not found

     

    При включении режима тестирования должна была загрузиться dll. У тебя не загрузилась. Похоже на компе проблемы с правами, доступом или антивирусом.

     

    Вижу, в конце загрузилась.

     

    @2rokk кой-чего подшаманил XCPad.zip. Посмотри будут ли ошибки с выбором цвета.

    • Upvote 1

  16. 42 минуты назад, 2rokk сказал:

    не-а. всё равно выдаёт ошибку. 

     

    Включите режим тестирования

     

    image.png.8df0d7e74786030eb25690bb133b96de.png

     

    и дальше при ошибках будет инфа записывается в лог-файл. Нужно выложить его содержимое. Он не большой, там будут адреса и названия подпрограмм/функций, в которых возникает ошибка.


  17. 11 минут назад, 2rokk сказал:

     

    @StranikS_Scan примерно вот так вот это всё происходит...
     

     

      Показать содержимое

     

     


    Посмотреть
     

     

     

     

    А перезапуск программы помогает?

×
×
  • Create New...