Jump to content
Korean Random

StranikS_Scan

Premium Member
  • Content Count

    7,769
  • Joined

  • Last visited

  • Days Won

    236

Posts posted by StranikS_Scan


  1. 5 часов назад, SoprachevAK сказал:

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

     

    Через маркеры не знаю, не пользовался. А отдельным классом можно добавить гибкий круг на земле. См.

     

    from vehicle_systems.components.terrain_circle_component import TerrainCircleComponent
    from dyn_objects_cache import _TerrainCircleSettings

     

     

    • Upvote 1

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

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

     

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


  3. 5 часов назад, SoprachevAK сказал:

    В топографии

     

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

     

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

    там есть ещё много разных интересных маркеров, например NAVIGATION_MARKER и SHOOTING_MARKER,

     

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

     

    У миникарты константы - вот. От ALLY_TEAM_BASE до FLAG_POINT_MARKER. Что из этого в рандоме сработает надо проверять вручную. И надо искать примеры вызова в исходниках чтоб было понятно какие аргументы передавать.

     

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

     

    import BigWorld
    from gui.shared.personality import ServicesLocator
    from gui.Scaleform.locale.INGAME_GUI import INGAME_GUI
    from frameworks.wulf import WindowLayer
    from helpers import i18n
    from Math import Vector3, createTranslationMatrix
    
    #Менеджер маркеров в бою
    battle = ServicesLocator.appLoader.getDefBattleApp()
    __markersManager = battle.containerManager.getContainer(WindowLayer.VIEW).getView()._external[1]
    
    markerPos = (0,0,0) #<--- координаты точки на игровом поле на уровне земли
    markerCurrentDistance = BigWorld.player().getOwnVehiclePosition().distTo(markerPos)
    MERKERS_ONWORLDMAP_TYPE = 'arrow' #Зеленая стрелка, еще вариант 'eye' - глаз
    MARKER_ONWORLDMAP_SCALE = 0.4 #Масштаб маркера
    MARKER_ONWORLDMAP_OFFSET = Vector3(0.0, 6.0, 0.0) #Смещение маркера относительно markerPos: +6 метров над землей
    
    #Создать маркер
    __canvas = __markersManager._MarkersManager__canvas
    if __canvas:
        matrixProv = createTranslationMatrix(markerPos + MARKER_ONWORLDMAP_OFFSET)
        __marker = __canvas.addMarker(matrixProv, 'StaticObjectMarker', True)
        #Предельные диапазоны где-то от 10 до 100, масштаб по умолчанию
        __canvas.markerSetMinScale(__marker, 100 * MARKER_ONWORLDMAP_SCALE)
        __canvas.markerInvoke(__marker, ('init', [MERKERS_ONWORLDMAP_TYPE, 50, 720, markerCurrentDistance, i18n.makeString(INGAME_GUI.MARKER_METERS), 'green']))
    
    #Обновить цифры дистанции
    __canvas.markerInvoke(__marker, ('setDistance', [BigWorld.player().getOwnVehiclePosition().distTo(markerPos)]))
    
    #Удалить маркер
    __canvas.delMarker(__marker)

    В самой игре есть разные готовые классы, которые делают тоже самое - тыц.

    • Upvote 1

  4. 14 минут назад, SoprachevAK сказал:

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

     

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


  5. 1 минуту назад, SoprachevAK сказал:

    Ну тут технически то его никак не защитить, в конечном то итоге всё равно с клиента данные идут

    Там вообще был предусмотрен механизм обфускации трафика, чтоб пришлось хотя бы в моде разбираться, но судя по тому, что на сервере я деобфускатор не писал, обфускатор я включить забыл

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

    Но вообще в ближайшее время придётся разбираться для платных тепловых карт на миникарте 

     

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

     

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


  6. 7 минут назад, SoprachevAK сказал:

    А про инстанс Vehicle, я думал, что он кеширует в себе инфу на время боя. Как будто бы нет смысла каждый засвет аллоцировать память с нуля, так ещё и потом каждая подсистема кеширует одну и туже информацию локально

     

    Там только физика моделей кэшируется и сами модели, иначе тормозить будет при засвете. Какие-то "скелеты" там прописывали разрабы и внедряли с патчами, их кэширует система, но это всё связано только с визуальной частью с моделями.

    2 минуты назад, SoprachevAK сказал:

    Ирония в том, что прямо в момент сообщения я нашел в коде именно эту строчку) 
    Но всё равно спасибо большое! Пойду пробовать

     

    Там целая куча эвентов, посмотри может какие-то тебе и нужны для дела.


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

    Я имел ввиду событие Dead когда противник умирает за кругом отрисовки. Его тоже нет в фидбеке

     

    Это есть, уведомления же приходят во время игры и уши меняются, когда противник умирает. Их цепляют на эвенты арены:

    BigWorld.player().arena.onVehicleKilled += self.__onArenaVehicleKilled


  8. 38 минут назад, SoprachevAK сказал:

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

     

    Погоди, ты типа думал, что если танк не в засвете, то сервер типа пришлет тебе какую-то инфу по изменению его состояния? Нет, конечно. Игра защищена от этого. Сервер присылает инфу только по условию механики игры. Пока танк не засветился, ты не узнаешь в каком он состоянии. Исключение - это смерть игрока-противника.


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

    results.flags - это код крита?

    Если да, то по-моему там больше значений должно быть, а не 216

    По крайней мере в 2018 году

    (Файл с расшифровкой не нашёл)

     

    Это как я понимаю не просто код, а комбинация кодов критов через X or Y. И максимальный номер там пока 2^24 согласно исходнику VEHICLE_HIT_FLAGS. Это значит, что размер типа должен быть 2^32 = 4 294 967 296 это long int. Ну и по факту это не crits а flags. А какие в нем криты, это надо перебором проверять, как тут это делается.

    • Upvote 1

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

    Не понимаю почему взрыв БК и дожог пожаром не должны входить в "нечестно добитых"

    Это даже ещё более "нечестно", чем урон выше среднего

     

    А в чем нечестность? Нечестно, это когда распределение должно быть симметричным по определению механики игры, а выходит - несимметричным. 


  11. 58 минут назад, SoprachevAK сказал:

    Не не, там прикол в том, что одно и тоже событие которое прямо ушло с мода имеет один танк, а прикреплённый к нему результат боя имеет другой танк, в обычном рандоме
    То есть как то перемешались внутри сессии клиента результаты боёв, которые я беру строго по arenaID. Но таких случаев 10 на 5 миллионов, так что можно сделать вид, что их нет

     

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

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

    Там был прямо вот такой перекос)

     

    Дык и остальными танками такая же беда. Просто не ярко выраженная, но на статистику она влияет. У ЛТ например хп в 1,5-2 раза меньше чем у ТТ на десятых уровнях.

     

    image.thumb.png.1a25837823fc090d96268609089d87a1.png


  12. 9 часов назад, SoprachevAK сказал:

    Так ещё и разные игроки, на разных серверах, в разных регионах
    Вообще не представляю как так вышло, может баг внутри игры с получением результатов
    Потому что я беру результат по arenaID, который, насколько я понимаю, уникальный на всю игру

    Но ситуация забавная)

     

    Не могло так получиться, что из-за обновлений игры поменялись какие-то ID у разработчиков, а у тебя все данные в кучу без учета версий игры.

    3 часа назад, SoprachevAK сказал:

    Сейчас нечестно добитых всегда будет больше, потому что противников с ХП > 1.0 альфы встречается чаще чем с ХП < 1.0 альфы. А это связано с наличием арты, которая респится с 450-490 хп 

     

    Дык тут не только дело в арте, у нас урон дискретный и хп игроков как и их количество в бою тоже дискретное. Отсюда получаем не перекос - а реальный факт того, с чем игрок сталкивается. 


  13. 8 часов назад, SoprachevAK сказал:

    Насколько я помню, инстанс класса Vehicle существует только когда танк виден и известен игроку

     

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

    • Upvote 1

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

    If you genuinely believe you can devise a rating better than WN8, then go ahead and publish concrete formulas and data, not your biased fantasies. If it truly is better, it will be adopted.

     

    Это ты зря их побуждаешь ))) Сейчас свидетели вот этой хни, набегут.


  15. 1 час назад, isbj0rnen сказал:

     

    1. It isn't a lack of information from WoT. All information is there for use and implementation.

    2. Whether it's a bad idea or not? If you are making a game with multiple aspects, such as light-, medium, heavy tanks and arty... . then this score should reflect all aspects of the different tank types. Spotting from light tanks etc etc. As it is now: If you want to boost this score, you play lower Tier or hide in the backline and shoot what comes up. Then you will get good wn8.

     

    But it doesn't say anything about whether you are a good tank player or not. It reflects damage and kills, and a scoring system should not just reflect that, but more.

    Please write in English when a forum post is written in English. Everyone can use Google translate.

     

    No. It's narrow-minded if you think it reflects everything. You can easily have a good WN8 without winning matches. Your Win-Ratio tells you whether you are winning or not. But it depends on the players you are on a team with.

    I have often seen people with high wn8 and high WR get slaughtered by a tighter "worse wn8 team". If all players hide and don't dare to challenge the opposing team... they usually loses.

     

    Сам переводи слова, для этого у тебя есть Google translate.

     

    Не рассказывай сказки. У 99,9% игроков, имеющих фиолетовый WN8 на аккаунте, процент побед тоже - фиолетового цвета! Это всё что нужно знать о рейтингах и победах.


  16. 20 часов назад, isbj0rnen сказал:

    Wn8 should reflect what people give in their battles, not how good you are to hide on redline and making damage/kill the enemy team.

     

    Нет. Рейтинг WN8 показывает способность игрока выигрывать бои. Поэтому учитываются только те факторы, которые однозначно и напрямую коррелируют с процентом побед. Всё остальное не учитывается и значения не имеет.


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

     

    1. Добавлено автоматическое сокращение длинных путей при их выводе в консольном окне
    2. Файл MCTGui.exe переименован в MCTCreator2Gui.exe
    3. Внесены правки в интерфейс GUI-версии мода

    • Upvote 7

  18. Как вручную скрыть/поменять названия серверов, алгоритм для чайника:

     

    1. Скачиваем и устанавливаем прогу для редактирования двоичных файлов. Например HxD, она бесплатная и очень простая.

     

    image.png.5d5893e1e94832c9499f90c9d892579f.png

     

    2. Находим в каталоге игры файл c:\Games\World_of_Tanks\res\scripts_config.xml, после чего закидываем его в окно этой проги:

     

    image.thumb.png.c77055ae97ae680b26939329e17dddc0.png

     

    3. Вызываем окно поиска, используя комбинацию клавиш CTRL+F, после чего в окне вбиваем заглавными буквами в строку поиска RU и ставим ниже галочку "С учетом регистра" и жмём кнопку ОК.

     

    image.png.7ef5cabcaf5ad0e9b30f5ec23c650dc8.png

     

    image.png.89f66ae4a2672b723ff5541ee6268c3b.png

     

    4. Программа находит первую запись вида RU1RU1 - это и есть названия первого сервера, которые отображаются в игре: короткое название RU1 и длинное название RU1. Вот эти названия и нужно затереть или поменять буквы в них. Можно например заменить "1" на пробел " ". Для этого в правой части окна выделяем мышкой единицу и жмем пробел и программа заменить символ. Обратите внимание: ничего удалять бэкспейсом и вставлять в файл нельзя, только заменять!

     

    image.png.dd4103d76a03d02a85d3edde18067d10.png

     

    image.png.762489605f89fd3b7343aeacfca2fa48.png

     

    image.png.01e7f2a4f87ea52eebbb622c1e3d450f.png

     

    image.png.f78c78658dd924b592cf7d8e8973eb27.png

     

    5. Далее жмем клавишу F3 чтобы продолжить поиск имён серверов. Попадаем к следующей записи RU2RU2 и с ней делаем тоже самое, заменяем вручную двойки на пробелы. И так продолжаем поиск до конца файла.

     

    image.png.58cf6c16c390e749bfa82d730c424bff.png

     

    6. В конца остается только сохранить результат и закрыть программу. Бэкап оригинального файла scripts_config.xml.bak программа сделает сама. При запуске игры, будет вот такой результат:

     

    image.png.dc0f8c6ab299ca289791dc742bd4450f.png

     

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

     


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

    Если расчёт идёт на сервере, то это лишняя нагрузка (и время)

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

    т.е. до 1к пусть считает, а дальше для 1,5к, 2,2к, 3,3к, 4,7к, 6,8к, 10к, 15к...

    Ну или округлить до более ровных значений 1,5/2,0/3,5/5,0/7,0/10/15

    И рисовать ближайшие

    погреш1.jpg

     

    @SoprachevAK  Можно построить огибающие кривые разброса без экспериментов, а по аналитическим формулам. Ведь используется Гауссовское распределение, а не черный ящик.


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

    То есть когда кидает мгновенно, то в среднем, в бою будут танки на 0.9 уровня выше твоего. А если ждёшь хотя бы 30 секунд, то будут уже на 0.5 уровня выше твоего

     

    Если почитать описание того, как работает балансировщик, например в вики было раньше написано, то можно выделить такой аспект - балансировщик формирование команды начинает с выбора топ танков (он, кстати, использует шаблоны), а затем просматривает очередь ожидающих на всю глубину, ища в ней тех, кто подходит по уровню боя и закрывает оставшиеся очки, т.к. команды формируются по сумме очков техники. Отсюда приходим к простом выводу - если при нажатии кнопки "В бой!" тебя сразу же куда-то забрасывает - то скорее всего ты тот самый, кого балансировщик добросил в команду. И ты точно не топ. А если игра заставляет тебя сидеть в очереди, то скорее всего ты выше середины в команде или даже в топе, а балансировщик не может найти тех, кем добить очки команды до полного числа или до приемлемой разницы очков между командами.

     

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

    • Upvote 1
×
×
  • Create New...