Справка
Геодата и патчноды
Сервер знает координаты игрока, но сам по себе не знает, что между ним и мобом стена. Эти знания лежат отдельным набором файлов — геодатой. Её отсутствие выглядит как десяток разных багов, и чинят их обычно не там, где надо.
Что такое геодата
Геометрия мира — текстуры, скалы, здания — живёт в клиенте. Серверу она в таком виде ни к чему: ему нужно уметь быстро отвечать на два вопроса. Можно ли встать в эту точку и видно ли из точки A точку B.
Геодата — это и есть ответы, посчитанные заранее: карта проходимости и высот, разбитая на мелкую сетку. Для каждой клетки известна высота поверхности, можно ли по ней идти и что мешает по сторонам. Поэтому проверка «прошёл или нет» на сервере стоит почти ничего — она сводится к чтению из таблицы.
Файлы нарезаны по регионам карты и названы по координатам региона — отсюда имена вида
22_22, которые вы увидите в каталоге геодаты. Весь мир — набор таких квадратов, и
отсутствие одного означает дырку только в его границах.
Что происходит без неё
Сервер запустится. Мир будет выглядеть нормально — геометрию ведь рисует клиент. Ломается всё, что требует знания о препятствиях:
- Выстрелы и навыки проходят через стены. Моб за скалой бьёт вас, вы бьёте его.
- Мобы идут сквозь текстуры. Не вокруг препятствия, а прямо через него.
- Персонаж ходит по воздуху или проваливается. Высота считается неоткуда.
- Телепорты и возрождение ставят в неположенное место. Иногда внутрь скалы.
- Осады превращаются в фарс. Стены замка перестают быть стенами.
Диагностический признак: если «баг» касается только взаимодействия через препятствие, а в открытом поле всё нормально — дело почти наверняка в геодате, а не в сборке. Проверяется за минуту: встаньте за стеной и попробуйте ударить то, что за ней.
Патчноды — это другое
Геодата отвечает на вопрос «можно ли сюда встать». Она не отвечает на вопрос «как дойти отсюда туда, если напрямую нельзя». Для второго нужны патчноды — заранее расставленная сеть точек с известными связями между ними, по которой NPC строит маршрут.
Отличить одну проблему от другой просто. Моб, который ломится в стену вместо того чтобы её обойти, — это патчноды. Моб, который стену не замечает вовсе, — это геодата.
Патчноды нужны не всем. Серверу с высокими рейтами, где мобы живут по три секунды, их отсутствие почти незаметно; серверу с низкими рейтами и долгими боями — наоборот.
Откуда её берут
Геодата не входит в комплект сборки и не лежит в клиенте в готовом виде — её конвертируют.
Отсюда слово conv в именах файлов, которое вы встретите в любом архиве по теме: это
результат конвертации, а не оригинал. В архиве самого l2server.org такие наборы подписаны,
например, как «GeoData 12_24 conv for Gracia Final» — то есть сразу с указанием хроники.
И это главное, что нужно знать при подборе: геодата привязана к хронике. Карта мира между версиями менялась, и набор от Interlude в High Five даст расхождения между тем, что видит игрок, и тем, что знает сервер. Про хроники и их номера.
Второе: формат файлов у форков L2J разный, и набор, собранный под один эмулятор, другой может не прочитать. Конкретные расширения и имена каталогов мы здесь не перечисляем — у форков они расходятся, и единственный надёжный источник этого — документация вашей сборки.
Как проверить, что всё встало
- Прочитать лог старта игрового сервера. Загрузка геодаты — отдельная строка с числом загруженных регионов. Ноль регионов означает, что сервер её не нашёл, и это самая частая причина «не работает».
- Проверить взаимодействие через стену. Встать за препятствие и попробовать ударить цель с другой стороны.
- Пройтись по рельефу. Подъёмы, лестницы, вода. Персонаж должен идти по поверхности, а не сквозь неё.
- Спавнить моба и отойти за угол. Он должен потерять вас, а не стрелять сквозь стену.
- Посмотреть расход памяти до и после. Геодата занимает её ощутимо, и если после установки расход не вырос — она не загрузилась.