Source SDK

Source SDK

49 ratings
Навигационная сетка
By Смайл
В этом руководстве мы поговорим с вами о навигационной сетке, разберём все вопросы очень подробно и обговорим каждую деталь подробно. Так же поговорим о ботах и принципе работы ботов в различных Source играх.
   
Award
Favorite
Favorited
Unfavorite
Введение
Навигационная сетка — Это специальные маршруты для ботов на карте, без которых боты не смогут бегать, прыгать, приседать, убивать противника и так далее. Навигационная сетка была придумана со времён самых первых ботов созданных самими Valve во всеми знаменитой игре Counter-Strike 1.6

К сожалению в игре Counter-Strike 1.6 навигационная сетка не так сильно развита в плане настройки и редактирования. Максимум, что вы сможете сделать — это сгенерировать навигационную сетку для карты и что-то отредактировать под себя.

Но технологии Source движка стали развиваться и далее и после чего появилась новая версия серии игр Counter-Strike под названием Counter-Strike: Source. В этой версии разработчики уже углубились в тему создания и обработки навигационной сетки, так как с приходом Source игр к нам пришёл и новый редактор карт. С учётом этого всего были созданы специальные команды, которые позволяют отредактировать даже сгенерированную с нуля навигационную сетку для карты.

Навигационная сетка в основном используется для NextBot'ов — Это специальные боты, которые обучены игре, определённым событиям и чтению навигационной сетки прямо в игре.

Например: Все вы знаете, что в Counter-Strike Source есть заложники, как вы думаете, это NPC или Боты? Если вы думаете, что это NPC, то вы глубоко ошибаетесь, это и есть те самые NextBot'ы, которые не могут бегать по карте без навигационной сетки. Признаться честно, я сам по началу думал, что это NPC, которые использовались в Half-Life 2. Но как оказалось позже код игры и найденная в интернете информация меня разочаровала. Как оказалось это не NPC, а самые настоящие NextBot'ы.

Навигационная сетка служит для ботов специальным навигатором, чтобы боты знали — куда они бегут и зачем они туда бегут. Для примера возьмём режим с заложниками: Боты Контр-Терористы будут стараться добежать до заложника, забрать его и привести обратно. Боты Террористы будут просто ходить по карте и стараться убивать противника. В этом случае ботам и помогает навигационная сетка.

Кстати говоря, в играх серии Left 4 Dead и Left 4 Dead 2 — тоже используются те самые NextBot'ы. Это могут быть обычные зомби, специальные зомби и выжившие (Ник, Рошель, Тренер и персонажи первой части).

Файл навигационной сетки хранит в себе специальную информацию о карте, с которой он связан. Например, если в качестве примера мы возьмём карту de_dust то навигационный файл будет расположен в директории игры рядом с файлом карты в папке maps, то есть: cstrike\maps\de_dust.bsp хранится в cstrike\maps\de_dust.nav

Что касается Garry's Mod — в этой игре есть NextBot'ы и они тоже умеют бегать по навигационной сетке.

Сразу скажу, что эти команды используются во всех Source играх. Не думайте, что если я привожу пример только с Counter-Strike Source, то это работает только с ней. Нет, вовсе нет, эти команды есть во всех Source играх, если не верите, можете убедиться в этом самостоятельно.
Автоматический генератор навигационной сетки для ботов
Для поддержки созданных сообществом карт, игры поддерживающие NextBot'ов — поддерживают автоматическую систему генерации навигационной сетки. При самом первом входе на карту без навигационной сетки система автоматически запустит генератор, который автоматически сгенерирует навигационные маршруты для ботов, а затем перезапустит текущую карту. При автоматическом создании навигационной сетки — в папке maps рядом с вашей картой будет создан *.nav файл, что упростит работу с ботами на вашей карте в будущем.

Генерация навигационной сетки длительный процесс и в зависимости от размера карты это может занять от нескольких минут до нескольких часов. Большинство карт занимают около 5 минут, чтобы автоматически сгенерировать *.nav файл.

Для игр, которые не поддерживают автоматическое создание навигационной сетки, навигационная сетка все еще может быть сгенерирована вручную при помощи консольных команд. Чтобы сгенерировать навигационную сетку, вам потребуется открыть консоль нажав клавишу тильда (~), а затем ввести следующие команды в поле ввода:

— sv_cheats 1 — Команда для включения чит-режима игры.
— nav_generate — Запустить генератор навигационной сетки.
Что происходит в процессе создания навигационной сетки?
В процессе создания навигационной сетки выполняются следующие шаги:

