Вот насчёт плавно возвращаеться имхо правда. Просто плавно получаеться а-ля уфолёт с вертикальным взлётом.
Вид для печати
Вот насчёт плавно возвращаеться имхо правда. Просто плавно получаеться а-ля уфолёт с вертикальным взлётом.
"Клиент всегда прав" - ОЧЕНЬ спорное утверждение. Клиент может быть в лаге во время выстрела, жертва тоже может быть в лаге в этот момент. Из-за этого быть они оба могут совсем в разных точках - и что же теперь, засчитывать попадание?Цитата:
Originally posted by pwl
почти правильно, но сервер не интересует где реально была жертва. твой клиент сказал что ты попал, а клиент всегда прав...
сервер ждет сообщения от цели чтобы узнать какой эффект на нее произвело попадание
Жертва кстати тоже... того... клиент ;)
Я все-таки продолжаю считать, что сервер (как решающая, нейтральная сторона) один способен решить, было попадание или нет. Дать эту возможно компьютеру атакующего либо атакуемого, как мне кажется, некорретно.
Разумеется это мое имхо и так ли это все в ЗС я не знаю, но такой вариант очевиден и опровержений его я пока не видел.
"факт попадания фиксируется на стороне стреляющего" - это как? А если лобовая? Оба стреляли - кто прав?
Как мне обьяснили - причина лагов была не в сетевом коде, а в ошибке вычисления координат камеры... чего бы это ни значило... :)
Как гриться, хрен придерешься :DЦитата:
Originally posted by ROSS_Youss
в ошибке вычисления координат камеры... чего бы это ни значило... :)
Так имеет смысл стрелять по самолетом которые явно в лагге или нет ?
Если он из лага вернется- еще как имеет. Он же по прямой летит. Только надо вовремя остановиться, чтобы не весь БЗ в него всадить.Цитата:
Originally posted by Mephisto
Так имеет смысл стрелять по самолетом которые явно в лагге или нет ?
Вот это как раз ключевой вопрос.Цитата:
Originally posted by deCore
Если он из лага вернется- еще как имеет. Он же по прямой летит. Только надо вовремя остановиться, чтобы не весь БЗ в него всадить.
Мне почему-то кажется что стрелять по крафту в лаге бесмыссленно (кроме случая когда жертва действительно все время лага летит по прямой), поскольку когда связь восстановится и уточнится точное местоположение жертвы в момент стрельбы, и окажется, что все мимо - попадания учтены не будут.
Вообще это легко проверить - нужно "всего лишь" два компа под рукой в сетке с ЗС.
Нужно направить жертву прямолинейно, отрубить у нее сеть, после чего увести жертву в сторону, а атакующим пострелять по жертве в лаге. Потом подключить сеть и посмотреть результат. Очень интересно!
Может кто проведет такой эксперимент?
У меня нету просто двух компов сейчас которые потянут ЗС ;(
Программер наверно: Абсолютно точно и бесполезно =).Цитата:
Originally posted by ROSS_Youss
Как мне обьяснили - причина лагов была не в сетевом коде, а в ошибке вычисления координат камеры... чего бы это ни значило... :)
Кстати где-нить описан протокол/реализация (идеологическая) онлайна ?
Ты предлагаешь зделать как в Quake. А это означает, что ни один чел с пингом больше 150-200 нормально играть не сможет никогда.Цитата:
Originally posted by dets
"Я все-таки продолжаю считать, что сервер (как решающая, нейтральная сторона) один способен решить, было попадание или нет. Дать эту возможно компьютеру атакующего либо атакуемого, как мне кажется, некорретно.
Разумеется это мое имхо и так ли это все в ЗС я не знаю, но такой вариант очевиден и опровержений его я пока не видел.
Я ПРОВЕРЯЛ! Все так как я писал. Уже давно проверено. При обсчете всего сервером в большинстве случаев никто никуда не попадет при таких скоростях. Лучше уж так как есть - дает возможность играть в сети большому количеству людей со всей страны и даж мира. Сам представь: допустим пинг у нас с тобой по 200. В сумме 0.4 секунды. При скорости 300 км/ч цель в реале находится в 80 метрах от видимого места. Как будешь попадать?Цитата:
Originally posted by dets
Вот это как раз ключевой вопрос.
Мне почему-то кажется что стрелять по крафту в лаге бесмыссленно (кроме случая когда жертва действительно все время лага летит по прямой), поскольку когда связь восстановится и уточнится точное местоположение жертвы в момент стрельбы, и окажется, что все мимо - попадания учтены не будут.
....................
Может кто проведет такой эксперимент?
У меня нету просто двух компов сейчас которые потянут ЗС ;(
А что проверял? То что я предалагал проверить? И какой результат то?Цитата:
Originally posted by boRada
Я ПРОВЕРЯЛ! Все так как я писал. Уже давно проверено. При обсчете всего сервером в большинстве случаев никто никуда не попадет при таких скоростях. Лучше уж так как есть - дает возможность играть в сети большому количеству людей со всей страны и даж мира. Сам представь: допустим пинг у нас с тобой по 200. В сумме 0.4 секунды. При скорости 300 км/ч цель в реале находится в 80 метрах от видимого места. Как будешь попадать?
А насчет 80 метров - да действительно, но через 0.2 секунды сервер узнает где ты находишься теперь, твое новое местоположение. Также он узнает и мое местоположение и тот факт что я стрелял. Таким образом сервер знает твою траекторию (пусть это две точки, но другого не дано). А также серверу известно траектория полета моего снаряда. Сервер может сопоставить эти траетории и определить, пересекались ли они. Я не утверждаю что так оно и присходит, но это логично - согласись!
Давай отвлечемся. Представь - есть боевое столкновение. Кто-то по кому-то стрельнул. Есть три стороны - атакующий, жертва, сервер:
1) однозначно, кто-то должен сопоставить траектории полета снаряда и жертвы. Иначе ничего не будет вообще.
2) однозначно, этот кто-то должен быть _один_ из трех вышеперечисленных. Один - потому что если таких будет больше, кто-то решит что попадание было, кто-то - что не было - будет коллизия. А ведь этот один должен еще всем разослать результат - было попадание или нет.
Согласен с пунктами?
Если да, то по каким причинам ты думаешь что этот один - не сервер?
Во-первых вопрос - почему ты так думешь? Как это следует из того что я сказал?Цитата:
Originally posted by MoHaX
Ты предлагаешь зделать как в Quake. А это означает, что ни один чел с пингом больше 150-200 нормально играть не сможет никогда.
Во-вторых, "нормальная" игра в квейк где игрок может в любую милисекунду переместиться в трехмерном пространстве при пинге больше 300-400 не существует в принципе. Поэтому я говорю не про quake! Я говорю про ЗС. Самолет (или снаряд) не может моментально полететь назад или вбок. Именно поэтому мы может играть в ЗС при пинге 400-500. И именно поэтому есть возможность _в_принципе_ рассчитать траекторию движения самолета по двум точкам, интерполировать ее и получить близкую к реальной траекторию.
Блин да не надоело обсуждать то всё уже полтора года (с выхода ил-2Ш), а то и раньше.
Попадания на стороне КЛИЕНТА обсчитываются, ущерб от них - на стороне ЦЕЛИ. Сервер только пересылает и рассылает информацию остальным участникам (если сам не играет в данный момент). По-другому никак не сделать, если играть через интернет.
Нет 23AG_Oves ты частично не прав, сервер не только пересылает инфрмацию но и следит за её корректностью. Например для написанного тобой - сервер сам считает повреждения нанесенные цели и ей уже передает, что её пробило - оторвало. И следит, чтобы цель корректно на это отреагировала, например если до цели не дойдут пакеты с повреждениями за определенное кол-во секунд, то сервер её кикнет.
это атакующий.Цитата:
Originally posted by dets
Давай отвлечемся. Представь - есть боевое столкновение. Кто-то по кому-то стрельнул. Есть три стороны - атакующий, жертва, сервер:
1) однозначно, кто-то должен сопоставить траектории полета снаряда и жертвы. Иначе ничего не будет вообще.
это свыше.Цитата:
2) однозначно, этот кто-то должен быть _один_ из трех вышеперечисленных. Один - потому что если таких будет больше, кто-то решит что попадание было, кто-то - что не было - будет коллизия. А ведь этот один должен еще всем разослать результат - было попадание или нет.
Согласен с пунктами?
Если да, то по каким причинам ты думаешь что этот один - не сервер?
2 dets Есть дофига способов более хитрых подходов. Пример: CS стреляешь, клиент примерно знает куда попадёшь, если попал, то рисует попадание, кровь, все дела. Потом Сервер уже обсчитывает кто куда попал, и сответственно хелсы отнимает. Можно заставить клиента говорить серверу попал он или нет, отрисовку и обсчёт патронов на клиентов - каждому своё, если попали в тебя, то с задержкой 0.4 секунды тебе покажут взрыв.
Идеал конечно - кваковский вариант, но не с таким пингом.
Мы говорим о том как хотеось бы, или о том как есть?Цитата:
Originally posted by dets
А что проверял? То что я предалагал проверить? И какой результат то?
........Если да, то по каким причинам ты думаешь что этот один - не сервер?
Проверял на модем-модем. В сетке проблематично тыкатся шнуром.
Типичная ситуация(сервер-напарник), подобную наверняка видели все: лечу за ботом - с 6 даю несколько очередей, вижу вспышки от попаданий(значит всеж у МЕНЯ попадания идут?), через секунду он оказался в 300-500 метрах сбоку (оказывается он во время лага моего, резко дал влево) и тут же у него отваливается крыло. Там, в стороне. Так как это был бот - значит с сервера только что пришли повреждения вместе с новым местоположением. Т.е. реально я стрелял в пустое место (для сервера) Сервер в этот момент точно знает где цель-бот. Если противник не бот, а сервер сторонний, то с точки зрения сервера, если у нас пинг достаточно большой, мы всегда будем находится не там, где видим у себя на компах, "скорость самолета / пинг" даст большую погрешность, значит сервер будет "идиотски хохотать", глядя как мы лупим далеко мимо цели.
Меня это иногда подводит. Смотрю, вражина на шесть заходит, встаешь в вираж и с интересом смотришь как он, под углом ко мне градусов 45 и более, страстно поливает из всех шлангов, очереди идут далеко мимо и ВДРУГ, к удивлению у меня начинают отваливаться запчасти, а часто уже на это некому смотреть - ПК.
Повторюсь - это типичные ситуации, на основе которых я сделал свои выводы. Разработчики никогда наверно не признаются, как на самом деле обстоят дела.
А это и есть мой подход! ;)Цитата:
Originally posted by MikeR
[B]2 dets Есть дофига способов более хитрых подходов. Пример: CS стреляешь, клиент примерно знает куда попадёшь, если попал, то рисует попадание, кровь, все дела. Потом Сервер уже обсчитывает кто куда попал, и сответственно хелсы отнимает.
Все правильно - клиент стреляет (причем точно знает куда), и рисует как он стреляет и даже вспышку попадания в жертву.
А сервер сопоставляет все данные от атакующего и жертвы и делает вывод было попадание или нет.
Из этого следует очень важный вывод. Пока сервер не подтвердит что попадание было, комп атакующего может рисовать хоть сколько вспышек от попаданий, но жертва НИКОГДА не разваливается и не падает! Комп атакующего ждет подтверждения что попадание действительно было, после чего жертва получает положенные ей повреждения.
Именно этот факт рождает 1000 писем (половину от всего количества по этой теме) в месяц на этом форуме о том что какой-то крафт бетонный, мол в него попали 4 37 мм снаряда а он летит дальше. А они в него не попадали вовсе. Просто не было подтверждения попадания из-за того что реальные траектории полета снаряда и жертвы не совпали.
А вот вопрос - почему ты так решил?Цитата:
Originally posted by pwl
это атакующий.
Может быть это и так на самом деле. Но подумай - атакующему чтобы сопоставить траекторию полета своего снаряда и жертвы нужно вдвое (если пинг обоих участников равен) больше времени чем серверу.
А теперь представь - узнал атакующий что было например попадание - ему же нужно ВСЕМ другим игрокам разослать информацию об этом. Ну пусть он не сам рассылает каждому, а отсылает на сервер, и тот уже потом совершает "массовую рассылку" на каждого игрока. Все равно время, через которое обновится картинка у постороннего игрока (не участвующего в столкновении, зрителя) УВЕЛИЧИВАЕТСЯ как минимум на время пинга атакующего.
Теперь вопрос - ЗАЧЕМ такие сложности, если все эти функции можно возложить на сервер?
А нафига серверу обсчитывать все за всех? Ведь тогда и общую инфу он будет посылать каждому! И фиг ты на модеме поиграешь ! Я вот по 120 кб линии пробовал в СS поиграть - 1 фпс с долгими лагами, меня ножом просто резали.. А в ил и 14400 можно летать.
1. Не нужен пинг. Я стреляю и попадаю по тому "призраку", что у МЕНЯ на экране, ты читаешь о чем я писал в примерах? Оно мож и нечестно, но дает возможность вообще летать в сети не только по выделенке. А таких наверно всеж больше.Цитата:
Originally posted by dets
Но подумай - атакующему чтобы сопоставить траекторию полета своего снаряда и жертвы нужно вдвое (если пинг обоих участников равен) больше времени чем серверу.
А теперь представь - узнал атакующий что было например попадание - ему же нужно ВСЕМ другим игрокам разослать информацию об этом. Ну пусть он не сам рассылает каждому, а отсылает на сервер, и тот уже потом совершает "массовую рассылку" на каждого игрока. Все равно время, через которое обновится картинка у постороннего игрока (не участвующего в столкновении, зрителя) УВЕЛИЧИВАЕТСЯ как минимум на время пинга атакующего.
Теперь вопрос - ЗАЧЕМ такие сложности, если все эти функции можно возложить на сервер?
2. Да задержки в показе есть. Иногда вообще, смотришь - летят два самолета метров в 100 друг от друга, и вдруг оба разваливаются. Оказывается у кого-то из них на компе они столкнулись. Глюкаво - да. Но повторюсь я согласен на такое за возможность летать в инете.
сервер не считает повреждения цели - их считает сама машина цели. Т.е. на машину цели приходят данные о попаданиях и программа (ил2 ЗС в данном случае) в соответствии с моделью повреждений решает, какой ущерб нанесён. И отправляет обратно на сервер, который пересылает атакующему и всем остальным данные о повреждениях.Цитата:
Originally posted by operok
...сервер сам считает повреждения нанесенные цели и ей уже передает, что её пробило - оторвало.
В догонку, службу QoS отключать совсем не надо, потому что она все равно при этом будет жрать 20%. Ей просто нужно указать вместо 20% 0%, и проверить стоит ли галочка этой службы в свойствах соединения...
Это к чему вдруг про качество-в-обслуживании вспомнили?
Кстати добраться до этой диковинки, кою инородцы-буржуины повыдумали можно только через хитрое окошко заморское аки зовущееся консолью (типа gpedit.msc)