PDA

Просмотр полной версии : различия online и offline



arslan
30.05.2002, 13:21
Вчера по сетке на лавке сидел у мессера на хвосте и засадил ему в бензобак процентов 80 боезапаса, так ему хоть бы хны - он дальше летит, ладно - расстрелял ему двигатель, он задымил черным, двигатель сдох и друган выпрыгнул с парашютом. Я вот чего не пойму - за пять минут до игры по сетке в простом редакторе поставил графа и разобрал его потратив максимум 10 процентов, причем из того же положения. Ну думаю мало ли чего бывает, так ребята с которыми летал тоже заметили что самолеты не взрываются, пилот не убивается, крылья не отстреливаются в целом такое ощущение что на самолеты броню одели. А до патча 1.04в все было нормально у лавки пилота убивал, у мессера бак взрывал или крылья отстреливал - или это после патча нормально стало? Насчет упреждения не уверен, опять же это не только мое мнение, но похоже то же разное по сетке и в редакторе с карьерой. Может кто выскажет свои соображения по этому поводу?

pavelsh
30.05.2002, 14:48
Тоже впечатление что онлайн и оффлайн разные

Freddie
30.05.2002, 15:55
Дело не в том... Расчет попаданий в Ил-2 производится на сервере (в отличие, например, он Варбёрдс, где это делается на пользовательском фронт-энде). Вот и прикиньте... Пинг до сервера, допустим, 300 миллисекунд. Пока данные с компа жертвы придут на сервер, сервер это обработает, пока данные с компа атакующего придут на сервер... и т.д. То есть ты видишь сааааавсем не ту картину, что видит сервер. Вот отсюда и такие веселые непонятки... Если бы все делалось как в Варбёрдс, то ты попадал бы точно туда, куда целился (поскольку обработка производится на твоем компе, то сетевого лага нет), на сервер отправлялись бы данные о месте и характере попаданий, а он бы дальше решал что делать. А так мы стреляем почти вслепую. Куда попадешь - чистая лотерея, которая зависит от качества связи.

pavelsh
30.05.2002, 16:21
Вот это новости!
Выходит что в зависимости от пинга я должен менять свою поправку?
От ветра знаю, от угла знаю, от скорости знаю, но чтобы от пинга.......

JGr.124_Jager12
30.05.2002, 16:54
хороший вопрос, вот только знать бы ответ. Пинг здесь несомненно имеет место, равно как и отличия он и оф лайна. И в степени "возникающей бронированности самолетов, и уязвимости пилота. Точки поражения самолета с одной стороны не очень меняются, но непонятна возрастающая бронированность, когда из Мк108 попадаешь в крыло, и ничего, несмотря на наличие видимого подтверждения. Но в то же время подставляя свой самолет в оф- и он лайне, если комп вас просто мгновенно иничтожит, то в он лайне можно выдерживать более чем достаточно попадания. Может оно и к лучшему. Это правда не касается крупных калибров.

Ed
30.05.2002, 16:56
quote:

Originally posted by Freddie:
Дело не в том... Расчет попаданий в Ил-2 производится на сервере (в отличие, например, он Варбёрдс, где это делается на пользовательском фронт-энде). Вот и прикиньте... Пинг до сервера, допустим, 300 миллисекунд. Пока данные с компа жертвы придут на сервер, сервер это обработает, пока данные с компа атакующего придут на сервер... и т.д. То есть ты видишь сааааавсем не ту картину, что видит сервер. Вот отсюда и такие веселые непонятки... Если бы все делалось как в Варбёрдс, то ты попадал бы точно туда, куда целился (поскольку обработка производится на твоем компе, то сетевого лага нет), на сервер отправлялись бы данные о месте и характере попаданий, а он бы дальше решал что делать. А так мы стреляем почти вслепую. Куда попадешь - чистая лотерея, которая зависит от качества связи.

Это неверно.
Я частенько летаю с пингом около 800 - это почти секунда. С таким пингом я бы никуда не попал. Попадания анализируются на компе стреляющего. Обычно стреляешь, видишь что попал, но проходит заметный отрезок времени, прежде чем самолет противника начинает разваливаться. И обратная ситуация - когда по тебе стреляют - ты видишь, что противник мажет, трассы идут вдалеке от твоего самолета, а вдруг бац - и крыло отвалилось.

Clumsy_Ivan
30.05.2002, 17:37
Виноват ИМЕННО пинг! Попробуйте для "смеху" уклоняться от противника "плоским скольжением". Если с ботами этот номер проходит на "ура" (с 70 метров мажут), то в он-лайне от этого меня бы-ыстро отучили...

<Gunla>
30.05.2002, 17:53
Пинг виноват ?
Ню ню, это означает что после патча серваки стали тормозить и у всех коннект поплохел, и пинги выросли не по детски-вот поэтому никто ПК сделать и не может ? Так что ли ? :)

arslan
31.05.2002, 08:56
quote:

Originally posted by Freddie:
Дело не в том... Расчет попаданий в Ил-2 производится на сервере (в отличие, например, он Варбёрдс, где это делается на пользовательском фронт-энде). Вот и прикиньте... Пинг до сервера, допустим, 300 миллисекунд. Пока данные с компа жертвы придут на сервер, сервер это обработает, пока данные с компа атакующего придут на сервер... и т.д. То есть ты видишь сааааавсем не ту картину, что видит сервер. Вот отсюда и такие веселые непонятки... Если бы все делалось как в Варбёрдс, то ты попадал бы точно туда, куда целился (поскольку обработка производится на твоем компе, то сетевого лага нет), на сервер отправлялись бы данные о месте и характере попаданий, а он бы дальше решал что делать. А так мы стреляем почти вслепую. Куда попадешь - чистая лотерея, которая зависит от качества связи.

Маленькое уточнение - летали по небольшой lan и все было как обычно, сервер и все настройки, за исключением нового патча 1.04в. До него и крылья отрывались и бензобак взрывался да и чаще всего я пилота убивал который в лавке противника сидел. А сейчас весь самолет в решето и летает себе, как будто в него не из 20мм пкшек палили, а из ПМ

bella
31.05.2002, 12:22
В онлайне сейчас сделать PK невозможно , специально пробовали на разных самолётах , один из нас шёл со скольжением - подставлял борт , а другой только из пулемётов стрелял метров с 20-30 по борту примерно с угла 3/4 , самолёт в лохмоты а пилот жив-здоров , проверяли неоднократно . Это очень сильно печалит так-как летая на Миг-3уд раньше проще всего было сбить именно сделав PK , а сейчас нас обломали .

dets
01.06.2002, 08:23
quote:

Originally posted by Pavel Shirshov:
Вот это новости!
Выходит что в зависимости от пинга я должен менять свою поправку?
От ветра знаю, от угла знаю, от скорости знаю, но чтобы от пинга.......

Ну так конечно! Разумеется нужно делать поправку на пинг!
А как вы хотели - в онлайне никто не имеет 100% актуальной информации о положении самолета вашего оппонента кроме него самого. Другое дело что это не обычный шутер и самолет не может резко изменить направление своего движения как например игрок в Counter-Strike. Поэтому ваша задача как атакующего сделать поправку еще и на пинг. Другими словами нужно всегда помнить что то что вы видите перед глазами - это картинка из прошлого.

dets
01.06.2002, 08:53
quote:

Originally posted by Freddie:
Дело не в том... Расчет попаданий в Ил-2 производится на сервере (в отличие, например, он Варбёрдс, где это делается на пользовательском фронт-энде). Вот и прикиньте... Пинг до сервера, допустим, 300 миллисекунд. Пока данные с компа жертвы придут на сервер, сервер это обработает, пока данные с компа атакующего придут на сервер... и т.д. То есть ты видишь сааааавсем не ту картину, что видит сервер. Вот отсюда и такие веселые непонятки... Если бы все делалось как в Варбёрдс, то ты попадал бы точно туда, куда целился (поскольку обработка производится на твоем компе, то сетевого лага нет), на сервер отправлялись бы данные о месте и характере попаданий, а он бы дальше решал что делать. А так мы стреляем почти вслепую. Куда попадешь - чистая лотерея, которая зависит от качества связи.