Начиная с точки возрождения игрока — генерируется специальные маршруточные зоны, так же учитываются: лестницы, стены, неровные поверхности, статические и физические предметы карты.

Вычисляются и генерируются навигационные области для прыжка ботов. Например, перед ботом вентиляция или какой-нибудь объект. Навигационная сетка генерируется так, чтобы бот мог запрыгнуть на этот объект или залезть в вентиляцию.

Вычисляются и генерируются навигационные области для снайпера.

Вычисляются и генерируются навигационные области карты, где боты обязаны присесть. Например узкий проход, или криво созданный дверной проём.

В конце создания все навигационные маршруты объединяются и сохраняются в навигационный файл с названием текущей карты.
Просмотр и редактирование навигационной сетки
Команда nav_edit 1 — Это специальный режим просмотра навигационной сетки, который так же может помочь вам отредактировать навигационную сетку в нужной вам области.

Чтобы просмотреть сгенерированную или уже готовую навигационную сетку, введите команду в консоль: nav_edit 1.

Чтобы отключить редактор сетки, введите nav_edit 0.

Примечание: Вам нужно будет ввести sv_cheats 1 для просмотра навигационной сетки.
Создание навигационной сетки при помощи walkable точек
Некоторые карты, которые имеют очень крутые лестницы, пандусы или холмы, могут путать систему поколений, в результате чего навигационная сетка не покрывает всю карту. Чтобы решить эту проблему, вы можете вручную разместить дополнительные маркеры для ходьбы, которые сообщают генератору, что он будет генерировать дополнительную навигационную сетку от этой точки на этапе выборки.

Чтобы добавить один или несколько маркеров walkable, сначала наведите прицел на нужно вам место карты (желательно чтобы это был пол), затем введите команду: nav_mark_walkable в консоль. Когда вы закончите размещение маркеров, введите nav_generate, чтобы сгенерировать сетку.

Вы можете удалить все ранее размещенные маркеры для ходьбы, используя команду nav_clear_walkable_marks.

Кстати! Этот метод будет полезен, если ваша карта разбита не несколько локации.

Сейчас я вам подробно напишу, как создавать навигационную сетку на каждой из локаций, если ваша карта всё-таки разбита на несколько локаций.

Для начала вам нужно зайти на эту карту. Что же делать после входа на карту? Теперь начинаем создавать навигационную сетку на всех локациях вашей карты.

1. Открываем консоль и вводим команду: nav_generate_incremental_range 9999999 — Эта команда с таким огромным значением требуется для того, чтобы прочертить навигационную сетку на всей локации вашей карты, какой бы не была ваша локация огромной или маленький всё равно вводите эту команду.

2. Введите команду noclip и подлетите в любое удобное место на вашей карте. Желательно, чтобы это место было открыто и имело большую территорию например какой-нибудь переулочек или небольшой проход. Включите режим редактирования навигации при помощи команды: nav_edit 1, а затем установите walkable маркер, который позволит вам прочертить навигационную сетку именно на этой локации и введите команду: nav_generate_incremental — для быстрой генерации навигационной сетки в указанной вами локации.

3. После того, как генератор сгенерирует навигационную сетку на одной из ваших локаций карты, летите ко второй локации карты. На второй локации карте так же установите walkable маркер, который позволит вам прочертить навигационную сетку уже на второй локации вашей карты и снова введите команду: введите команду: nav_generate_incremental — для быстрой генерации навигационной сетки в указанной вами локации.

Примечание: Если ваша карта использует больше 2-х локаций, то повторите пункты 2 и 3 на всех локациях вашей карты.

4. Когда вы завершите процесс создания навигационной сетки на всех локациях вашей карты, вам нужно будет запустить анализ навигационной сетки. Введите команду: nav_analyze и подождите несколько минут, пока игра проверит все созданные вами маршруты на всех локациях вашей карты, а после сохранит их.

После сохранения игра перезапустит вашу карту с уже созданной навигационной сеткой на всех локациях вашей карты. Вы сможете поставить ботов и играть с ними на любой, удобной вам локации.
Быстрое создание навигационной сетки для тестирования
Фаза анализа генератора может занимать много времени. Чтобы пропустить его, введите nav_quicksave 1 в консоли.

Примечание: «Quicksaving» — пропускает фазу анализа, и в результате наследуемой сетки будут отсутствовать важные данные, требуемые системами планирования и внимания на уровне Counter Strike ботов и заложников.

Это будет полезно для тестирования, редактирования и настройки навигационной сетки, прежде чем публиковать свой навигационный файл для других пользователей. Обязательно выполните полный анализ введя в консоль команду nav_analyze при этом убедитесь, что команда — nav_quicksave "0" использует нулевое значение.
Редактирование навигационной сетки
Автоматический генератор навигационной сетки выполняет разумную работу по созданию сетки, позволяя вам легко использовать ботов и заложников на пользовательских картах. Однако тщательная ручная настройка навигационной сетки может заметно повысить производительность ботов.

Кроме того, ручное редактирование сетки с помощью имен мест позволяет ботам сообщать другим, где происходят события, улучшает радар Counter-Strike и включает в себя имена мест во всех радиосообщениях.

Редактор навигационной сетки
Чтобы включить режим редактирования навигационной сетки, введите в консоль — nav_edit 1. Для отключения режима редактирования введите — nav_edit 0. Белым крестом в центре вашего вида является курсор — при помощи которого вы будете редактировать уже созданную или вновь сгенерированную навигационную сетку.

Область навигации, на которую вы указываете — это выбранная область, и она отображается желтым контуром. Области навигации, которые могут быть достигнуты из выбранной области, показаны красным цветом. Белая линия в выбранной области обозначает, где область будет разрезана или разбита.

Области прыжков отмеченные зеленым крестиком — говорят о том, что ботам приходится прыгать на поверхность расположенную выше бота. Учтите, что jump области (отмечены зеленым крестиком) не могут быть использоваться в качестве места для укрытия или снайпера.



Области приседания (по умолчанию клавиша Ctrl — присесть) — отмеченные синей диагональной косой чертой заставляют ботов приседать при движении в этой области.



Разбивать или разрезать определённые зоны навигационного маршрута можно при помощи команды: nav_split — наведите ваш курсор в виде креста в область, где желаете произвести разрез маршрута и введите команду nav_split в консоль.
Использование команд редактирования сетки
Хотя все команды редактирования сетки могут быть введены в консоль, на практике гораздо проще связать эти команды с клавишами.

Например, bind del nav_delete связывает клавишу del с командой nav_delete. После привязки нажатие клавиши удаления — по нажатию клавиши будет произведено удаление навигационной области под вашим курсором (если вы находитесь в режиме редактирования навигации).

Вы можете временно связать сразу несколько команд с помощью *.cfg файла. Это полезно для редактирования навигации, потому что есть много команд, и вы, вероятно, не захотите, чтобы они были постоянно привязаны к вашим ключам.
Основные команды редактирования сетки
Сохранение
В настоящее время в режиме редактирования навигационной сети нет команды «отменить действие». Поэтому очень важно часто сохранять вашу работу с помощью команды — nav_save

Разделение области маршрута
Чтобы разделить область на две смежные, связанные области, наведите курсор на область и введите в консоль команду — nav_split

До разделения:


После разделения:


Объединение областей

Чтобы объединить две области в одну:
1. Направьте курсор в первую область и введите команду — nav_mark
2. Наведите курсор на вторую область и введите команду — nav_merge

Обратите внимание, что обе области должны быть одного размера вдоль края, подлежащего объединению.







При обледенении областей данные и настройки областей не будут потеряны. Имена, названия и соединения будут сохранены.

Объединение удалённых друг от друга областей
Объединение удалённых друг от друга областей создает новую область между двумя существующими областями. Объединение удалённых друг от друга областей является мощным инструментом и может использоваться для легкого создания наклонных областей, как показано в примере ниже.

Чтобы объединить новую область между двумя существующими областями:
Направьте курсор в первую область и введите команду — nav_mark
Наведите курсор на вторую область и введите команду — nav_splice







Удаление
Чтобы удалить область, наведите курсор на нее и введите команду — nav_delete в консоль.

Создание новой области
Чтобы вручную создать новую область:

Поместите курсор туда, где должен быть угол новой области и введите команду — nav_begin_area

Переместите курсор, чтобы вытащить область и введите команду — nav_end_area







Добавление и удаление соединений между областями
Связи между областями определяют, может ли агент перемещаться из одной области в другую. Обычно эти соединения являются двунаправленными, то есть агенты могут перемещаться между двумя областями по желанию. Однако иногда соединение является одним из способов, как в случае высоких выступов, которые можно спрыгнуть, но не поддерживать.

