Почему это не может быть реализовано.
Как зенитки могут рассчитывать попадания по объекту, до реального состояния которого может быть до 2-х секунд времени (пинг до С и до удаленного К):confused:quote:
Originally posted by deCore:
Собственно, драфт.
1. Все объекты, все расчеты дублируются на сервере (С) и всех клиентах (К).
Траффик- важнее.
2. На С (и на К) подаются все события (поворот элеронов, стрельба) в виде:
{событие, время события}. События объединяются в пакеты, так чтобы событие
1, наступившее в момент Т1 пришло раньше события 2, наступившего в момент Т2 тогда и только тогда, когда Т1 меньше (предшествует) Т2. Предполагаем, что способ формирования пакетов событий- оптимальный (максимум информации/минимальный
размер).
3. Некоторые события инициируются (генерииуются) на сервере, некоторые-
на клиенте, в зависимости от области ответственности. Клиент генерирует
события касающиеся поведения собственного крафта и отданных под его
ответственность ИИ объектов (для прикола, каждому клиенту можно дать "под
опеку" несколько зениток, чтобы разгрузить сервер).
Ладно, представим ситуацию. Самолет вошел в пикирование, и на клиенте пилот в последний момент дернул РУС на себя. Пакет об этом событии пришел на сервер с запозданием, когда на сервере самолет этого игрока уже врезался в землю. Что должен делать сервер? Какие коллизии считать? Если он не должен обращать на это внимение, то зачем он вообще считает колиззии?quote:
Originally posted by deCore:
6. Т.к. события приходят с запозданием, К и С приходится делать грубые правки
в своем пространстве объектов (например, когда К узнает, что такой-то крафт
выравнял элероны Хмс назад, и перестал делать бочку он перерассчитывает
положение этого крафта и крафт рывоком прыгает в это положение). Но, т.к.
пилот имеет право менять только вторую производную, то очень уж резких
рывков не должно быть. Для сглаживания этих скачков К может применять
интерполяцию или даже экстраполяцию с учетом пинга, но можно позволять
клиенту выбирать самому: хочет ли он видеть рывки или предпочитает видеть
почти всегда недостоверную информацию.
Ты забыл, что "лишние" снаряды могут быть также и на сервере, он может просчитать попадания до того, как он поймет, что они лишние. Или ты предлагаешь подтверждать повреждения только после того, как игрок закончит стрельбу? Ага, ниже вижу, что до потдверждения продолжения стрельбы или ее прекращения. Ладно, пусть сервер ждет 500мс, пока придет следующий пакет, а до этого что он должен сделать? Пусть он просчитает попадания. Но если следующий пакет ему скажет, что игрок прекратил стрельбу через 1 мс после посылки предыдущего пакета, что сервер сделает? Ему придется открутить ситуацию назад, чтобы снова персчитать попадания. За это время, пока сервер решал, кто и куда попал, самолеты противника могли улететь бог знает куда...quote:
Originally posted by deCore:
7. Тот факт, что К1 прекратил огонь, К2 узнает тоже с запазданием в Хмс. Он
может убрать лишние снаряды, которые успел наплодить за эти Хмс, а может и
не убирать, чтобы они не исчезали "неожиданно". Ничего страшного, кроме
лишних нервов у жертвы (К2) это не вызовет, т.к. повреждения все равно
будут рассчитаны согласно только подтверженным сервером попаданиям.
И самое главное - куда целиться стреляющему:confused:
Можешь объяснить? Если по прямолетящей цели теоретически можно попасть (если в голове у тебя баллистический вычислитель), то как попасть по активно маневрирующей? Ты даже не знаешь, в какую сторону она повернет через 500мс, пока пакеты о стрельбе придут на сервер.