Не вводите человека в заблуждение - "поскольку обработка производится на твоем компе, то сетевого лага нет". Это ошибочное суждение. Лаг в этом случае тоже есть и он даже больше чем в случае когда рассчитывает сервер. Сервер как находящийся посередине между вами и вашим противником обладает более актуальной информацией.
А если вся обработка ведется на стороне клиента, то атакуемый может изменить свое положение и выйти из под обстрела за доли секунды (например, на встречных курсах), но все равно будет сбит с точки зрения вашей стороны. Получается коллизия...
Так что лучше, когда такие вещи рассчитывает сервер, поскольку в этом случае игроки (в случае если их пинг одинаков) будут примерно в равном положении).

JGr.124_Jager12
01.06.2002, 11:48
хорошее выражение "поправка на пинг" (упреждение при стрельбе с учетом пинга). В нашей локалке, где мы тренируемся наш пинг составляет до 10мс. И практически никаких отличий в стрельбе, то же что и с компом. А вот в инете абсолютно неясная ситуёвина, можно в норме летать и стрелять, когда все имеют пинг от 200 до 350, но вот стоит появиться одному, после которого появляются надписи о мошенничестве, так начинаются чудеса. Может здесь истина:confused:?

Ed
01.06.2002, 13:27
quote:

Originally posted by dets:
Не вводите человека в заблуждение - "поскольку обработка производится на твоем компе, то сетевого лага нет". Это ошибочное суждение. Лаг в этом случае тоже есть и он даже больше чем в случае когда рассчитывает сервер. Сервер как находящийся посередине между вами и вашим противником обладает более актуальной информацией.
А если вся обработка ведется на стороне клиента, то атакуемый может изменить свое положение и выйти из под обстрела за доли секунды (например, на встречных курсах), но все равно будет сбит с точки зрения вашей стороны. Получается коллизия...
Так что лучше, когда такие вещи рассчитывает сервер, поскольку в этом случае игроки (в случае если их пинг одинаков) будут примерно в равном положении).

Полный бред
Можно узнать, ты сетевой программист или кто?
Что позволяет тебе делать столь глубокомысленные высказывания?

jk
01.06.2002, 13:47
Не вижу бреда, тем более полного.
Многое, конечно, зависит от реализации и описан лишь один из вариантов.

Ed
01.06.2002, 14:20
Этот вариант реализации не подходит для "Ил-2".
Эффективная дистанция стрельбы - менее двухсот метров. Снаряд эту дистанцию преодолеет за 0.25-0.3 секунды. Ты можешь представить, что инфа о каждом выпущенном снаряде отправляется на сервер с пингом ~800, и клиент ждет, пока сервер раздуплит, есть попадание или нет?

jk
01.06.2002, 14:37
Легко. Клиент наплодил в своем виртуальном небе кучку снарядов. Разумеется, обсчитал их полет, но не коллизии. Когда пришло время слать очередной пакет, сложил их туда и послал серверу, который уже имеет координаты врага. Сервер принял пакет, рассчитал коллизии и разослал обоим участникам как их результат, так и "правильные" координаты.
Таким образом, оба клиента (если сервер сообщает коллизию) может через 1.6 секунды (в худшем случае) нарисовать взрыв. Прикол в том, что как коллизия так и эффект будут просчитаны одновременно для обоих игроков. Если уж очень хочется сразу видеть попадания, то клиент и сам может просчитать коллизию и нарисовать взрыв, но пусть никто не удивляется, если сервер этот взрыв не подтвердит, и самолет останется целым.

Ed
01.06.2002, 18:33
quote:

Originally posted by deCore:
Легко. Клиент наплодил в своем виртуальном небе кучку снарядов. Разумеется, обсчитал их полет, но не коллизии.

Эт че, координаты каждого снаряда? А скорость надо передавать? Если скорость не передавать, то передавать координаты надо мгновенно. Если передавать, то зачем снаряды? Ты в онлайн играешь? Сколько ты снарядов выпускаешь и сколько реально попадают? Насколько "дешевле" в смысле трафика передавать только данные о попадании! А насколько проще в смысле вычислительных мощностей - ведь вычисления распределяются между клиентом и сервером. Если ты программист, то мне жаль твоих клиентов.

quote:

Originally posted by deCore:
Когда пришло время слать очередной пакет, сложил их туда и послал серверу, который уже имеет координаты врага.

:)
А клиент не имеет координаты врага? А с кем воюем собственно?

quote:

Originally posted by deCore:
Сервер принял пакет, рассчитал коллизии и разослал обоим участникам как их результат, так и "правильные" координаты.


Правильные координаты? Для какого отрезка времени?

quote:

Originally posted by deCore:
Таким образом, оба клиента (если сервер сообщает коллизию) может через 1.6 секунды (в худшем случае) нарисовать взрыв.

Так оно и есть в "Ил-2" - клиент высылает данные о попадании в бензобак, к примеру, данные попадают на сервер, тот решает, что жертва взорвалась, и рассылает всем это событие.

quote:

Originally posted by deCore:
Прикол в том, что как коллизия так и эффект будут просчитаны одновременно для обоих игроков.


Это почему одновременно? Не вкурил... Эт че, детская логика, что если сервер посередине, то и события он увидит одновременно с двух сторон? А если коннект разный? Ты об этом подумал?

quote:

Originally posted by deCore:
Если уж очень хочется сразу видеть попадания, то клиент и сам может просчитать коллизию и нарисовать взрыв, но пусть никто не удивляется, если сервер этот взрыв не подтвердит, и самолет останется целым.

Гы. Такого в "Ил-2" я еще не видел
Смотри выше. Сервер действительно рассылает всем событие о взрыве. Ты видишь только попадание, и только после того, как событие рассылается всем, в т.ч. и тебе, отрывается крыло или взрывается че-то и т.д. Ты в онлайне хоть раз был?

ЗЫ Это не ты рассуждал, что расчет графики клиент и сервер делят?

Zerg
03.06.2002, 00:31
quote:

Originally posted by Ed:

quote:

Originally posted by Zerg:
Но все выдается с такой уверенностью и неприятием чужого мнения. :) "...полный бред..." :)

Если человек сказал бред, то почему бы не назвать это бредом? Форум - публичное место, и если ты в вопросе ничего не рубишь, то зачем писать? Был топик, где обсуждали, что в онлайне графика не тормозит, потому что сервер часть графики считает. Я - программиcт, и сталкивался с такими заморочками, rgreat и Marder собаку съели на он-лайновых симах... Дело они говорят.
Плохо, что Африку забанили, он бы в популярных выражениях объяснил, где и что должно считаться :)

Знаешь какая разница между "полный бред" и "извини, но ты не прав"? Желание задеть. Коль ты в данной области крут - молодец,но и не забывай - есть много областей в которых ты (да и я тоже) не совсем компетентен, но наверняка пытался высказывался :) "...Форум - публичное место..." Дык почему тогда не назвать оппонента просто козлом? Или ламером? Если так, то хорошо, что Африку забанили ИМХО. Граница "публичности" - понятие растяжимое...

З.Ы. Никого не хотел обидеть, ессно :)

dets
03.06.2002, 09:13
quote:

Originally posted by Ed:
Насколько "дешевле" в смысле трафика передавать только данные о попадании! А насколько проще в смысле вычислительных мощностей - ведь вычисления распределяются между клиентом и сервером.

А теперь представь ситуацию - у тебя пинг 800, у того кого ты держишь в прицеле - 150. Ты начинаешь стрелять, но об этом еще никто не знает, поскольку информация от тебя доходит медленно из-за пинга. Одновременно с началом твоей стрельбы тот кого ты атакуешь начинает уклоняться.
Ты говоришь попадание считает клиент. Хорошо!
С точки зрения твоего компа ты попал.
С точки зрения компа атакуемого он ушел из под обстрела и тем не менее получил снаряд!
И что после этого получается?
Получается чем больше у тебя пинг - тем тебе легче!!
Да здравствует большой пинг!!
Я сделаю себе пинг 15 секунд, зайду сзади к противнику (он об этом узнает через 15 секунд, поэтому летит прямо, а может он и маневрирует, но его маневры до меня дойдут через 15 секунд, поэтому все равно с моей точки зрения он никуда не поворачивает), сбиваю его спокойно (со своей точки зрения) - и ВСЕ! Мне все равно как он там маневрировал, что он там делал, и пусть у него хоть 10 мсек пинг - я его сбил!!