Чтобы сделать одностороннее соединение из области A в область B (это означает, что вы можете перейти от точки A к точке B):

1. Наведите курсор на область A
2. Отметьте область A с помощью nav_mark
3. Наведите курсор на область B
4. Выполнить nav_connect



Чтобы сделать двунаправленное соединение, повторите вышеуказанные шаги, изменив роли A и B:

Чтобы удалить все соединения из областей A и B:
1. Цель в области A
2. Отметьте область A с помощью nav_mark
3. Цель в области B
4. Выполнить nav_disconnect



Наименование областей
Наименование областей — это специальная настройка областей, которая используется для радара и радио чата ботов. Например, вы играете с ботами на карте и один из ботов решил воспользоваться радиокомандой:

ChicagoTed @ Апартаменты (радио): Fire in the hole!

Когда бот использует радиокоманды — на вашем радаре отображается его местоположение и приблизительная информация о противниках рядом с ним. Кроме того радар отмечает важные места на карте, в игре с ботами радар будет очень полезен. Пока что система радиокоманд работает только с ботами для Counter-Strike, но будем надеяться, что в будущем разработчики введут эту систему в другие игры Source. А теперь давайте рассмотрим этот процесс по подробнее.

Чтобы добавить или изменить название местоположения, вам нужно включить режим редактирования навигационной сетки при помощи уже известной нам команды: nav_edit 1. Введите консольную команду — nav_toggle_place_mode.

Когда вы введёте команду nav_toggle_place_mode — все квадраты навигация должны быть красными. Это сделано для того, чтобы было проще определить месторасположение на карте и подобрать ему подходящее название, которое будет отображаться на радаре.

Чтобы задать название области под вашим курсором, введите команду — nav_use_place "наименование". Например: nav_use_place Bedroom — Указать название Спальная комната. Затем наведите курсор на область, которую вы хотите пометить, с этим именем места и включите «Режим рисования места», введя команду nav_toggle_place_painting в консоль.

Вы можете изменить название области в любой момент для этого вновь введите в консоль команду: nav_use_place "новое название области". Например: nav_use_place Yard — Двор.

Когда вы закончите процесс наименования областей, введите команду — nav_toggle_place_painting в консоль ещё разик, чтобы остановить процесс наименования областей. В противном случае вам придётся наименовывать области по новой.

После наименования те области, которые вы наименовали — станут синим цветом. Области, которые вы только что изменили — станут зелёным цветом.
Обязательно к прочтению!
Посторонние области на лестницах и пандусах
Автоматическая система генерации имеет тенденцию генерирования областей, которые свисают со стороны лестницы и пандусов. Они должны быть удалены, чтобы заставить ботов подняться по лестнице или свернуть прямо.

Перила
Перила могут быть проблемой для навигационной системы ботов, в том числе перекрестные, которые должны проходить через перила, их следует избегать, если это необходимо. Боты в конечном итоге совершают эти прыжки, но при этом они не очень элегантны. В большинстве случаев боты будут тупить и не правильно использовать навигационную сетку связанную с перилами.

Предотвращение чрезмерного прыжка
Отметьте область с помощью nav_mark и используйте команду nav_no_jump, чтобы отметить область запрещающие ботам прыгать — это позволит препятствовать прыжкам ботов на карте.

Работа с вращающимися дверями
Отключите навигационную зону, чтобы оставить пустое пространство в навигационной сетке, чтобы разрешить вращающуюся дверь. Возможно, вам придется переделать область, если удаление части существующего не работает.

Боты будут иногда пытаться пройти через открытый маршрут от одной области до другой и в этом случае могут застревать. Удалите смежную навигационную зону, либо настройте области и соединения, чтобы боты не застревали в сложных участках карты.

Расширенные методы редактирования
Добавление дополнительных сеток
Создайте walkable точку при помощи команды — nav_mark_walkable в области, где ещё не была сгенерирована навигационная сетка и введите следующие команды:

nav_generate_incremental — для создания новой области от созданной точки
nav_generate_incremental_range — диапазон генерации точки, задайте своё значение

Лестницы
Создание навигационной сетки на лестницах немного отличается от создания обычных областей. Вам нужно навести курсор на лестницу, а затем при помощи команд: nav_begin_area и nav_end_area — построить область на указанной вами лестнице.







