Micrurus

1.173.1.46 Сбитие самолета при промахе

Я был на И185.  Bf.109F-4 стрелял мимо, но попал и оторвал крыло.

Серверный повтор.

И другой ракурс. Повтор из моего клиента.

Пинг в пределах 60, потерь пакетов не было.

Замечал такое частенько. Но думал может противник в последний момент довернул и сбил. Тут решил посмотреть повтор и удивился.

#2017.11.03 23.15.37.wrpl#2017.11.03 23.15.37.wrpl

 

Как мне прикрепить лог если он весит 50МБ, а можно только 1МБ?

  • Лайк 3
  • Вверх 3
medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Опять это произошло, точно так же.

2017_11_21_21_13_43__5776.clog

#2017.11.21 22.22.26.wrpl

Вот на сервер повторов https://warthunder.ru/ru/tournament/replay/type/260471882260188992

Потерь пакетов не было пинг в районе 60

Объясните хотя бы, как это происходит.

Почему молчите?

Или дайте и мне такую способность.

И так я не умею толком летать в РБ, так еще и подстава такая происходит.

  • Лайк 1
  • Вверх 2
medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Потому это тяжело назвать багом.. Это сделано, чтоб игроки с плохим интернетом могли играть, а не только страдать :)

todace (Опубликовано: )

Это далеко неверное представление о сетевой модели синхронизации - см. ниже
medal medal medal medal medal medal medal medal medal medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Конечно же, это совершенно неверное представление о сетевом коде и модели синхронизации.

Все решает сервер, клиент никаким образом не может сообщить серверу что он попал - вообще нет такого типа пакета. Все что приходит от клиента к серверу это ТОЛЬКО _управление_!

 

Если у игрока хороший пинг, то он скорее попадет по другому, чем тот, у кого пинг плохой.


Однако, 1) все игроки видят не реальный мир, а предсказанный мир. Так как реальный мир - он на сервере, а все что видят игроки - на полпинга (_их_ полпинга) отличается от сервера, т.е они видят _прошлое_. Вернее, не совсем прошлое, а из прошлого (из реального, серверного прошлого ) полученное предсказанное-гипотетическое настоящее (не обязательно реальное - ведь другие игроки - тоже играют, управляют своей техникой).
Потому стрельба по мишени - это стрельба по предсказанному положению. В quake3 если у тебя плохой пинг - надо стрелять "на упреждение", т.е. подумать, где на самом деле находится мишень тогда, когда твой пакет "я стреляю" дойдет до сервера (а это зависит от твоего пинга). Так как в quake видишь ты положение мишени В ПРОШЛОМ, а когда твое управление дойдет до сервера - еще время пройдет. В quake пули летят мгновенно, потому вся разница это в положении юнитов. В нашей игре - нет. Однако наша игра услужливо предсказывает за тебя, где же находится игрок в настоящее время. И кстати где ты САМ находишься в настоящее время - тоже предсказывает, так как ТВОЙ клиент знает лишь где ты сам находился и куда смотрел когда сервер отправлял тебе пакет, но за то время которое пакет летел до тебя - могло произойти много событий (например тебе выбили гусеницу или элерон, и ты никак не можешь это знать, а значит неправильно представляешь, где находишься)
В итоге в нашей игре - чем лучше твой пинг, тем лучше ты попадаешь. ВСЕГДА. Нет никакой поблажки игрокам с плохим пингом.
В отличие от модели лагокомпенсации в CS или BF или Overwatch, где игрок видит ЗАПИСЬ положения других игроков (реального настоящего знать нельзя, а вот прошлое - можно). И соответственно чем хуже твой пинг, тем тебе лучше - потому что в этих играх ты видишь запись того, как играли другие игроки, а значит они никак не могут реагировать на твои действия - в BF3-4 допустимый пинг - больше секунды, что значит когда игрок с таким пингом врывается в комнату, то остальные игроки, с хорошим пингом, не увидят его еще полсекунды, и он будет играть в натуральный тир целых полсекунды. В CS допустимый пинг по умолчанию емнип 300 мс - что значит что на 60 фпс у игрока с пингом 300мс есть два-три кадра (не так мало) чтобы выстрелить по противникам которые его даже не видят И ГАРАНТИРОВАННО ПОПАСТЬ. Именно поэтому в CS как правило игры разрешают играть не более 250-300мс пинга по умолчанию
Однако, в нашей игре, чтобы могли играть люди с расстоянием до сервера больше длинны кадра (т.е с пингом больше 10мс - а это почти все игроки на свете), для игроков рассчитывается положение их юнита в их времени. Сервер получив пакет с управлением ("я нажал кнопку направо", отправлен пакет 150мс назад) смотрит, где ты реально был 150мс назад, применяет твое управление, и сообщает тебе в ответ где же ты на самом деле стал. На клиенте ты давно уже оптимистично предполагаешь что ты таки да, нажал кнопку и повернул. А всем другим клиентам сообщает "игрок такойто на самом деле 150мс назад повернул". Если за это время в него никто не попал - то как бы версия реальности о том где он был (НО НЕ ДРУГИЕ ИГРОКИ!) корректируется, и становится такой, как у него. Для других игроков это может выглядеть как дергание - в большинстве случаев весьма небольшое, так как физические тела весьма инерционны. При этом, если ты "попал" (на сервер) в того кто еще не прислал свое управление - то это у него дернется его танк\самолет.
. Если твой пинг превышает некий барьер, то управление начинает "тормозить" (а потом выкинет из игры)