P.S. Я не знаю как на самом деле это сделано в ИЛ-2.
Возможно в разных ситуациях все это происходит по разному. Я просто привел пример который показывает что считать попадания только на стороне клиента - неправильно!
Да - клиент может посчитать попадание на своей стороне, нарисовать облачко и т.д., но отрывать крыло например - НЕ МОЖЕТ, пока не получит подтверждение о том, что снаряд действительно попал в цель.

[ 03-06-2002, 09:41: Сообщение отредактировано: dets ]

rgreat
03.06.2002, 09:32
Все не так просто :)
При пинге в 15 сек, ты не сможешь прицелиться во врага. Принципиально.

Реально же тому у кого большой пинг тяжело попасть во врага и соответствеено по нему самому также тяжело попасть.

Расчет на сервере позволяет приемлемо стрелять при пинге до ~200мс. Расчет на клиенте - до ~1500мс.
Плюс как лучше?:
1) Когда ты ухитрился всадить снаряды в в репу пилота цель и получил попадания

или

2) Когда ты ухитрился всадить снаряды в репу пилота и их не засчитали изза того что враг на сервере уже не там?
Или наоборот полил пустое пространство и враг взорвался ? :)

Только не говорите мне о системе обсчета в 3д шктерах, когда выстрела не происходит пока сервер не подтвердил получение пакета :)
При задержке в полсекунды самолет пролетает сотни метров а не полметра-метр как "человек с ружжом" в шутерах :)

Стабильный пинг при котором "реально" летать благодаря технологии принятой специализированых онлайн в симах - до 1000-1500 мс. а не до 300-400мс как шутерах.
Поток данных тоже на порядок меньше.
Оцените: В том же ВБ для полетов около 100 человек одновременно достаточно модема в 9600-14400.
Даже в таком классно вылизаном сетевом протоколе как в Кваке, для игры в надо минимум 28800.
А если 32 человека? соединения на 56к хватит?

Если же пинг постоянно прыгает от 50 до 1000 мс то летать гораздо сложней, хотя средний пинг и меньше.
Почему? Тонкости интерполяции положения самолета в пространстве по координатам,векторам и ускорениям его движения.

Более детально обьяснять лень :)

[ 03-06-2002, 10:40: Сообщение отредактировано: rgreat ]

volgaaa99
03.06.2002, 09:48
Херня какая-то...
Я летаю с пингом от 780 до 1000 :)
Сбиваю нормально летающих с различными пингами - от 0 до такого же как и у меня, никаких проблем.
Меня так же сбивают без проблем. Пинги, упреждения, обсчеты на клиенте или сервере, поправки на пинг и прочая дребедень тут ни при чем, тренироваться в стрельбе надо и все тут :)

С уважением, =FPS=Ivan

ЗЫ Я поначалу тоже искал всякие причины своей косости :) :) :)

dets
03.06.2002, 10:06
quote:

Originally posted by rgreat:
Все не так просто :)
При пинге в 15 сек, ты не сможешь прицелиться во врага. Принципиально.

Реально же тому у кого большой пинг тяжело попасть во врага и соответствеено по нему самому также тяжело попасть.

Почему? Тонкости интерполяции положения самолета в пространстве по координатам,векторам и ускорениям его движения.


Почему это я не смогу прицелится во врага если у меня пинг 15 секунд?
Очень даже могу. Ты замечал когда нибудь что происходит с самолетом врага когда возникает сильный лаг (или вообще отбой по связи)? Он продолжает лететь так, как он летел перед тем как связь с ним прервалась. Вот и вся интерполяция.
Я это часто наблюдаю тоже (у меня из хабаровска пинг редко ниже 600 :) ) . Я лечу за противником, долблю его, а он летит прямо, а потом внезапно начинает перемещаться боком (против всех законов физики) куда-нибудь вправо.
Что было? Да просто он давно свернул вправо, а у меня летел прямо. А потом связь пришла в норму, пришли актуальные данные о его текущем положении и моей стороне пришлось его вот так в нужное место "поместить".
Но пока был лаг, с моей точки зрения он летел - ПРЯМО!
Так вот я заметил, что пока он летел прямо из-за лага, сколько я бы в него ни стрелял и не попадал - он не упадет ни за что... Что согласуется с теорией обсчета на стороне сервера.
Нет, я не говорю что считает только сервер.
Но он подтверждает (или не подтверждает) информацию о моих попаданиях (или соответственно, непопаданиях). До этого подтверждения моя сторона не имеет права сказать что я его сбил.
Этим кстати объясняется задержка, которая всегда возникает перед тем как у противника отвалится крыло например - это мы ждем подтверждения от сервера.

То есть - я думаю так:
1) отправляется на сервер любая информация о состоянии полета, выпуске снаряда и т.д;
2) параллельно с этим клиент сам рассчитывает параметры полета снаряда, рисует трассер, если снаряд попадает во врага, то рисует облако взрыва. То есть рассчитывает сам ВСЕ, кроме критических результатов попадания - враг взорван, отвалилось крыло и т.д.
3) если результат попадания - критический, то клиент ждет подтверждения от сервера, и только после этого рисует реальный результат.

volgaaa99
03.06.2002, 10:23
Очень даже могу. Ты замечал когда нибудь что происходит с самолетом врага когда возникает сильный лаг (или вообще отбой по связи)? Он продолжает лететь так, как он летел перед тем как связь с ним прервалась. Вот и вся интерполяция. Я это часто наблюдаю тоже (у меня из хабаровска пинг редко ниже 600 )

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

С уважением, =FPS=Ivan

rgreat
03.06.2002, 10:26
Пинг 15000 это дикий ЛАГ :) = Улет за горизонт :)
тяжело целиться в цель летящую на расстоянии пары тройки километров со сверхвзуковой скоростью :)

[ 03-06-2002, 10:27: Сообщение отредактировано: rgreat ]

Ed
03.06.2002, 10:32
Вообще при разработке таких вещей приходится чем-то жертвовать - или чтобы цель корректно видела, когда в нее стреляют, или атакующий. Одновременно они это видить неспособны - ведь сигналы распространяются с конечной скоростью.

Marder
03.06.2002, 10:54
Люди не путайте безобидный лаг (если он конечно не 2 секунды :) и потерю связи...приводящую к варпам в гиперспейс :)
Кстати о лаге в 15 секунд...заманчиво конечно...но я думаю с таким пингом с сервака кикнут или просто туда не пустят...а во вторых можно просто игнорировать пакеты попаданий или возвращать их владельцу, шоб неповадно было из варпа по людям стрелять.
А расчет надо делать на клиенте !!! :)

Zerg
03.06.2002, 11:16
Меня пугает всеобщая осведомленность по части обсчета координат, снарядов и прочая. ВЫ ДЕЙСТВИТЕЛЬНО ЗНАЕТЕ или только строите предположения? Если второе - тады об чем флейм? :)

dets
03.06.2002, 11:21
quote:

Originally posted by Zerg:
Меня пугает всеобщая осведомленность по части обсчета координат, снарядов и прочая. ВЫ ДЕЙСТВИТЕЛЬНО ЗНАЕТЕ или только строите предположения? Если второе - тады об чем флейм? :)

У нас не флейм, а спор. :)
И разумеется точно никто не знает, можно только предполагать. А иначе чего бы было спорить - просто знали бы и все! :)

Zerg
03.06.2002, 11:24
Но все выдается с такой уверенностью и неприятием чужого мнения. :) "...полный бред..." :)

Lt.AK
03.06.2002, 11:25
quote:

Originally posted by dets:

