Jump to content
Korean Random

StranikS_Scan

Premium Member
  • Content Count

    7,763
  • Joined

  • Last visited

  • Days Won

    234

Everything posted by StranikS_Scan

  1. Там только физика моделей кэшируется и сами модели, иначе тормозить будет при засвете. Какие-то "скелеты" там прописывали разрабы и внедряли с патчами, их кэширует система, но это всё связано только с визуальной частью с моделями. Там целая куча эвентов, посмотри может какие-то тебе и нужны для дела.
  2. Это есть, уведомления же приходят во время игры и уши меняются, когда противник умирает. Их цепляют на эвенты арены: BigWorld.player().arena.onVehicleKilled += self.__onArenaVehicleKilled
  3. Погоди, ты типа думал, что если танк не в засвете, то сервер типа пришлет тебе какую-то инфу по изменению его состояния? Нет, конечно. Игра защищена от этого. Сервер присылает инфу только по условию механики игры. Пока танк не засветился, ты не узнаешь в каком он состоянии. Исключение - это смерть игрока-противника.
  4. Все работает, ищите причину в вашем коде.
  5. Это как я понимаю не просто код, а комбинация кодов критов через X or Y. И максимальный номер там пока 2^24 согласно исходнику VEHICLE_HIT_FLAGS. Это значит, что размер типа должен быть 2^32 = 4 294 967 296 это long int. Ну и по факту это не crits а flags. А какие в нем криты, это надо перебором проверять, как тут это делается.
  6. А в чем нечестность? Нечестно, это когда распределение должно быть симметричным по определению механики игры, а выходит - несимметричным.
  7. Ну есть режимы такие в игре - Генеральное сражение, например, можно начать бой на одном танке, а закончить на другом. Возможно косяк был в определении типа боя. Дык и остальными танками такая же беда. Просто не ярко выраженная, но на статистику она влияет. У ЛТ например хп в 1,5-2 раза меньше чем у ТТ на десятых уровнях.
  8. Не могло так получиться, что из-за обновлений игры поменялись какие-то ID у разработчиков, а у тебя все данные в кучу без учета версий игры. Дык тут не только дело в арте, у нас урон дискретный и хп игроков как и их количество в бою тоже дискретное. Отсюда получаем не перекос - а реальный факт того, с чем игрок сталкивается.
  9. Там же всё на событиях. Потому каждый плагин сам хранит инфу. Миникарта, например, цепляется на фидбэк и получает данные через него. Маркеры аналогично поступают - тыц и тыц.
  10. Это ты зря их побуждаешь ))) Сейчас свидетели вот этой хни, набегут.
  11. Сам переводи слова, для этого у тебя есть Google translate. Не рассказывай сказки. У 99,9% игроков, имеющих фиолетовый WN8 на аккаунте, процент побед тоже - фиолетового цвета! Это всё что нужно знать о рейтингах и победах.
  12. Нет. Рейтинг WN8 показывает способность игрока выигрывать бои. Поэтому учитываются только те факторы, которые однозначно и напрямую коррелируют с процентом побед. Всё остальное не учитывается и значения не имеет.
  13. Вышло обновление программы 2.2.2 1. Добавлено автоматическое сокращение длинных путей при их выводе в консольном окне 2. Файл MCTGui.exe переименован в MCTCreator2Gui.exe 3. Внесены правки в интерфейс GUI-версии мода
  14. Нет. Есть же еще модули. Взрыв БК например, потому нечестно добитых больше.
  15. Как вручную скрыть/поменять названия серверов, алгоритм для чайника: 1. Скачиваем и устанавливаем прогу для редактирования двоичных файлов. Например HxD, она бесплатная и очень простая. 2. Находим в каталоге игры файл c:\Games\World_of_Tanks\res\scripts_config.xml, после чего закидываем его в окно этой проги: 3. Вызываем окно поиска, используя комбинацию клавиш CTRL+F, после чего в окне вбиваем заглавными буквами в строку поиска RU и ставим ниже галочку "С учетом регистра" и жмём кнопку ОК. 4. Программа находит первую запись вида RU1RU1 - это и есть названия первого сервера, которые отображаются в игре: короткое название RU1 и длинное название RU1. Вот эти названия и нужно затереть или поменять буквы в них. Можно например заменить "1" на пробел " ". Для этого в правой части окна выделяем мышкой единицу и жмем пробел и программа заменить символ. Обратите внимание: ничего удалять бэкспейсом и вставлять в файл нельзя, только заменять! 5. Далее жмем клавишу F3 чтобы продолжить поиск имён серверов. Попадаем к следующей записи RU2RU2 и с ней делаем тоже самое, заменяем вручную двойки на пробелы. И так продолжаем поиск до конца файла. 6. В конца остается только сохранить результат и закрыть программу. Бэкап оригинального файла scripts_config.xml.bak программа сделает сама. При запуске игры, будет вот такой результат: ЗЫ: Но это вам не поможет, т.к. в ангаре отображается число игроков на сервере и по нему легко определить на каком вы сервере.
  16. И как же вы поняли, что кто-то ботов вам запускает?
  17. @SoprachevAK Можно построить огибающие кривые разброса без экспериментов, а по аналитическим формулам. Ведь используется Гауссовское распределение, а не черный ящик.
  18. Если почитать описание того, как работает балансировщик, например в вики было раньше написано, то можно выделить такой аспект - балансировщик формирование команды начинает с выбора топ танков (он, кстати, использует шаблоны), а затем просматривает очередь ожидающих на всю глубину, ища в ней тех, кто подходит по уровню боя и закрывает оставшиеся очки, т.к. команды формируются по сумме очков техники. Отсюда приходим к простом выводу - если при нажатии кнопки "В бой!" тебя сразу же куда-то забрасывает - то скорее всего ты тот самый, кого балансировщик добросил в команду. И ты точно не топ. А если игра заставляет тебя сидеть в очереди, то скорее всего ты выше середины в команде или даже в топе, а балансировщик не может найти тех, кем добить очки команды до полного числа или до приемлемой разницы очков между командами. Но это не всегда так, ибо танки в очереди не всегда представлены всеми типами и часто бывает, что балансировщику реально сложно сформировать команды по шаблонам и тогда время затягивается и он начинает ослаблять критерии выбора. Например, такое можно легко наблюдать на тестах, где игроки массово выбирают какую-нибудь новую имбу, чтобы её затестить.
  19. Заходишь на сайт. А по умолчанию графики не показывает. Нужно тыкать. Тебе нужно ввести разделение статистики по версии игры. Потому что в каждом новом патче игра по сути новая. И это кстати существенно снизить нагрузку на БД. Ибо все данные в кучу - это средний винегрет на Луне в вакууме. И еще вдогонку - нужно от обобщенных статистик, которые один раз посмотрел и все на этом, переходить к динамическим статистикам. Нужно выводить и смотреть динамику, что и как происходит с игроками/танками/.... в разрезе боёв, дней, недель, месяцев, патчей игры. Это кстати имеет хоть какую-то практическую пользу. Например можно в клиенте игры в ангаре например выводить инфу, на каком танке например сегодня или сейчас лучше выйти в бой. ----------------------------------------------- Ниже исправленная и отредактированная версия текстов для страницы, а то читать местами сложно и не сразу понятно. Расширенное распределение урона Выберите один вид урона Учитываются выстрелы ББ, БП и КС снарядами по танкам с ХП, превышающим максимальный урон снаряда Описание График расширенного распределения строится исключительно для одного вида урона, поскольку в игре урон принимает только целочисленные значения. Округление урона до целых значений приводит к тому, что при одном и том же разбросе получаются разные графики относительного распределения при разных видах урона. Например, для базового урона в 11 единиц граничные значения 11 - 25% = 8.25 => 8 (минимальное значение в игре) 11 + 25% = 13.75 => 14 (максимальное значение в игре) Это значит, что урон может принять любое значение из дискретного ряда [8, 9, 10, 11, 12, 13, 14], или же [-3, -2, -1, 0, +1, +2, +3] относительно базового урона. Если выполнить нормализацию значений относительно базового урона, то получим ряд [-27%, -18%, -9%, 0%, +9%, +18%, +27%], в котором всего 4 промежуточных значения -18%, -9%, +9%, +18%, а крайние значения -27%, +27% выходят за рамки исходного разброса в 25%. Слияние такого дискретного ряда с графиком, построенным для другого вида урона, например 390, приведет к возникновению аномальных пиков и провалов, что естественно для дискретных случайных величин, но совершенно не характерно для величин с непрерывным распределением. Поэтому для каждого вида урона строится индивидуальный график распределения вероятностей. Граничные значения График распределения строится из центра, таким образом, чтобы базовый урон располагался строго по центру. По этой причине, на графике возможно только нечетное число значений урона в каждом из его столбиков. Из-за особенностей округления крайних значений иногда наблюдаются некратные интервалы. В таких случаях, крайний левый и крайний правый столбики графика могут содержать разное число значений урона. Если вы хотите оценить минимальный и максимальный урон, то выбирайте шаг графика равный 1. Например, для базового урона в 390 единиц при 7 значениях на столбик 390 - 25% => 293 (минимальное значение в игре) 390 + 25% => 488 (максимальное значение в игре) Следовательно, на графике, слева от базового урона будет 390-293=97 возможных значений, а справа 488-390=98, в сумме же будет всего 196 значений. Построить симметричный график относительного базового урона в этом случае невозможно, поэтому на графике центральный столбик будет состоять из 7 значений [387, 388, 389, 390, 391, 392, 393], крайний левый столбик из 3 значений [293, 294, 295], а крайний правый из 4 значений [485, 486, 487, 488]. Пример для урона в 360 единиц 360 - 25% => 270 360 + 25% => 450 Диапазон возможных значений урона [270; 450] и состоит из 181 значения, 90 из которых находится слева от среднего, а еще 90 справа от него, что позволяет построить зеркально симметричный график с шагом в 1 значение на каждый столбик. При распределении урона по столбикам с шагом в 5 значений, получается 17+1+17=35 центральных столбиков по 5 значений в каждом и два крайних столбика по 3 значения в каждом. В этом случае график сохраняет симметрию относительно центральной оси. При этом следует учитывать, что крайние столбики могут содержать меньше значений, чем остальные. Расчет погрешности Погрешность графика распределения зависит от: базового урона BASE_DMG (разная величина ошибки округления) количества выстрелов N с уроном (влияет на достоверность распределения) числа уронов M на столбик (меняется форма дискретного графика) Для определения погрешности искусственно генерируется серия из X «экспериментов» распределения при фиксированных значениях указанных выше параметров, и с их помощью определяется возможный диапазон отклонения значений для исходного графика. Алгоритм расчета погрешности: 1. Первоначально с помощью стандартного генератора псевдослучайных чисел math.random() в JavaScript генерируется N вещественных значений в диапазоне от 0 до 1, включительно. 2. Сгенерированный ряд преобразуется в танковое распределение урона подобное Гауссовскому распределению с диапазоном значений от -1 до +1, включительно. С помощью сплайн интерполяции по 100 значений к функции численно обратной функции распределения урона (CDF) для канонического нормального распределения с коэффициентами a = 0.02399886787, b = -0.006796346129, c = 0.4711312389 в формуле a*exp(-((x-b)/c)^2) 3. Результирующий ряд умножается на 0.25, к каждому значению ряда прибавляется 1, и это все умножается на базовый урон BASE_DMG, после чего итоговые значения ряда округляются до ближайших целых чисел. DMG = round((invCDF(RND) * 0.25 + 1) * BASE_DMG) - формула для расчета урона 4. Значения, полученного ряда, размещаются по столбикам из расчета M значений урона на столбик. 5. Алгоритм выше повторяется X раз, где X - количество «экспериментов», необходимых для расчета погрешности (параметр задается пользователем до начала расчета). 6. По завершении расчетов значения уронов в каждом столбике сортируются по возрастанию, образуя статистические интервалы, которые и определяют возможную погрешность исходного распределения. Доверительный интервал Зная погрешность графика распределения урона, можно построить доверительный интервал с указанием уровня доверия P. Интервал отображается на графике в виде двух огибающих линий, обозначающих нижнюю и верхнюю границы доверительного интервала, между которыми находится P% «экспериментов» из X симуляций. Карточки инфографики Средний урон Арифметическое среднее всех уронов в базе данных (сумма делить на количество) Медианный урон Значение урона, разделяющее все значения на две равные части. Если количество значений четное, медиана представляет собой среднее арифметическое двух центральных значений. Это означает, что половина значений урона меньше медианы, а другая половина — больше. Выстрелов с уроном ниже среднего Рассчитывается как процент выстрелов с уроном ниже среднего по сравнению с выстрелами с уроном выше среднего. Выстрелы с базовым уроном не учитываются. В идеальном распределении этот показатель должен составлять 50%.
  20. Вышло обновление программы 2.2.1 1. Добавлен ключ --sevenzip-dll-file, позволяющий указать путь к пользовательскому файлу 7z.dll при консольном вызове (может быть актуально для модпаков и их установщиков) 2. Добавлен ключ --log-name, позволяющий указать путь и пользовательское имя для файла лога 3. При возникновении проблем доступа к файлам игры или при появлении ошибок записи обработанных файлов на диск, программа будет пытаться несколько раз повторить обработку проблемных файлов. Сообщение об ошибке будет выдаваться только, когда все попытки окажутся безуспешными 4. Добавлена проверка наличия свободного места на диске перед созданием модов 5. Внесены правки и улучшения в интерфейс GUI-версии мода. Добавлена опция параллельного запуска нескольких копий программы для ускорения создания модов (включена по умолчанию)
  21. Глупости не пиши и не будут тебя дурачком называть.
  22. Нельзя. Пайтон в игре не поддерживает эту функцию и у него нет нужных для этого модулей.
  23. Когда появится бесплатный искусственный интеллект, то тогда он сможет автоматически вам обновлять мод, каждый раз как выходит новый патч. А до тех пор это делают люди, конкретно - разработчики XVM. Так что как когда могут, тогда и обновляют. Такие дела.
  24. Никак. Миникарта это скомпилированная флэшка с фиксированным функционалом. Из питона можно только вызывать те маркеры, вызов которых предусмотрен во флэшке. Потому тут либо флэшку надо модифицировать, либо к неё что-то приинжектить. Я во флэшках не разбираюсь, потому подробностей не расскажу. Обратись к протанкам, если их заинтересует твой мод может и с флэшкой помогут. В 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 Однозначно забанят, если твой мод будет в реальном времени показывать игроку куда ему ехать и что ему делать, исходя из текущей обстановки в игре. И скорее всего не забанят, если твой мод будет в начале боя загружать и показывать статически некие рекомендации игроку, основанные на анализе ранее собранных данных. На первых порах можно просто сделать рабочий колхоз, путем вызова стандартных маркеров. Вот есть два красивых маркера, это зеленая лампочка и оранжевый треугольник : Код вот такой: 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)
×
×
  • Create New...