Jump to content
Korean Random

SoprachevAK

User
  • Content Count

    201
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by SoprachevAK

  1. Сервер отстаёт от действий пользователя на один ping Серверный прицел отстаёт от сервера на один ping => Серверный прицел отстаёт от действий пользователя на два пинга Клиентский прицел старается "предугадывать" состояние сервера и реагировать на действия пользователя мгновенно И дальше вопрос что хуже: двойной пинг или ошибки предугадывания WotStat показывает, что в среднем, по клиентскому летит точнее (это для натиска. В рандоме тоже точнее, но там разница намного меньше)
  2. Ну вообще, так то совсем не круг, оно очень вверх сдвинуто Я вот ещё вспомнил, что надо арту исключать И я да, я всегда смотрю на клиентском, тк он точнее Разброс это сведение или то куда полетел снаряд (ballisticResultClient_r)? Я попробовал, и в идеальных условиях, и там и то и то прямо идеальный круг PS. Если брать выстрелы в движении, то там тоже другое получается, не круг, но другое. Да и это логично, как ты сам писал, горизонтальные рассинхроны чаще with abs(2 * pi() + ballisticResultClient_theta) as t, degrees(t) as deg select round(deg / 5) * 5 as d, avg(clientShotDispersion), avg(ballisticResultClient_r) from Event_OnShot where battleMode = 'REGULAR' and tankType != 'SPG' -- and clientShotDispersion / gunDispersion between 0.9999 and 1.00001 and clientMarkerDistance between 100 and 500 -- and abs(vehicleRotationSpeed) < 0.01 -- and abs(vehicleSpeed) < 0.01 -- and abs(turretSpeed) < 0.01 and ballisticResultClient_r between 0.2 and 1 group by d order by d;
  3. @KPOT2338 Нашел как визуализировать ещё более наглядно По всем выстрелам: С полным сведением, дистанция 100+: С полным сведением, дистанция 100+, нулевая скорость, пинг менее 30: И тоже самое, но обрезанное снизу не по 0, а по минимальному значению, чтоб нагляднее были видны перепады: Тоже самое, но дистанция от центра между 0.4 и 1
  4. Я тут чего то решил потыкаться в браузер, kr открылся У них там Chrome/73.0.3683.75, так что надо билдить сайт под старые браузеры Способ немного незаконный Как я понял, whitelist по url проверяется в нативном BigWorld.createWebView, скорее всего, его можно найти как dll (я не нашел), и наверняка там тупо стрингами хранится список вайтлиста НО, если переходить по сайтам внутри браузера, всё работает. Я в hosts подменил ip для igb-trading-caravan-ru.tanki.su, а он в вайтлисте. По ip хожу на свой сервер, откуда можно уже куда угодно хоть в гугл. К сожалению, я не нашел как выполнить на сайте произвольный JS, чтоб изнутри браузера перейти на другой url. (ну как, нашел, WebBrowser.executeJavascript, но кажется его выпилили: AttributeError: 'WebRender.WebBrowserProvider' object has no attribute 'executeJavascript') В теории, можно в прод пустить используя поддомен, например wotstat.igb-trading-caravan-ru.tanki.su, и в хостс соответственно тоже поддомен, и оно работет, однако редачить пользовательский hosts звучит не очень правильно. Может можно как то подменить dns изнутри игры, но как то я хз как оно в винде, чатгпт говорит нельзя. Если кто то захочет повторить, вот код: from helpers import dependency from adisp import adisp_process from skeletons.gui.game_control import IBrowserController class Demo(): browserCtrl = dependency.descriptor(IBrowserController) @adisp_process def __init__(self): yield self.browserCtrl.load('http://wotstat.igb-trading-caravan-ru.tanki.su') Demo() C:\Windows\System32\drivers\etc\hosts 84.38.183.104 wotstat.igb-trading-caravan-ru.tanki.su
  5. Выглядит красиво, но какие из этого сделать выводы, я не знаю Но оно как минимум не очень симметрично
  6. Да, действительно. Видимо всё таки стоит все эти вычисления проводить только для выстрелов с полным клиентским сведением, они автоматически неподвижны Тоже построил подобные графики, если расстояние близкое к центру ещё можно списать на погрешность вычислений, то вот график для длины плеча > 0.2, и это уже не вычислительная погрешность Я бы мог предположить, что это может как то быть связано с дальномером, когда маркер вроде бы вблизи, а снаряд берёт сильно вверх, чтоб по параболе полететь очень далеко, но вообще снаряд всегда летит по маркеру, а мод который это исправляет, делает это в противоположную сторону. select floor(ballisticResultClient_theta * 20) / 20 as ugol, count() from Event_OnShot where battleMode = 'REGULAR' and tankType != 'SPG' and ballisticResultClient_r > 0.2 and clientShotDispersion / gunDispersion between 0.99999 and 1.00001 group by ugol order by ugol;
  7. Сделал возможность отключить это копирование в конфиге мода. Кроме того, папка 2.0.0.0 создаваться теперь не будет. Если папка 2.0.0.0 уже существует, и в ней только мой мод, папка будет удалена. Из папок на будущие версии будут удалятся старые неактуальные версии мода. Например у меня в папке 1.26.0.0 лежало пять разных версий wotstat'a, каждый себя когда то скопировал. Теперь старые удалятся и будет лежать только одна актуальная. Из текущей версии, к сожалению, удалять нельзя, тк они все используются процессом танков По пути /mods/configs/wot_stat поместить текстовый файл config.cfg со следующим содержимым: { "disableAutoUpdate": true }
  8. На самом деле, сам факт того, что распределение угла неравномерно – это немного странно Я как то ожидал другого select floor(ballisticResultClient_theta * 10) / 10 as ugol, count() from Event_OnShot where battleMode = 'REGULAR' group by ugol; Окружность классическая тригонометрическая, 0 и 180 на горизонтали, 90 и -90 на вертикали. Получается, что вверх/вниз летит на 30% реже. Думаю это где нибудь ошибка в расчетах, но странно конечно
  9. Эх, если бы) Но на самом деле, возможно ничего страшного не случится. Мод либо не запустится и ничего не хукнет, либо хукнет, но внутренний код будет обёрнут в try catch, что в любом случае не остановит логику игры. Циклов которые могут бесконечно зациклиться тоже нет.
  10. А нужно? Как минимум нужно убрать версию 2.0.0.0, это я конечно был слишком оптимистичным) Ещё можно на будущие версии не добавлять, а перезаписывать мод, чтоб не было кучи разных версий мода в папке 1.26.0.0 но прямо полностью отключать не знаю, оно же нужно чтоб при апдейтах просадок по пользователям/статистики не было, а мод сейчас уже так написан, что он не будет влиять на игру, даже если апдейт его сломает
  11. это round(ballisticResultServer_r * 500) / 500 расстояние от центра круга сведения, до места где снаряд его пересёк
  12. А вот график плотности распределения выстрелов по кругу сведения, интересно откуда эта ступенчатость
  13. Взялся значит я за 2к исключений в час на сервере, посмотреть что вообще и откуда Оказалось, что проблема в моём баллистическом калькуляторе, который за скорость снаряда брал длину вектора скорости трассера, а оказывается, скорость трассера не постоянна по его траектории (кинетическая энергия переходит в потенциальную с повышением высоты -> скорость понижается), а снаряд в танках появляется на прямо из дула, а где то по траектории, у арты вот например обычно в середине траектории (там где он должен попасть в камеру игрока) Получается, что мой баллистический калькулятор работал неправильно всё это время. Я его исправил, и пересчитал все 160 миллионов старых выстрелов Жёлтое – до, красное – после. На арте. В общем то, сказ о потерянном времени) На обычных танках там вообще разницы нет. Зато теперь на душе спокойно и есть навык обновления 160 миллионов строк.
  14. Добавил на сайт соответствующий раздел Выглядит немного перегруженным, но оно хорошо структурировано, а главное есть процентики всего, и даже нормализированные https://wotstat.info/session/lootbox Шанс на Барона 0.039% это 2.5к коробок на танк, а открывать их можно только по 10, прикиньте как это запарно
  15. Такс, готово. В новой версии мода добавил сбор инфы о контейнерах. Постарался по максимуму распарсить что из них падает, но всё равно осталось несколько проигнорированных (dogtags, Enhancements, Tankmen, Entitlements). Всё кроме Tankmen я вообще хз что это такое. Всё основное распаршено Полный список, пока только SQL. В ближайшее время добавлю в инфографику Кроме того есть raw поле, куда сохраняется исходный json
  16. Тут поступило предложение собирать инфу о том, что выпадает из контейнеров. Методом тыка я сходу попал в нужную функцию https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/a073ff6fab4bdb9a915560cb3c774e645ea9ed64/source/res/scripts/client/gui/shared/gui_items/processors/loot_boxes.py#L25 И она в ctx имеет следующий результат для получения другого контейнера и 40к кредитов { 'bonus': [ { 'tokens': { 'lootBox:310032': { 'count': -1, 'expires': {} }, 'lootBox:310031': { 'count': 1, 'expires': { 'at': 2524608000L } } }, 'credits': 40000 } ], 'extData': {} } Вот результат для кофе с выпечкой { 'bonus': [ { 'tokens': { 'lootBox:310032': { 'count': -1, 'expires': {} } }, 'items': { 16123: 3 } } ], 'extData': {} } Подскажите, как превратить 16123 в кофе с выпечкой? Скорее всего это опять какой нибудь дескриптор который надо как то кастануть к описанию И ещё вопрос, как по id контейнера получить его описание? Вроде бы можно через itemsCache = dependency.descriptor(IItemsCache) itemsCache.items.tokens.getLootBoxes()['lootBox:310031']['category'] Но насколько можно быть уверенным что они есть в кеше, и может у кого то уже есть готовая реализация) ___________ Ну судя по всему я нашел все интересующие меня ответы тут https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/a073ff6fab4bdb9a915560cb3c774e645ea9ed64/source/res/scripts/client/messenger/formatters/service_channel.py#L2691 и мне надо просто реализовать такую же парсер функцию, но не в стринги, а в свой словарь Но хранить исходные результаты всё равно буду отдельно как JSON прямо в бд
  17. Спасибо за наводку, как то думал что форум мёртв, а он жив) Создал там тоже отдельную тему Вообще должен работать, просадок по игрокам не наблюдал, скорее всего у него индивидуальная проблема
  18. Спасибо, получилось. Если последним параметром передать CommonMarkerType.LOCATION, то там можно ещё много других классных маркеров Интересно, что упоминание 'eye' в проекте в принципе не встречается, кроме пары автосгенерированных мест) canvas.markerSetSticky ещё добавляет в UI стрелочку до маркера, если он не на экране, а markerSetMarkerObjectInFocus автоматически рассчитывает и отображает дистанцию В рандоме тоже работает. Есть идеи куда копать для пунктирной обводки на земле? Кажется я слишком сильно парюсь для потенциально временного решения, но почему бы и не сделать хорошо, если это не сложно
  19. Проверял ещё на старых маркерах, динамически двигаются раз в 5 секунд 1к – вообще никакой разницы 2к – фризов нет, но фпс уже начинает понижаться 10к – фпс падает до 15, появляются микрофризы, но скорее всего не от отрисовки, а от того что я там в цикле 10к раз invoke вызываю Учитывая, что я тестирую через виртуалку, как будто бы без видеокарты, думаю более чем пойдет. Само собой, нативно рисовать в спрайт внутри флеша будет оптимальнее, но это уже потом
  20. Вот этого я не учёл, спасибо Да, действительно перепутал когда писал, имел ввиду эти два SHOOTING_POINT_MARKER NAVIGATION_POINT_MARKER, в обычных боях работают Точечки тоже получились, я понял в чём проблема была, там name это не имя, а название вида точечки. В рандоме работает settings.ENTRY_SYMBOL_NAME.VEHICLE settings.CONTAINER_NAME.ALIVE_VEHICLES minimap.invoke(handle, 'setVehicleInfo', 777, 'mediumTank', '', 'enemy', '') minimap.invoke(handle, 'setVehicleInfo', 777, 'mediumTank', '', 'ally', '') А там где можно рисовать точечки, можно ими закрашивать области) К тому же, если их пуллить, очень даже оптимально
  21. Благодарю, всё получилось, там есть ещё много разных интересных маркеров, например NAVIGATION_MARKER и SHOOTING_MARKER, которые из топографии как раз для указания позиции куда ехать _____ Есть пара вопросов. В топографии есть вот такие вот красные точечки, судя по всему это VEHICLE_MARKER для пропавшей из засвета техники с пустым названием, но создать что то подобное у меня не получилось, может есть пример. Вопрос 2. В топографии есть два вот таких вот 3д маркера, как делать их? Искал по maps training, но чего то простого не нашел. Я понимаю, что скорее всего можно вручную через добавление модельки, но наверняка есть готовый механизм, так же как и с миникартой
  22. Скорее всего это действительно так, но этому есть объяснение – в натиске сражения очень близко и часто люди заходят в борта друг другу. Там в принципе и процент пробитий выше. Вот график % пожаров (красным) и взрывов бк (синим) по категориям боёв, но я брал только ББ. Пожаров почти в 2 раза больше
  23. Даа, я так и подумал, что оно точку входа в UI имеет. Спасибо за разъяснение)
  24. Вычисление подставушников Взял результаты из рандома на танках 10 уровня с сервера RU9, вставил их в графовую Neo4J со следующей схемой: Вершины (node): - :Player { name } – Игрок с ником name не обязательно пользователь WotStat - :Arena { [id], [reporter] } – Бой с id из базы WotStat, отправленный игроком с ником reporter. Одну и туже арену могли зарепортить несколько игроков, по этому id и reporter это массивы - :Squad { name } – Взвод с уникальным именем name, которое состоит из упорядоченных по алфавиту ников совзводных. Связи (relationship): - :Player -[:PLAY_ON { damage, mileage }]-> :Arena – Игрок играл на арете и нанёс damage урона, проехал mileage расстояния - :Squad -[:PLAY_ON]-> :Arena – Взвод играл на арене - :Player -[PLAY_IN]-> :Squad – Игрок играл во взоде Интересно было найти игроков, которые играли друг с другом чаще остальных, при этом в общих боях не состояли во взводе. И отдельно поискать взводы которые играли друг с другом чаще остальных Звучит многообещающе, но как то не получилось. Инструментарий взаимодействия с графовыми базами отвратительный. Куча неочевидных подводных камней. Запрос на игроков я устал ждать выполнения. Голубой – арены Фиолетовый – взводы Оранжевый – игроки На картинке два взвода которые играли вместе в 13 боях: Запрос кому интересно MATCH (sq1:Squad)-[:PLAY_ON]->(a:Arena)<-[:PLAY_ON]-(sq2:Squad), (p1:Player)-[:PLAY_IN]->(sq1), (p2:Player)-[:PLAY_IN]->(sq2) WHERE sq1 <> sq2 WITH sq1, sq2, COLLECT(DISTINCT a) AS sharedArenas, COLLECT(DISTINCT p1) AS players1, COLLECT(DISTINCT p2) AS players2 WHERE SIZE(sharedArenas) > 10 UNWIND players1 AS player1 CALL apoc.create.vNode(['Player'], {name: player1.name}) YIELD node as vp1 CALL apoc.create.vRelationship(vp1, 'PLAY_IN', {}, sq1) YIELD rel AS rel1 RETURN sq1, sq2, sharedArenas, vp1, rel1 Технически можно развить, оптимизировать, и отправлять уведомления в мод, игроку который зарепортил эти арены, чтоб загрузил реплей на вотреплейс, тк в нём потенциальные подставушники. Ещё можно смотреть на арены, где эти игроки играли не вместе. Но заниматься таким я пока не готов, слишком неприятный процесс который явно не принесёт денег. Если вдруг кому интересно повторить и покопаться: Ещё одна красивая картинка случайного куска базы DATA.csv
  25. Погоди, то есть просто из игры токен вытащить нельзя? Авторизация через сайт звучит так, как будто бы этим никто не будет пользоваться. Как будто бы должен быть способ как то авторизовать пользователя изнутри игры Если нет, это печально конечно
×
×
  • Create New...