И разумеется точно никто не знает, можно только предполагать. А иначе чего бы было спорить - просто знали бы и все! :)

а тогда бы спорили как нужно было сделать. было б с кем, а о чем спорить это без проблем.

Ed
03.06.2002, 11:37
quote:

Originally posted by Zerg:
Но все выдается с такой уверенностью и неприятием чужого мнения. :) "...полный бред..." :)

Если человек сказал бред, то почему бы не назвать это бредом? Форум - публичное место, и если ты в вопросе ничего не рубишь, то зачем писать? Был топик, где обсуждали, что в онлайне графика не тормозит, потому что сервер часть графики считает. Я - программиcт, и сталкивался с такими заморочками, rgreat и Marder собаку съели на он-лайновых симах... Дело они говорят.
Плохо, что Африку забанили, он бы в популярных выражениях объяснил, где и что должно считаться :)

dets
03.06.2002, 11:48
quote:

Originally posted by Zerg:
Но все выдается с такой уверенностью и неприятием чужого мнения. :) "...полный бред..." :)

Ну мне например как программисту просто интересно как это сделано на самом деле. Поэтому я внимательно читал что написано в посте и предлагал свои идеи.
А насчет уверенности - разумеется я не знаю как это сделано в Ил-2, поскольку я не разработчик, поэтому и пишу "я думаю" и "мне кажется".

Sea
03.06.2002, 14:00
А вы пробовали летать с пингов в 3000? Сбивать конечно проще, успеваешь всадить хорошую очередь в врага до того как он начнет маневрить. Но с другой стороны, ты будешь только видеть заходящего тебе в хвост врага, хотя на самом деле ты уже обречен.

Попробуй с пингом в 3 сек пойти с кем-то в лобовую, будешь приятно удивлен результатом. После расхождения при попытке развернутся будет либо пилот убит либо самолет поломан.

Ed
03.06.2002, 14:13
quote:

Originally posted by Zerg:
Знаешь какая разница между "полный бред" и "извини, но ты не прав"? Желание задеть. Коль ты в данной области крут - молодец,но и не забывай - есть много областей в которых ты (да и я тоже) не совсем компетентен, но наверняка пытался высказывался :) "...Форум - публичное место..." Дык почему тогда не назвать оппонента просто козлом? Или ламером? Если так, то хорошо, что Африку забанили ИМХО. Граница "публичности" - понятие растяжимое...

З.Ы. Никого не хотел обидеть, ессно :)

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

jk
03.06.2002, 14:43
quote:

Originally posted by Ed:

quote:

Originally posted by Zerg:
Но все выдается с такой уверенностью и неприятием чужого мнения. :) "...полный бред..." :)

Если человек сказал бред, то почему бы не назвать это бредом?

А где,был бред ты так и не указал.

Эт че, координаты каждого снаряда? А скорость надо передавать?

Не цепляйся к мелочам. Если я про это (как и про интерполяцию /экстраполяцию и кучу других деталей) не написал, это не значит что я не подумал об этом. Просто, я рассчитывал, что у собеседника хватит мозгов самому расставить недостающие детали. И что я взял пинги условно равными- из той же серии. Не стоит считать других идиотами. Чем больше деталей я бы описал о протоколе о котором я не имею ни малейшего представления- тем меньше в этом было бы смысла.
По-этому оперирую как можно более общими понятиями, дабы не вводить никого в заблуждение.

Вообще при разработке таких вещей приходится чем-то жертвовать - или чтобы цель корректно видела, когда в нее стреляют, или атакующий. Одновременно они это видить неспособны - ведь сигналы распространяются с конечной скоростью.
Так вот. dets (точку зрения которого я пытался прояснить) говорил о третьем варианте- когда НИКТО не видит, кто куда и откуда на самом деле стреляет. И это получается более "справедливо".

А насколько проще в смысле вычислительных мощностей - ведь вычисления распределяются между клиентом и сервером. Если ты программист, то мне жаль твоих клиентов.

Во- первых, спасибо за наезд. Настолько же безосновательный, как и на dets. Меня (и Zergа тоже) еще твое умозаключение относительно dets'а несколько удивило. Ты думаешь, один здесь программист, а все остальные- недоумки? (остальным- просьба не воспринимать это как мнение, близкое к моему)

В смысле вычислительных мощностей проще было бы при первом выстреле рассылать всем сообщения, что все убиты. А как трафик экономится!

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

А клиент не имеет координаты врага? А с кем воюем собственно?
quote:Originally posted by deCore:
Сервер принял пакет, рассчитал коллизии и разослал обоим участникам как их результат, так и "правильные" координаты.
Правильные координаты? Для какого отрезка времени?
Я что-то не понимаю, ЭТО нужно тоже пояснять?

Это почему одновременно? Не вкурил... Эт че, детская логика, что если сервер посередине, то и события он увидит одновременно с двух сторон? А если коннект разный? Ты об этом подумал?

Вот я-то, как раз, подумал не только об этом. Ну ладно. Сервер ничего не "увидит". Он объявит это одновременно, исходя из своих собственных данных (процесс их получения опускаю, он может быть сколь угодно сложным, но он присутствует- специально для Ed).

Конечно, данные, полученные клиентами будут уже не актуальны. Я опять не касаюсь того момента, что в протокол могут быть включены некие способы предсказывания актуальных координат и полностью опускаю вопросы синхронизации. Опять удивлен, что мне приходится это делать, но тем не менее, скажу, что под координатами я подразумеваю нечто большее, чем "x, y", и даже большее, чем "x, y, z".
Так оно и есть в "Ил-2" - клиент высылает данные о попадании в бензобак, к примеру, данные попадают на сервер, тот решает, что жертва взорвалась, и рассылает всем это событие.[b]
Очень хорошо. Я не утверждал, что ил2 работает по моей схеме. И даже не говорил, что он должен так работать. Даже не говорил что так будет правильно. Я просто сказал, что данная схема не только имеет право на жизнь, но и имеет преимущества по сравнению со схемой, когда попадания обсчитываются на клиенте стрелка.

[b]Сервер действительно рассылает всем событие о взрыве.

А теперь вопрос- на кой хрен серверу посылать клиенту стрелка сообщение о взрыве, когда клиент сам может не только рассчитать коллизию, но и дамадж, и послать серверу (для последующей пересылки остальным) именно эту информацию. Кто там говорил о распределении вычислений?
(Кстати, сам я на этот вопрос ответить могу)

Ты в онлайне хоть раз был?
Нет. Я что-то написал про Ил2?

Это не ты рассуждал, что расчет графики клиент и сервер делят?

Нет. И честно, говоря твои наезды меня несколько достали. Большая просьба указать конкретно на то, что именно в моих словах заставляет подозревать во мне идиота. Тебе Zerg недоходчиво намекнул о твоем поведении? Перечитай, пожалуйста, мои сообщения (их всего два).

Ed
03.06.2002, 15:17
Ну блин, достали. Не хочу спорить. Как об стенку.

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

Насчет снарядов - есть очень простое решение - передавать не координаты снарядов, а нажатие кнопки игроком. И вместо посылки сотен снарядов с координатами посылается флаг "кнопка 1 нажата". Или "кнопка 1 отпущена". Все. Какой алгоритм лучше?

Насчет dets'а я ни слова не говорил.

Дальнейшее продолжение спора я считаю бесполезным. Я бы с удовольствием поспорил с тем же Африкой, чтобы он убедил меня в преимуществе того или другого алгоритма. Но не с людьми, которые говорят о третьем варианте, в котором "НИКТО не видит, кто куда и откуда на самом деле стреляет. И это получается более "справедливо"."

Arankhalla
03.06.2002, 16:10
quote:

Originally posted by Ed:
Насчет снарядов - есть очень простое решение - передавать не координаты снарядов, а нажатие кнопки игроком. И вместо посылки сотен снарядов с координатами посылается флаг "кнопка 1 нажата". Или "кнопка 1 отпущена". Все.

Хех. А кто на предыдущей странице постил такое:


quote:


