Jump to content
Korean Random

SoprachevAK

User
  • Content Count

    188
  • Joined

  • Last visited

  • Days Won

    5

Everything posted by SoprachevAK

  1. Добавил на сайт соответствующий раздел Выглядит немного перегруженным, но оно хорошо структурировано, а главное есть процентики всего, и даже нормализированные https://wotstat.info/session/lootbox Шанс на Барона 0.039% это 2.5к коробок на танк, а открывать их можно только по 10, прикиньте как это запарно
  2. Такс, готово. В новой версии мода добавил сбор инфы о контейнерах. Постарался по максимуму распарсить что из них падает, но всё равно осталось несколько проигнорированных (dogtags, Enhancements, Tankmen, Entitlements). Всё кроме Tankmen я вообще хз что это такое. Всё основное распаршено Полный список, пока только SQL. В ближайшее время добавлю в инфографику Кроме того есть raw поле, куда сохраняется исходный json
  3. Тут поступило предложение собирать инфу о том, что выпадает из контейнеров. Методом тыка я сходу попал в нужную функцию 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 прямо в бд
  4. Спасибо за наводку, как то думал что форум мёртв, а он жив) Создал там тоже отдельную тему Вообще должен работать, просадок по игрокам не наблюдал, скорее всего у него индивидуальная проблема
  5. Спасибо, получилось. Если последним параметром передать CommonMarkerType.LOCATION, то там можно ещё много других классных маркеров Интересно, что упоминание 'eye' в проекте в принципе не встречается, кроме пары автосгенерированных мест) canvas.markerSetSticky ещё добавляет в UI стрелочку до маркера, если он не на экране, а markerSetMarkerObjectInFocus автоматически рассчитывает и отображает дистанцию В рандоме тоже работает. Есть идеи куда копать для пунктирной обводки на земле? Кажется я слишком сильно парюсь для потенциально временного решения, но почему бы и не сделать хорошо, если это не сложно
  6. Проверял ещё на старых маркерах, динамически двигаются раз в 5 секунд 1к – вообще никакой разницы 2к – фризов нет, но фпс уже начинает понижаться 10к – фпс падает до 15, появляются микрофризы, но скорее всего не от отрисовки, а от того что я там в цикле 10к раз invoke вызываю Учитывая, что я тестирую через виртуалку, как будто бы без видеокарты, думаю более чем пойдет. Само собой, нативно рисовать в спрайт внутри флеша будет оптимальнее, но это уже потом
  7. Вот этого я не учёл, спасибо Да, действительно перепутал когда писал, имел ввиду эти два 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', '') А там где можно рисовать точечки, можно ими закрашивать области) К тому же, если их пуллить, очень даже оптимально
  8. Благодарю, всё получилось, там есть ещё много разных интересных маркеров, например NAVIGATION_MARKER и SHOOTING_MARKER, которые из топографии как раз для указания позиции куда ехать _____ Есть пара вопросов. В топографии есть вот такие вот красные точечки, судя по всему это VEHICLE_MARKER для пропавшей из засвета техники с пустым названием, но создать что то подобное у меня не получилось, может есть пример. Вопрос 2. В топографии есть два вот таких вот 3д маркера, как делать их? Искал по maps training, но чего то простого не нашел. Я понимаю, что скорее всего можно вручную через добавление модельки, но наверняка есть готовый механизм, так же как и с миникартой
  9. Скорее всего это действительно так, но этому есть объяснение – в натиске сражения очень близко и часто люди заходят в борта друг другу. Там в принципе и процент пробитий выше. Вот график % пожаров (красным) и взрывов бк (синим) по категориям боёв, но я брал только ББ. Пожаров почти в 2 раза больше
  10. Даа, я так и подумал, что оно точку входа в UI имеет. Спасибо за разъяснение)
  11. Вычисление подставушников Взял результаты из рандома на танках 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
  12. Погоди, то есть просто из игры токен вытащить нельзя? Авторизация через сайт звучит так, как будто бы этим никто не будет пользоваться. Как будто бы должен быть способ как то авторизовать пользователя изнутри игры Если нет, это печально конечно
  13. Это действительно так, и это радует) Я мониторю сервер и пока что там аномальных пиков не было Возможно мне недостаточно квалификации вот в таких клиентских штуках, но как будто бы всё равно будет точка входа в функцию отправки данных на сервер, и в эту точку можно явно передать что угодно, и как будто бы делать любые защиты вокруг неё смысла нет Тут ещё влияет, что у меня никакой соревновательности нет, и заниматься вбросами нет смысла, кроме как поднасрать. А если защитить по пользователю, то поднасрать получится только себе и в среднесерверную. Таких можно будет удалять вручную
  14. Ну тут технически то его никак не защитить, в конечном то итоге всё равно с клиента данные идут Там вообще был предусмотрен механизм обфускации трафика, чтоб пришлось хотя бы в моде разбираться, но судя по тому, что на сервере я деобфускатор не писал, обфускатор я включить забыл По хорошему надо вытащить из клиента токен, чтоб авторизовывать пользователя на сервере, тогда подменить можно будет только свои данные, а это во первых не поднасрёт другим, во вторых легко удалить будет. Я посмотрел на этот token2, понял что он похож на jwt, но им не является, и пока отложил эту затею Но вообще в ближайшее время придётся разбираться для платных тепловых карт на миникарте
  15. Мод 1.3.0.0 Канареечное обновление – следующие версии смогут устанавливаться не сразу всем игрокам, а раскатываться постепенно, например по 10% игроков в день, критические баги затронут не всю аудиторию. В случае важных обнов, можно будет указать установку сразу всем. На сайте и гитхабе всегда можно будет скачать последнюю версию ModListApi – теперь открыть сайт с персональной инфографикой можно из интерфейса modList'a, если такой установлен. Уведомление в ангаре стало немного более навязчивым (вылезает при входе в игру, а не просто там находится) События Ко всем событиям и результатам добавлен tankRole который описывает роль танка (это как тип, но подтип, например чтоб отличать САУ от огнемёта) Ко всем событиям добавлен сбор текущего счёта боя (сумма фрагов команды на момент события), суммарное ХП команд и суммарное максимальное ХП команд Для результата боя, это событие собирается в момент начала боя Судя по логам ошибок, ХП могут собираться не всегда правильно, но я думаю пойдёт.
  16. Ирония в том, что прямо в момент сообщения я нашел в коде именно эту строчку) Но всё равно спасибо большое! Пойду пробовать
  17. Не не, не думал, очевидно что не пришлёт Я имел ввиду событие Dead когда противник умирает за кругом отрисовки. Его тоже нет в фидбеке А про инстанс Vehicle, я думал, что он кеширует в себе инфу на время боя. Как будто бы нет смысла каждый засвет аллоцировать память с нуля, так ещё и потом каждая подсистема кеширует одну и туже информацию локально
  18. Ну я вот сейчас тестировал, инстанс Vehicle меняется каждый раз когда танк пропадает и появляется заново. Ну типа каждый засвет инстанс новый, id не меняется и можно через BigWorld.entity() получать, но это другое Это выглядело очень многообещающе, но у меня всё равно ничего не получилось, хотя я уже неприлично много времени на эту задачу потратил Фидбеки приходят только в радиусе отрисовки, даже Dead Ещё я надеялся, что мне поможет IBattleFieldListener https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/a073ff6fab4bdb9a915560cb3c774e645ea9ed64/source/res/scripts/client/gui/battle_control/controllers/battle_field_ctrl.py#L18, но я не нашел как его регистрировать, чтоб в него приходили вызовы. По сути сейчас я беру максимальные ХП из player().arena.vehicles['maxHealth'], и на Vehicle.onEnterWorld и Vehicle.onHealthChanged обновляю текущие хп каждого танка по ID Но оно всё работает только в радиусе отрисовки. Остаётся только обнулять ХП умерших за отрисовкой танков. Ну и мечтаю, чтоб это хоть как то работало во всяких режимах с хилом и воскрешениями
  19. Реально 2^32 Ну значит начиная с текущего момента, флаги записываются корректно, всё что раньше – UInt16 мусор Спасибо за наводку
  20. Ну как будто бы правильно player.arena.bonusType, к тому же это 10 случаев из 5 миллионов, ультра редкий баг, так что можно списать на радиацию из космоса) А может сервер что то криво отправил битым, потому что из кеша результатов, мод вытаскивает даже когда в игре пишет "Результаты недоступны", может они неспроста они так пишут Ну так я же учитываю не базовое ХП, а на момент выстрела. У всяких ЛТ, к моменту выстрела, относительно урона, думаю рандомится. Хотя есть гипотеза, что в среднем уроны в игре кратны максимальному ХП, и после трёх тычек, будет оставаться чуть больше максималки. Но там надо всё равно переделывать и график и счётчик на относительные показатели. Что то типа процента нечестно добитых относительно выстрелов по шотным Ну такое надо сравнивать тогда ты взорвал/тебе взорвали, а я пока не записываю получаемый урон, хотя конечно мог бы, но потом Не совсем, это вот это https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/a073ff6fab4bdb9a915560cb3c774e645ea9ed64/source/res/scripts/common/constants.py#L1309 Вроде бы там можно вытащить крит пушки/гусеницы, но я вообще с этими флагами не взаимодействовал. В кликхаусе есть битовые операции, так что можешь попробовать что нибудь bitAnd(a, b) ps. Возможно я в принципе указал слишком маленький тип столбика, тогда конечно косяк, но вроде бы норм
  21. Не не, там прикол в том, что одно и тоже событие которое прямо ушло с мода имеет один танк, а прикреплённый к нему результат боя имеет другой танк, в обычном рандоме То есть как то перемешались внутри сессии клиента результаты боёв, которые я беру строго по arenaID. Но таких случаев 10 на 5 миллионов, так что можно сделать вид, что их нет Там был прямо вот такой перекос) Это график количества ХП у танков по которым стреляли с альфой в 390 обрезанный по минималке/максималке ------ Мои вчерашние оптимизации положили сервер на запись. Судя по всему по оператвике, так что накинул 2гб, посмотрим что будет
  22. Апдейтики 25.03.2024 С одной стороны ничего интересного, а с другой тотальная оптимизация всего. Последнее время, каждый день, общая инфографика грузилась всё медленнее и медленнее. В общем то пофиксил. Добавил materialized view и projection в базу данных. Это такие отдельные таблицы, в которых хранятся предрассчитанные метрики и инкрементально обновляются на каждую вставку. (что это значит? – все данные всё ещё актуальным секунда в секунду по любым фильтрам). Единственная проблема – это запросы стали немного странными специфичными, тк projection'ы выбираются автоматически, запросы должны по выбираемым выражениям соответствовать заранее подготовленным projection'ам. Заодно пока переписывал запросы, исправил в них несколько неточностией. Из явно видного – графики мест в команде теперь строго детерминированны и считают сколько человек было ЛУЧШЕ игрока (одинаковые показатели трактуются в пользу игрока). Так что теперь выгдядят интереснее, особенно на арте Про нечестно добитых/спасённых. Во первых убрал из выборки взрывы БК, во вторых мне подсказали как её полностью передалать на относительные значения, но пока что думать тяжело. Сейчас нечестно добитых всегда будет больше, потому что противников с ХП > 1.0 альфы встречается чаще чем с ХП < 1.0 альфы. А это связано с наличием арты, которая респится с 450-490 хп Если исключать арту из целей, всё равно есть небольшой перекос, но сильно меньше, пока не знаю почему Время загрузки До/После на одним и том же сервере, на одной и той же БД. Страница результатов для случайных боёв
  23. Так ещё и разные игроки, на разных серверах, в разных регионах Вообще не представляю как так вышло, может баг внутри игры с получением результатов Потому что я беру результат по arenaID, который, насколько я понимаю, уникальный на всю игру Но ситуация забавная)
  24. Насколько я помню, инстанс класса Vehicle существует только когда танк виден и известен игроку А в начале боя пока они ещё не светились, или за кругом отрисовки, или во всяких режимах где они вообще скрыты как быть? Может я просто неправильно хожу до этих Vehicles
  25. Подскажите откуда можно вытащить закешированные текущие ХП танков союзников и противников. В player().vehicles лежат только максимальные. Понятное дело, что можно самому посчитать на onHealthChanged, но в игре уже должно быть что то подобное, для ХП команд в шапке, да и на миникарте отображаются Я нашел что то похожее в from vehicle_systems.appearance_cache import VehicleAppearanceCacheInfo , но оно как то нигде не используется нормально
×
×
  • Create New...