Jump to content
Korean Random

Leaderboard


Popular Content

Showing content with the highest reputation since 05/23/2021 in all areas

  1. 16 points
  2. 6 points
  3. 5 points
    Ну пока с восьмеркой сначала надо разобраться. Потом уже и до 9 и 10 надеюсь руки дойдут @Slava7572, 9-ка по быстрому (SD) Cz16_TNH_T_vz51.zip
  4. 5 points
    Ещё один распаковщик с C API https://gitlab.com/xvm/xvm-extensions/xfw.extensionlib/-/tree/master/src_cpp/module_bwxml
  5. 5 points
    В аддон Быстрый выход из боя добавлен параметр: "modifier" - клавиша-модификатор может принимать значения: "none", "shift", "ctrl", "alt".
  6. 4 points
    Обновление 1.3.1 Список изменений: 1. Восстановлена работа функции глубокого анализа каталогов клиента игры за счет получения информации с сервера обновлений WG 2. Внесены правки в интерфейс.
  7. 4 points
    Немного про механику игры, исходя из клиентского кода Разброс в механике игры задается сервером как тангенс половинного угла разброса орудия dispersionAngle. Эту цифру сервер обсчитывает с тиком 0,1 сек и шлет клиенту игры. Вычисляет её он как функцию от динамических характеристик танка, путем применения дополнительных коэффициентов к базовому тангенсу разброса орудия, прописанному в файлах ТТХ для дистанции 100 метров. Все эти коэффициенты и формулу можно посмотреть в коде игры, они дублируют расчеты на сервере чтобы сглаживать движение объектов в клиенте игры. Расчеты в клиенте вынесены в отдельную функцию getOwnVehicleShotDispersionAngle. Ниже её код, а вот тут его разбор в числах, правда он мог немного устареть. def getOwnVehicleShotDispersionAngle(self, turretRotationSpeed, withShot=0): descr = self.__getDetailedVehicleDescriptor() aimingStartTime, aimingStartFactor, multFactor, gunShotDispersionFactorsTurretRotation, chassisShotDispersionFactorsMovement, chassisShotDispersionFactorsRotation, aimingTime = self.__aimingInfo vehicleSpeed, vehicleRSpeed = self.getOwnVehicleSpeeds(True) vehicleMovementFactor = vehicleSpeed * chassisShotDispersionFactorsMovement vehicleMovementFactor *= vehicleMovementFactor vehicleRotationFactor = vehicleRSpeed * chassisShotDispersionFactorsRotation vehicleRotationFactor *= vehicleRotationFactor turretRotationFactor = turretRotationSpeed * gunShotDispersionFactorsTurretRotation turretRotationFactor *= turretRotationFactor if withShot == 0: shotFactor = 0.0 elif withShot == 1: shotFactor = descr.gun.shotDispersionFactors['afterShot'] else: shotFactor = descr.gun.shotDispersionFactors['afterShotInBurst'] shotFactor *= shotFactor idealFactor = vehicleMovementFactor + vehicleRotationFactor + turretRotationFactor + shotFactor additiveFactor = self.__getAdditiveShotDispersionFactor(descr) idealFactor *= additiveFactor ** 2 idealFactor = multFactor * math.sqrt(1.0 + idealFactor) currTime = BigWorld.time() aimingFactor = aimingStartFactor * math.exp((aimingStartTime - currTime) / aimingTime) isGunReloading = self.guiSessionProvider.shared.ammo.isGunReloading() if aimingFactor < idealFactor: aimingFactor = idealFactor self.__aimingInfo[0] = currTime self.__aimingInfo[1] = aimingFactor if abs(idealFactor - multFactor) < 0.001: if not self.__isAimingEnded and not isGunReloading: self.soundNotifications.play('sight_convergence') self.__isAimingEnded = True elif idealFactor / multFactor > 1.1: self.__isAimingEnded = False elif aimingFactor / multFactor > 1.1: self.__isAimingEnded = False return [descr.gun.shotDispersionAngle * aimingFactor, descr.gun.shotDispersionAngle * idealFactor] В механике игры снаряды летят по параболе, параметры которой зависят от дистанции от танка игрока до точки прицеливания. Сервер в игре вычисляет дистанции по прямой, либо от опорной точки модели танка, либо от точки вылета снаряда. При этом снаряд на всех моделях вылетает из точки крепления пушки, она же опорная точка орудия (трассер кстати рисуется из другой точки, из конца орудия - элемент модели _GunFire). Первое юзается в механике маскировки и в засвета, второе в баллистике и прицеливании. Опорная точка пушки вычисляется, например так: startPoint = player.getOwnVehiclePosition() startPoint += player.vehicleTypeDescriptor.hull.turretPositions[0] + player.vehicleTypeDescriptor.turret.gunPosition Дистанция прицеливания вычисляется в той точке, в которую указывает маркер игрока, т.е. в точке пересечения луча из маркера, ортогонального плоскости монитора, с поверхностью игрового мира. В клиенте есть код на её вычисление, поэтому самому считать не надо, а можно брать готовое значение из: markerPos = player.gunRotator.markerInfo[0] Отсюда получается, что дистанция от танка игрока до точки прицеливания в механике стрельбы это всегда: markerDist = startPoint.distTo(markerPos) Тогда радиус круга разброса в точке прицеливания для любого танка это: dispersionRadius = player.gunRotator.dispersionAngle * markerDist В клиенте игры это все есть в коде, который отвечает за отрисовку сведения. Для этого используются следующие функции: 1. Внеклассовая функция расчета баллистических параметров в точке прицеливания getCappedShotTargetInfos def getCappedShotTargetInfos(shotPos, shotVec, gravity, shotDescr, vehicleID, minBounds, maxBounds, collisionStrategy): endPos, direction, collData, usedMaxDistance = BigWorld.wg_getCappedShotTargetInfos(BigWorld.player().spaceID, shotPos, shotVec, gravity, shotDescr.maxDistance, vehicleID, minBounds, maxBounds, collisionStrategy) if collData != 0: collData = EntityCollisionData(*collData) else: collData = None return (endPos, direction, collData, usedMaxDistance) Она обсчитывает траекторию нативно, но как именно она считает можно глянуть под спойлером. В списке выходных параметров direction это вектор попадания снаряда с учетом баллистической траектории. 2. Классовая функция расчета баллистических параметров и разброса в точке прицеливания __getGunMarkerPosition, использующая функцию из п.1 def __getGunMarkerPosition(self, shotPos, shotVec, dispersionAngles): shotDescr = self._avatar.getVehicleDescriptor().shot gravity = Math.Vector3(0.0, -shotDescr.gravity, 0.0) testVehicleID = self.getAttachedVehicleID() collisionStrategy = AimingSystems.CollisionStrategy.COLLIDE_DYNAMIC_AND_STATIC minBounds, maxBounds = BigWorld.player().arena.getSpaceBB() endPos, direction, collData, usedMaxDistance = AimingSystems.getCappedShotTargetInfos(shotPos, shotVec, gravity, shotDescr, testVehicleID, minBounds, maxBounds, collisionStrategy) distance = shotDescr.maxDistance if usedMaxDistance else (endPos - shotPos).length markerDiameter = 2.0 * distance * dispersionAngles[0] idealMarkerDiameter = 2.0 * distance * dispersionAngles[1] replayCtrl = BattleReplay.g_replayCtrl if replayCtrl.isPlaying and replayCtrl.isClientReady: markerDiameter, endPos, direction = replayCtrl.getGunMarkerParams(endPos, direction) return (endPos, direction, markerDiameter, idealMarkerDiameter, collData) Как видим, диаметр круга разброса в точке прицеливания это удвоенное текущее значение тангенса половинного угла разброса орудия танка 2*dispersionAngles[0] помноженное на дистанцию distance = .... (endPos - shotPos).length между опорной точкой орудия shotPos и точкой прицеливания endPos. 3. Далее находим, где используется __getGunMarkerPosition. В функции обновления сведения прицела __updateGunMarker, которая вызывается пока игрок в бою с периодичностью 0,1 сек, что составляет тик сервера: def __updateGunMarker(self, forceRelaxTime=None): if self._avatar.getVehicleAttached() is None: return else: shotPos, shotVec = self.getCurShotPosition() markerPos, markerDir, markerSize, idealMarkerSize, collData = self.__getGunMarkerPosition(shotPos, shotVec, self.__dispersionAngles) replayCtrl = BattleReplay.g_replayCtrl if replayCtrl.isRecording and not replayCtrl.isServerAim: replayCtrl.setGunMarkerParams(markerSize, markerPos, markerDir) if not self.__targetLastShotPoint: self.__lastShotPoint = markerPos replayCtrl = BattleReplay.g_replayCtrl if replayCtrl.isPlaying and replayCtrl.isUpdateGunOnTimeWarp: self._avatar.inputHandler.updateGunMarker(markerPos, markerDir, (markerSize, idealMarkerSize), 0.001, collData) else: relaxTime = self.__ROTATION_TICK_LENGTH if forceRelaxTime is None else forceRelaxTime self._avatar.inputHandler.updateGunMarker(markerPos, markerDir, (markerSize, idealMarkerSize), relaxTime, collData) self.__markerInfo = (markerPos, markerDir, markerSize) if self._avatar.inCharge: self._updateMultiGunCollisionData() return А еще в дублирующей её setShotPosition, которая обеспечивает автовозвышение орудия танка и обновление, упомянутого выше публичного буфера player.gunRotator.markerInfo. 4. Теперь нужно лезть в дебри модулей, отвечающих за управление прицелом и отрисовку сведения через флэшку, именно туда ведет вызов _avatar.inputHandler.updateGunMarker из кода выше. Если опустить подробности то, передача данных идет через объект DataProvider, который по сути является прокладкой для передачи данных в код флэшки прицела. Здесь же стоит отметить, что версии провайдера разные для прицела арты и для остальных прицелов танков. Для прицела арты создается он так: def _makeSPGProvider(): dataProvider = GUI.WGSPGGunMarkerDataProvider(aih_constants.SPG_GUN_MARKER_ELEMENTS_COUNT, aih_constants.SPG_GUN_MARKER_ELEMENTS_RATE) dataProvider.positionMatrixProvider = Math.MatrixAnimation() dataProvider.maxTime = 5.0 dataProvider.serverTickLength = constants.SERVER_TICK_LENGTH dataProvider.sizeScaleRate = aih_constants.SPG_GUN_MARKER_SCALE_RATE dataProvider.sizeConstraint = (aih_constants.SPG_GUN_MARKER_MIN_SIZE, aih_constants.SPG_GUN_MARKER_MAX_SIZE) dataProvider.setRelaxTime(constants.SERVER_TICK_LENGTH) return dataProvider А для всех остальных вот так def _makeDefaultProvider(): dataProvider = GUI.WGGunMarkerDataProvider() dataProvider.positionMatrixProvider = Math.MatrixAnimation() dataProvider.setStartSize(_setupGunMarkerSizeLimits(dataProvider)[0]) return dataProvider Что означают доп.константы у прицела арты, думаю не сложно догадаться, их значения кстати вот такие: GUN_MARKER_MIN_SIZE = 32.0 SPG_GUN_MARKER_ELEMENTS_COUNT = 37 SPG_GUN_MARKER_ELEMENTS_RATE = 10 SPG_GUN_MARKER_MIN_SIZE = 50.0 SPG_GUN_MARKER_MAX_SIZE = 100.0 SPG_GUN_MARKER_SCALE_RATE = 10.0 Обращаем внимание на последний параметр, у сведения арты есть дополнительный коэф. масштаба SPG_GUN_MARKER_SCALE_RATE. Передача данных в провайдер прицела арты выглядит вот так: def update(self, markerType, position, direction, size, relaxTime, collData): super(_SPGGunMarkerController, self).update(markerType, position, direction, size, relaxTime, collData) positionMatrix = Math.Matrix() positionMatrix.setTranslate(position) self._updateMatrixProvider(positionMatrix, relaxTime) self._size = size[0] ################################################# self._update() def _update(self): pos3d, vel3d, gravity3d = self._getCurrentShotInfo() replayCtrl = BattleReplay.g_replayCtrl if replayCtrl.isPlaying and replayCtrl.isClientReady: self.__updateRelaxTime() self._updateDispersionData() self._dataProvider.update(pos3d, vel3d, gravity3d, self._size) def _getCurrentShotInfo(self): gunMat = AimingSystems.getPlayerGunMat(self._gunRotator.turretYaw, self._gunRotator.gunPitch) position = gunMat.translation velocity = gunMat.applyVector(Math.Vector3(0, 0, self._shotSpeed)) return (position, velocity, Math.Vector3(0, -self._shotGravity, 0)) ######################### def _updateDispersionData(self): dispersionAngle = self._gunRotator.dispersionAngle ######################### isServerAim = self._gunMarkerType == _MARKER_TYPE.SERVER replayCtrl = BattleReplay.g_replayCtrl if replayCtrl.isPlaying and replayCtrl.isClientReady: d, s = replayCtrl.getSPGGunMarkerParams() if d != -1.0 and s != -1.0: dispersionAngle = d elif replayCtrl.isRecording: if replayCtrl.isServerAim and isServerAim: replayCtrl.setSPGGunMarkerParams(dispersionAngle, 0.0) elif not isServerAim: replayCtrl.setSPGGunMarkerParams(dispersionAngle, 0.0) self._dataProvider.setupConicDispersion(dispersionAngle) В то время как для остальных танков вот так: def update(self, markerType, pos, direction, sizeVector, relaxTime, collData): super(_DefaultGunMarkerController, self).update(markerType, pos, direction, sizeVector, relaxTime, collData) positionMatrix = Math.Matrix() positionMatrix.setTranslate(pos) self._updateMatrixProvider(positionMatrix, relaxTime) size = sizeVector[0] idealSize = sizeVector[1] replayCtrl = BattleReplay.g_replayCtrl if replayCtrl.isPlaying and replayCtrl.isClientReady: s = replayCtrl.getArcadeGunMarkerSize() if s != -1.0: size = s elif replayCtrl.isRecording: if replayCtrl.isServerAim and self._gunMarkerType == _MARKER_TYPE.SERVER: replayCtrl.setArcadeGunMarkerSize(size) elif self._gunMarkerType == _MARKER_TYPE.CLIENT: replayCtrl.setArcadeGunMarkerSize(size) positionMatrixForScale = self.__checkAndRecalculateIfPositionInExtremeProjection(positionMatrix) worldMatrix = _makeWorldMatrix(positionMatrixForScale) currentSize = _calcScale(worldMatrix, size) * self.__screenRatio idealSize = _calcScale(worldMatrix, idealSize) * self.__screenRatio self.__sizeFilter.update(currentSize, idealSize) self.__curSize = self.__sizeFilter.getSize() if self.__replSwitchTime > 0.0: self.__replSwitchTime -= relaxTime self._dataProvider.updateSize(self.__curSize, 0.0) else: self._dataProvider.updateSize(self.__curSize, relaxTime) Рассмотрим сначала второй код. Для аркадного и снайперского прицелов размер сведения в пикселях вычисляется непосредственно в функции update() и затем отдается провайдеру. Для этого берется диаметр мгновенного значения круга разброса в текущей точке прицеливания size = sizeVector[0], высчитывается его масштаб для экрана игрока через функцию _calcScale и этот масштаб умножается на половину ширины экрана в пикселях self.__screenRatio. Последняя величина находится вот так self.__screenRatio = GUI.screenResolution()[0] * 0.5. Чтобы сведение в игре не было очень маленьким или очень большим, а оно будет таковыми, имеется фильтр self.__sizeFilter, который ограничивает минимально и максимально возможное значение круга сведения. Лимиты, которые задаются в него, вычисляются вот так: def _setupGunMarkerSizeLimits(dataProvider, scale=None): if scale is None: settingsCore = dependency.instance(ISettingsCore) scale = settingsCore.interfaceScale.get() limits = (aih_constants.GUN_MARKER_MIN_SIZE * scale, min(GUI.screenResolution())) dataProvider.sizeConstraint = limits return limits Переходим к арт-прицелу. У арты расчеты в пикселях в функции update() не выполняются, вместо этого данные о точке выстрела, векторах начальной скорости и гравитации и текущем диаметре круга разброса в точке прицеливания - pos3d, vel3d, gravity3d и self._size - передаются прямо в провайдер. А также в него передается текущее значение тангенса угла разброса орудия dispersionAngle. Что со всем этим делает провайдер WGSPGGunMarkerDataProvider сказать трудно, т.к. он нативный. Если глянуть список доступных атрибутов и функций у WGSPGGunMarkerDataProvider, то там можно увидеть: *** enableSmoothFiltering *** getPointsInside *** maxTime *** positionMatrixProvider *** relaxTime *** reset *** serverTickLength *** setRelaxTime *** setStartSize *** setupConicDispersion *** setupFlatRadialDispersion *** sizeConstraint *** sizeScaleRate *** update *** updateSize Функция setupFlatRadialDispersion тоже встречается в коде клиента игры. Это код, который отвечает за отрисовку новой игровой фичи - подсветки на игровом поле места, куда стреляет или будет стрелять арта. Код класса можно глянуть тут. В качестве аргумента в функцию передается игровая константа areaRadius.
  8. 4 points
  9. 4 points
    Адаптированная для 2.92 версия. tank_viewer_alpha.7z
  10. 4 points
    Добавил в шапку аддон: Показать/скрыть чат в бою
  11. 3 points
    1.16.1 – – XVM (config 19.05.22).zip ---
  12. 3 points
    WOT Mods Cleaner Версия: 1.3.2 Дата обновления: 08/11/2021 Описание: Программа предназначена для поиска и удаления модификаций, установленных в клиенте игры WorldOfTanks. Она позволяет найти все сторонние файлы, подключенные к клиенту и удалить их в автоматическом режиме, предварительно сделав бэкап в случае необходимости. Функционал программы включает в себя: Поиск файлов в "mods" и "res_mods" папках клиента (Internal mods) Анализ и восстановление файла "paths.xml", определение сторонних ссылок на файлы и папки в нём (External mods and files) Расширенный поиск посторонних файлов в каталоге "WorldOfTanks\res" путем загрузки и анализа данных с сервера обновлений WG (External mods and files) Удаление файлов и папок по расширенному списку, загружаемому с репо: https://github.com/StranikS-Scan/WMCleaner-ExtendedList Очистка кэша игры в каталоге "Wargaming.net\WorldOfTanks\" (Cache-folder) Поиск и удаление временных файлов (Log, Bak-files) Поиск и удаление скриншотов (Screenshots-files) Поиск и удаление реплеев (Wotreplay-files) Создание zip-архива с бэкапом Через программу можно скачать напрямую с сервера обновлений WG: Установщик клиента игры для RU, EU, NA и ASIA регионов Программу WGCheck для RU, EU, NA и ASIA регионов Для работы с программой достаточно положить exe-файл программы в корень клиента игры (папка "WorldOfTanks\"), после чего запустить его. Программа автоматически проанализирует клиент игры и выдаст список файлов и модов, которые можно удалить. Удаляете их, закрываете программу, всё готово. Также для упрощения задания искомой папки вы можете просто перенести мышкой в запущенную программу любой файл из корневого каталога игры. Программа сама по нему определит правильный путь.... Особенности: ОС Windows Vista/7/8/10/11 Локализация RUS/ENG Программа тестировалась на совместимость с игровым и тестовым (СТ) клиентами игры Глубокий анализ файлов клиента игры со 100% выявлением всех запускаемых модов (External mods and files) доступен только при загрузке программой актуальных данных с сервера обновлений WG Загрузка данных с сервера обновлений WG производится для версии клиента игры, указанной в файле game_info.xml. Если версия клиента отличается от той, что на сервере игры, то программа предлагает пользователю выбор - можно либо продолжить на свой страх и риск, либо отказаться от углубленного анализа файлов. Если вы соглашаетесь, то после анализа необходимо тщательно проверить, что программой добавила в перечень удаляемых файлов Программа не очищает полностью весь каталог клиента игры от посторонних файлов, она ориентирована в первую очередь на обнаружение и удаление тех файлов и модификаций, которые загружаются или могут быть загружены клиентом игры и тем самым влиять на его работу и работоспособность Чтобы программный сканер или сама программа по какой-либо причине или ошибке не удалила каталог с игрой в коде программы реализована защита от такого удаления. Скачать: WMCleaner_1.3.2_231.zip | VirusTotal: 0/67 | Старые версии тут Аргументы командной строки для запуска в консольном режиме с параметрами Примеры запуска в консольном режиме с параметрами История версий:
  13. 3 points
    19.08.21 Обновлена сборка модов: * Обновлено для версии игрового клиента v1.14.0.1 * Обновлён мод "Комплексный мод XVM" до версии v8.8.2-dev (0020)
  14. 3 points
    обновлено под новый патч
  15. 3 points
    Вне зависимости от версии, все механики реализуются на сервере. На клиенте лишь визуальное отображение. Всё, что отправляет клиент, проверяется на сервере так же.
  16. 3 points
    Тут ввели новый экспериментальный режим Разведка боем Стоит ли на нём заморачиваться (адаптировать скрипты аддонов) либо нужно отключить? имхо: режим по типу "стандартного" и думаю стоит адаптировать
  17. 3 points
    Пользуюсь инструментом командной строки https://github.com/hedger/BWXML (соответственно, исходники открыты) "BWXML A tool for unpacking BigWorld compressed data sections to plain XML. Also supports packing XML back to its compressed form." BWXML v1.04 by hedger Usage: bwxml.exe [options] list_of_files_or_directories Allowed options: --help produce help message --pack pack files instead of unpacking --verbose print information about each file --selftest perform reversed operation on produced files --threads arg (=9) sets the size of a worker pool. Default = n_cpu_cores + 1 --input arg input files/directories --output arg (=decrypted/) directory to output files пример использования (распаковка ресурса engine_config.xml в произвольную папку vanilla): md vanilla 2>nul bwxml.exe --i %wot_folder%\res\engine_config.xml --o vanilla
  18. 3 points
    Раздача для Steam Раздача продлится до 30 мая 2021-го (20:00 МСК). Little Nightmares Вам необходимо: Открыть клиент Steam. Перейти на страницу игры в магазине. Нажать кнопку "Добавить на аккаунт". Теперь игра навсегда останется на вашем аккаунте.
  19. 2 points
    'Функционал мода' Загрузка: mod_battle_observer загружать файлик BattleObserver_1.**.*_WOT_*.*.*.zip DISCORD 'Прочти если собираешься использовать в модпаке или делать репост.' На всякое разное - DonationAlerts Так же ссылка на - Patreon
  20. 2 points
    Данная модификация входит в состав XVM и добавляет следующие py_macro: {{py:xvm.totalDamage(norm)}} - если norm не задан, то возвращает общий нанесенный урон игроком, иначе нормализует значение относительно общего суммарного HP противников; {{py:xvm.totalAssist(norm)}} - если norm не задан, то возвращает общий урон нанесенный с помощью игрока, иначе нормализует значение относительно общего суммарного HP противников; {{py:xvm.totalBlocked}} - общий заблокированный урон игроком; {{py:xvm.damageReceived}} - общий полученный урон игроком; {{py:xvm.totalDamagesBlocked}} - сумма {{py:xvm.totalDamage}} и {{py:xvm.totalBlocked}} {{py:xvm.totalDamagesAssist}} - сумма {{py:xvm.totalDamage}} и {{py:xvm.totalAssist}} {{py:xvm.totalDamagesBlockedAssist}} - сумма {{py:xvm.totalDamage}}, {{py:xvm.totalAssist}} и {{py:xvm.totalBlocked} {{py:xvm.totalDamagesBlockedReceived}} - сумма {{py:xvm.totalDamage}}, {{py:xvm.totalBlocked}} и {{py:xvm.damageReceived}} {{py:xvm.totalBlockedReceived}} - сумма {{py:xvm.totalBlocked}} и {{py:xvm.damageReceived}} {{py:xvm.damagesSquad(norm)}} - если norm не задан, то возвращает нанесенный урон взводом (урон нанесенный игроком не учитывается), иначе нормализует значение относительно общего суммарного HP противников; {{py:xvm.totalDamagesSquad(norm)}} - если norm не задан, то возвращает общий нанесенный урон взводом, иначе нормализует значение относительно общего суммарного HP противников; {{py:xvm.detection}} - количество обнаруженных противников (работает только если в игре включено событие "Обнаружен противник" ); {{py:xvm.frags}} - количество фрагов; {{py:xvm.assistTrack}} - урон нанесенный технике, обездвиженной игроком (сбитие гусеницы); {{py:xvm.assistSpot}} - урон нанесенный по засвету игрока; {{py:xvm.crits}} - количество нанесенных критических попаданий; {{py:xvm.numberHitsBlocked}} - количество заблокированных попаданий; {{py:xvm.numberHitsDealt}} - количество выстрелов с уроном; {{py:xvm.dmg}} - последний нанесенный урон; {{py:xvm.numberShotsDealt}} - количество произведенных выстрелов; {{py:xvm.numberShotsReceived}} - общее количество полученных попаданий; {{py:xvm.numberHitsReceived}} - количество полученных попаданий с уроном; {{py:xvm.numberDamagesDealt}} - количество нанесенных повреждений; {{py:xvm.numberHits}} - количество попаданий; {{py:xvm.fragsSquad}} - количество фрагов взвода (фраги игрока не учитываются); {{py:xvm.totalFragsSquad}} - общее количество фрагов взвода; {{py:xvm.isPlayerInSquad}} - возвращает 'sq' если игрок во взводе, иначе - пусто, {{py:xvm.totalStun}} - общий урон, нанесенный по оглушенной вами технике, {{py:xvm.isStuns}} - возвращает 'st' если техника игрока может оглушать, иначе - пусто, {{py:xvm.numberStuns}} - общее количество нанесенных оглушений, {{py:xvm.numberDamagedVehicles}} - количество поврежденной техники, {{py:xvm.totalDamageColor}} - динамический цвет по общему нанесённому урону, {{py:xvm.hitAlly}} - возвращает 'hitAlly', если было хотя бы одно попадание по союзнику, иначе - пусто {{py:xvm.dmgAlly}} - возвращает 'dmgAlly', если был нанесен хотя бы один раз урон союзнику, иначе - пусто {{py:xvm.numberAssistSpot}} - количество попаданий по технике по вашему засвету {{py:xvm.numberAssistTrack}} - количество попаданий по технике со сбитой вами гусеницой {{py:xvm.numberAssistStun}} - количество попаданий по оглушенной вами технике {{py:xvm.numberAssistAndStuns}} - сумма {{py:xvm.numberAssistSpot}}, {{py:xvm.numberAssistTrack}} и {{py:xvm.numberAssistStun}} {{py:xvm.totalAssistAndStuns}} - сумма {{py:xvm.totalAssist}} и {{py:xvm.totalStun}} {{py:xvm.dmgKindColor}} - цвет по виду последнего нанесенного урона (цвет задается в файле color.xc в секции "dmg_kind". {{py:xvm.toAvgDmg(norm)}} - если norm не задан, то возвращает урон, который необходимо нанести для достижения среднего урона на текущей технике, иначе нормализует значение относительно среднего урона на текущей технике. Не работает на реплеях, работает только в случайных боях. {{py:xvm.toMainGun(norm)}} - если norm не задан, то возвращает урон, который необходимо нанести для получения медали "Основной калибр", иначе нормализует значение относительно изначально необходимого урона для медали. Не учитывает попадания по союзникам и урон других игроков. {{py:xvm.avgDmg}} - средний урон на текущей технике. Не работает на реплеях, работает только в случайных боях. ' Пример использования'
  21. 2 points
    1. Файлы предназначены для отключения зеркальности кастомных иконок техники размером 80х24 пикселя. *. Иконки техники данного размера создаются программой TankIconMaker 2. Страница поддержки для желающих отблагодарить 3. При публикации файлов на сторонних источниках указывайте авторство Превью Отключение зеркальности для элементов в бою: ◉ окно загрузки боя; ◉ окно по нажатию Tab; ◉ панели команд (уши). Без удаления элементов: ◉ mvi_battle.zip С удалением уровня техники: ◉ mvi_battle_clear.zip Отключение зеркальности для элементов в ангаре: ◉ окно тренировочной комнаты; ◉ всплывающая подсказка при наведении на экипаж. Без удаления элементов: ◉ mvi_hangar.zip С удалением уровня техники: ◉ mvi_hangar_clear.zip С удалением уровня и названия техники: ◉ mvi_hangar_clear-all.zip Иконки техники: ◉ внешний вид иконок представлен на скриншоте выше в сообщении (под спойлером). Атлас с иконками техники: ◉ vehicle_icons.zip
  22. 2 points
    Обновлено для клиента версии: v.1.14.0.1 #930
  23. 2 points
    Вечер добрый. Обновил. В доп.панель ассистлога (num 5) добавил криты.
  24. 2 points
    English documentation is attached to this post. Всем привет, Меня зовут Антон, я работаю в WG и занимаюсь модами и смежными штуками. В следующей версии танков мы реализовали новую фичу для облегчения инсталяции/деинсталяции модов - пэкеджи пакеты модов. По предложениям трудящихся переименовали в пакеты. К посту я приаттачил доку с описанием текущей реализации. Важный момент: все это work in progress, и то, что в следующей версии эта фича появится в танках, не означает, что мы остановим ее разработку. Мы хотим и будем доделывать и переделывать какие-то вещи согласно вашим пожеланиям, поэтому считайте это только первой итерацией разработки. В ближайших нескольких версиях танков будет работать гибридное подключение модов - и через пакеты, и по старинке через res_mods/. В будущем в силу ряда причин мы бы хотели отойти от способа установки модов через res_mods/; тем не менее мы не будем этого делать, пока коммьюнити мододелов не скажет, что пакеты ок и вы готовы перейти на них полностью. Поэтому нам очень важно получать от вас отзывы и предложения по улучшению системы, чтобы мы могли учитывать их в будущих версиях. Миша завел гуглодоку, за актуальными хотелками можно следить там: https://docs.google.com/document/d/1-IIs7gEUbOb82ZfEeJhdC8LyF64EU_sXzOnMp2nahuE/edit?usp=sharing update 12.10.17 Прикрепил обновленную русскую доку (v0.5) packages_doc_0.5_ru.pdf. Отдельное большое спасибо Mixaill за работу над документом. В 9.20.1 починили ряд багов: Неполная регистронезависимость имён в VFS Некорректная загрузка локаций из пакетов Невозможность загрузки Gettext-файлов из VFS Английскую версию сейчас допереводим, приаттачу, как только будет готова Updated the document to v0.5. packages_doc_0.5_en.pdf
  25. 2 points
    Очень жаль, если шкурки умрут. Хорошие и глаза не мозолят во время игры. Очень надеюсь, что передумаете.
  26. 2 points
    После входа в игру, буквально через минуту "Связь с сервером потеряна". python.rar xvm.rar configs.rar
  27. 2 points
    Таких выстрелов по всей бд 4%, из них 2.3% с дистанции < 50м, и 0.6% с дистанции < 10м, выстрелы полетевшие вне круга исключены из аналитических графиков. Причин их появления может быть 5 Не совсем корректная формула расчёта точки попадания, сейчас круг параллелен плоскости монитора в снайперском прицеле, а надо немного не так Пулемётные танки, когда на одно нажатие ЛКМ вылетает более 1 снаряда, причём первый летит правильно, а остальные хрен знает как, и прицел можно отвести, и сидение может поменяться Рассинхрон между сервером и клиентом, сейчас я записываю трассер снаряда и току в которую человек целился в момент нажатия ЛКМ, если мод записал снаряд непонятно куда, значит человек на клиенте увидел, что он летит непонятно куда, и как говорил Панков "Это нормально" (когда играл часто замечал, что такое случается при стрельбе в упор, круг сведения не совпадает с местом куда смотрит пушка, и не совпадает с тем, куда попадает выстрел) Выстрелы со старой версии мода на серверном прицеле (был баг с его записью, из за этого распределение арты отличается от верного, тк большинство боёв на арте сделано на старой версии) Неверная отрисовка трассера, в новой версии буду считать по точке попадания Забыл добавить, обновил. https://github.com/SoprachevAK/wot-stat
  28. 2 points
    11.08.21 Обновлена сборка модов: * Обновлено для версии игрового клиента v1.14.0.0 * Обновлён мод "Комплексный мод XVM" до версии v8.8.2-dev (0011)
  29. 2 points
    11.08.21 Обновлен конфиг: * Адаптация под последнюю версию мода Дополнения: * Обновлено дополнение "Иконки техники" ◉ Изменения в коде с версии: 8.8.1 >> 8.8.2
  30. 2 points
    Итак, 1.14 (залью, как смогу пропихнуть архивы через интернет на море). AsyncModLoader: Исправлен чёрный экран при выходе обновлений клиента. Как выяснилось, ВГ ожидают, что на момент показа видео LobbyApp ещё не инициализировался. КамоСелектор: Исправлены невидимые танки в Ангаре Учебного Полигона при включенных случайных камуфляжах. Исправлен появившийся в 1.14 краш игры. Шкуродёр: Исправлен отвал всего при перезаходе в бой с белыми трупами. PYmodsCore: Исправлен слетающий уровень прогрессионного стиля при перезагрузке танка в предпросмотре стиля. Добавлен атрибут LOG, чтобы вместо print g_config.ID + ': stuff' можно было писать print g_config.LOG, 'stuff'. Ремодомод: Ремод на Т34 от Хеллингера больше не крашит клиент. Модуль отображения коллижн-моделей в Ангаре вынесен в отдельный мод. Который все равно не работает, потому как сломался ещё в 1.0.0. Башня на ремодах больше не уезжает в корпус при просмотре машины в Ангаре. Формат конфигов изменён на .xml. Теперь можно создавать ремоды для Ремодомода, просто копируя нужные секции из xml-скрипта (меню создания ремода находит и вытаскивает нужные секции автоматически). Старые конфиги будут автоматически сконвертированы в новый формат при первом запуске игры. Добавлена полная обработка трёхмерных стилей. Раньше Ремодомод не обрабатывал прикрепляемые элементы, такие, как флаг на Кантемировце. Вычищен флуд ошибками в лог при использовании настроечного меню. Путем исправления ошибок, естественно.
  31. 2 points
    Итак, 1.14 (залью, как смогу пропихнуть архивы через интернет на море). КамоСелектор: Исправлены невидимые танки в Ангаре Учебного Полигона при включенных случайных камуфляжах. Исправлен появившийся в 1.14 краш игры. PYmodsCore: Исправлен слетающий уровень прогрессионного стиля при перезагрузке танка в предпросмотре стиля. Добавлен атрибут LOG, чтобы вместо print g_config.ID + ': stuff' можно было писать print g_config.LOG, 'stuff'.
  32. 2 points
    Обновил скрипт reloading.py в шапке.
  33. 2 points
  34. 2 points
  35. 2 points
    @ЧАЙНИК, закинь это (тоже на такую хрень с менеджером аккаунтов попал, спасибо Андрюхе Экспойнту , выручил): nsMsgCover.wotmod
  36. 2 points
    Искренне удивляюсь, что находятся люди, которые все ещё не понимают, что нужно удалить в моде, чтобы определенная его часть перестала работать...
  37. 2 points
  38. 2 points
    У ВГ на апи-сервере в integrity_check сломалась (или убрали) объединялку запросов в одну строку. Починю сегодня.
  39. 2 points
    Как вам такой расклад, товарищи?
  40. 2 points
    playersPanel.xc заменить true на false в строках 259, 388, 515, 639 // true - убрать отображение иконки статуса засвета противника. "removeSpottedIndicator": false, чем редактировать https://notepad-plus-plus.org/
  41. 2 points
    Добавил в аддон Макросы для "ушей", маркеров и миникарты макрос: {{py:isHardening('{{name}}')}} - возвращает 'hardening' для техники с установленным оборудованием 'Улучшенная закалка', иначе пусто.
  42. 2 points
    UE 1.12.1 works on WOT 1.13, no need of update.
  43. 2 points
    Раздача для Epic Games Store Раздача продлится с 08 до 15 июля 2021-го (18:00 МСК). Bridge Constructor: The Walking Dead Вам необходимо: Зайти на сайт. Зарегистрироваться / Войти. Добавить игру на аккаунт на странице акции. После этого продукт навсегда привязывается к учетной записи. Установить его можно будет при помощи фирменного лаунчера Epic Games. Раздача для Epic Games Store Раздача продлится с 08 до 15 июля 2021-го (18:00 МСК). Ironcast Вам необходимо: Зайти на сайт. Зарегистрироваться / Войти. Добавить игру на аккаунт на странице акции. После этого продукт навсегда привязывается к учетной записи. Установить его можно будет при помощи фирменного лаунчера Epic Games.
  44. 2 points
    Support XVM on patreon and get auto-renewal. Easy.
  45. 2 points
  46. 2 points
    автовозврат оборудования-снаряжения-камуфляжей в моде не работает. По этому что бы отключить всё остальное надо не ставить мод ! В моде мало что работает. Ждём автора, чтоб он исправил ситуацию.
  47. 2 points
    https://pastebin.com/88fuWNRi вот сделай такой конфиг на pastebin (оригинал в исходниках: versions.json) впиши ссылку в raw формате в этот файл mod_modPackInformer.xml <serverMain> http://pastebin.com/raw/88fuWNRi </serverMain> положи получившийся файл в /res_mods/1.12.1.2/scripts/client/gui/mods/mod_modPackInformer.xml далее открой архив mods_modPackInformer.zip распакуй в папку /mods/1.12.1.2/spoter.modPackInformer_1.01.wotmod в итоге у тебя должно получится так: серверный конфиг в интернете, проще всего на https://pastebin.com, его правишь когда хочешь сообщить игрокам о новой версии. в клиенте игры будут два файла: /res_mods/1.12.1.2/scripts/client/gui/mods/mod_modPackInformer.xml и /mods/1.12.1.2/spoter.modPackInformer_1.01.wotmod потребуется выпустить новую версию: правишь серверный конфиг а игрокам в своём модпаке уже выдаёшь поправленные например для 1.13.0 файлы с такими путями: /res_mods/1.13.0.0/scripts/client/gui/mods/mod_modPackInformer.xml /mods/1.13.0.0/spoter.modPackInformer_1.01.wotmod dixi.
  48. 2 points
    Entry point for WZ QL: https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/1.13/source/res/scripts/item_defs/vehicles/china/Ch41_WZ_111_QL.xml Interesting place (maybe): <effects> shot_ch41 </effects> Maybe the answer is here? res\packages\particles.pkg\particles\Tank\shots\shot_ch41.effbin
  49. 2 points
    Нужно проверить. Скопировать скрипт hideBattleChat.py в папку py_macro. В файл hotkeys.xc добавить: "hideBattleChat": { "enabled": true, "keyCode": 35} "keyCode": 35 - это клавиша h
  50. 2 points
    Добавил в шапку аддон: Быстрый выход из боя.
×
×
  • Create New...