Я частенько летаю с пингом около 800 - это почти секунда. С таким пингом я бы никуда не попал. Попадания анализируются на компе стреляющего.


Ы?

Т.е. анализ попаданий - это посылка флажка нажатия кнопки? :) И кто-то что-то говорил про бред? :)

jk
03.06.2002, 16:40
Ты сам, блин, достал.
Это- именно тебе как об стенку! Или ты не читаешь чужие посты вообще? Если да- говори по делу. Или не говори вообще.
Я еще не сталкивался на форуме с тем, чтобы кто-нибудь об*срал чье-то мнение ("полная *йня, ты вааще кто такой??!"), вполне сдраво выглядещее, не удосужевшись привести аргумент. Как только я указал на это, некто заявл, что я г*но а не программист, перейдя таким образом на личности.
Пусть фразы звучали и не так в точности, или даже совсем не так :) , но поверь мне на слово, выглядят они именно так, и не только для меня, ибо, ИМХО, форма- вторична (во всем кроме искусства).
Таким образом, пока не прозвучат аргументы, по которым мои профессиональные навыки ставятся под сомнение (с чем я, ксати, совершенно не согласен, и до этого момента никто на них не жаловался), твои высказывания будут восприняты исключительно как личное оскорбление. Если же такие аргументы прозвучат, и окажутся убедительными, а не личной интерпретацией собственных бессознательных реакций, то я не буду иметь никаких претензий и извенюсь перед всеми за то, что заставил читать свою ерунду.

[ 03-06-2002, 16:44: Сообщение отредактировано: deCore ]

Ed
03.06.2002, 16:44
quote:

Originally posted by Arankhalla:

Т.е. анализ попаданий - это посылка флажка нажатия кнопки? :) И кто-то что-то говорил про бред? :)

Блин, устал уже. Если не понял сути, то так и скажи, что не понял, а не говори о бреде.

Если попадания анализируются на компе стреляющего, то снаряды никуда посылать не надо! Посылается флаг, что стреляет пушка, на компах других игроков это не более чем фейерверк, ведь надо же как-то показать, что противники стреляют, трассы, звуки. А попадания просчитываются на компе стреляющего и потом отсылаются серверу. А зачем на серваке это все дело синхронизировать? Да потому что летит один самолет, а после повреждения их может быть несколько, тьфу, обломки всякие полетят, а с этими обломками кто-то может столкнуться и т.п.

Еще есть вопросы?

Zerg
03.06.2002, 16:54
ТИХА! :)
Я скажу. Мы все молодцы. Каждый - профессионал на своем месте. Дык и будем на этом самом месте и сидеть. В предмете спора из высказавшихся не парит никто (судя по флейму) :) .
Ed, все пучком, не разошлись в лобовой, с кем не бывало :) Почитайте вон лучше про дятлов :)

З.Ы."Зачем ругаться - у нас есть пушки" :)

Ed
03.06.2002, 17:15
deCore

Если есть желание - распиши свой алгоритм от и до - где что считается, что передается, что не передается, а потом я распишу свой и сравним, что лучше и для чего. А то за эмоциями я в твоем посте рациональных зерен выловить не могу.

jk
03.06.2002, 17:30
Ed
Именно такой вопрос я и предвидел :) . Ладно, вариант с обработкой на сервере я опишу (правда уже не знаю в какой подробности) дабы ты имел основания как-то оценить мои профессиональные навыки. Но твое умозаключение было получено без этой информации, по-этому я и попросил описать КАК ты пришел к таким выводам. Хотя сам факт запроса дополнительной информации уже говорит о том, что они были сделаны безосновательно, не правда ли? :)

Ed
03.06.2002, 18:47
deCore

Давай посчитаем.
Возьмем крайний случай - ШКАС. Ты предлагаешь передавать координаты каждого снаряда на сервер

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

Мне немножко непонятно, что ты имел в виду под словом "обсчитал". Просто координаты? Или со скоростью? Лана, будем считать, что посылает начальные координаты и направление - вектор полета снаряда, будем считать что скорость сервер знает из типа снаряда. Примем, что в "Ил-2" точность координат - 2 знака после запятой - это видно в файле миссий. Т.е. это соответствует типу Long - 4 байта для описания одной координаты. Итого вектор для каждого снаряда будет иметь 6 координат по 4 байта - итого 24байта один снаряд. Таких снарядов один ШКАС выпускает 1600 в секунду. Итого только для одного ШКАСа надо иметь пропускную способность 38400байт/с (кошмар интернетчика). На одном сервере может играть 32 игрока. На какой линии должен стоять сервер?

Дальше продолжать? Если я че-то не так понял, поправь меня.

jk
03.06.2002, 20:47
Честно говоря, я предполагал слать очередь снарядов в 10, по-этому не считал принципиальным как именно они будут уложены в пакет. Да и со скорострельностью ты что-то напутал, ИМХО.
В данном же случае я имел в виду сообщение вида "с момента времени t1 до момента времени t2 было выпущено n снарядов". Слать координаты каждого я не предлагал (хотя, признаюсь, мог бы предложить, ибо принципиальным этот вопрос не считал, да и о ТАКОЙ скорострельности не подумал; по моим прикидкам- 512 байтного пакета хватило бы на все 500мс). Это не я говорил о распределенных вычислениях. Я, как раз, говорил об их дублировании.

ЗЫ: Написал только что драфт. Я всегда ОЧЕНЬ медленно пишу дизайн и доки. Посмотрел- куча очевидной дряни. Слать?

Ed
04.06.2002, 09:24
Да я в принципе понял, что ты имел в виду.
Со скорострельностью я не напутал, да и неважно это, главное - порядок цифр.
Конечно, можно оптимизировать этот пакет раз эдак в 100, но такое сжатие получится только с потерей части данных, т.е. мы вернулись к тому, с чего начали - точных координат каждого снаряда на сервере не будет, серверу придется включать какие-то случайные данные чтобы восстановить полный пакет и просчитать попадания. Овчинка не стоит выделки.
Для компенсации пинга, чтобы жертва более корректно видела стрелка у себя на хвосте, можно использовать экстраполяцию, но это тоже палка о двух концах. В случае энергичного маневрирования самолет противника будет экстраполироваться неправильно, он на компах соперников будет перемещаться хаотичными рывками, так что попасть в него будет очень проблематично.

jk
04.06.2002, 14:10
1. Случайних данных не потребуется. Скорострельность и координаты пушек известны. ramdom seed тоже синхронизован. Так что, зная момент начала и окончания стрельбы можно однознчно восстановить очередь. Все-таки я зашлю этот драфт.
2. А без рывков сделать и не получится. Если, конечно клиент не будет ждать от сервера подтверждения, что его руль направления, таки, повернулся.

