mr_box Опубликовано: 11 июля 2017 Опубликовано: 11 июля 2017 (изменено) Итак, эту тему мне вероятно следовало создавать в Тех. разделе, но тут ее увидят больше людей. Все мы знаем про баг, когда одни игроки отлетают на 5 - 6 блоков, а другие с трудом на 0.5 - 1.5.В данной теме я просто приведу свой перевод отрывка из одного комментария, объясняющего баг с отдачей (оригинальный текст).То, что представляет из себя само предложение, находится после перевода. Прошу заметить, что в данном переводе скорость означает velocity (векторная величина), а не speed (скалярная величина). Игрок, подключившийся первым, получает правильную отдачу. Последний подключившийся получает меньше отдачи, если его бьет ранее подключившийся.Это происходит потому, что сервер применяет "трение" к игроку каждый раз, когда получает movement-пакет от него. Пакеты игроков, подключившихся позднее, на сервере обрабатываются в промежутке между ударом ранее подключившегося игрока и отправкой пакетов синхронизации скорости клиенту, которые уже будут отличаться к концу тика.Таким образом, каждый movement-пакет игрока, подключившегося позднее, в очереди сделает силу отдачи меньше, перед тем как отправить сам пакет отдачи клиенту.Если каждый из этих пакетов говорит, что игрок касается земли, то будет применено трение с землей, которое уменьшит отдачу примерно в половину каждый тик; т.е. потребуется несколько movement-пакетов в очереди, чтобы сделать отдачу близкой к нулю. Для игроков А и Б, подключившихся в том же порядке (Б после А), последовательность событий выглядит примерно так (на каждый тик): сервер обрабатывает входящие пакеты от всех игроков в том порядке, в котором они подключилисьсервер обрабатывает входящий пакет от А, который говорит атаковать Б, что изменяет скорость игрока Б на сервере (но еще не синхронизируется с клиентом)сервер обрабатывает все пакеты от Б, сколько их ни было бы, включая те, что говорят, что игрок стоит на земле, и приминяет трение к скорости игрока Б после каждого такого пакетасервер выполняет локальное обновление всех игроков (метод tick) (там использование предметов, сон, горение игрока - правка переводчика)сервер видит, что скорость игрока Б изменилась, и отправляет пакет синхронизации. А вот пакеты от Б при атаке игрока А обрабатываются после movement-пакетов игрока А, т.е. сила отдачи НЕ уменьшается перед тем, как быть отправленной клиенту в конце тика (и А получает всю отдачу). Также в своем сообщение автор текста предоставляет ссылку на самый простой, по его мнению, фикс данной проблемы - патч Bukkit сервера.Кроме того, он указывает, что лучшим решением проблемы было бы вовсе избавиться от работы со скоростью на стороне сервера, т.к. она используется только при работе с "гравитацией" и отдачей, и даже при этом работает ужасно неточно (в случае с отдачей). Клиент и так имеет полный контроль над движением, - что плохого, чтобы передать и полный контроль над скоростью? Изменено 11 июля 2017 пользователем mr_box
murzuk Опубликовано: 11 июля 2017 Опубликовано: 11 июля 2017 Итак, эту тему мне вероятно следовало создавать в разделе Тех. разделе, но тут ее увидят больше людей. Все мы знаем про баг, когда одни игроки отлетают на 5 - 6 блоков, а другие с трудом на 0.5 - 1.5.В данной теме я просто приведу перевод отрывка из одного комментария, объясняющего баг с отдачей (оригинальный текст). Прошу заметить, что в данном переводе скорость означает velocity (векторная величина), а не speed (скалярная величина). Игрок, подключившийся первым, получает правильную отдачу. Последний подключившийся получает меньше отдачи, если его бьет ранее подключившийся.Это происходит потому, что сервер применяет "трение" к игроку каждый раз, когда получает movement-пакет от него. Пакеты игроков, подключившихся позднее, на сервере обрабатываются в промежутке между ударом ранее подключившегося игрока и отправкой пакетов синхронизации скорости клиенту, которые уже будут отличаться к концу тика.Таким образом, каждый movement-пакет игрока, подключившегося позднее, в очереди сделает силу отдачи меньше, перед тем как отправить сам пакет отдачи клиенту.Если каждый из этих пакетов говорит, что игрок касается земли, то будет применено трение с землей, которое уменьшит отдачу примерно в половину каждый тик; т.е. потребуется несколько movement-пакетов в очереди, чтобы сделать отдачу близкой к нулю. Для игроков А и Б, подключившихся в том же порядке (Б после А), последовательность событий выглядит примерно так (на каждый тик): сервер обрабатывает входящие пакеты от всех игроков в том порядке, в котором они подключилисьсервер обрабатывает входящий пакет от А, который говорит атаковать Б, что изменяет скорость игрока Б на сервере (но еще не синхронизируется с клиентом)сервер обрабатывает все пакеты от Б, сколько их ни было бы, включая те, что говорят, что игрок стоит на земле, и приминяет трение к скорости игрока Б после каждого такого пакетасервер выполняет локальное обновление всех игроков (метод tick) (там использование предметов, сон, горение игрока - правка переводчика)сервер видит, что скорость игрока Б изменилась, и отправляет пакет синхронизации. А вот пакеты от Б при атаке игрока А обрабатываются после movement-пакетов игрока А, т.е. сила отдачи НЕ уменьшается перед тем, как быть отправленной клиенту в конце тика (и А получает всю отдачу). Также в своем сообщение автор текста предоставляет ссылку на самый простой, по его мнению, фикс данной проблемы - патч для Bukkit сервера.Кроме того, он указывает, что лучшим решением проблемы было бы вовсе избавиться от работы со скоростью на стороне сервера, т.к. она используется только при работе с "гравитацией" и отдачей, и даже при этом работает ужасно неточно (в случае с отдачей). Клиент и так имеет полный контроль над движением, - что плохого, чтобы передать и полный контроль над скоростью? Довольно актуально. Как вышел ClashPoint то меня все как-то очень странно откидывали, а я их с трудом с мостика в 1 блок шириной скидывал. Долго не мог ничего с этим сделать, хотя на других мини играх все было нормально. Я долго искал способ решить эту проблему, и нашел - это ДНС сервера. Конечно же есть и такие ДНС сервера что дают почти нулевую отдачу, но тот что установил я, стабилизировал все и теперь я откидываюсь нормально, на блоков 3-4 и откидываю тоже нормально, так же на 3-4 блока.
mr_box Опубликовано: 11 июля 2017 Автор Опубликовано: 11 июля 2017 (изменено) ...Прошу, когда цитируешь, в случае большой цитаты (очень часто, когда это первое сообщение темы), заменяй её многоточием. Насчет актуальности могу отметить, что оригинал опубликован в 2014 году.ДНС не решают проблему, они просто влияют на задержку; в основном отдача зависит от кол-ва пакетов, отправляемых клиентами и порядком их подключения, - пинг второстепенен. Изменено 11 июля 2017 пользователем mr_box
KOT_B_KBAHTE Опубликовано: 11 июля 2017 Опубликовано: 11 июля 2017 (изменено) Типо осилил много букв.*важное мнение* Изменено 11 июля 2017 пользователем KOT_B_KBAHTE Lordaeron 1
mr_box Опубликовано: 11 июля 2017 Автор Опубликовано: 11 июля 2017 Спасибо!эм. Суть тему не в том, чтобы все сразу начали этим пользоваться, а чтобы француз фиксанул это. То, что представляет из себя само предложение, находится после перевода.... Также в своем сообщение автор текста предоставляет ссылку на самый простой, по его мнению, фикс данной проблемы - патч Bukkit сервера.Кроме того, он указывает, что лучшим решением проблемы было бы вовсе избавиться от работы со скоростью на стороне сервера, т.к. она используется только при работе с "гравитацией" и отдачей, и даже при этом работает ужасно неточно (в случае с отдачей). Клиент и так имеет полный контроль над движением, - что плохого, чтобы передать и полный контроль над скоростью?
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас