Re: различия online и offline
Цитата:
quote:
Originally posted by viczz:
Насчет того как сделано или как должно быть, так я написал о том что видно в самой игре и предположил как это сделано из соображений того как бы это реализовал я сам (блин масло масляное)
С знитками точно так не выйдет, потому как они стрелять и попадать должны по всем, а если вдруг клиент сообщит серверу что мол на его стороне зенитки перебили всех клиентов, в тот момент когда другой клиент сообщает что сбили только половину :)
Дык клиенты о попаданиях ничего не сообщают. Написано же- все (в т.ч. и с зениток) коллизии вычисляет сервер, и сообщает, что твоя зенитка того-то подстрелила.
А трафика зенитки много не слопают, тут передать надо тока ID зенитки и вектор выстела.
Когда расчеты дублируются- вектора можно расчитать самому. Важен только сам факт (и время) выстрела.
Чем больше расчетов на сервере тем меньше возможность чита :)
sic. Я не говорил об этом (ибо вопрос не поднимался), но главным преимуществом расчетов попаданий на сервере считаю именно это. Отловить пакет, в котором твой клиент сообщает попадание довольно просто. Весьма элегантное решение: все такие пакеты дублировать раз по 10. Эффективность твоего огня увеличится в 10 раз, а потом пусть докажут, что ты гнусный читер...
Re: различия online и offline
Если все же сошлись на том что все считает сервак то базара нет клиенты ничего не сообщают, о попаданиях, просто я имел ввиду суждение о том что зенитки у клиента.
Когда расчеты дублируются- вектора можно расчитать самому. Важен только сам факт (и время) выстрела.
вот этого я не понял что то. какие расчеты и где и главное зачем дублировать?
я рассматриваю ситуацию того что сервак предает информацию о том какая зентка выстрелила и в какую сторону, ведь логично что просто одного факта выстрела мало, надо знать по кому, если ты предлагаешь чтобы и мой комп расчитывал какие зенитки и куда лупят паралельно с серваком то нафига спрашивается, а если у меня машина тормоз и где то что то пропустит, ведь тут еще придется синхронизировать эти выстрелы растрачивая драгоценный трафик.
Re: различия online и offline
Народ а чем вас именно смущает обработка факта попадания (не расчет повреждений, а сам факт ) на клиенте ? В любом случае если пинг не 10-20мс игра превратится в погоню за тенью...но расчеты на клиенте позволят поставить всех в более менее равное положение, не будет такого маразма как в кваке, где игрок с пингом 20 имеет шанс убить игрока и не получить повреждений с пингом 300 даже если они выстрелили в друг друга одновременно.
Да и к томуже кому охота вычислять необходимое упреждение перед противником, причем даже не перед ним, а перед хрен знает чем :)
А насчет зениток (AI), сервер может передавать инфу клиентам о том на кого в данный момент наведена зенитка (допустим если он ближе всего к зенитке) и трафик будет оччень мелкий :)
Re: различия online и offline
Цитата:
quote:
Originally posted by Marder:
Народ а чем вас именно смущает обработка факта попадания (не расчет повреждений, а сам факт ) на клиенте ? В любом случае если пинг не 10-20мс игра превратится в погоню за тенью...но расчеты на клиенте позволят поставить всех в более менее равное положение, не будет такого маразма как в кваке, где игрок с пингом 20 имеет шанс убить игрока и не получить повреждений с пингом 300 даже если они выстрелили в друг друга одновременно.
Да и к томуже кому охота вычислять необходимое упреждение перед противником, причем даже не перед ним, а перед хрен знает чем :)
А насчет зениток (AI), сервер может передавать инфу клиентам о том на кого в данный момент наведена зенитка (допустим если он ближе всего к зенитке) и трафик будет оччень мелкий :)
Смущает собственно возникновением спорных ситуаций и возможностью чита. Например двое идут в лобовую, палят и каждый кричит о том что я попал, я его убил, разовал в клочья. Или двое на хвосте у третьего и опять все типа попали и убили. Так кому сервак то должен верить, кому записать кил?
С зенитками вообщем тотаже фигня, серваку проще передать что зенитка выстрелила в таком то направлении и в случа если попала, то в кого и каковы последствия, чем сначала передать в кого нацелена, потом получать инфу от клиента о том выстрелила ли и в кого попала да еще потом рассылать эту инфу всем клиентам заново.
Re: различия online и offline
Почему это не может быть реализовано.
Цитата:
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мс, пока пакеты о стрельбе придут на сервер.
Re: различия online и offline
Зенитки также считаются на клиенте. Какой смысл их считать на сервере?
Если ты влетел в зону действия ЗА и в тебя попал снаряд, то это событие посылается на сервер и все. То, что у тебя на клиенте зенитки попадают по другим игрокам - ничего не значит. Они в это время могут быть уже бог знает где.
Вобщем, я опишу от и до, как я представляю сетевой алгоритм "Ил-2". Это все мое личное мнение, я этот алгоритм в "Ил-2" не реализовывал, но не вижу никаких препятствий к его реализации в "Ил-2", кроме того, по моим наблюдениям, именно такой или очень похожий алгоритм реализован в симе. Попробуй найди хоть одно несоответствие между этим алгоритмом и тем, что мы видим в "Ил-2".
Чем занимается клиент и чем сервер?
Клиент
1. Самолет игрока. Считает положение и координаты своего самолета. Рассчитывает ФМ. Передает на сервер координаты, векторы скорости и векторы ускорения самолета игрока. Сообщает серверу такие события как выпуск шасси, выброска игрока с парашютом и т.п.
2. Самолеты противника. Принимает от сервера те же координаты, скорости, ускорения самолетов других игроков. Отрисовывает их в своем пространстве с учетом интерполяции между пакетами. В случае обрыва связи отрисовывает их на основе экстраполированных данных (самолеты, улетевшие в гиперспейс) Также принимаются и отображаются события о стрельбе.
3. Столкновения. Проосчитываются столкновения с землей, наземными объектами и самолетами противника в своем пространстве. Здесь есть глюк - если ты столкнулся с противником при большом пинге, то умираешь только ты, противник как ни в чем не бывало летит дальше. В онлайне такое наблюдал не раз.
4. Стрельба. Просчитываются попадания только клиента по самолетам других игроков. События о попадании (идентификатор противника, куда попал, каким снарядом) - отсылаются на сервер. Также отсылаются события о начале и окончании стрельбы (время, тип оружия) для того, чтобы на клиентах других игроков отображать стрельбу.
То, как на клиенте отображается стрельба других игроков - чистая бутафория, они не наносят повреждений, повреждения могут причиниться только после сообщения от удаленного клиента о попадании.
5. Наземные объекты. При разрушении игроком наземного объекта это событие посылается на сервер. Если ИИ объекты атакуют друг друга и есть попадание, то клиент не отображает уничтожение объекта. Отображаются уничтожение наземных объектов самолетами других игроков и наземными ИИ с сервера.
6. ЗА - на клиенте игрока действует только по самолету игрока. В случае попадания по самолету игрока соответствующее событие посылается на сервер. По самолетам других игроков в пространстве клиента она стреляет, но попадания не причиняют вреда.
7. Стрелки на многоместных самолетах (боты стрелки). Считается так же само, как ЗА, т.е на машинах "жертв".
8. Стрелки-люди (кооп). Попадания считаются на клиенте стреляющего аналогично обычной стрельбе.
Сервер. Кроме всего перечисленного выше для игрока сидящего на сервере производит:
1. Боты в кооп. Полностью считаются на сервере. Отсылаются клиентам точно так же, как и другие удаленные клиенты. Т.е. для клиента приходит абсолютно одинаковая информация как об самолетах других игроков, так и о самолетах ботов.
2. Полностью считаются наземные ИИ, воюющие друг с другом. В случае уничтожения к-нить объекта наземным ИИ сообщение об этом рассылается всем клиентам для корректного отображения.
3. Выполняет роль маршрутизатора между клиентами.
Преимущества и недостатки расписывать? Первых гораздо больше :)
Re: различия online и offline
Ed ну а как поступим с описаной ситуацией лобовой атаки?
Re: различия online и offline
Цитата:
quote:
Originally posted by Ed:
3. Столкновения..... Здесь есть глюк - если ты столкнулся с противником при большом пинге, то умираешь только ты, противник как ни в чем не бывало летит дальше. В онлайне такое наблюдал не раз.
Маленькое уточнение (я летаю с маленьким 10-40 пингом), если я въезжаю в кого то, то погибаю я; если в меня въезжает кто то, то погибает он.
Re: различия online и offline
Как зенитки могут рассчитывать попадания по объекту, до реального состояния которого может быть до 2-х секунд времени (пинг до С и до удаленного К):confused:
С трудом-с. :) (как я уже отвечал на это).
Еще раз обращаю внимание на то, что часть рассчетов делается всегда в прошлом. Всегда попадания сообщаются с задержкой. И когда ИИ узнает, что Хмс назад такой-то крафт находился в таком-то положении, он сообщает "ну тогда, я Х мс назад выстрелил туда-то".
Ладно, представим ситуацию. Самолет вошел в пикирование, и на клиенте пилот в последний момент дернул РУС на себя. Пакет об этом событии пришел на сервер с запозданием, когда на сервере самолет этого игрока уже врезался в землю. Что должен делать сервер? Какие коллизии считать?
Пункт 8, где это все описывается, похоже никто не читал. Согдасен, он самый не понятный, но я полагал, что по поводу него и будут вопросы.
На сервере самолет игрока еще не врезался в землю. Он вообще не сдвинулся с места, пока игрок не прислал тот самый пакет, в котором сообщил, что клиент дернул РУС. Он сдвинулся с места у клиентов, т.к. им нужно нарисовать его.
А сервер по-быстрому (ну, как смог :) ) прокрутил движение самолета влоть до момента дергания РУСа. Дальше- он не имеет право прокрутить, т.к. это был последний пакет и что было дальше- он не знает. Сервер живет всегда в прошедшем времени. Более того- время движется свое у каждого объекта (или группы объектов).
Ладно, пусть сервер ждет 500мс, пока придет следующий пакет, а до этого что он должен сделать?
А до этого он должен обсчитыветь другие пакеты, которые уже пришли.
Re: различия online и offline
Цитата:
quote:
Originally posted by viczz:
Ed ну а как поступим с описаной ситуацией лобовой атаки?
Да как? Ведь сообщение о смерти сервер генерирует. Он посчитает, какое событие было раньше и того клиента "убьет". Тоже, если два одновременно обстреливают одну жертву.
Тут куча приколов может быть... Например, одна и та же зенитка на разных клиентах может одновременно два самолета сбить. Только никто этого не сможет увидеть, соответственно претензии некому предъявлять :)
Re: различия online и offline
deCore
Поиграй хоть раз в онлайн, и ты поймешь, что неправ. Возможно, такой алгоритм и подходит для чего-то, но явно не для поршневого сима.
Насчет управляющих поверхностей... Для того, чтобы сервер мог успешно моделировать полет клиента у себя, их положение должно меняться плавно. А в твоем алгоритме получается дискретно. Что уже не позволяет на основе этих данных моделировать полет. А отсюда происходит то, что стрельбу мы не можем моделировать, т.к. не знаем, в какую сторону направлен крафт, а передавать координаты каждого снаряда - слишком накладно.
Re: различия online и offline
2Ed
Следовательно выиграет в данном случае тот кто первый пришлет пакет с инфой о том что он попал, все сводится к пингу :)
Кстати (подумал, понравилось, надо чаще думать), ИИ ведет себя одинаково на всех компах, потому что треки то мы смотрим чужие, а значит что и зенитки на всех компах должны лупить одинаково, значит серваку надо просто сообщить\подтвердить клиенту о том что в него попали и какие повреждения он получил :)
Re: различия online и offline
Ed
Ну уж нет, в онлайн меня не затащите. Здесь, вон, наезды только а там еще и стрелять будут... :)
А ничего дискретного у меня нет. Просто, клиент аккуратно фиксирует все изменения положений регуляторов и шлет в одном пакете. Ну если и здесь траффика не хватит, так и быть, может и сам кое-что рассчитать.
Re: различия online и offline
Цитата:
quote:
Originally posted by viczz:
2Ed
Следовательно выиграет в данном случае тот кто первый пришлет пакет с инфой о том что он попал, все сводится к пингу :)
Не обязательно. Возможно, сервер инициализирует какие-то внутрисессионные часы, и от них пляшет. Т.е. получится, что выиграет тот, кто рельно попал первым, а не с учетом пинга.
Цитата:
quote:
Originally posted by viczz:
Кстати (подумал, понравилось, надо чаще думать), ИИ ведет себя одинаково на всех компах, потому что треки то мы смотрим чужие, а значит что и зенитки на всех компах должны лупить одинаково, значит серваку надо просто сообщить\подтвердить клиенту о том что в него попали и какие повреждения он получил :)
Не совсем так. ИИ ведет себя одинаково в случае одинакового поведения игроков, а на разных клиентах картина может немного отличаться. Пример с зениткой - если он должна стрелять по ближайшей цели, то на разных клиентах эти ближайшие цели будут разными. Но какая вероятность этого? Очень мала... Но если это произойдет, то возможно, что одна и та же зенитка может поразить в одно время две цели. Критично это? Думаю, нет.
Re: различия online и offline
Почитал всё это. Простите, вопросы:
Откуда столько информации? И где ее достать(ссылки, если можно :) )? Это информация от разработчиков или догадки? Если догадки, тогда это все ерунда, спасибо, до свидания. :)
Re: различия online и offline
Цитата:
quote:
Originally posted by viczz:
Смущает собственно возникновением спорных ситуаций и возможностью чита. Например двое идут в лобовую, палят и каждый кричит о том что я попал, я его убил, разовал в клочья. Или двое на хвосте у третьего и опять все типа попали и убили. Так кому сервак то должен верить, кому записать кил?
Что значит кому ? :)
Все просто летят 2 дятла у одного пинг допустим 300 у другого 50.
Сходятся в лобовой, стреляют попадают :)
Ессно попадания придут и к тому и к другому с задержкой, но каждый имеет шанс убить другого, пока не получит команду о сервера о том что ему снесли крыло, баки, пилота. Все в общемто равной ситуации и проблем с определением кто кого убил я не вижу, потому как смерть или поломка самолета наступит только тогда когда прибегут пакеты об этом от сервака, правда иногда изза особо лаговых товарищей, допустим из бразилии можно будет наблюдать картину...сошлись в лобовой, ты его распилил, а через 2 секунды лопаешся сам...но тут уже ничего не поделаешь какой бы сетевой протокол небыл, объективная фигня так сказать :)
А что до кила от 2-х и более дятлов - тут уже от сервера зависит, либо выбирать главным дятлом по массе воткнутого свинца, либо по кол-ву критических повреждений либо....как сделают.
Цитата:
quote:
С зенитками вообщем тотаже фигня, серваку проще передать что зенитка выстрелила в таком то направлении и в случа если попала, то в кого и каковы последствия, чем сначала передать в кого нацелена, потом получать инфу от клиента о том выстрелила ли и в кого попала да еще потом рассылать эту инфу всем клиентам заново.
Гм а зачем так сложно, сервак сказал зенитка такаято стреляет по томуто (и все), а тот самый томуто по которому она стреляет передает сообщения только о факте попадания в себя на сервер и все, остальные же клиенты видят фейерверк в направлении тогото :) И где тут неимоверные утечки трафика ?
Re: различия online и offline
Цитата:
quote:
Originally posted by FilippOk:
Почитал всё это. Простите, вопросы:
Откуда столько информации? И где ее достать(ссылки, если можно :) )? Это информация от разработчиков или догадки? Если догадки, тогда это все ерунда, спасибо, до свидания. :)
Открою тебе страшную тайну - головой можно пользоваться не только для того, чтобы кушать и нею запоминать, но еще и думать. Пробуй думать - тебе понравится :) Вот viczz'у очень понравилось, мне собсно тоже.
Насчет ссылок - почитай forum.wbfree.net, там проскакивала куча информации по поводу реализации сетевого алгоритма WB.
Re: различия online и offline
Почерпнул много как полезной так и не очень :) информации. Вот еще информация к размышлению. Сетка у нас маленькая - 4 компа, стоит вилка. Ситуация такая играли вдвоем - я был клиентом, повис на хвосте, расстрелял так, что он взорвался, ну и конечно спрашиваю: "Как я тебя разорвал?!". На что получаю ответ: "Окстись, я как летел так дальше и лечу". Подтвердили несколько человек. И в точности такая же ситуация произошла когда я был сервером. Вот и думай как релизован клиент-сервер. Интересная ситуация получается :) .
Re: различия online и offline
arslan
Вам, батенька в тех. суппорт с вопросом: Как правильно ставить патчи и заклеивать дырки в памяти.