Собственно, драфт.
1. Все объекты, все расчеты дублируются на сервере (С) и всех клиентах (К).
Траффик- важнее.
2. На С (и на К) подаются все события (поворот элеронов, стрельба) в виде:
{событие, время события}. События объединяются в пакеты, так чтобы событие
1, наступившее в момент Т1 пришло раньше события 2, наступившего в момент Т2 тогда и только тогда, когда Т1 меньше (предшествует) Т2. Предполагаем, что способ формирования пакетов событий- оптимальный (максимум информации/минимальный
размер).
3. Некоторые события инициируются (генерииуются) на сервере, некоторые-
на клиенте, в зависимости от области ответственности. Клиент генерирует
события касающиеся поведения собственного крафта и отданных под его
ответственность ИИ объектов (для прикола, каждому клиенту можно дать "под
опеку" несколько зениток, чтобы разгрузить сервер).
4. Область ответственности С- это ИИ обьекты и критические события (появление/
удаление объектов и коллизии). А такжа рассылка полученных от К событий
другим К.
5. Как только К или С получает событие (или сам генерирует его), он
производит соответствующие модификации в своем пространстве.
6. Т.к. события приходят с запозданием, К и С приходится делать грубые правки
в своем пространстве объектов (например, когда К узнает, что такой-то крафт
выравнял элероны Хмс назад, и перестал делать бочку он перерассчитывает
положение этого крафта и крафт рывоком прыгает в это положение). Но, т.к.
пилот имеет право менять только вторую производную, то очень уж резких
рывков не должно быть. Для сглаживания этих скачков К может применять
интерполяцию или даже экстраполяцию с учетом пинга, но можно позволять
клиенту выбирать самому: хочет ли он видеть рывки или предпочитает видеть
почти всегда недостоверную информацию :) .
7. Тот факт, что К1 прекратил огонь, К2 узнает тоже с запазданием в Хмс. Он
может убрать лишние снаряды, которые успел наплодить за эти Хмс, а может и
не убирать, чтобы они не исчезали "неожиданно". Ничего страшного, кроме
лишних нервов у жертвы (К2) это не вызовет, т.к. повреждения все равно
будут рассчитаны согласно только подтверженным сервером попаданиям.
8. Все коллизии рассчитываются сервером с запаздыванием, по времени последнего
пакета от участников. Например:
Сервер обработал все события вплоть до момента Т0.
В момент времени Т(на С) (Т больше Т0) К1(стрелок) сообщает, что в момент времени
Т1 (Т больше Т1 больше Т0) он прекратил стрельбу. Таким образом, С вычислит, сколько
снарядов (какой именно и когда) было выпущено крафтом К1 в промежутке
(Т0;Т1), как и положение крафта К1 на интервале (Т0;Т1).
К2 (жертва) в момент Т2 (Т2 больше Т1 больше Т0) присылает на сервер некое событие (хоть
idle - пустое). Следовательно, С знает (может рассчитать) достоверно
положение крафта К2 в любой момент времени на интервале (Т0;Т2).
Теперь С может просчитать коллизии для крафта К2 произошедшие в промежутке
(Т0;Т1), как и для крафта К1, произошедшие в том же промежутке.
Если других крафтов нет, то теперь просчитаны все события вплоть до Т1.
Для полученных коллизий, С рассчитывает дэмэдж и рассылает события всем К.
9. Т.к. клиенты могут рассчитать коллизии самостоятельно, то они могут и сами
нарисовать взрыв, который будет не более чем субъективной индикацией
попадания.

viczz
04.06.2002, 15:55
для прикола, каждому клиенту можно дать "под
опеку" несколько зениток, чтобы разгрузить сервер.

если у меня (клиента) будет пинг 2000 как эффективно будут работать зенитки?

На мой взгляд никакой ответственности кроме как отображения происходящего и обсчета фм собственного самолета у клиента быть не может.
Клиент должен передать серверу примерно следующее:
XYZWS, и в случае открытия огня то чем и сколько выстелил, ну и по необходимости мелочи всякее типа шасси и прочее. Клиент не передает серваку положение рулей и элеронов именно по этому мы их не видим.
Все остальные расчеты лежат на сервере, который в свою очередь должен передать клиенту координаты и идентификаторы самолетов находящихся в области видимости, стрельбу, и изменения в состоянии самолетов(повреждения), состояние каждого самолета в игре клиент может хранить в памяти и вносить изменения.
Клиент не может отрисовать ни попадание ни столкновение пока не получит подтверждение этому от сервера. Все видели ситуацию когда самолет виражит на малой высоте и часть его крыла буквально погружена в землю.....
Не много ли расчетов для сервера? Нет не много, игроков всего 32, а в офлайне он и больше ботов считает.
Насчет разницы в пинге так я не вижу проблемы, сервер имеет информацию о положении каждого на конкретную единицу времени и решает попал или не попал, если если у тебя пинг меньший то соответственно ты можешь чаще обновлять информацию о своем пололжении в пространстве, ну а если пинг большой то ясен пень можешь не успеть передать изменения (а мы уже передали XYZWS на основании которых все тебя и отбражают) и получить уже инфу о том что ты труп :)
Стабильность пинга дает возможность принорвиться к задержке и стрелять более эффетивно.

Все это лишь мои предположения и ничего больше. :)

jk
04.06.2002, 16:49
viczz
Все это лишь мои предположения и ничего больше.
Ну, разумеется. Тут все флеймят впустую. :)
А я так, вообще, безотносительно реализации в Ил2, ибо даже не видел его в онлайне ни разу.

Кстати, стоит пояснить- это мнение как оно в Иле, или как оно должно быть? А то тут все всё по-разному понимают... :)
если у меня (клиента) будет пинг 2000 как эффективно будут работать зенитки?
Также, как и игрок- по пустому месту, разумеется. Правда, если это твои зенитки и работают они по тебе, тогда они точно знают куда бьют. А если зенитки обсчитывет сервер- они тоже работают по пустому месту. В любом случае, это ерунда, я же написал: "для прикола".

viczz
04.06.2002, 17:06
Насчет того как сделано или как должно быть, так я написал о том что видно в самой игре и предположил как это сделано из соображений того как бы это реализовал я сам (блин масло масляное)

С знитками точно так не выйдет, потому как они стрелять и попадать должны по всем, а если вдруг клиент сообщит серверу что мол на его стороне зенитки перебили всех клиентов, в тот момент когда другой клиент сообщает что сбили только половину :)
А трафика зенитки много не слопают, тут передать надо тока ID зенитки и вектор выстела.
Чем больше расчетов на сервере тем меньше возможность чита :)

jk
04.06.2002, 17:40
quote:

Originally posted by viczz:
Насчет того как сделано или как должно быть, так я написал о том что видно в самой игре и предположил как это сделано из соображений того как бы это реализовал я сам (блин масло масляное)

С знитками точно так не выйдет, потому как они стрелять и попадать должны по всем, а если вдруг клиент сообщит серверу что мол на его стороне зенитки перебили всех клиентов, в тот момент когда другой клиент сообщает что сбили только половину :)

Дык клиенты о попаданиях ничего не сообщают. Написано же- все (в т.ч. и с зениток) коллизии вычисляет сервер, и сообщает, что твоя зенитка того-то подстрелила.
А трафика зенитки много не слопают, тут передать надо тока ID зенитки и вектор выстела.

Когда расчеты дублируются- вектора можно расчитать самому. Важен только сам факт (и время) выстрела.
Чем больше расчетов на сервере тем меньше возможность чита :)

sic. Я не говорил об этом (ибо вопрос не поднимался), но главным преимуществом расчетов попаданий на сервере считаю именно это. Отловить пакет, в котором твой клиент сообщает попадание довольно просто. Весьма элегантное решение: все такие пакеты дублировать раз по 10. Эффективность твоего огня увеличится в 10 раз, а потом пусть докажут, что ты гнусный читер...

viczz
04.06.2002, 17:58
Если все же сошлись на том что все считает сервак то базара нет клиенты ничего не сообщают, о попаданиях, просто я имел ввиду суждение о том что зенитки у клиента.
Когда расчеты дублируются- вектора можно расчитать самому. Важен только сам факт (и время) выстрела.
вот этого я не понял что то. какие расчеты и где и главное зачем дублировать?
я рассматриваю ситуацию того что сервак предает информацию о том какая зентка выстрелила и в какую сторону, ведь логично что просто одного факта выстрела мало, надо знать по кому, если ты предлагаешь чтобы и мой комп расчитывал какие зенитки и куда лупят паралельно с серваком то нафига спрашивается, а если у меня машина тормоз и где то что то пропустит, ведь тут еще придется синхронизировать эти выстрелы растрачивая драгоценный трафик.

Marder
05.06.2002, 04:39
Народ а чем вас именно смущает обработка факта попадания (не расчет повреждений, а сам факт ) на клиенте ? В любом случае если пинг не 10-20мс игра превратится в погоню за тенью...но расчеты на клиенте позволят поставить всех в более менее равное положение, не будет такого маразма как в кваке, где игрок с пингом 20 имеет шанс убить игрока и не получить повреждений с пингом 300 даже если они выстрелили в друг друга одновременно.
Да и к томуже кому охота вычислять необходимое упреждение перед противником, причем даже не перед ним, а перед хрен знает чем :)
А насчет зениток (AI), сервер может передавать инфу клиентам о том на кого в данный момент наведена зенитка (допустим если он ближе всего к зенитке) и трафик будет оччень мелкий :)