Но есть и другой вариант, при помощи которого можно проще создать навигационную сетку для ботов на лестнице. Для этого наведите курсор на лестнице и введите команду: nav_build_ladder в консоль.

Реверсивные лестницы
Иногда лестница создается неправильно. Если лестница рисуется красным цветом, вы смотрите на нее со спины. Лестница рисуется зеленым, если она повёрнута лицевой частью к вам. Чтобы изменить ориентацию лестницы, просто укажите на лестницу и используйте nav_ladder_flip.





Препятствие и перемещение препятствий
Консольные команды — nav_precise, nav_walk и nav_stop для отключения локального поведения предотвращения препятствий и управления движением бота.

Маркирующие области, которые следует избегать
Использование команды — nav_avoid, позволит ботам избегать области, если обычный маршрут не стал слишком опасным.

Укрытие
Использование команды — nav_dont_hide — для предотвращения укрытия ботов в этой области. Это может быть использовано для принудительного создания скрытых маршрутов на этапе анализа.

Настройка снайперских позиций
Отметьте область, использующую nav_walk, и введите команду nav_make_sniper_spots. Это распределит область на небольшие подзоны, которые используются внутри навигационной сетки для поощрения снайперов.

Выстраивание сложных прыжков и узких дверных проемов
Помимо всего выше перечисленного есть специальные маршруты для навигации ботов.

Если боты зависают по бокам двери или окна, вы можете начертить узкий путь через середину прохода. Самый высокий прыжок бота — 58 единиц. Если вершина прыжка составляет 59 или более единиц, то после попытки запрыгнуть, бот отступит и больше не будет пытаться туда залезть.

Если это происходит в месте, где боты могут прыгать, используйте nav_corner_lower, чтобы немного опустить верхнюю навигационную область.

На этом всё!
Если вам интересна тематика моего материала, то подпишитесь на меня через страничку моей мастерской. Для этого зайдите в мой профиль → откройте мою мастерскую → и нажмите кнопочку: Подписаться.

Если вы открыли для себя что-то новое, то не забудьте поставить лайк (палец вверх) этому руководству. И написать положительный комментарий тоже не забудьте.

Помимо ознакомления с этим руководством, так же рекомендую вам ознакомиться со следующим:

http://gtm.steamproxy.vip/sharedfiles/filedetails/?id=1228618528

16 Comments
Смайл  [author] 27 Nov, 2024 @ 12:51pm 
Это руководство для стандартных консольных команд, ты же говоришь про Garry's Mod.
The Tim 27 Nov, 2024 @ 5:38am 
Спасибо но никакой перезагрузки не происходит но я нашел способ я просто скачал аддон на навигационную сетку той или иной карты, просто пишешь название карты и после Nav или Nav version)
Смайл  [author] 26 Nov, 2024 @ 8:29am 
Это либо генерация навигационной сетки (создание).

Либо анализ, анализ требуется для того чтобы зоны навигационной сетки были правильно распознаны для ботов.

Чтобы боты не тупили и не ходили там где не надо.

Подожди, после генерации или анализа обычно идёт перезапуск карты, дождись его и продолжай работу.
The Tim 26 Nov, 2024 @ 8:27am 
Что делать если при загрузке у меня остаётся один фпс а через какое-то время игра застывает и ничего не происходит просто висит и всё помогите пожалуйста
Tamiktarakan 16 Mar, 2024 @ 11:27am 
Спасибо за помощь. Надеюсь так. Весь инет перелопатил, но ничего не нашёл. Надеюсь ты прав.
Смайл  [author] 15 Mar, 2024 @ 12:27pm 
На счёт GoldSource не подскажу, так как не работаю с ним. Но есть инфа, что навигационная сетка генерируется самостоятельно когда ты пытаешься поиграть с ботами на карте. Если у этой карты изначально нет навигационной сетки.
Tamiktarakan 15 Mar, 2024 @ 10:59am 
А какая команда нужна чтобы сгенерировать навигационную сеть в goldsrc? Например в КС 1.6 или half life 1? Для нпс
Смайл  [author] 8 Nov, 2022 @ 8:45am 
Без проблем
рубль 8 Nov, 2022 @ 4:29am 
ты лучший мы даже с другом обьсянил как включить и что такое сетка пасиба брат\
Mifman 7 Jan, 2021 @ 9:57am 
Отличное руководство! Ещё ничего не проверял, но планирую с помощью данного творения создать сетку для Garry's mod-а на одной из карт для работы аддона VJ Base :)