Предвосхищая вопросы какая модель лучше - у всех есть свои преимущества - в модели синхронизации CS ты почти всегда, если попал на клиенте, то попал на сервере, что конечно приятно, но зато играть проще тому, у кого пинг хуже - а ухудшить себе пинг может каждый. Кроме того, в CS и большинстве названных шутеров, большинство снарядов попадают МГНОВЕННО - что значит что если ты выстрелил, то на клиенте ты сразу увидел, попал или нет - и сильно неприятнее узнать, чуть позже что на самом деле не попал. В физическом смысле при расстояниях уровня CS (максимальная длинна уровня - 100м, большинство выстрелов производятся с расстояния меньше 30м) - разницы между мгновенным и реальном - очень немного. В WT даже если у всех 0пинг, то как правило расстояния исключают возможность мгновенного попадания - а значит часто можно промахнуться (или попасть) даже когда думал что попадешь (промажешь). 

Но есть и решающий фактор:

Модель WT (наша) неизбежна тогда, когда есть некий "измеритель", в физическом смысле "наблюдатель", т.е. если удаленно управляемые физические тела взаимодействуют с чем-то динамическим и независимым от управления, что видят все игроки. Например, самым простым таким механизмом являются волны на море.
В самом деле, модель аля CS просто не может работать - если ты будешь видеть ЗАПИСЬ других игроков, а волны в настоящем (предсказанном) времени - то корабли\самолеты будут отставать от волны (слишком поздно выныривать, и слишком поздно начинать падать) - и даже типовом пинге аля 300мс это будет вполне заметно (не говоря уж о большем).
А если ты будешь видеть воду "из прошлого" - то все остальные корабли\самолеты будут идеально, но теперь уже ты сам не сможешь плыть по волнам - они будут не соответстовать реальности.
А волну, как не трудно понять, нельзя иметь для одного корабля в прошлом, а для другого в настоящем (будущем) - она должна быть в одном времени.
Ну или надо делать совсем какие-то нефизичные вещи (типа плоской для физики воды, а волны лишь визуальные + покачивание корабля независящее от волн и гидродинамики).

  • Лайк 12
  • Не понял 1
  • Вверх 6

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Должно быть исправлено на версии 1.73.5.18 и выше.

  • Лайк 1
  • Благодарю 1
  • Вверх 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу