Jump to content
Korean Random

SoprachevAK

User
  • Posts

    203
  • Joined

  • Last visited

  • Days Won

    8

Posts posted by SoprachevAK

  1. 9 часов назад, yepev сказал:

    @SoprachevAK в XVM точно такое раньше было в фиче переименования и заметок для контакт листа. Но её давно отключили, потому что-то в ангаре что-то поменялось, а обновить совместимость некому. Можешь попробовать найти в репозитории в старых ревизиях.

    Спасибо, но оно явно на кастомных флешках. Видимо буду решать свою задачу по другому 

  2. Подскажите пожалуйста, есть ли в игре возможность запросить у пользователя ввести текст. 
    Раньше были такие всплывающие окна при продаже танков и демобилизации экипажей, с просьбой ввести их цену, но сейчас их переделали под кастомные флешки для каждой задачи

    Хочется что то по типу стандартного диалога, но с полоской для ввода текста
    image.png.43bea537349e32c9e9c21b803c26c8e3.png

    Если такого нет, то какие ещё есть способы запросить у пользователя текст? Желательно без создания своих флешек
      

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

    Откуда информация, что клиентский точнее?

    Вроде на форуме всегда рекомендуют включать серверный, чтоб лучше видеть куда направлен прицел


    Сервер отстаёт от действий пользователя на один ping
    Серверный прицел отстаёт от сервера на один ping
    => Серверный прицел отстаёт от действий пользователя на два пинга

    Клиентский прицел старается "предугадывать" состояние сервера и реагировать на действия пользователя мгновенно

    И дальше вопрос что хуже: двойной пинг или ошибки предугадывания
    WotStat показывает, что в среднем, по клиентскому летит точнее (это для натиска. В рандоме тоже точнее, но там разница намного меньше) image.thumb.png.c5f746e7cc0c6e149eedb82d537a2c59.png

    • Upvote 2
  4. 4 минуты назад, KPOT2338 сказал:

    Т.е. в идеальных условиях получается круг

    Ну вообще, так то совсем не круг, оно очень вверх сдвинуто
    Я вот ещё вспомнил, что надо арту исключать

    И я да, я всегда смотрю на клиентском, тк он точнее

    image.thumb.png.18b063be549f32dbc900f3ed624b32e3.pngimage.thumb.png.f5ec185789ad8c22ff46beae252dd63b.png


     

    7 минут назад, KPOT2338 сказал:

    А вот средний (avg) разброс от угла для клиентского

    Разброс это сведение или то куда полетел снаряд (ballisticResultClient_r)?

    Я попробовал, и в идеальных условиях, и там и то и то прямо идеальный круг
    image.thumb.png.d7a29c9b4c9896cc8fcf8aa1cdefbb6e.png



    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;

     

  5. @KPOT2338
    Нашел как визуализировать ещё более наглядно

    По всем выстрелам:
    image.thumb.png.3d424cc848549810fb5391f8e6a4f18f.png



    С полным сведением, дистанция 100+:
    image.thumb.png.b9bd2dbea599234324e0dbe5509a625b.png





    С полным сведением, дистанция 100+, нулевая скорость, пинг менее 30: 
    image.thumb.png.1501483403e2fa885c9729c5161bb4a7.png



    И тоже самое, но обрезанное снизу не по 0, а по минимальному значению, чтоб нагляднее были видны перепады:
    image.thumb.png.0f049b6abc2125e7f2aef38b982e8a94.png




    Тоже самое, но дистанция от центра между 0.4 и 1
     image.thumb.png.0f574cfcfb02233fa728328f8dbc15b2.png

    • Upvote 1
  6. Я тут чего то решил потыкаться в браузер, 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

     

    image.png

    • Upvote 3
  7. 1 час назад, KPOT2338 сказал:

    Вот, Экселем попробовал

    Оси - угол(-180...+175гр, шаг 5 гр)/расстояние от центра (0...275%, шаг 1%)/количество 

     

    graf1.jpg

    graf4.jpg

    graf5.jpg

    Выглядит красиво, но какие из этого сделать выводы, я не знаю
    Но оно как минимум не очень симметрично

  8. 5 часов назад, KPOT2338 сказал:

    В игре горизонтальная скорость встречается чаще, чем вертикальная

    Да, действительно. Видимо всё таки стоит все эти вычисления проводить только для выстрелов с полным клиентским сведением, они автоматически неподвижны

     

    5 часов назад, KPOT2338 сказал:

    Больше интересно почему вверх летит больше, чем вниз

    Тоже построил подобные графики, если расстояние близкое к центру ещё можно списать на погрешность вычислений, то вот график для длины плеча > 0.2, и это уже не вычислительная погрешность
    image.thumb.png.9e2aaf4ecd034b06120ed52af9a14507.png

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

    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;

     

  9. 14.04.2024 в 11:29, maxim23rus сказал:

    а можно сделать вариант мода который бы не создавал папки с номером будущих патчей и свои копии в них?


    Сделал возможность отключить это копирование в конфиге мода. Кроме того, папка 2.0.0.0 создаваться теперь не будет.
    Если папка 2.0.0.0 уже существует, и в ней только мой мод, папка будет удалена.
    Из папок на будущие версии будут удалятся старые неактуальные версии мода. Например у меня в папке 1.26.0.0 лежало пять разных версий wotstat'a, каждый себя когда то скопировал. Теперь старые удалятся и будет лежать только одна актуальная. Из текущей версии, к сожалению, удалять нельзя, тк они все используются процессом танков

    По пути /mods/configs/wot_stat поместить текстовый файл config.cfg со следующим содержимым: 

    {
    	"disableAutoUpdate": true
    }

     

  10. 10 часов назад, KPOT2338 сказал:

    Оно и от угла зависит

    (угол в градусах)

    select     floor(ballisticResultServer_theta*180/pi()/5)*5 as ugol,
            floor(ballisticResultServer_r*100) as radius,
            count() 
    from Event_OnShot
    where battleMode = 'REGULAR'
      and ugol = 90
    group by ugol,radius
    Order by radius

    разброс от угла.jpg

    На самом деле, сам факт того, что распределение угла неравномерно – это немного странно
    Я как то ожидал другого
    image.thumb.png.d1c24815c18e63a52f4f71d7ec919aaa.png
     

    select floor(ballisticResultClient_theta * 10) / 10 as ugol,
           count()
    from Event_OnShot
    where battleMode = 'REGULAR'
    group by ugol;

     

    Окружность классическая тригонометрическая, 0 и 180 на горизонтали, 90 и -90 на вертикали.

    Получается, что вверх/вниз летит на 30% реже. Думаю это где нибудь ошибка в расчетах, но странно конечно

  11. 6 часов назад, yepev сказал:

    Прям таки любой апдейт? Даже апдейт питона до 3 версии? :smile:

    Эх, если бы)

    Но на самом деле, возможно ничего страшного не случится. 
    Мод либо не запустится и ничего не хукнет, либо хукнет, но внутренний код будет обёрнут в try catch, что в любом случае не остановит логику игры. Циклов которые могут бесконечно зациклиться тоже нет. 

  12. 7 часов назад, maxim23rus сказал:

    а можно сделать вариант мода который бы не создавал папки с номером будущих патчей и свои копии в них?

    А нужно?


    Как минимум нужно убрать версию 2.0.0.0, это я конечно был слишком оптимистичным) Ещё можно на будущие версии не добавлять, а перезаписывать мод, чтоб не было кучи разных версий мода в папке 1.26.0.0

     

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

  13. Взялся значит я за 2к исключений в час на сервере, посмотреть что вообще и откуда
    Оказалось, что проблема в моём баллистическом калькуляторе, который за скорость снаряда брал длину вектора скорости трассера, а оказывается, скорость трассера не постоянна по его траектории (кинетическая энергия переходит в потенциальную с повышением высоты -> скорость понижается), а снаряд в танках появляется на прямо из дула, а где то по траектории, у арты вот например обычно в середине траектории (там где он должен попасть в камеру игрока)

    Получается, что мой баллистический калькулятор работал неправильно всё это время. Я его исправил, и пересчитал все 160 миллионов старых выстрелов
    Жёлтое – до, красное – после. На арте.
    image.thumb.png.d8799d7203db826bcf397b0ee5aa73b6.png

    В общем то, сказ о потерянном времени) На обычных танках там вообще разницы нет. Зато теперь на душе спокойно и есть навык обновления 160 миллионов строк. 

    • Upvote 1
  14. Добавил на сайт соответствующий раздел 
    Выглядит немного перегруженным, но оно хорошо структурировано, а главное есть процентики всего, и даже нормализированные
    https://wotstat.info/session/lootbox

     Шанс на Барона 0.039% это 2.5к коробок на танк, а открывать их можно только по 10, прикиньте как это запарно 

    image.png

    • Upvote 1
  15. Такс, готово.

    В новой версии мода добавил сбор инфы о контейнерах. Постарался по максимуму распарсить что из них падает, но всё равно осталось несколько проигнорированных (dogtags, Enhancements, Tankmen, Entitlements). Всё кроме Tankmen я вообще хз что это такое. Всё основное распаршено 

    Полный список, пока только SQL. В ближайшее время добавлю в инфографику
    image.thumb.png.874effea65b2f6ee3b7ae033ad8f1d7f.png
    Кроме того есть raw поле, куда сохраняется исходный json

    • Upvote 1
  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 прямо в бд

    • Upvote 1
  17. 14 часов назад, KPOT2338 сказал:

    Народ переживает, что что-то не работает

    http://forum.tanki.su/index.php?/topic/2140364-подкрутка/page__st__49440__pid__56851469#entry56851469

    Спасибо за наводку, как то думал что форум мёртв, а он жив)
    Создал там тоже отдельную тему

    Вообще должен работать, просадок по игрокам не наблюдал, скорее всего у него индивидуальная проблема

  18. 20 часов назад, StranikS_Scan сказал:

    Чтобы создать 3D маркер на игровом поле можно так делать

    Спасибо, получилось. Если последним параметром передать CommonMarkerType.LOCATION, то там можно ещё много других классных маркеров
    Интересно, что упоминание 'eye' в проекте в принципе не встречается, кроме пары автосгенерированных мест)

    canvas.markerSetSticky ещё добавляет в UI стрелочку до маркера, если он не на экране, а markerSetMarkerObjectInFocus автоматически рассчитывает и отображает дистанцию 

    В рандоме тоже работает. 
    image.thumb.png.78a5d14807969092dc43981dd6d3888a.png

    Есть идеи куда копать для пунктирной обводки на земле?
    image.png.7f2208ab4d24618b904d50290a18c17c.png

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

    • Upvote 1
  19. 15 минут назад, StranikS_Scan сказал:

     

    На падение фпс и фризы проверь эти пуления. А еще там вроде были ограничения на число объектов, но это легко выявить банальной проверкой.

    Проверял ещё на старых маркерах, динамически двигаются раз в 5 секунд
    1к – вообще никакой разницы
    2к – фризов нет, но фпс уже начинает понижаться
    10к – фпс падает до 15, появляются микрофризы, но скорее всего не от отрисовки, а от того что я там в цикле 10к раз invoke вызываю

    Учитывая, что я тестирую через виртуалку, как будто бы без видеокарты, думаю более чем пойдет. 
    Само собой, нативно рисовать в спрайт внутри флеша будет оптимальнее, но это уже потом

    image.thumb.png.bd50855895fcaeac21e31b58165336f7.png
    image.thumb.png.0647a574385357c403d944612665c2f0.png

    • Upvote 1
  20. 11 часов назад, StranikS_Scan сказал:

    Нужно смотреть и проверять, что где доступно. Возможны ограничения

    Вот этого я не учёл, спасибо
     

     

    11 часов назад, StranikS_Scan сказал:

    Это не для миникарты, это в бою GUI маркеры-индикаторы

    Да, действительно перепутал когда писал, имел ввиду эти два SHOOTING_POINT_MARKER NAVIGATION_POINT_MARKER, в обычных боях работают
    image.png.2fa286159565c243ab6909828bf3bb27.png

    Точечки тоже получились, я понял в чём проблема была, там 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', '')

    image.png.5a687674b7882c24602df4cea8d47bf5.png

    А там где можно рисовать точечки, можно ими закрашивать области) К тому же, если их пуллить, очень даже оптимально

  21. 10.03.2024 в 21:44, StranikS_Scan сказал:

     

    Никак. Миникарта это скомпилированная флэшка с фиксированным функционалом. Из питона можно только вызывать те маркеры, вызов которых предусмотрен во флэшке. Потому тут либо флэшку надо модифицировать, либо к неё что-то приинжектить. Я во флэшках не разбираюсь, потому подробностей не расскажу. Обратись к протанкам, если их заинтересует твой мод может и с флэшкой помогут.

     

    В XVM-моде вроде бы вот эти файлы отвечают за миникарту:

    xvm_11.0.0_0037_....zip\

    lesta\mods\1.25.0.0\com.modxvm.xfw\com.modxvm.xfw.actionscript_11.0.0.0037.wotmod\

    res\gui\flash\battle.swf

    lesta\res_mods\mods\xfw_packages\xvm_battle_minimap\python\minimap.py

     

     

    Однозначно забанят, если твой мод будет в реальном времени показывать игроку куда ему ехать и что ему делать, исходя из текущей обстановки в игре. И скорее всего не забанят, если твой мод будет в начале боя загружать и показывать статически некие рекомендации игроку, основанные на анализе ранее собранных данных.

     

     

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

     

    image.png.5eb1aa21f069b2ef80de2fd9e87b8ba1.png

     

    Код вот такой:

    
    import BigWorld
    from gui.shared.personality import ServicesLocator
    from account_helpers.AccountSettings import AccountSettings
    from gui.Scaleform.daapi.view.battle.shared.minimap import settings, plugins
    from gui.Scaleform.genConsts.BATTLE_VIEW_ALIASES import BATTLE_VIEW_ALIASES
    from frameworks.wulf import WindowLayer
    from Math import Matrix, Vector3, createTranslationMatrix
    
    def __calcMarkerScale(self, markerScales, minimapSizeIndex):
        p = float(minimapSizeIndex - plugins._MINIMAP_MIN_SCALE_INDEX) / float(plugins._MINIMAP_MAX_SCALE_INDEX - plugins._MINIMAP_MIN_SCALE_INDEX)
        return p * markerScales[0] + (1 - p) * markerScales[1]
    
    #Параметры карты
    boundingBox = BigWorld.player().arena.arenaType.boundingBox
    x_min, y_min = boundingBox[0]
    x_max, y_max = boundingBox[1]
    __mapSize = [abs(x_max - x_min), abs(y_max - y_min)]
    
    #Миникарта
    battle = ServicesLocator.appLoader.getDefBattleApp()
    __minimap = battle.containerManager.getContainer(WindowLayer.VIEW).getView().components[BATTLE_VIEW_ALIASES.MINIMAP]
    
    #Выведем маркер по ценру карты
    markerPos = (0,0,0)
    markerType   = settings.ENTRY_SYMBOL_NAME.LOCATION_MARKER #Зеленая лампочка
                   #settings.ENTRY_SYMBOL_NAME.ATTENTION_MARKER #Оранжевый треугольник
    markerEffect = 'reply' #белое свечение внутри
                   #'idle' свечение только контура
    markerScales = [0.8,1.1]
    markerOffset = [0,0] 
    
    #Масштаб маркеров
    minimapSizeIndex = settings.clampMinimapSizeIndex(AccountSettings.getSettings('minimapSize'))
    currentScale = __calcMarkerScale(markerScales, minimapSizeIndex)
    #Формируем матрицы
    scaleMatrix = Matrix()
    scaleMatrix.setScale(Vector3(currentScale, 1.0, currentScale))
    #Смещение определяется от верхнего левого угла маркера до кончика стрелки и выражается в долях от длины и высоты миникарты, мм
    #масштаб миникарты при этом не влияет 
    entryMatrix = createTranslationMatrix(markerPos + Vector3(markerOffset[0]*__mapSize[0]*currentScale, 0, markerOffset[1]*__mapSize[1]*currentScale))
    entryMatrix.preMultiply(scaleMatrix)
    __handle = __minimap.addEntry(markerType, settings.CONTAINER_NAME.ICONS, matrix=entryMatrix, active=True, transformProps=settings.TRANSFORM_FLAG.FULL)
    __minimap.invoke(__handle, 'setState', markerEffect)
    
    #Удаляем маркер
    __minimap.delEntry(__handle)

     


    Благодарю, всё получилось, там есть ещё много разных интересных маркеров, например NAVIGATION_MARKER и SHOOTING_MARKER, которые из топографии как раз для указания позиции куда ехать

    _____
    Есть пара вопросов. В топографии есть вот такие вот красные точечки, судя по всему это VEHICLE_MARKER для пропавшей из засвета техники с пустым названием, но создать что то подобное у меня не получилось, может есть пример. 
    image.thumb.png.d436988bdcaea6e932438bce0ef7bbd1.png

    Вопрос 2. В топографии есть два вот таких вот 3д маркера, как делать их? Искал по maps training, но чего то простого не нашел. Я понимаю, что скорее всего можно вручную через добавление модельки, но наверняка есть готовый механизм, так же как и с миникартой
    image.thumb.png.4b9ff250585242ec94249b1dadfa55bc.pngimage.thumb.png.f77100ea51f5d59282f6392a4409e641.png

  22. 10 часов назад, KPOT2338 сказал:

    Или я что-то напутал/недоучёл в условиях или в разных режимах и у разных снарядов разные шансы крита, если исходить из количества подорванных БК

     

    разницапокритам.jpg

    Скорее всего это действительно так, но этому есть объяснение – в натиске сражения очень близко и часто люди заходят в борта друг другу. Там в принципе и процент пробитий выше.

    Вот график % пожаров (красным) и взрывов бк (синим) по категориям боёв, но я брал только ББ. Пожаров почти в 2 раза большеimage.thumb.png.8503280a6d90cb3ecbd01e50d0dc908a.png

×
×
  • Create New...