viczz
05.06.2002, 07:46
quote:

Originally posted by Marder:
Народ а чем вас именно смущает обработка факта попадания (не расчет повреждений, а сам факт ) на клиенте ? В любом случае если пинг не 10-20мс игра превратится в погоню за тенью...но расчеты на клиенте позволят поставить всех в более менее равное положение, не будет такого маразма как в кваке, где игрок с пингом 20 имеет шанс убить игрока и не получить повреждений с пингом 300 даже если они выстрелили в друг друга одновременно.
Да и к томуже кому охота вычислять необходимое упреждение перед противником, причем даже не перед ним, а перед хрен знает чем :)
А насчет зениток (AI), сервер может передавать инфу клиентам о том на кого в данный момент наведена зенитка (допустим если он ближе всего к зенитке) и трафик будет оччень мелкий :)

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

Ed
05.06.2002, 10:23
Почему это не может быть реализовано.


quote:

Originally posted by deCore:
Собственно, драфт.
1. Все объекты, все расчеты дублируются на сервере (С) и всех клиентах (К).
Траффик- важнее.
2. На С (и на К) подаются все события (поворот элеронов, стрельба) в виде:
{событие, время события}. События объединяются в пакеты, так чтобы событие
1, наступившее в момент Т1 пришло раньше события 2, наступившего в момент Т2 тогда и только тогда, когда Т1 меньше (предшествует) Т2. Предполагаем, что способ формирования пакетов событий- оптимальный (максимум информации/минимальный
размер).
3. Некоторые события инициируются (генерииуются) на сервере, некоторые-
на клиенте, в зависимости от области ответственности. Клиент генерирует
события касающиеся поведения собственного крафта и отданных под его
ответственность ИИ объектов (для прикола, каждому клиенту можно дать "под
опеку" несколько зениток, чтобы разгрузить сервер).


Как зенитки могут рассчитывать попадания по объекту, до реального состояния которого может быть до 2-х секунд времени (пинг до С и до удаленного К):confused:


quote:

Originally posted by deCore:
6. Т.к. события приходят с запозданием, К и С приходится делать грубые правки
в своем пространстве объектов (например, когда К узнает, что такой-то крафт
выравнял элероны Хмс назад, и перестал делать бочку он перерассчитывает
положение этого крафта и крафт рывоком прыгает в это положение). Но, т.к.
пилот имеет право менять только вторую производную, то очень уж резких
рывков не должно быть. Для сглаживания этих скачков К может применять
интерполяцию или даже экстраполяцию с учетом пинга, но можно позволять
клиенту выбирать самому: хочет ли он видеть рывки или предпочитает видеть
почти всегда недостоверную информацию :) .


Ладно, представим ситуацию. Самолет вошел в пикирование, и на клиенте пилот в последний момент дернул РУС на себя. Пакет об этом событии пришел на сервер с запозданием, когда на сервере самолет этого игрока уже врезался в землю. Что должен делать сервер? Какие коллизии считать? Если он не должен обращать на это внимение, то зачем он вообще считает колиззии?


quote:

Originally posted by deCore:
7. Тот факт, что К1 прекратил огонь, К2 узнает тоже с запазданием в Хмс. Он
может убрать лишние снаряды, которые успел наплодить за эти Хмс, а может и
не убирать, чтобы они не исчезали "неожиданно". Ничего страшного, кроме
лишних нервов у жертвы (К2) это не вызовет, т.к. повреждения все равно
будут рассчитаны согласно только подтверженным сервером попаданиям.


Ты забыл, что "лишние" снаряды могут быть также и на сервере, он может просчитать попадания до того, как он поймет, что они лишние. Или ты предлагаешь подтверждать повреждения только после того, как игрок закончит стрельбу? Ага, ниже вижу, что до потдверждения продолжения стрельбы или ее прекращения. Ладно, пусть сервер ждет 500мс, пока придет следующий пакет, а до этого что он должен сделать? Пусть он просчитает попадания. Но если следующий пакет ему скажет, что игрок прекратил стрельбу через 1 мс после посылки предыдущего пакета, что сервер сделает? Ему придется открутить ситуацию назад, чтобы снова персчитать попадания. За это время, пока сервер решал, кто и куда попал, самолеты противника могли улететь бог знает куда...

И самое главное - куда целиться стреляющему:confused:
Можешь объяснить? Если по прямолетящей цели теоретически можно попасть (если в голове у тебя баллистический вычислитель), то как попасть по активно маневрирующей? Ты даже не знаешь, в какую сторону она повернет через 500мс, пока пакеты о стрельбе придут на сервер.

Ed
05.06.2002, 11:13
Зенитки также считаются на клиенте. Какой смысл их считать на сервере?
Если ты влетел в зону действия ЗА и в тебя попал снаряд, то это событие посылается на сервер и все. То, что у тебя на клиенте зенитки попадают по другим игрокам - ничего не значит. Они в это время могут быть уже бог знает где.

Вобщем, я опишу от и до, как я представляю сетевой алгоритм "Ил-2". Это все мое личное мнение, я этот алгоритм в "Ил-2" не реализовывал, но не вижу никаких препятствий к его реализации в "Ил-2", кроме того, по моим наблюдениям, именно такой или очень похожий алгоритм реализован в симе. Попробуй найди хоть одно несоответствие между этим алгоритмом и тем, что мы видим в "Ил-2".

Чем занимается клиент и чем сервер?
Клиент
1. Самолет игрока. Считает положение и координаты своего самолета. Рассчитывает ФМ. Передает на сервер координаты, векторы скорости и векторы ускорения самолета игрока. Сообщает серверу такие события как выпуск шасси, выброска игрока с парашютом и т.п.
2. Самолеты противника. Принимает от сервера те же координаты, скорости, ускорения самолетов других игроков. Отрисовывает их в своем пространстве с учетом интерполяции между пакетами. В случае обрыва связи отрисовывает их на основе экстраполированных данных (самолеты, улетевшие в гиперспейс) Также принимаются и отображаются события о стрельбе.
3. Столкновения. Проосчитываются столкновения с землей, наземными объектами и самолетами противника в своем пространстве. Здесь есть глюк - если ты столкнулся с противником при большом пинге, то умираешь только ты, противник как ни в чем не бывало летит дальше. В онлайне такое наблюдал не раз.
4. Стрельба. Просчитываются попадания только клиента по самолетам других игроков. События о попадании (идентификатор противника, куда попал, каким снарядом) - отсылаются на сервер. Также отсылаются события о начале и окончании стрельбы (время, тип оружия) для того, чтобы на клиентах других игроков отображать стрельбу.
То, как на клиенте отображается стрельба других игроков - чистая бутафория, они не наносят повреждений, повреждения могут причиниться только после сообщения от удаленного клиента о попадании.
5. Наземные объекты. При разрушении игроком наземного объекта это событие посылается на сервер. Если ИИ объекты атакуют друг друга и есть попадание, то клиент не отображает уничтожение объекта. Отображаются уничтожение наземных объектов самолетами других игроков и наземными ИИ с сервера.
6. ЗА - на клиенте игрока действует только по самолету игрока. В случае попадания по самолету игрока соответствующее событие посылается на сервер. По самолетам других игроков в пространстве клиента она стреляет, но попадания не причиняют вреда.
7. Стрелки на многоместных самолетах (боты стрелки). Считается так же само, как ЗА, т.е на машинах "жертв".
8. Стрелки-люди (кооп). Попадания считаются на клиенте стреляющего аналогично обычной стрельбе.

Сервер. Кроме всего перечисленного выше для игрока сидящего на сервере производит:
1. Боты в кооп. Полностью считаются на сервере. Отсылаются клиентам точно так же, как и другие удаленные клиенты. Т.е. для клиента приходит абсолютно одинаковая информация как об самолетах других игроков, так и о самолетах ботов.
2. Полностью считаются наземные ИИ, воюющие друг с другом. В случае уничтожения к-нить объекта наземным ИИ сообщение об этом рассылается всем клиентам для корректного отображения.
3. Выполняет роль маршрутизатора между клиентами.

