Обновлено: 12.02.2023
При написании сервера возникла одна сложность. Есть большая локация, около километра по обоим размерностям. По ней перемещаются игроки. Понятно, что показывать ВСЕХ игроков на локации мало того, что нет смысла, но и связано с нагрузкой. Принято решение отображать игроков только в радиусе 100 метров от игрока. Вот в связи с этим и вопрос — как максимально быстро определить, что другой игрок появился в зоне видимости текущего игрока и вышел из зоны видимости, что бы передать текущему игроку пакет с новыми данными. Как вообще подобные вещи делаются? Я делаю так — игрок кликнул на карту, персонаж начал движение, в это же время всем в зоне видимости рассылается команда — ид игрока, начальные координаты, куда кликнул, скорость перемещения. И у всех этот персонаж начинает движение. Ну и так по всем дествиям.
карта локации делится на прямоугольные ячейки.
когда игрок бежит, он записывает себя в ту ячейку, где он в данный момент.
Также игрок имеет прямоугольную зону видимости, проверяется — какие ячейки попали в прямоугольник видимости.
если размер ячейки больше размера зоны, то попадет максимум 4 ячейки.
Подбирая размер ячейки, можно отсылать всех игроков в ячейках, попавших в зону видимости, если размер ячейки близок к зоне видимости. Либо, если размер ячейки велик, так что игроков там будет много, проверять игроков из этих попывших ячеек на попадание в зону видимости.
везде прямоугольники, т.к. — они способны без пробелов покрыть территорию и проверка пересечения между прямоугольниками — 4 if’а, попадание точки в прямоугольник тоже 4 if’a
Я бы сделал так:
1. На сервере считаем игровой мир
2. Объект попал в зону видимости игрока:
2.1. Отсылаем игроку _полное_ состояния объекта. Добавляем объект в список видимых объектов игрока (Дабы в дальнейшем слать только частичные пакеты).
2.2. Отсылаем игроку _частичные_ данные о каждом объекте в зоне видимости.
3. Если Объект вышел из зоны видимости игрока шлём оному мол ОбъектВышелИзЗоны видимости. Клиент в таком случае может убить или спрятать объект.
3.1. Удаляем объект из списка видимых объектов игрока.
Это вариант для бесшовного мира. Можно делить мир на зоны как предложил Серый крокодильчик
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Необходимо обновить браузер или попробовать использовать другой.
Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Вы находитесь в русском сообществе Bukkit. Мы — администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
Minecraft
Какое решение этой ошибки?
Давайте начнем решать эту проблему с некоторых основных решений, которые работают практически при любой ошибке.
Не пропускайте их, если вы еще не пробовали их, потому что это самые простые решения, которые занимают минимум времени!
- Включите и снова включите роутер, отключив его на минуту, а затем снова подключив, чтобы начать играть.
- Перезагрузите компьютер.
- Перезапустите Майнкрафт.
Это основные шаги, которые позволят нам выяснить, является ли ваша проблема временной или возникла из-за более серьезной проблемы, которая потребует дополнительного устранения неполадок. Если это не помогло, пора попробовать более сложные шаги.
Расширенный поиск и устранение неисправностей
Если описанные выше базовые шаги не помогли вам, возможно, пришло время рассмотреть более сложные решения.
Удалите и переустановите свежую версию Minecraft.
Одним из главных виновников проблемы с Minecraft является… сам Minecraft. Прежде чем делать что-либо слишком сложное, чтобы попытаться решить эту проблему, попробуйте удалить игру и заново установить ее. Пока не переустанавливайте никакие пакеты текстур, моды или Optifine. Попробуйте подключиться к серверу с базовой игрой и посмотрите, решит ли это вашу проблему.
Включение собственной песочницы Java
Собственная песочница Java позволяет запускать приложения Java, такие как Minecraft, в ограниченной среде, которая может обойти все, что вызывает проблему с вашим подключением к серверу. Вы можете включить его, выполнив следующие действия:
- Перейдите к строке поиска на панели задач Windows, обычно в нижней части экрана, введите «Панель управления» и щелкните появившуюся запись.
- Найдите раздел с заголовком «Программы» и щелкните этот заголовок.
- На следующем экране вы должны увидеть значок «Java». Щелкните заголовок. Мы отметили заголовок Java и значок красным на рисунке ниже.
- Теперь у вас должно появиться небольшое всплывающее окно с надписью «Панель управления Java». В нем переключитесь на вкладку «Дополнительно» и начните прокрутку вниз, пока не увидите раздел с надписью «Дополнительные параметры безопасности». Мы отметили этот раздел красным на рисунке выше.
- Здесь вы найдете параметр «Включить ограниченную среду операционной системы (собственная песочница)». Убедитесь, что он отмечен галочкой, затем нажмите «Применить», а затем «ОК».
- Очень важно перезагрузить компьютер , чтобы изменения вступили в силу.
После перезагрузки компьютера снова запустите Minecraft и посмотрите, сохраняется ли соединение с сервером. Если это не так, не стесняйтесь снова отключить собственную песочницу, чтобы не добавлять дополнительные параметры к проблеме, которую вы пытаетесь отследить.
Смена DNS на вашем роутере на DNS-серверы Google
У вашего интернет-провайдера могут быть временные проблемы с DNS-сервером, из-за которых ваш компьютер не может найти сервер, к которому вы подключаетесь. Вы можете найти настройки DNS в панели администрирования вашего маршрутизатора / модема, и обычно они устанавливаются автоматически.
Почти все маршрутизаторы позволяют переключать DNS-серверы на те, которые вы указываете вручную, обычно два из них. Вам следует ввести следующие значения:
- Первичный DNS-сервер: 8.8.8.8
- Вторичный DNS-сервер: 8.8.4.4
Новые настройки DNS-сервера будут подключаться к собственным серверам Google всякий раз, когда он пытается подключиться к чему-либо с вашего компьютера, и со временем это будет намного надежнее, чем то, что вам даст ваш местный интернет-провайдер. Даже если это решение не сработает, вероятно, вам стоит сохранить новые настройки.
Читайте также:
- Спас для брома nlc 7
- Какая свадьба после 26 лет совместной жизни
- Работает ли ip камера без интернета
- Смерть от переохлаждения самая безболезненная
- Scp 590 его описание на русском
Войти или зарегистрироваться
Решено Скрафтил крюк инженера и захотел прокатиться на проводах.
Тема в разделе «Баги и ошибки», создана пользователем StalkerIlya, 15 июн 2018.
- Статус темы:
-
Закрыта.
-
StalkerIlya
Игрок- Регистрация:
- 15 июн 2018
- Сообщения:
- 2
- Симпатии:
- 1
Сервер NanoTach 1.12.2. Скрафтил крюк инженера из мода Immersive Engineering, захотел использовать его. Прочитал в руководстве инженера как использовать крюк. Попробовал прокатиться на проводе, вылетело с причиной «Получен неверный пакет перемещения игрока». Пытаюсь зайти уже 10-ый раз, всё равно вылетает. Иногда заходит, но я появляюсь непонятно где и вылетаю. Помогите пожалуйста, а то я не хочу уходить или начинать заново из-за этой оплошности.
Последнее редактирование: 15 июн 2018
StalkerIlya,
15 июн 2018
#1
SaMpErNpC нравится это.
-
StalkerIlya
Игрок- Регистрация:
- 15 июн 2018
- Сообщения:
- 2
- Симпатии:
- 1
Ник StalkerIlya
StalkerIlya,
15 июн 2018
#2 -
SaMpErNpC
Игрок- Регистрация:
- 10 июн 2018
- Сообщения:
- 5
- Симпатии:
- 0
Решил?
SaMpErNpC,
15 июн 2018
#3 -
Bartolomeo
Администратор
Команда форума- Регистрация:
- 20 окт 2016
- Сообщения:
- 2.239
- Симпатии:
- 400
исправили.
Bartolomeo,
26 июн 2018
#4
(Вы должны войти или зарегистрироваться, чтобы ответить.)
- Статус темы:
-
Закрыта.
Поделиться этой страницей
- Ваше имя или e-mail:
- У Вас уже есть учётная запись?
-
- Нет, зарегистрироваться сейчас.
- Да, мой пароль:
-
Забыли пароль?
-
Запомнить меня
Пожалуйста, расскажите про вашу проблему и не забывайте указать ссылку на проблемную сборку.
Проблема принятия пакетов/лаги на сервере
Рекомендуемые сообщения
В теме 3 сообщения
-
- Поделиться
-
Описываю проблему: Есть вайфай, есть пиратский сервер майнкрафт(любой из интернета). Иногда когда перезагружаешь вайфай и айпи меняется, то происходит следующая шалабуда: При заходе на сервер майнкрафт скорость принятия пакетов резко падает и становится в 100 раз меньше, из-за этого после 30-60 секунд игры тебя кикает с сервера из-за лагов, после этого каждый раз заходя на сервер у тебя будет ужастно низкая скорость интернета в майнкрафте. Так происходит на многих серверах, но на некоторых такого не бывает. На другие программы, браузеры на пк это не распространяется. Так происходит пока снова не перезагрузить роутер и не поменять айпи, но иногда это повторяется снова.
Вопрос — в чём причина? и если знаете — как решить?
Ссылка на комментарий
Поделиться на другие сайты
Гость Zlaata69
-
- Поделиться
Купить хостинг и на страдать фигней
Ссылка на комментарий
Поделиться на другие сайты
-
- Поделиться
В 18.10.2021 в 18:36, Saaransh123 сказал:
Описываю проблему: Есть вайфай, есть пиратский сервер майнкрафт(любой из интернета). Иногда когда перезагружаешь вайфай и айпи меняется, то происходит следующая шалабуда: При заходе на сервер майнкрафт скорость принятия пакетов резко падает и становится в 100 раз меньше, из-за этого после 30-60 секунд игры тебя кикает с сервера из-за лагов, после этого каждый раз заходя на сервер у тебя будет ужастно низкая скорость интернета в майнкрафте. Так происходит на многих серверах, но на некоторых такого не бывает. На другие программы, браузеры на пк это не распространяется. Так происходит пока снова не перезагрузить роутер и не поменять айпи, но иногда это повторяется снова.
Вопрос — в чём причина? и если знаете — как решить?
Перестать пользоваться слитыми плагинами, и к тому же научиться пользоваться сайтом SpigotMC и там искать те плагины которые ты скачал на ноунейм сайтах.
-
karibskiy
-
1
Ссылка на комментарий
Поделиться на другие сайты
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Войти
Уже есть аккаунт? Войти в систему.
Войти
-
Последние посетители
0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу