Вообще при разработке таких вещей приходится чем-то жертвовать - или чтобы цель корректно видела, когда в нее стреляют, или атакующий. Одновременно они это видить неспособны - ведь сигналы распространяются с конечной скоростью.
Вид для печати
Вообще при разработке таких вещей приходится чем-то жертвовать - или чтобы цель корректно видела, когда в нее стреляют, или атакующий. Одновременно они это видить неспособны - ведь сигналы распространяются с конечной скоростью.
Люди не путайте безобидный лаг (если он конечно не 2 секунды :) и потерю связи...приводящую к варпам в гиперспейс :)
Кстати о лаге в 15 секунд...заманчиво конечно...но я думаю с таким пингом с сервака кикнут или просто туда не пустят...а во вторых можно просто игнорировать пакеты попаданий или возвращать их владельцу, шоб неповадно было из варпа по людям стрелять.
А расчет надо делать на клиенте !!! :)
Меня пугает всеобщая осведомленность по части обсчета координат, снарядов и прочая. ВЫ ДЕЙСТВИТЕЛЬНО ЗНАЕТЕ или только строите предположения? Если второе - тады об чем флейм? :)
У нас не флейм, а спор. :)Цитата:
quote:
Originally posted by Zerg:
Меня пугает всеобщая осведомленность по части обсчета координат, снарядов и прочая. ВЫ ДЕЙСТВИТЕЛЬНО ЗНАЕТЕ или только строите предположения? Если второе - тады об чем флейм? :)
И разумеется точно никто не знает, можно только предполагать. А иначе чего бы было спорить - просто знали бы и все! :)
Но все выдается с такой уверенностью и неприятием чужого мнения. :) "...полный бред..." :)
а тогда бы спорили как нужно было сделать. было б с кем, а о чем спорить это без проблем.Цитата:
quote:
Originally posted by dets:
И разумеется точно никто не знает, можно только предполагать. А иначе чего бы было спорить - просто знали бы и все! :)
Если человек сказал бред, то почему бы не назвать это бредом? Форум - публичное место, и если ты в вопросе ничего не рубишь, то зачем писать? Был топик, где обсуждали, что в онлайне графика не тормозит, потому что сервер часть графики считает. Я - программиcт, и сталкивался с такими заморочками, rgreat и Marder собаку съели на он-лайновых симах... Дело они говорят.Цитата:
quote:
Originally posted by Zerg:
Но все выдается с такой уверенностью и неприятием чужого мнения. :) "...полный бред..." :)
Плохо, что Африку забанили, он бы в популярных выражениях объяснил, где и что должно считаться :)
Ну мне например как программисту просто интересно как это сделано на самом деле. Поэтому я внимательно читал что написано в посте и предлагал свои идеи.Цитата:
quote:
Originally posted by Zerg:
Но все выдается с такой уверенностью и неприятием чужого мнения. :) "...полный бред..." :)
А насчет уверенности - разумеется я не знаю как это сделано в Ил-2, поскольку я не разработчик, поэтому и пишу "я думаю" и "мне кажется".
А вы пробовали летать с пингов в 3000? Сбивать конечно проще, успеваешь всадить хорошую очередь в врага до того как он начнет маневрить. Но с другой стороны, ты будешь только видеть заходящего тебе в хвост врага, хотя на самом деле ты уже обречен.
Попробуй с пингом в 3 сек пойти с кем-то в лобовую, будешь приятно удивлен результатом. После расхождения при попытке развернутся будет либо пилот убит либо самолет поломан.
В чем-то ты и прав, но сейчас народ на форуме все больше говорит, а не слушает. Зачем пустозвонство разводить, если ты не спец в этом деле?Цитата:
quote:
Originally posted by Zerg:
Знаешь какая разница между "полный бред" и "извини, но ты не прав"? Желание задеть. Коль ты в данной области крут - молодец,но и не забывай - есть много областей в которых ты (да и я тоже) не совсем компетентен, но наверняка пытался высказывался :) "...Форум - публичное место..." Дык почему тогда не назвать оппонента просто козлом? Или ламером? Если так, то хорошо, что Африку забанили ИМХО. Граница "публичности" - понятие растяжимое...
З.Ы. Никого не хотел обидеть, ессно :)
Насчет Африки - как раз в этом топике очень интересно было бы послушать - его квалификация в этом деле лучше, чем у всех здесь высказавшихся. Ну что ж, если тебе больше по душе ламерское пустозвонство...
А где,был бред ты так и не указал.Цитата:
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".
[b]Так оно и есть в "Ил-2" - клиент высылает данные о попадании в бензобак, к примеру, данные попадают на сервер, тот решает, что жертва взорвалась, и рассылает всем это событие.[b]
Очень хорошо. Я не утверждал, что ил2 работает по моей схеме. И даже не говорил, что он должен так работать. Даже не говорил что так будет правильно. Я просто сказал, что данная схема не только имеет право на жизнь, но и имеет преимущества по сравнению со схемой, когда попадания обсчитываются на клиенте стрелка.
Сервер действительно рассылает всем событие о взрыве.
А теперь вопрос- на кой хрен серверу посылать клиенту стрелка сообщение о взрыве, когда клиент сам может не только рассчитать коллизию, но и дамадж, и послать серверу (для последующей пересылки остальным) именно эту информацию. Кто там говорил о распределении вычислений?
(Кстати, сам я на этот вопрос ответить могу)
Ты в онлайне хоть раз был?
Нет. Я что-то написал про Ил2?
Это не ты рассуждал, что расчет графики клиент и сервер делят?
Нет. И честно, говоря твои наезды меня несколько достали. Большая просьба указать конкретно на то, что именно в моих словах заставляет подозревать во мне идиота. Тебе Zerg недоходчиво намекнул о твоем поведении? Перечитай, пожалуйста, мои сообщения (их всего два).
Ну блин, достали. Не хочу спорить. Как об стенку.
Я не говорил, что ты идиот. Найди такое в моем посте. Я допускаю, что ты в жизни очень приятный и умный человек, но врядли ты обладаешь достаточной квалификацией, чтобы рассуждать о сетевом алгоритме "Ил-2". Ты даже в он-лайне не бывал. Но ты споришь. Я ничего не знаю о сетевых алгоритмах шутеров, я об этом и не рассуждаю.
Насчет снарядов - есть очень простое решение - передавать не координаты снарядов, а нажатие кнопки игроком. И вместо посылки сотен снарядов с координатами посылается флаг "кнопка 1 нажата". Или "кнопка 1 отпущена". Все. Какой алгоритм лучше?
Насчет dets'а я ни слова не говорил.
Дальнейшее продолжение спора я считаю бесполезным. Я бы с удовольствием поспорил с тем же Африкой, чтобы он убедил меня в преимуществе того или другого алгоритма. Но не с людьми, которые говорят о третьем варианте, в котором "НИКТО не видит, кто куда и откуда на самом деле стреляет. И это получается более "справедливо"."
Хех. А кто на предыдущей странице постил такое:Цитата:
quote:
Originally posted by Ed:
Насчет снарядов - есть очень простое решение - передавать не координаты снарядов, а нажатие кнопки игроком. И вместо посылки сотен снарядов с координатами посылается флаг "кнопка 1 нажата". Или "кнопка 1 отпущена". Все.
Ы?Цитата:
quote:
Я частенько летаю с пингом около 800 - это почти секунда. С таким пингом я бы никуда не попал. Попадания анализируются на компе стреляющего.
Т.е. анализ попаданий - это посылка флажка нажатия кнопки? :) И кто-то что-то говорил про бред? :)
Ты сам, блин, достал.
Это- именно тебе как об стенку! Или ты не читаешь чужие посты вообще? Если да- говори по делу. Или не говори вообще.
Я еще не сталкивался на форуме с тем, чтобы кто-нибудь об*срал чье-то мнение ("полная *йня, ты вааще кто такой??!"), вполне сдраво выглядещее, не удосужевшись привести аргумент. Как только я указал на это, некто заявл, что я г*но а не программист, перейдя таким образом на личности.
Пусть фразы звучали и не так в точности, или даже совсем не так :) , но поверь мне на слово, выглядят они именно так, и не только для меня, ибо, ИМХО, форма- вторична (во всем кроме искусства).
Таким образом, пока не прозвучат аргументы, по которым мои профессиональные навыки ставятся под сомнение (с чем я, ксати, совершенно не согласен, и до этого момента никто на них не жаловался), твои высказывания будут восприняты исключительно как личное оскорбление. Если же такие аргументы прозвучат, и окажутся убедительными, а не личной интерпретацией собственных бессознательных реакций, то я не буду иметь никаких претензий и извенюсь перед всеми за то, что заставил читать свою ерунду.
[ 03-06-2002, 16:44: Сообщение отредактировано: deCore ]
Блин, устал уже. Если не понял сути, то так и скажи, что не понял, а не говори о бреде.Цитата:
quote:
Originally posted by Arankhalla:
Т.е. анализ попаданий - это посылка флажка нажатия кнопки? :) И кто-то что-то говорил про бред? :)
Если попадания анализируются на компе стреляющего, то снаряды никуда посылать не надо! Посылается флаг, что стреляет пушка, на компах других игроков это не более чем фейерверк, ведь надо же как-то показать, что противники стреляют, трассы, звуки. А попадания просчитываются на компе стреляющего и потом отсылаются серверу. А зачем на серваке это все дело синхронизировать? Да потому что летит один самолет, а после повреждения их может быть несколько, тьфу, обломки всякие полетят, а с этими обломками кто-то может столкнуться и т.п.
Еще есть вопросы?
ТИХА! :)
Я скажу. Мы все молодцы. Каждый - профессионал на своем месте. Дык и будем на этом самом месте и сидеть. В предмете спора из высказавшихся не парит никто (судя по флейму) :) .
Ed, все пучком, не разошлись в лобовой, с кем не бывало :) Почитайте вон лучше про дятлов :)
З.Ы."Зачем ругаться - у нас есть пушки" :)
deCore
Если есть желание - распиши свой алгоритм от и до - где что считается, что передается, что не передается, а потом я распишу свой и сравним, что лучше и для чего. А то за эмоциями я в твоем посте рациональных зерен выловить не могу.
Ed
Именно такой вопрос я и предвидел :) . Ладно, вариант с обработкой на сервере я опишу (правда уже не знаю в какой подробности) дабы ты имел основания как-то оценить мои профессиональные навыки. Но твое умозаключение было получено без этой информации, по-этому я и попросил описать КАК ты пришел к таким выводам. Хотя сам факт запроса дополнительной информации уже говорит о том, что они были сделаны безосновательно, не правда ли? :)
deCore
Давай посчитаем.
Возьмем крайний случай - ШКАС. Ты предлагаешь передавать координаты каждого снаряда на сервер
Клиент наплодил в своем виртуальном небе кучку снарядов. Разумеется, обсчитал их полет, но не коллизии. Когда пришло время слать очередной пакет, сложил их туда и послал серверу, который уже имеет координаты врага.
Мне немножко непонятно, что ты имел в виду под словом "обсчитал". Просто координаты? Или со скоростью? Лана, будем считать, что посылает начальные координаты и направление - вектор полета снаряда, будем считать что скорость сервер знает из типа снаряда. Примем, что в "Ил-2" точность координат - 2 знака после запятой - это видно в файле миссий. Т.е. это соответствует типу Long - 4 байта для описания одной координаты. Итого вектор для каждого снаряда будет иметь 6 координат по 4 байта - итого 24байта один снаряд. Таких снарядов один ШКАС выпускает 1600 в секунду. Итого только для одного ШКАСа надо иметь пропускную способность 38400байт/с (кошмар интернетчика). На одном сервере может играть 32 игрока. На какой линии должен стоять сервер?
Дальше продолжать? Если я че-то не так понял, поправь меня.
Честно говоря, я предполагал слать очередь снарядов в 10, по-этому не считал принципиальным как именно они будут уложены в пакет. Да и со скорострельностью ты что-то напутал, ИМХО.
В данном же случае я имел в виду сообщение вида "с момента времени t1 до момента времени t2 было выпущено n снарядов". Слать координаты каждого я не предлагал (хотя, признаюсь, мог бы предложить, ибо принципиальным этот вопрос не считал, да и о ТАКОЙ скорострельности не подумал; по моим прикидкам- 512 байтного пакета хватило бы на все 500мс). Это не я говорил о распределенных вычислениях. Я, как раз, говорил об их дублировании.
ЗЫ: Написал только что драфт. Я всегда ОЧЕНЬ медленно пишу дизайн и доки. Посмотрел- куча очевидной дряни. Слать?
Да я в принципе понял, что ты имел в виду.
Со скорострельностью я не напутал, да и неважно это, главное - порядок цифр.
Конечно, можно оптимизировать этот пакет раз эдак в 100, но такое сжатие получится только с потерей части данных, т.е. мы вернулись к тому, с чего начали - точных координат каждого снаряда на сервере не будет, серверу придется включать какие-то случайные данные чтобы восстановить полный пакет и просчитать попадания. Овчинка не стоит выделки.
Для компенсации пинга, чтобы жертва более корректно видела стрелка у себя на хвосте, можно использовать экстраполяцию, но это тоже палка о двух концах. В случае энергичного маневрирования самолет противника будет экстраполироваться неправильно, он на компах соперников будет перемещаться хаотичными рывками, так что попасть в него будет очень проблематично.
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. Т.к. клиенты могут рассчитать коллизии самостоятельно, то они могут и сами
нарисовать взрыв, который будет не более чем субъективной индикацией
попадания.
для прикола, каждому клиенту можно дать "под
опеку" несколько зениток, чтобы разгрузить сервер.
если у меня (клиента) будет пинг 2000 как эффективно будут работать зенитки?
На мой взгляд никакой ответственности кроме как отображения происходящего и обсчета фм собственного самолета у клиента быть не может.
Клиент должен передать серверу примерно следующее:
XYZWS, и в случае открытия огня то чем и сколько выстелил, ну и по необходимости мелочи всякее типа шасси и прочее. Клиент не передает серваку положение рулей и элеронов именно по этому мы их не видим.
Все остальные расчеты лежат на сервере, который в свою очередь должен передать клиенту координаты и идентификаторы самолетов находящихся в области видимости, стрельбу, и изменения в состоянии самолетов(повреждения), состояние каждого самолета в игре клиент может хранить в памяти и вносить изменения.
Клиент не может отрисовать ни попадание ни столкновение пока не получит подтверждение этому от сервера. Все видели ситуацию когда самолет виражит на малой высоте и часть его крыла буквально погружена в землю.....
Не много ли расчетов для сервера? Нет не много, игроков всего 32, а в офлайне он и больше ботов считает.
Насчет разницы в пинге так я не вижу проблемы, сервер имеет информацию о положении каждого на конкретную единицу времени и решает попал или не попал, если если у тебя пинг меньший то соответственно ты можешь чаще обновлять информацию о своем пололжении в пространстве, ну а если пинг большой то ясен пень можешь не успеть передать изменения (а мы уже передали XYZWS на основании которых все тебя и отбражают) и получить уже инфу о том что ты труп :)
Стабильность пинга дает возможность принорвиться к задержке и стрелять более эффетивно.
Все это лишь мои предположения и ничего больше. :)
viczz
Все это лишь мои предположения и ничего больше.
Ну, разумеется. Тут все флеймят впустую. :)
А я так, вообще, безотносительно реализации в Ил2, ибо даже не видел его в онлайне ни разу.
Кстати, стоит пояснить- это мнение как оно в Иле, или как оно должно быть? А то тут все всё по-разному понимают... :)
если у меня (клиента) будет пинг 2000 как эффективно будут работать зенитки?
Также, как и игрок- по пустому месту, разумеется. Правда, если это твои зенитки и работают они по тебе, тогда они точно знают куда бьют. А если зенитки обсчитывет сервер- они тоже работают по пустому месту. В любом случае, это ерунда, я же написал: "для прикола".
Насчет того как сделано или как должно быть, так я написал о том что видно в самой игре и предположил как это сделано из соображений того как бы это реализовал я сам (блин масло масляное)
С знитками точно так не выйдет, потому как они стрелять и попадать должны по всем, а если вдруг клиент сообщит серверу что мол на его стороне зенитки перебили всех клиентов, в тот момент когда другой клиент сообщает что сбили только половину :)
А трафика зенитки много не слопают, тут передать надо тока ID зенитки и вектор выстела.
Чем больше расчетов на сервере тем меньше возможность чита :)