Jump to content
Korean Random

StranikS_Scan

Premium Member
  • Posts

    7,843
  • Joined

  • Last visited

  • Days Won

    257

Everything posted by StranikS_Scan

  1. Нет никакого смысла во всем этом. Просто получишь дрожащие башню и прицел. Играть с ними очень не комфортно и сильно утомляет. А практической пользы нет никакой, т.к. чтобы разница между прицелами на сервере и на клиенте была минимальна, достаточно единственного правила - сводиться перед выстрелом в любых ситуациях. И всё. Базовое правило №1 этой игры. Все остальное от лукавого. Там в моде еще куча всякой фигни, от которой он скорее всего и помер. Не хочу разбираться, извини.
  2. Там такое дело ... клиентское сведение вообще не синхронизируется с серверным. Есть такой мод у Пети - Стволик хаоса. Он хукает функцию синхронизации клиентского прицела с серверным прицелом PlayerAvatar.updateGunMarker(), берет углы поворота башни от сервера и принудительно прописывает их клиентской башне. Он еще всякое делает, но это другое и не важно. Я почему про него пишу. Решил в том месяце тоже себе запилить мод чтобы синхронизировать и башню с орудием и клиентский прицел. Посмотреть будет ли круто или нет. С первым всё понятно, а вот со вторым оказалось интересно. Если покопаться в функции setShotPosition(), которую вызывает updateGunMarker(), то можно увидеть вот такое место: def setShotPosition(self, vehicleID, shotPos, shotVec, dispersionAngle, forceValueRefresh=False): ....... self.__dispersionAngles[0] = dispersionAngle ....... if self.__clientMode and self.__showServerMarker: self._avatar.inputHandler.updateServerGunMarker(mPos, mDir, (mSize, mIdealSize), SERVER_TICK_LENGTH, collData) if not self.__clientMode or forceValueRefresh: self.__lastShotPoint = mPos self._avatar.inputHandler.updateClientGunMarker(mPos, mDir, (mSize, mIdealSize), SERVER_TICK_LENGTH, collData) ....... Я его видел 100500 раз за 10 лет, но до меня только в этот раз дошло, что никакой обратной синхронизации между серверным и клиентском прицелом нет. В коде выше два флага forceValueRefresh и self.__clientMode. Первый всегда False, т.к. updateGunMarker() его не использует. Второй __clientMode по умолчанию всегда True, т.к. он определяет кто управляет прицелом - игрок или серверный аим. Когда игрок управляет сам, флаг включен и получается, что функция синхронизации updateClientGunMarker() не вызывается. Обратной связи - нет. Если включить обратную связь принудительно, по аналогии, как это сделал Петя, то клиентский прицел будет вести себя как клиентский серверный прицел, который включается в настройках игры и у которого выше свой флаг активации __showServerMarker и своя функция обратной синхронизации updateServerGunMarker(). Таким образом, игровая модель не предполагает коррекцию клиентского прицела игрока по серверным координатам. Однако, как видим в коде выше - текущей угол разброса синхронизуется постоянно без каких либо условий. Что касается мода, то если принудительно запилить вызов updateClientGunMarker(), то играть не возможно, прицел становится дерганным, запаздывающим и начинает тупо раздражать. Потому я отказался от него. Игрокам это не зайдет.
  3. Ну логично, у арты из-за большой дистанции серверное и клиентское в динамике сильнее не совпадает.
  4. А смысл в нем тогда какой? Он же ничего давать не будет в плане попаданий.
  5. Не, такого не может быть. Баллистика изначально была создано такой как она есть. И те кто её создал отлично разбираются в том, что они делают. Ты скорее всего приводишь слова говорящих голов от ВГ, которые всякую чушь несли в массы в виде "ответов разработчиков". Скорее всего Коню забыли гравитацию поправить, когда скорость поменяли. А эти вещатели придумали очередную историю. Этого не помню.
  6. Потратил всё утро и пришел к выводу, что гравитацию крутят чтобы корректировать высоту траектории. В игре время полета снарядов обратно зависит от начальной скорости, а вот все траектории пологие, не зависимо от скорости, прямых-линейных, а также гаубичных траекторий в игре нет. А после Петиной Мортиры над картой еще и купол сделали чтобы желающих клюв задирать к нему больше не было. В игре реализована модель: L = (Lx^2 + Ly^2)^0.5 V = (Vx^2 + Vy^2)^0.5, где Lx = Vx*t + 0.5*Gx*t^2 Ly = Vy*t + 0.5*Gy*t^2, где Gx = 0 Gy = g0 < 0 В этой модели, если зафиксировать координаты точки прилета и соответственно задаться Lx = Lx0 и Ly = Ly0, а также модулем скорости V0 и временем t0, то увеличение модуля V0 в k-раз приведет к равенствам: L0 = (Lx0^2 + Ly0^2)^0.5 V0*k = ((Vx0*k)^2 + (Vy0*k)^2)^0.5, где Lx0 = Vx0*k*t + 0.5*Gx*t^2 Ly0 = Vy0*k*t + 0.5*Gy*t^2, где Gx = 0 Gy = g0 < 0 Это означает, что снижение времени полёта снаряда будет определяться из решения вот такой системы: Vx0*t0 + 0.5*Gx*t0^2 = Vx0*k*t + 0.5*Gx*t^2 Vy0*t0 + 0.5*Gy*t0^2 = Vy0*k*t + 0.5*Gy*t^2 Решать не будем, ограничимся ниже только анализом формул, которые из него следуют. Если принять, что точка выстрела и точка попадания лежат на одной горизонтали, то тогда Ly0 = 0. Отсюда получаем выражение для времени полета снаряда t = -2*Vy0*k/Gy = t0/k. При этом зависимость расстояния Lx от времени, с учетом, что Gx = 0, принимает вид Lx = Vx0*k*t и если t = t0/k, то выполняется исходное равенство Lx = Lx0. Следовательно, увеличивая модуль начальной скорости мы уменьшаем время полета, сохраняя при этом дистанцию до точки прицеливания. Как изменится время, если кроме скорости корректировать еще и гравитацию, по принципу Gy = Gy0*k^2. В этом случае получим точно такой же результат со временем полета снаряда, только он будет более простой в вычислениях: Lx0 = Vx0*k*t + 0.5*Gx0*k^2*t^2 = Vx0*k*t0/k + 0.5*Gx0*k^2*(t0/k)^2 Ly0 = Vy0*k*t + 0.5*Gy0*k^2*t^2 = Vy0*k*t0/k + 0.5*Gy0*k^2*(t0/k)^2 и соответственно, новое время полета снаряда это t = t0/k. А теперь возникает вопрос, а что еще меняется кроме времени? Очевидно, что дистанция тут не меняется, т.к. выше она не зависит от гравитации. Меняется максимальная высота подъема снаряда. Она определяется выражением: Lymax = Vy^2 / (2*Gy) При увеличении модуля скорости Vy0*k, получаем увеличение высота траектории Lymax0*k^2. Если при этом увеличим гравитацию Gy0*k^2, то эффект пропадет и высота траектории останется такой же. -------------------------------------------------- Выводы: 1. Увеличение в игре только лишь скорости снаряда танка приводит к снижению времени полета, а также к увеличению высоты траектории полета. 2. Коррекция гравитации при увеличении скорости снаряда нужна для того чтобы менялось только время полета, а высота траектории не менялась. 3. В игре за счет использования заниженных и завышенных значений гравитации (относительно 9,81 м/с^2) добиваются пологих траекторий у всех танков. 4. Базовая коррекция скорости и гравитации на 0.8 и 0.64 в клиенте игры сделана для принудительного увеличения времени отрисовки трассеров на 25%. В файлах ттх танков и очевидно при расчете попаданий на сервере - снаряды летят быстрее, чем трассеры в клиенте игры. Это еще одна из причин почему в игре сначала игрок видит результат попадания, а потом трассер. 5. Как следует из функции getVehicleShotSpeedByFactors новый навык заряжающего "Идеальная зарядка" в реальности работает не на увеличение скорости снарядов, как дается в описании, а на уменьшение времени полета снаряда, т.к. его действие приводит к сокращению времени, при сохранении исходных траекторий и высот полета. Если вкаченный перк дает 1.1 к скорости и 1.21 к гравитации, то время уменьшается в 0.909 раза. И это надо учитывать в модах.
  7. Скорость снаряда это свойство перка номер 404. И его просто переименовали, было shotDemaskFactor стало shellVelocity, при том же значении 0.001, которое никак не вяжется с формулой getVehicleShotSpeedByFactors. Так что это не то. Параметр gunShotsSpeed должен быть в районе единицы, а не 0.001. Я вообще думаю, что мы не туда копаем. Скорее всего с патча 1.26 учитывается влияние препятствий на траекторию или параметры трассера. Вот и получаем кучу рандомных гравитаций.
  8. Нет. Перк 404 раньше имел вот такие параметры: <perk> <id> 404 </id> <defaultBlockSettings> <arg> <argId> shotDemaskFactor </argId> <value> 0.001 </value> </arg> <arg> <argId> foliageMaskingFactor </argId> <value> 0.0002 </value> </arg> </defaultBlockSettings> </perk> и 0.001 это демаскирующий фактор
  9. Вообще поглядел. Раньше был только один корректор projectileSpeedFactor, который всегда по умолчанию равен 0.8 в клиенте игры и применяется к скорости и гравитации с сохранением траектории для снижения времени полёта и отрисовки снаряда: velocity / 0.8 и gravity / 0.8**2. А два месяца назад в патче 1.26.0.0 добавили еще и второй корректор gunShotsSpeed: def getVehicleShotSpeedByFactors(factors, speed, gravity=1.0): projectileSpeedFactor = vehicles.g_cache.commonConfig['miscParams']['projectileSpeedFactor'] newProjectileSpeedFactor = projectileSpeedFactor * factors.get('gunShotsSpeed', 1.0) speed = speed / projectileSpeedFactor * newProjectileSpeedFactor gravity = gravity / projectileSpeedFactor ** 2 * newProjectileSpeedFactor ** 2 return (speed, gravity) И судя по коду, параметры на него умножаются: velocity * gunShotsSpeed и gravity / gunShotsSpeed**2. Фактор в исходниках называется так 'gun/shots/speed'. Однако к какому перку он привязан не понятно. Так что гравитация в трассере может и меняться, однако я думаю, что меняется и модуль начального velocity значения тоже у трассеров.
  10. У тебя версии игры по ссылкам разные. Это как бы не то. От версии к версии ттх снарядов меняют.
  11. 1 млн рублей. И деньги вперед. Утром деньги, вечером мод. Вечером деньги, утром мод.
  12. А я еще удивился, захожу на Т-29 моды проверить в бой против ботов. И бац - в ангар с подрывом БК. Еще думаю прям какая-то странная ситуация.
  13. Надо проверять по пути, что это Леста и, если да, то помеcтить путь в Result и делать Break. Типа так: function WOT_GetClientsCount(): Integer; external 'WOT_GetClientsCount@files:findwot.dll cdecl'; function WOT_GetClientBranch(ClientIndex: Integer): Integer; external 'WOT_GetClientBranch@files:findwot.dll cdecl'; procedure WOT_GetClientPathW(Buffer: String; BufferSize: Integer; ClientIndex: Integer); external 'WOT_GetClientPathW@files:findwot.dll cdecl'; function Get_Wot_Dir(Param: String): String; var ClientsCount, Index: Integer; FoundDir: String; begin Result:=ExpandConstant('{sd}\Games\World_of_Tanks'); SetLength(FoundDir, 1024); ClientsCount:=WOT_GetClientsCount(); if ClientsCount > 0 then begin for Index:=0 to ClientsCount-1 do begin if WOT_GetClientBranch(Index) = 1 then begin WOT_GetClientPathW(FoundDir, Length(FoundDir)-1, Index); FoundDir:=ExpandConstant(FoundDir); if FileExists(FoundDir+'\lgc_api.exe')) then begin Result:=FoundDir; Break; end; end; end; end; end; Может не сработать, т.к. я не помню, что там правильно писать в Inno, в сравнении с Delphi.
  14. Все есть в первом посте темы. Никаких наборов нет. Вот по этой ссылке можно скачать файл ExtendedList.json и положить его рядом с exe-файлом программы. Такое тоже прокатит.
  15. Как видишь выше у меня всё находит. Скорее всего у тебя на компе программа не может скачать этот список с репозитария. Потому и не находит и не удаляет. Причины могут быть разные. Может ее что-то блокирует, может провайдер не дает доступ к гитхабу, а может банально стоит старая win7 какая-нибудь кривая и потому программа не может в тырнет выйти.
  16. У вас проблемы или с игрой или с доступом к файлам игры или с антивирусом или еще чего. Потому и не работает. Или еще как вариант - из-за старой винды программа не может выйти в интернет и падает.
  17. Куда интереснее вопрос - чего ты там принял вунутрь, что комментируешь пост 2018 года?
  18. На тесте 1.26.1.0 добавился тэг "twinGun". Не могу сообразить, что он означает? Разобрался: "clip" - барабан или магазин (у мелких танков) с полной перезагрузкой. Например B-C 25 T: vehicleType.gun.clip --> (5, 2.727272727272727) пять снарядов с перезарядкой между ними в 2.73 сек vehicleType.gun.reloadTime --> 40.0 время перезарядки всего барабана "clip", "autoreload" - барабан с автоматической дозагрузкой, чем меньше снарядов в барабане осталось тем дольше будет дозагрузка и наоборот. Например Progetto 65: vehicleType.gun.autoreload --> Autoreload(reloadTime=(10.0, 12.0, 14.0, 16.0), boostStartTime=0.0, boostResidueTime=0.0, boostFraction=1.0) четыре снаряда в барабане, время загрузки одного при условии, что три уже загружены, составляет 10 сек, а если отсутствуют все четыре, то это уже 16 сек. vehicleType.gun.reloadTime --> 15.3999996185 время загрузки первого снаряда в пустой барабан "dualGun" - спаренные два орудия с последовательной перезарядкой и стрельбой по-македонски с возможностью залпа при удержании левой клавиши. При залпе снаряды летят в одну точку. Например СТ-II: vehicleType.gun.dualGun --> DualGun(chargeTime=2.5, shootImpulse=200, reloadLockTime=3.0, reloadTimes=(11.2, 11.2), rateTime=4.0, chargeThreshold=0.5, afterShotDelay=1.0, preChargeIndication=0.25, chargeCancelTime=0.2) здесь время перезарядки одного орудия составляет 11.2 сек, а время подготовки залпа 2.5 сек vehicleType.gun.reloadTime --> 11.1999998093 время перезарядки одного орудия "twinGun" - спаренные два орудия с двумя переключаемыми режимами стрельбы: одиночный с принудительным ожиданием перезарядки орудия (убран профит от стрельбы по-македонски) и стрельба залпами с полной перезарядкой обоих орудий. При залпе снаряды летят рядом друг с другом, а не в одну точку, вместо круга разброса - эллипс. Например FV226 Contradictious: vehicleType.gun.twinGun --> TwinGun(afterShotDelay=1.0, gunMarkerOffset=0.0, shootImpulse=0, twinGunReloadTime=22.0) время перезарядки в режиме стрельбы залпами 22 сек vehicleType.gun.reloadTime --> 11.0 время перезарядки одного орудия "clip", "autoShoot" - многоствольная установка с большой кассетой или лентой. Например Vz. 71 Tesak: vehicleType.gun.clip --> (75, 0.05) семьдесят пять снарядов в кассете с перезарядкой между ними в 0.05 сек vehicleType.gun.reloadTime --> 15.0 время перезарядки кассеты vehicleType.gun.shotDispersionAngle --> 0.00399997872648 м базовый разброс vehicleType.gun.shotDispersionFactors --> {'whileGunDamaged': 2.0, 'turretRotation': 3.437746693945311, 'afterShotInBurst': 3.5, 'afterShot': 3.5} множители vehicleType.gun.autoShoot --> AutoShoot(shotDispersionPerSec=1.25, maxShotDispersion=10.0, groupSize=1) индивидуальный алгоритм увеличения разброса в процессе стрельбы "dualAccuracy" - орудие с изменяющимся разбросом из-за его нагрева в момент выстрела. Например Type 63 c орудием _105mm_JSW_105_60: vehicleType.gun.reloadTime --> 10.7 время перезарядки орудия vehicleType.gun.shotDispersionAngle --> 0.3 м базовый разброс vehicleType.gun.shotDispersionFactors --> {'whileGunDamaged': 2.0, 'turretRotation': 0.05, 'afterShotInBurst': 4.0, 'afterShot': 4.0} в момент выстрела базовый разброс увеличится в 4 раза до 1.2 м, а затем снизится до 0.38 м (см. ниже) vehicleType.gun.dualAccuracy --> DualAccuracy(afterShotDispersionAngle=0.38, coolingDelay=14.0) после выстрела в течение 14 сек будет повышенный разброс 0.38 м, а затем он вернется к базовому 0.3 м
  19. Сами собирают, как и графики опыта до мастера на главной странице сайте http://tankireplays.lesta.ru/
×
×
  • Create New...