GoldNav — навигационный модуль для Counter-Strike 1.6 / GoldSource. Он позволяет отправить любую entity (кроме игроков) в заданные координаты одним вызовом. Сама entity находит дорогу, обходит препятствия и останавливается в цели.
Что умеет
Как работает
Состав
Установка
Использование в своём плагине
см. исходный код.
Тестовый плагин с курицей
Серверные команды и квары
Ограничения (версия 1.0.0-beta)
Что умеет
- Строит навигационную сетку автоматически при старте карты. Это занимает от долей секунды до пары секунд, файлы waypoint-ов не нужны.
- Обходит стены, ящики и другие статичные препятствия.
- Поднимается и спускается по ступенькам, лестницам и пандусам (ступенька берётся по sv_stepsize).
- Понимает многоэтажность: мосты, второй этаж, тоннели.
- Спрыгивает с уступов высотой до 150 юнитов (goldnav_max_drop). Подняться обратно прыжком не может.
- Огибает стоящих на пути игроков и другие entity.
- Если цель недостижима, подходит как можно ближе.
- Учитывает размер entity: поддерживает все четыре хулла движка (точка, 32x32x36, 32x32x72, 64x64x64).
- Избегает воды и лавы, держится подальше от стен и краёв уступов.
- При сбое (столкнули, застряла) сам перестраивает путь, а после нескольких неудач сообщает о провале.
Как работает
- Заливкой от точек спавна строится граф «клетка + высота пола». Каждый шаг проверяется теми же трассировками, которыми потом ходит entity.
- Поиск пути идёт алгоритмом A* с весами. Затем путь сглаживается, чтобы entity не ходила по клеткам зигзагом.
- Entity двигается кинематически: модуль сам ставит origin и держит velocity нулевой. Физика движка не умеет подниматься на ступеньки.
Состав
- goldnav_mm.dll / goldnav_mm.so — основной модуль (Metamod-плагин), папка addons/metamod/dlls/
- goldnav_amxx.dll / goldnav_amxx_i386.so — натусы для AMXX, папка addons/amxmodx/modules/
- goldnav.inc — заголовок для .sma, папка addons/amxmodx/scripting/include/
- goldnav_chicken.amxx — тестовый плагин с курицей, папка addons/amxmodx/plugins/
Установка
- Распакуйте архив в папку cstrike/.
- В addons/metamod/plugins.ini добавьте:
C-подобный:win32 addons\metamod\dlls\goldnav_mm.dll linux addons/metamod/dlls/goldnav_mm.so - В addons/amxmodx/configs/plugins.ini добавьте goldnav_chicken.amxx (нужен модуль fakemeta). Модуль goldnav_amxx в modules.ini прописывать не обязательно.
- Запустите сервер. В консоли должно появиться: [GoldNav] navmesh [32x32] ready: N nodes ...
Использование в своём плагине
см. исходный код.
Тестовый плагин с курицей
- /chicken (или goldnav_chicken) — заспавнить курицу по прицелу
- /goto — отправить кур в точку прицела (путь рисуется лучом)
- /follow — куры идут за вами
- /stop, /remove, /where — остановить / удалить / показать координаты прицела
Серверные команды и квары
- Команды: goldnav_status, goldnav_rebuild, goldnav_findpath, goldnav_dump
- Квары: goldnav_cell_size (16), goldnav_gen_budget_ms (8), goldnav_max_drop (150), goldnav_debug (0)
Ограничения (версия 1.0.0-beta)
- Игроки и боты не двигаются модулем (для ботов есть goldnav_find_path).
- Нет лестниц (func_ladder), прыжков вверх и плавания.
- Двери и платформы учитываются в том состоянии, в каком были при генерации. После изменений нужен goldnav_rebuild.
- Триггеры (trigger_hurt, телепорты) на ведомую entity не срабатывают.
- Анимацию выставляет ваш плагин; для плавного движения рекомендуется MOVETYPE_PUSHSTEP.
- Linux-сборка проверена только юнит-тестами, на живом Linux-сервере не запускалась.