Преимущества и недостатки расписывать? Первых гораздо больше :)

viczz
05.06.2002, 15:14
Ed ну а как поступим с описаной ситуацией лобовой атаки?

AlexH
05.06.2002, 15:33
quote:

Originally posted by Ed:
3. Столкновения..... Здесь есть глюк - если ты столкнулся с противником при большом пинге, то умираешь только ты, противник как ни в чем не бывало летит дальше. В онлайне такое наблюдал не раз.


Маленькое уточнение (я летаю с маленьким 10-40 пингом), если я въезжаю в кого то, то погибаю я; если в меня въезжает кто то, то погибает он.

jk
05.06.2002, 15:47
Как зенитки могут рассчитывать попадания по объекту, до реального состояния которого может быть до 2-х секунд времени (пинг до С и до удаленного К):confused:
С трудом-с. :) (как я уже отвечал на это).
Еще раз обращаю внимание на то, что часть рассчетов делается всегда в прошлом. Всегда попадания сообщаются с задержкой. И когда ИИ узнает, что Хмс назад такой-то крафт находился в таком-то положении, он сообщает "ну тогда, я Х мс назад выстрелил туда-то".

Ладно, представим ситуацию. Самолет вошел в пикирование, и на клиенте пилот в последний момент дернул РУС на себя. Пакет об этом событии пришел на сервер с запозданием, когда на сервере самолет этого игрока уже врезался в землю. Что должен делать сервер? Какие коллизии считать?
Пункт 8, где это все описывается, похоже никто не читал. Согдасен, он самый не понятный, но я полагал, что по поводу него и будут вопросы.
На сервере самолет игрока еще не врезался в землю. Он вообще не сдвинулся с места, пока игрок не прислал тот самый пакет, в котором сообщил, что клиент дернул РУС. Он сдвинулся с места у клиентов, т.к. им нужно нарисовать его.
А сервер по-быстрому (ну, как смог :) ) прокрутил движение самолета влоть до момента дергания РУСа. Дальше- он не имеет право прокрутить, т.к. это был последний пакет и что было дальше- он не знает. Сервер живет всегда в прошедшем времени. Более того- время движется свое у каждого объекта (или группы объектов).

Ладно, пусть сервер ждет 500мс, пока придет следующий пакет, а до этого что он должен сделать?
А до этого он должен обсчитыветь другие пакеты, которые уже пришли.

Ed
05.06.2002, 16:15
quote:

Originally posted by viczz:
Ed ну а как поступим с описаной ситуацией лобовой атаки?

Да как? Ведь сообщение о смерти сервер генерирует. Он посчитает, какое событие было раньше и того клиента "убьет". Тоже, если два одновременно обстреливают одну жертву.
Тут куча приколов может быть... Например, одна и та же зенитка на разных клиентах может одновременно два самолета сбить. Только никто этого не сможет увидеть, соответственно претензии некому предъявлять :)

Ed
05.06.2002, 16:47
deCore

Поиграй хоть раз в онлайн, и ты поймешь, что неправ. Возможно, такой алгоритм и подходит для чего-то, но явно не для поршневого сима.

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

viczz
05.06.2002, 17:37
2Ed
Следовательно выиграет в данном случае тот кто первый пришлет пакет с инфой о том что он попал, все сводится к пингу :)

Кстати (подумал, понравилось, надо чаще думать), ИИ ведет себя одинаково на всех компах, потому что треки то мы смотрим чужие, а значит что и зенитки на всех компах должны лупить одинаково, значит серваку надо просто сообщить\подтвердить клиенту о том что в него попали и какие повреждения он получил :)

jk
05.06.2002, 18:25
Ed
Ну уж нет, в онлайн меня не затащите. Здесь, вон, наезды только а там еще и стрелять будут... :)

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

Ed
05.06.2002, 19:24
quote:

Originally posted by viczz:
2Ed
Следовательно выиграет в данном случае тот кто первый пришлет пакет с инфой о том что он попал, все сводится к пингу :)


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

quote:

Originally posted by viczz:
Кстати (подумал, понравилось, надо чаще думать), ИИ ведет себя одинаково на всех компах, потому что треки то мы смотрим чужие, а значит что и зенитки на всех компах должны лупить одинаково, значит серваку надо просто сообщить\подтвердить клиенту о том что в него попали и какие повреждения он получил :)

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

FilippOk
06.06.2002, 05:22
Почитал всё это. Простите, вопросы:
Откуда столько информации? И где ее достать(ссылки, если можно :) )? Это информация от разработчиков или догадки? Если догадки, тогда это все ерунда, спасибо, до свидания. :)

Marder
06.06.2002, 08:53
quote:

Originally posted by viczz:

Смущает собственно возникновением спорных ситуаций и возможностью чита. Например двое идут в лобовую, палят и каждый кричит о том что я попал, я его убил, разовал в клочья. Или двое на хвосте у третьего и опять все типа попали и убили. Так кому сервак то должен верить, кому записать кил?


Что значит кому ? :)
Все просто летят 2 дятла у одного пинг допустим 300 у другого 50.
Сходятся в лобовой, стреляют попадают :)
Ессно попадания придут и к тому и к другому с задержкой, но каждый имеет шанс убить другого, пока не получит команду о сервера о том что ему снесли крыло, баки, пилота. Все в общемто равной ситуации и проблем с определением кто кого убил я не вижу, потому как смерть или поломка самолета наступит только тогда когда прибегут пакеты об этом от сервака, правда иногда изза особо лаговых товарищей, допустим из бразилии можно будет наблюдать картину...сошлись в лобовой, ты его распилил, а через 2 секунды лопаешся сам...но тут уже ничего не поделаешь какой бы сетевой протокол небыл, объективная фигня так сказать :)
А что до кила от 2-х и более дятлов - тут уже от сервера зависит, либо выбирать главным дятлом по массе воткнутого свинца, либо по кол-ву критических повреждений либо....как сделают.


quote:



С зенитками вообщем тотаже фигня, серваку проще передать что зенитка выстрелила в таком то направлении и в случа если попала, то в кого и каковы последствия, чем сначала передать в кого нацелена, потом получать инфу от клиента о том выстрелила ли и в кого попала да еще потом рассылать эту инфу всем клиентам заново.

Гм а зачем так сложно, сервак сказал зенитка такаято стреляет по томуто (и все), а тот самый томуто по которому она стреляет передает сообщения только о факте попадания в себя на сервер и все, остальные же клиенты видят фейерверк в направлении тогото :) И где тут неимоверные утечки трафика ?

Ed
06.06.2002, 11:30
quote:

Originally posted by FilippOk:
Почитал всё это. Простите, вопросы:
Откуда столько информации? И где ее достать(ссылки, если можно :) )? Это информация от разработчиков или догадки? Если догадки, тогда это все ерунда, спасибо, до свидания. :)

Открою тебе страшную тайну - головой можно пользоваться не только для того, чтобы кушать и нею запоминать, но еще и думать. Пробуй думать - тебе понравится :) Вот viczz'у очень понравилось, мне собсно тоже.
Насчет ссылок - почитай forum.wbfree.net, там проскакивала куча информации по поводу реализации сетевого алгоритма WB.

arslan
06.06.2002, 13:17
Почерпнул много как полезной так и не очень :) информации. Вот еще информация к размышлению. Сетка у нас маленькая - 4 компа, стоит вилка. Ситуация такая играли вдвоем - я был клиентом, повис на хвосте, расстрелял так, что он взорвался, ну и конечно спрашиваю: "Как я тебя разорвал?!". На что получаю ответ: "Окстись, я как летел так дальше и лечу". Подтвердили несколько человек. И в точности такая же ситуация произошла когда я был сервером. Вот и думай как релизован клиент-сервер. Интересная ситуация получается :) .

jk
07.06.2002, 14:18
arslan
Вам, батенька в тех. суппорт с вопросом: Как правильно ставить патчи и заклеивать дырки в памяти.