.: Делаем вэйпоинты :.

Автор: LLIHULLEJIb

 

 

 

Просьбы помочь сделать вэйпойнты или объяснить, как они делаются, возникают постоянно. Это понятно: допустим, человек сделал свою карту, показал её друзьям, отнёс в ближайший клуб, где она особым успехом не пользуется, и дальше судьба этой карты практически определена. Другой вариант: все стандартные карты поднадоели, а к менее известным картам вэйпойнтов нет. В обоих случаях выход один: сделать вэйпойнты к карте самому и играть с ботами. Распространено мнение, что боты играют тупо, и на них разве что можно тренировать точность стрельбы. В общем-то, это отчасти верно, но отчасти это зависит и от того, насколько удачные вэйпойнты вы используете. Сделать игру с ботами столь же интересной, как с людьми, сейчас, увы, невозможно, но зато вполне возможно сделать её достаточно интересной, чтобы появилось желание играть. И большей частью это зависит от того, насколько грамотно сделаны вэйпойнты.

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

По сути дела, если вы собираетесь сделать вэйпойнты к карте, то перед вами стоят две взаимоисключающие задачи: сделать вэйпойнты качественно и сделать вэйпойнты быстро. В какую сторону склоняться - решать вам. В зависимости от этого время, потраченное на создание, будет лежать в диапазоне от 2 до 10 часов, что требует большого терпения, но если вы создаёте карты для CS, то, безусловно, этим качеством обладаете. К тому же даже в самом худшем случае по крайней мере половину из этих десяти часов вам придётся провести в игре с ботами с целью выявления небольших ошибок, на исправление которых уйдут считанные минуты. Вообще, алгоритм создания вэйпойнтов таков:

1. Знакомство с картой или игра на ней с людьми, что предпочтительнее.
2. Непосредственное создание вэйпойнтов.
3. Тестирование вэйпойнтов с одним ботом.
4. Тестирование вэйпойнтов в игре.


Обязательным по сути дела является только пункт номер 2. Это как раз и есть тот случай, когда на всё дело уйдёт 2-3 часа. Однако результат может оказаться таким, что вы в вэйпойнтах только разочаруетесь, а если нет, то особого удовольствия от игры с ботами не получите. (Возможны удачные варианты, но только как исключения.) Пункт номер 1 является ключевым для создания именно интересных вэйпойнтов. Дело в том, что "интересность" игры определяет на 90 процентов грамотная организация тактики. Поэтому вы должны хорошо знать, какая из сторон первой успевает добежать до определённого места, какие позиции выгоднее всего занимать сторонам, насколько легко эти позиции удерживать и т.д. Если вы играли с людьми на этой карте, то всё это должны были прочувствовать на себе, поскольку делали это сами и видели, как и что именно делают другие. В этом случае вам известна оптимальная тактика, и при конструировании вэйпойнтов остаётся только её учитывать. Если же вам не приходилось играть с людьми, то лучше всё-таки сделать это; в противном случае многие тактические тонкости могут быть не учтены, так как вам многое придётся додумывать самому. Впрочем, я понимаю, что это не для всех людей может быть важно, поэтому решать в конечном итоге вам.

Пункты номер 2 и 3 будут подробно описаны ниже, именно им и посвящена статья. Пункт номер 4 - это уже по сути дела нормальная игра с ботами, но при этом вы должны иметь в виду, что в ходе игры могут выявиться (и обязательно рано или поздно выявятся) незначительные ошибки или просто характерные ситуации, которые вы предпочтёте исправить. После чего вэйпойнты можно выставлять на общее обозрение.

Резюме WaypointsHowToDo.html

В данном разделе собрана основная информация, содержащаяся в стандартном описании (WaypointsHowToDo.html). Подчёркиваю, что это не перевод, а вольное изложение теории, с небольшими изменениями и дополнениями.

Итак, вэйпойнты - это точки (набор трёх координат), которые используются ботами для ориентации при движении по карте. С их помощью боты узнают о том, на каких местах карты надо чаще бывать, какие выгодные позиции можно занимать, просчитывают кратчайшие и безопасные маршруты к интересующему их месту, а также ориентируются в окружающем пространстве, не натыкаясь на стены и не падая с высоты. Чтобы перейти в режим редактирования вэйпойнтов, необходимо в консоли набрать "waypoint on". Существует возможность загрузки встроенного чита командой "waypoint on noclip", который позволяет летать сквозь стены, что иногда полезно при редактировании, а в некоторых случаях и незаменимо. Команда "waypoint off" выключает режим редактирования. Во время редактирования вэйпойнтов запрещено загружать ботов на сервер - это чревато зависанием. (Хотя это можно делать, если соблюдать осторожность; об этом ниже.)

Вэйпойнты изображаются вертикальными линиями разных цветов. Само понятие "точка" относится к центру этой линии. Цвет линии зависит от назначения вэйпойнта:

Цвет линии
Название вэйпоинта
Описание вэйпоинта
Зеленый
           Normal Waypoint            (Обычная точка)
Служит для ориентации бота в пространстве. Когда бот бежит по какому-нибудь маршруту, он пробегает именно по таким точкам. У этих точек есть и другие функции, они рассматриваются ниже.
Красный
"Terrorist Important Waypoint" (Главная точка для террористов)
Установленная такая точка говорит о том, что это место является важной позицией с тактической точки зрения для террористов. Поэтому террористы будут стремиться бегать к таким точкам.
Синий
"Counter Important Waypoint" (Главная точка для контр-террористов)
Описание аналогично предыдущей точке, за исключением стороны.
Сиреневый
       Ladder Waypoint        (Лестничная точка)
Размещается на лестницах.
Сиреневый
               Goal Waypoint               (Основная точка карты)
Служит для указания ботам, что в этом месте можно выполнить основное задание карты, в зависимости от её типа: найти заложников, заложить бомбу или, будучи VIP, спастись.
Белый
          Rescue Waypoint                (Точка спасения заложников)
На CS-картах указывает боту, что сюда нужно привести заложников для их спасения.
Голубой
         Camp Waypoint          (Кемперская точка)
Указывает боту, что это место довольно безопасное, так что на нём можно спрятаться от врага. Можно также покемперить.
Бело-алый
       Camp Waypoint          (Кемперская точка для террориста)
То же, что и предыдущая точка, но только для террориста. Имеет смысл использовать там, где обычно устраивается засада.
Бело-фиолетовый
        Camp Waypoint          (Кемперская точка для контр-террориста)
То же, что и предыдущая точка, но только для контр-террориста.

Следующие команды позволяют управлять вэйпойнтами:

waypoint add - поставить точку в то место, где сейчас находитесь вы. Появляющееся меню позволяет уточнить тип точки.

waypoint delete - удалить ближайшую к вам точку. Она удалится в том случае, если вы находитесь достаточно близко к ней (в пределах 40 юнитов).

waypoint find x - показать направление к точке с номером x. Действие данной команды отключается вводом значения x = -1.

waypoint teleport x - мгновенно переместиться на точку с номером x. Правда, команда немного глючит: иногда, появляясь на новой точке, вы не можете двигаться, и в этом случае приходится использовать чит waypoint on noclip.

Существует способ расставлять точки автоматически. Включить его можно командой "autowaypoint on", выключить, соответственно - "autowaypoint off". А набрав "autowaypoint", вы получите информацию о том, включён ли в данный момент этот режим. Смысл автоматической простановки точек заключается в следующем: в этом режиме идёт постоянная проверка, есть ли точки, находящиеся от вас не дальше, чем на 200 юнитов. Если таких точек нет, то автоматически на этом месте ставится новая обычная точка. Таким образом, если вы побежите по прямой там, где нет точек, они будут автоматически проставляться через каждые 200 юнитов. На мой взгляд, этот режим совершенно бесполезный. Большинство точек, даже обычных, необходимо расставлять в определённых местах, а не через 200 юнитов. Кроме того, на прямых расстояние между точками может быть и больше, чем 200 юнитов, а в некоторых местах вэйпойнты приходится ставить очень близко. Так что пользоваться этим режимом не рекомендую.

Каждая точка может иметь несколько свойств. Во-первых, любая точка имеет количественную величину, которая называется Waypoint Radius (радиус). Радиус точки позволяет боту при движении пробегать не непосредственно через точку, а чуть в стороне от неё. Радиус принимает значения от 0 до 128 и при добавлении новой точки устанавливается автоматически, исходя из информации о расположенных рядом стенах и других препятствиях. Радиус может быть ненулевым только у обычных и главных точек, для остальных типов он должен быть равен нулю.

Другое свойство, которое есть у всех точек - это флаг "Block With Hostage" (запретить посещение с заложником). Если бот бежит с заложником, то он не имеет права проходить через некоторые точки, например, в вентиляционных отверстиях. Данный флаг позволяет решить эту проблему, но, к сожалению, из-за недостатка в алгоритме программы, помогает не всегда. (Об это см. ниже.) По умолчанию для каждой точки движение с заложниками разрешено, поэтому беспокоиться об установке этого флага стоит только на картах с заложниками. Следующие команды позволяют изменять свойства точек:

waypoint setradius x - установить радиус ближайшей точки равным x, x = 0..128.

waypoint calcall - вычисляет оптимальные радиусы у всех точек на карте. Команда пришла из старых версий, и сейчас её использовать не нужно, потому что оптимальный радиус автоматически проставляется, когда вы ставите новую точку.

waypoint showflags - показать установленные флаги для точки.

waypoint addflag - установить флаг для ближайшей точки. вызывает соответствующее меню. Наряду с флагом "Block With Hostage" для кемперской точки доступны ещё два флага, которые изменяют тип кемперской точки. С помощью этих флагов можно превратить кемперскую точку в кемперскую точку для террористов или в кемперскую точку для контр-террористов. Так что эти два флага по сути дела не являются флагами: они задают способ поменять тип точки.

waypoint delflag - команда, обратная предыдущей. Удаляет флаг у ближайшей точки, при этом вызывает соответствующее меню.

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

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

Существует ограничение в количествах путей, которые могут исходить из одной точки: не больше восьми. Таким образом, если вы поставите одну точку, а вокруг неё - ещё девять, то к одной из этих девяти точек пути от центральной точки не будет. Обычно, когда из точки исходит уже 8 путей к другим точкам, а вы ставите ещё одну точку рядом, то один из существующих путей (как правило, тот, который был создан самым первым), удаляется, а вместо него прокладывается путь к новой точке. При этом следует заметить, что к одной и той же точке может приходить сколь угодно большое количество путей. Таким образом, лимит существует только для исходящих путей.

Формально пути можно разделить на три вида. Первый вид - это обычный путь, который говорит боту о том, что между точками, соединяющимися этим путём, нет препятствий. В результате по такому пути бот просто перебежит от одной точки к другой. Второй вид путей - путь с прыжком. Count Floyd (автор PODBot’ов, прим. ред.) описывает это не как путь, а как Jump Waypoint (Прыговая точка), но с точки зрения пользователя это вовсе не точка, а путь. Такой путь изображается красным, а не жёлтым (белым) цветом, и говорит боту о том, что для достижения следующей точки необходимо совершить прыжок. Наконец, третий вид пути - путь с приседанием. В описании, опять же, это представлено не как путь, а как свойство точки. Однако по своей сути это опять же является путём, поскольку, если, допустим, точка 1 - нормальная, а точка 2 сделана с приседанием, то движение бота будет следующим. Он добежит до точки 1, далее присядет, доползёт до точки 2, на ней встанет и побежит дальше. Таким образом, все пути, приходящие в точку 2, можно считать путями с приседанием. Такие пути изображаются белым или жёлтым цветом, то есть так же, как обычные, но сама точка, к которой надо ползти, изображается вдвое укороченной вертикальной линией. Такая точка ставится в положении "присев". Важно, кстати, заметить, что к кемперским точкам невозможно провести путь с приседанием. Сделать кемперскую точку в положении "присев", конечно, можно, но для кемперской точки это означает совсем другое: то, что бот, который прибежит на эту точку, должен кемперить сидя, а не стоя.

С помощью следующих команд можно редактировать пути:

pathwaypoint on - включить показ путей и радиусов точек.

pathwaypoint off - действие, обратное предыдущей команде.

pathwaypoint - показать, включён или выключен показ путей и радиусов точек. Непонятно, правда, какой в этой команде смысл.

pathwaypoint add x - соединить ближайшую к вам точку обычным путём с точкой, имеющей номер x.

pathwaypoint delete x - удалить путь от ближайшей точки к точке с номером x.

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

Создаваемые вами вэйпойнты сохраняются в файлах, имеющих название карты и расширение pwf. По умолчанию вэйпойнты сохраняются в директорию …\cstrike\PODbot\WPTDefault. 

Существуют следующие команды управления всеми вэйпойнтами:

waypoint load - считать данные о вэйпойнтах из файла и проинициализировать их.

waypoint save nocheck - сохранить данные о всех вэйпойнтах в файл.

waypoint check - сделать проверку работоспособности вэйпойнтов. По этой команде проверяется возможность пробежать от каждой точки ко всем остальным.

waypoint save - сделать проверку работоспособности вэйпойнтов и сохранить их в файл. Играть с ботами можно только на вэйпойнтах, сохранённых подобным образом, в противном случае могут появиться проблемы.

waypoint stats - вывести статистику по вэйпойнтам.

При сохранении вэйпойнтов ваш ник сохраняется как имя автора вэйпойнтов. При поверке на ошибки и инициализации (то есть при использовании команд waypoint save, waypoint check и waypoint load) компьютеру необходимо совершить огромное число вычислительных операций, из-за чего в течение некоторого времени КС будет находиться в "подвисшем" состоянии. В зависимости от числа точек и мощности процессора это состояние может длиться до минуты.

Пожалуй, это всё, что касается мануала. Здесь я изложил только основные идеи, многое будет более детально рассмотрено ниже.

Удобный конфиг

Чтобы сделать вэйпойнты быстро, вам необходимо забиндить основные команды редактора вэйпойнтов. В этом случае не придётся запоминать большинство вышеописанных команд. Лучше всего создать отдельный файл с биндами и прочими настройками (его можно назвать, например, wptedit.cfg) и перед началом редактирования вэйпойнтов подгружать его командой exec. Вот образец такого файла:

alias clmenu "wait; wait; slot10; wait; wait; slot10; wait; wait; slot10; wait; wait; slot10"
alias dev1 "developer 1"
alias dev0 "developer 0"
bind "F2" "waypoint save"
bind "F3" "waypoint load"
bind "F4" "waypoint save nocheck"
bind "F5" "dev1; wpon; wait; wait; dev0"
alias wpon1 "waypoint off; wait; waypoint on; alias wpon wpon2"
alias wpon2 "waypoint on noclip; alias wpon wpon1"
wpon1
bind "F6" "dev1; awpon; wait; wait; dev0"
alias awpon awpon1
alias awpon1 "autowaypoint on; alias awpon awpon2"
alias awpon2 "autowaypoint off; alias awpon awpon1"
bind "F7" "dev1; pfwon; wait; wait; dev0"
alias pfwon1 "pathwaypoint on; alias pfwon pfwon2"
alias pfwon2 "pathwaypoint off; alias pfwon pfwon1"
pfwon1
bind "F8" "dev1; waypoint stats; wait; wait; dev0"
bind "F9" "addbot 0 1"
bind "F10" "addbot 0 2"
bind "F11" "sv_restartround 1"
bind "F12" "dev1; waypoint showflags; wait; wait; dev0"
bind "Del" "waypoint delete"
bind "End" "waypoint delflag"
bind "Ins" "waypoint add; menuselect 1; clmenu"
bind "[" "waypoint add; menuselect 2; clmenu"
bind "]" "waypoint add; menuselect 3; clmenu"
bind ";" "waypoint add; menuselect 4; clmenu"
bind "'" "waypoint add; menuselect 5; clmenu"
bind "," "waypoint add; menuselect 6; clmenu"
bind "." "waypoint add; menuselect 7; clmenu"
bind "/" "waypoint add; menuselect 8; clmenu"
bind "\" "waypoint add; menuselect 9; menuselect 1; clmenu"
bind "Home" "waypoint addflag; menuselect 1; clmenu"
bind "PgUp" "waypoint addflag; menuselect 2; clmenu"
bind "PgDn" "waypoint addflag; menuselect 3; clmenu"
bind "KP_INS" "waypoint setradius 0"
bind "KP_END" "waypoint setradius 16"
bind "KP_DOWNARROW" "waypoint setradius 32"
bind "KP_PGDN" "waypoint setradius 48"
bind "KP_LEFTARROW" "waypoint setradius 64"
bind "KP_RIGHTARROW" "waypoint setradius 80"
bind "KP_HOME" "waypoint setradius 96"
bind "KP_UPARROW" "waypoint setradius 112"
bind "KP_PGUP" "waypoint setradius 128"
alias grav1 "sv_gravity 80; dev1; echo GRAVITY=80; dev0; alias grav grav2"
alias grav2 "sv_gravity 800; dev1; echo GRAVITY=800; dev0; alias grav grav1"
alias grav grav1
bind "g" grav
bind "SPACE" "waypoint delete; waypoint add; menuselect 1; clmenu"
mp_timelimit 240
mp_roundtime 9
mp_freezetime 0
debuggoal -1
waypoint find -1
dev1
echo "Ready for waypointing!"
wait
dev0

С помощью этого конфига вы получаете следующие возможности:

F2 – проверить на ошибки и сохранить вэйпойнты
F3 – загрузить вэйпойнты
F4 – сохранить вэйпойнты без проверки на наличие ошибок
F5 – переключение режима: ходить / летать сквозь стены
F6 – переключение режима: ставить вэйпойнты вручную / ставить автоматически
F7 – включение / выключение показа путей и радиусов точек
F8 – статистика по вэйпойнтам
F9, F10 – добавить бота (соответственно, террориста или контера) для тестирования
F11 – быстрый перезапуск раунда
F12 – показать флаги у данной точки
Del – удалить ближайшую точку
End – удалить один из флагов данной точки (открывает соответствующее меню)
Ins – поставить обычную точку
[ и ] – поставить главную тактическую (соответственно террористскую или контерскую) точку
; – поставить лестничную точку
‘ – поставить точку для вывода заложников
, и . (то есть < и >) – поставить кемперскую точку с указанием граничных направлений
/ – поставить основную точку карты
\ – приготовиться к постановке прыговой точки; она будет поставлена при следующем вашем прыжке
KP: 0,1,2,3,4,6,7,8,9 на правой клавиатуре – установить радиус точки соответственно в 0, 16, 32, 48, 64, 80, 96, 112 или 128 юнитов
g – переключатель гравитацию: 80/800. Полезная вещь, поскольку зачастую надо быстро попасть куда-нибудь наверх, а бежать обычным путём долго.
Пробел – подвинуть ближайшую обычную точку (симулятор). Часто бывает нужно немного передвинуть точку на небольшое расстояние, что в данном случае и можно сделать с помощью этой клавиши. Заметьте, это только аналог передвижения: на самом деле удаляется прежняя точка и ставится новая, поэтому если вы изменяли свойства точки (радиус и флаг для блокировки заложников) и редактировали пути, идущие от и к этой точке, то при таком "перемещении" точки эти данные исчезнут, и их нужно вводить заново. Если же нажать эту клавишу, когда поблизости нет ни одной точки, то она просто добавит новую точку.

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

Некоторые команды забиндить нельзя, поскольку они используют числовые параметры. Поэтому при необходимости эти команды придётся вводить из консоли. Таких команд всего 5:

pathwaypoint add x – добавить путь от ближайшей точки к точке с номером x.

pathwaypoint delete x – удалить путь от ближайшей точки к точке с номером x.

waypoint find x – указать направление на точку с номером x (для отмены указания нужно ввести –1).

waypoint teleport x – мгновенно переместиться на точку с номером x.

debuggoal x – отправить всех бегающих ботов на точку с номером x, применяется при тестировании (для отмены этого нужно ввести –1).

Также помните, что ваш ник при создании вэйпойнтов сохраняется как имя автора вэйпойнтов, поэтому стоит добавить в конфиг строчку, задающую его.

Перед тем, как делать вэйпойнты

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

Вторая вещь, которая может повлиять на игру с ботами, - это некоторые объекты на карте, которые представляют мудрость непостижимой глубины для ботского разума. И здесь, увы, от вас ничего не будет зависеть: если, допустим, на карте есть лифт, то научить ботов пользоваться им абсолютно правильно и только тогда, когда это нужно, ни за что не получится. Именно поэтому необходимо хотя бы немного знать карту, чтобы заранее предвидеть, насколько много таких сложных объектов на карте, и как они могут повлиять на игру. Возможно, что карта вообще окажется неиграбельной для ботов. Пример такой карты - Cs_Sibiria, где существует три объекта, которые боты не умеют использовать: запертая на замок дверь, который нужно разбить, поворачивающиеся ручки-выключатели и открывающийся с задержкой люк. На карте Cs_Siege есть лифт, но правильно воспользоваться им ботам удаётся крайне редко. Помимо лифтов на поведение ботов могут влиять разные переключатели, которые боты используют от случая к случаю, не задумываясь о последствиях такого использования. Например, на Cs_Delta_Assault бот, выбегающий из ангара через главный выход, может нажать на кнопку закрытия ворот и после этого долго в буквальном смысле ломиться в закрытую дверь. С разбиваемыми объектами (func_breakable) проблем быть не должно, поскольку если путь проходит через такой объект, бот автоматически его разбивает. С объектами func_illusionary проблемы, скорее, будут у вас, поскольку боты через эти объекты всё видят, даже если они непрозрачные, и получают перед вами преимущество. Ещё один довольно опасный объект - вода, хотя, в принципе, научить ботов не тонуть очень просто, гораздо сложнее (но тоже возможно!) научить ботов погружаться, там, где это надо. И, естественно, всякие транспортные средства, как управляемые, так и нет, для ботов таковыми не являются, поэтому никакие ваши усилия не заставят ботов самопроизвольно кататься на них.

Таким образом, на данном этапе ваша задача - установить, много ли подобных объектов на карте и окончательно определиться с тем, стоит делать вэйпойнты или нет. Идеальными картами для игры с ботами можно считать такие, где практически нет никаких entities, сделанных не для красоты, а именно для их использования. Среди таких карт большинство известных: De_Aztec, De_Cbble, De_Dust, De_Dust2, De_Inferno, De_Storm, De_Train, De_Vertigo, Cs_Militia и т.д. Примеры карт, на которых обязательно будут проблемы с ботами: Cs_Mansion, Cs_Sibiria, Cs_Siege.

Как бот движется по точкам

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

Итак, вы запустили бота. Что он будет делать? Прежде всего, он выберет себе точку назначения, то есть ту точку, к которой он будет стремиться прибежать. В качестве такой точки может быть выбрана главная точка (красная или синяя), кемперская точка или основная точка карты (сиреневая), а также точка вывода заложников. Какую точку именно выбрать в данный момент - решает сам бот. Это зависит от ряда факторов, например, для бота дефенсивного типа выше вероятность выбирать в качестве точки назначения кемперскую. Вполне можно предположить, что чем больше на карте точек какого-либо типа, тем чаще боты будут бегать к этим точкам. На практике, однако, это наблюдается не так явно. Кроме того, есть ещё одна тонкость, описанная в мануале. На картах, где атакующей стороной являются террористы (DE), контр-террористам разрешено выбирать в качестве точки назначения только синие точки, и лишь иногда - красные, в то время как террористам разрешено посещать и красные и синие точки с одинаковой вероятностью. На картах, где атакуют контр-террористы (AS и CS), всё наоборот: террористам разрешено выбирать в качестве точки назначения красные точки, и лишь иногда - синие, в то время как контр-террористам разрешено бегать и к синим и к красным. То же самое касается и кемперских точек для контр-террористов и террористов. Этот факт нужно иметь в виду, однако на другое утверждение мануала - что соотношение чисел главных точек атакующей и защищающейся сторон должно быть примерно 1:2 - обращать особого внимания не стоит. Обычно примерно так и получается при грамотной расстановке главных точек, но если соотношение будет другим - ничего страшного в этом не будет.

Итак, бот выбрал себе точку назначения. Дальше он просчитывает маршрут, каким он к этой точке побежит, то есть определяет номера точек, через которые надо пробежать, чтобы достичь точки назначения. Маршрут выбирается обычно самым минимальным по расстоянию. Это приводит к тому, что, например, террорист, решивший заложить бомбу, будет бегать к месту закладки всё время одним и тем же маршрутом, то есть через одни и те же точки. Правда, боты пытаются разнообразить свои маршруты, это, скорее всего, сделано для того, чтобы боты как можно реже врезались друг в друга. Делается это в том случае, если два бота выбрали в качестве точки назначения одну и ту же точку, или просто на каком-то этапе маршруты ботов совпадают, и им предстоит бежать часть пути по одним и тем же точкам. В этом случае боты могут выбирать и не минимальный маршрут; а там, где возможно, они бегут по соседним точкам, расположенным недалеко друг от друга. Если таких точек нет, то нет и альтернативизации маршрута.

Таким образом, точка назначения выбрана и составлен маршрут достижения этой точки. Оба эти процесса происходят очень быстро. Сразу после этого бот начинает двигаться в соответствии с маршрутом от одной точки к другой. Когда он достигает точки назначения, он тут же придумывает себе другую точку назначения, составляет маршрут движения к ней и бежит. Так, предоставленный сам себе, он будет бесконечно патрулировать карту. Если вы разрешаете ботам использовать файлы опыта (.PXP) для каждой карты, то в этих файлах сохраняется информация об опасности каждого маршрута по критерию, в скольких случаях бот, двигаясь по данному маршруту, смог достигнуть точки назначения.

Отдельно следует сказать про движение ботов, которые выполняют миссию карты. На DE-картах бот, имеющий в самом начале раунда бомбу, всегда придумывает в качестве точки назначения основную точку карты и бежит закладывать туда бомбу. Поэтому его маршрут движения всегда один и тот же. Но если бот подберёт обронённую бомбу, то он не сразу побежит к месту закладки. Сначала он достигнет той точки назначения, которая была задумана им до этого, а уж после побежит закладывать бомбу. На CS-картах история практически такая же. Бот, решивший спасать заложников, бежит к основной точке кратчайшим путём. Забирая заложников, бот двигается на точку спасения заложников также кратчайшим путём. Но если бот увидит заложников, стоящих на его дороге, то он их заберёт (Любят боты-контры заложников, даже у людей всегда их отбирают!), но не сразу побежит спасать. Сперва он добежит до точки, которую задумал раньше. Причём в этом случае возможен достаточно серьёзный глюк, связанный с тем, что при таком движении боты совершенно не реагируют на флаги точек "Блокировать с заложниками". Поясню на примере. Допустим, на карте Cs_Assault один проворный бот выводил заложников, но был застрелен закемперившимся терром недалеко от места спасения. Мимо измученных заложников пробегал другой контр, отомстил терру-кемперу за товарища и забрал заложников с собой. Казалось бы, до места вывода - рукой подать. Но не тут-то было, оказывается, контр в качестве точки назначения задумал точку, находящуюся где-нибудь внутри ангара, да ещё и на втором этаже. И пока он до той точки не добежит, он заложников отводить не пойдёт. Да к тому же кратчайший маршрут контра будет пролегать по вентиляционной трубе, где у всех точек расставлен флаг "Блокировать с заложниками". Но контр на этот флаг никак не среагирует, потому что с его точки зрения в данный момент он заложников не выводит, хотя они и бегут за ним. В результате заложники застрянут у входа в вентиляцию, а контр, достигший задуманной им точки, выберет в качестве точки назначения точку спасения заложников и побежит к ней. На этом примере явно видна одна из недоработок программы POD-Bot.

Что касается AS-карт, то там VIP также бегает к точке спасения одним и тем же путём, кратчайшим с его точки зрения. Однако на AS-картах есть способ заставить VIP бегать разными дорогами! (Об этом ниже.) На DE и CS-картах этот способ не работает.

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

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

Этот эффект - прыжок и приседание бота при невозможности достичь точки обычным способом - можно и нужно широко использовать. Вовсе необязательно ставить прыговой путь там, где боту нужно совершить прыжок, достаточно соединять точки обычным путём. На рисунке 1 представлен пример такого места, где вместо прыгового пути поставлен обычный.


Рисунок 1

При движении бот на некоторое время (0,5 секунды) останавливается перед верхним ящиком, но потом запрыгивает на него. Аналогично для пути с приседанием. Например, выше было сказано, что любая точка, поставленная с приседанием, будет означать, что все пути, идущие к этой точке, являются путями с приседанием. Это действительно для всех типов точек, кроме кемперских, потому что кемперская точка, поставленная с приседанием, означает, что бот должен кемперить на ней сидя. А если нужно, чтобы бот не только кемперил сидя, но ещё и подходил к этой точке с приседанием? В подавляющем большинстве случаев для этого не нужно ничего дополнительно делать. Потому что бот, видя, что у него не получается добежать до кемперской точки обычным способом, сам догадается присесть.

Однако бот движется по точкам только "при отсутствии внешних раздражителей". Если происходит что-то, что отвлекает бота, то он прекращает движение по точкам и начинает двигаться, ориентируясь на ближайшие объекты карты, что, естественно, несколько понижает FPS. После того, как бот выполнит то, что он захотел и на что отвлёкся, он вновь возвращается к движению по точкам: если он убежал от того места, где он прекратил движение по точкам, он возвращается напрямик на самую последнюю точку своего движения и продолжает свой путь к точке назначения. Если же на последнюю точку вернуться невозможно (например, бот случайно свалился с крыши, и вернуться на неё по прямой, естественно, нельзя), бот высчитывает, на какой точке он находится в данный момент, просчитывает маршрут к точке назначения от неё и двигается по новому маршруту. Правда, чтобы бот понял, что невозможно вернуться к старой точке, требуется некоторое время. Например, в случае с крышей это проявляется в том, что бот некоторое время будет пытаться запрыгнуть на крышу, не понимая, что это невозможно.

К объектам, которые способны заставить ботов двигаться не по точкам, относятся:

Враги. В этом случае бот отстреливается и стрейфится. Иногда на него находит агрессия, и он бежит прямо на врага, безостановочно стреляя. Чаще всего таким образом он расправляется с жертвой, но после этого он возвращается на последнюю точку, на которой увидел врага, даже если она достаточно далеко. Когда бот убегает с поля боя или прячется от врагов, он по точкам, судя по всему, ориентируется. Кроме того, Count Floyd советует ставить обычные (зелёные) точки не только на дорогах, но и в тех местах, где бот бы мог спрятаться от врага (Например, за разного рода препятствиями типа ящиков и стен.) Когда бот спасается от врага, он ищет безопасные с его точки зрения точки. Безопасными он считает кемперские точки, а также обычные, которые имеют как можно меньший радиус.

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

Бомба, лежащая на земле - для террористов, Defuser Kit - для контр-террористов.

Поставленная бомба - для контр-террористов. Если, допустим, бомба заложена на ящике, а бот-контр попал на соседний ящик такой же высоты, то боту надо просто перепрыгнуть на другой ящик. Однако он может увидеть бомбу раньше и перестанет двигаться по точкам. В результате он "забудет" прыгнуть и бомбу не разминирует. Это наблюдается, например, на De_Dust и De_Dust2.

Заложники - для контр-террористов. На карте Cs_Docks два заложника стоят в подвале за решёткой. Естественно, бот их видит сквозь решётку и бежит напрямик к ним. И очень удивляется, почему не может добежать. Другой пример: на Cs_Militia можно иногда видеть заложников, бегущих за контром в канализацию. Выше я писал, что заложников боты выводят всегда одним и тем же путём. В том числе и на этой карте, а в канализацию заложники попадают по другой причине: просто два заложника стоят на довольно оживлённом перекрёстке, и случайно пробегающий мимо контр-террорист не сочтёт для себя обузой их забрать. Это, кстати, и приводит к нехорошим последствиям, которые я описал выше на примере Cs_Assault.

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

Выключатели. Когда бот оказывается недалеко от выключателя, он во что бы то ни стало решит проверить, что делает эта кнопка. (Впрочем, не на все выключатели он реагирует по непонятной причине.) В результате он бежит к выключателю напрямик. К сожалению, это самый тяжёлый случай, поскольку тут бот даже не понимает, что выключатель может находиться через стену в соседней комнате или на другом этаже. К чему это приводит, думаю, объяснять не стоит. На одном только Cs_Mansion есть четыре места, где из раунда в раунд можно видеть бьющихся головой о стену ботов только лишь для того, чтобы в очередной раз включить или выключить свет. На Cs_Militia такое место - на чердаке рядом с решёткой, где бот может пытаться попасть к выключателю прямо сквозь пол, хотя прочность последнего не вызывает никаких сомнений…

Прочие объекты непонятной природы. То есть, для создателей карт они-то как раз понятны, но ботам могут приходить в голову совсем неожиданные вещи. Всякие хитрые мультипереключатели, триггеры, объекты с задержкой и прочие вещи просто не под силу ботскому разуму. В лучшем случае боты просто не будут обращать на эти объекты никакого внимания, а в худшем - начнут глючить, да так, что играть на карте станет просто невозможно. Именно поэтому вы должны быть уверены, что на вашей карте число таких объектов сведено к минимуму. В качестве примера могу привести карту De_Bahrain. На ней в одном месте на довольно оживлённой дороге висит колокол, при ударе по которому раздаётся колокольный звон. Пробегавшие мимо боты буквально сходили с ума: они начинали бросаться на этот колокол, лазили под ним, но ни ударить не догадались, ни уходить оттуда не собирались, оставаясь там до конца раунда. В результате играть в эту карту оказалось невозможным, и всё время, потраченное на создание вэйпойнтов к этой карте, оказалось потраченным зря.

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

Советы по созданию точек и путей

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

Задача этого этапа делится на две подзадачи, которые, однако, всегда решаются одновременно. Первая задача - расстановка точек. Вы сами выбираете тип точки, её координаты, редактируете свойства точки, если требуется, и т.д. Вторая задача - коррекция путей между точками. Пути между точками прокладываются автоматически, но эта автоматика зачастую подводит, поэтому довольно существенная часть времени уходит на то, чтобы редактировать именно пути. Вообще говоря, правильность проложения путей гораздо важнее, чем правильность расстановки точек. Если вы, к примеру, поставите какую-нибудь точку на 10 юнитов левее или правее или поставите обычную точку там, где могла бы быть кемперская - ничего страшного не будет. Но если у вас на карте есть хотя бы один неправильный путь (лишний или недостающий или неправильного типа), то рано или поздно какой-нибудь бот воспользуется этим путём. И в большинстве случаев будет казаться, что бот совершил явную глупость, которую, как ни крути, разрешили ему совершить именно вы как автор вэйпойнтов. Поэтому всегда обращайте внимание именно на правильность прокладки путей.

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


Рисунок 2

Чтобы удалить путь, вы должны совершить два движения туда-обратно, чтобы узнать номера точек, и ввести две консольные команды. Вместо того чтобы делать всё это, просто переместите обычную точку немного влево, чтобы с того места не было видно кемперской точки, и тогда этот путь автоматически не появится. Или наоборот, сдвиньте её чуть вправо, чтобы путь не был так близко к стене. Поверьте, боту абсолютно всё равно, где стоит эта обычная точка. А вы на таких мелочах можете сэкономить массу времени. Однако пути надо проверять абсолютно всегда, в идеале желательно подбегать к каждой точке законченного участка и контролировать пути, идущие от неё. Если этого не делать на данной стадии, то вам всё равно придётся это сделать потом, когда вы начнёте играть с ботами и увидите эти ошибки.

Таким образом, принцип прост: ставим точки так, как удобней нам, и сразу проверяем пути, которые проставились автоматически. Если что не так, то лучше исправлять сразу, не оставляя на потом. Правда, здесь есть два нюанса. Во-первых, вы должны быть уверены, что вам не придётся корректировать сами точки. Если вы исправили неправильные пути, а затем решили одну из точек заменить на точку другого типа, то все ваши исправления исчезнут, поскольку при замене точки все пути, идущие к ней и от неё, проставятся автоматически заново. И вам придётся снова повторять те же операции. Отсюда становится понятным, зачем вам нужно хорошо знать карту: в этом случае вы сразу будете знать, где ставить кемперские точки, где главные, и вам не придётся впоследствии делать замены. Лучше сразу ставить точки всех типов именно туда, где они должны быть. Это тоже экономит время. Во-вторых, есть одна особенность, связанная с тем, что от одной точки не может исходить больше, чем 8 путей. Если на какой-то небольшой территории вам приходится ставить много точек, то путей на всех не хватит, и между каким-то точками, находящимися на достаточно близком расстоянии, путей не будет. В таких местах пути следует контролировать особенно тщательно. Следует убирать пути, по которым боты будут бегать редко, и оставлять самые важные.

Алгоритм действий при постановке точек примерно следующий. вы выбираете тип точки, а также сразу определяете, будут ли пути, идущие к ней, путями с приседанием. Ставите точку, используя забинденные клавиши, при необходимости предварительно приседаете. Для создания кемперских точек конкретной команды (T или CT) ставите соответствующие флаги. При необходимости ставите флаг "Блокировать с заложниками". Контролируете радиус точки, а дальше смотрите на пути, которые соединяются с данной точкой. При необходимости корректируете их командами из консоли. Необходимо проверять не только пути, исходящие из точки, но и пути, которые могут приходить в данную точку. Эти пути могут быть односторонними и поэтому с данной точки не будут видны. Чтобы их заметить, придётся пробежать по всем окрестным точкам. Поскольку после простановки каждой точки пробегать все соседние весьма утомительно, то пути лучше контролировать после простановки нескольких точек, когда вы покроете ими некоторую территорию. Таким образом, в консоль вам придётся вводить только две команды: Pathwaypoint Add X и Pathwaypoint Delete X, что весьма удобно - достаточно ввести их полностью лишь один раз. По окончании раунда можете также пользоваться командой Waypoint Teleport X, чтобы быстрее попасть туда, где вы были перед окончанием раунда. Однако не стоит часто пользоваться этой командой, поскольку обычно в среднем бежать до любой точки карты с ближайшего респауна - 10-15 секунд.

Если вы не знаете, с какого участка карты начать, то советую начать именно с двух респаунов. Поскольку боты, появляясь на респауне, заново определяют, на какой точке они находятся, следует заполнить точками весь респаун. Например, я пользуюсь командой Sv_RestartRound 1 столько раз, сколько мест рождения игроков на карте, и каждый раз ставлю на месте появления обычную точку. В итоге получается некоторая отправная база. Кстати, будьте очень внимательны с точкой, имеющей номер 0. При её удалении вас может просто выкинуть из КС. Count Floyd писал, что этот глюк исправлен, но я на собственном опыте убедился, что если он и исправлен, то лишь частично. Поэтому точку с номером 0 всегда ставьте так, чтобы не пришлось её удалить. Если вы поставите её на респауне на месте появления игрока, то тем самым обеспечите её неприкосновенность в дальнейшем.

Заполнив респауны, начинайте заполнять точками все окрестные дороги, постепенно стремясь к тому, чтобы соединить точками два респауна. Здесь всё зависит от архитектуры карты, поэтому сложно дать какие-либо практические советы. Главный совет, пожалуй, таков: ставьте точки так, как бегаете по карте сами. Например, если вы бежите по дороге и срезаете угол, то ставьте и точки точно также. Вы сами для себя должны решить, что именно вы хотите от ботов. Для меня, например, очень важно, чтобы боты как можно быстрее бежали к месту сражения. Поэтому, когда я ставлю точки, я всегда на углах ставлю их как можно ближе к углам, на прямых стараюсь точки ставить на одной прямой. На рисунке 3 (вид сверху) видна разница.


Рисунок 3

Слева показан участок дороги, на котором вэйпойнты поставлены, например, так, как они были во многих стандартных файлах. Бота, бегущего по таким точкам, обогнать очень легко, даже если он с ножом. Бота, бегущего по правому варианту, обогнать, если он с ножом, достаточно сложно, и прибегать на место сражения вы будете практически одновременно, а не с опережением на несколько секунд. Правда, у варианта, которым пользуюсь я, есть и недостатки. Главный из них заключается в том, что если на точке номер 1 или номер 3 встретятся два бота, то разбежаться им будет достаточно сложно, и они почти наверняка столкнутся. Но здесь, как я и написал выше, вы сами должны решить, что для вас важнее. Для меня важнее прибегать с ботами на место сражения одновременно.

На больших открытых пространствах вовсе не нужно ставить точки везде, где только можно. Помните, что боты используют зелёные точки только для достижения других точек. Поэтому если через какую-либо обычную зелёную точку не ведёт ни один кратчайший маршрут от одной точки назначения до другой, то боты, скорее всего, ни разу не пробегут через эту обычную точку. Выходит, что она просто лишняя. Не ставьте таких лишних точек, помните: чем больше точек, тем дольше (причём зависимость экспоненциальная) грузятся вэйпойнты, и тем больше они занимают в памяти. Стремитесь к минимизации. Приведу такой пример: на карте De_Dust в стандартном файле было около 600 точек. Когда я сделал вэйпойнты к этой карте заново, там оказалось около 450 точек, при этом значительно увеличилась "полезность" каждой из них, а следовательно, повысилось качество движения ботов. Впрочем, принцип минимизации нужно применять не везде: существуют такие места на карте, где точками приходится сорить направо и налево, но это бывает оправданно, поскольку иногда только таким способом можно заставить ботов делать красивые трюки.

Если вы затрудняетесь, какие из точек, которые вы хотите поставить, могут оказаться лишними, то попробуйте ставить точки таким нехитрым способом, который условно можно назвать "метод основных дорог". Сущность этого способа понятна из рисунка 4. Допустим, вы имеете большое открытое пространство, которое всё целиком заполнять точками бессмысленно. Представьте, как вы бы пересекали это пространство, если бежали бы, например, со стороны хода 1 к ходу 2, и создайте соответствующую линию из вэйпойнтов. Затем аналогично постройте линии от хода 2 к ходу 3 и от хода 3 к ходу 1. В результате у вас получились кратчайшие дороги, которыми и будут пользоваться боты, пересекающие данную местность. (Показаны толстыми линиями.) Теперь, если это можно и нужно, вы можете поставить несколько дополнительных точек, которые будут способствовать разнообразию движения ботов, если они бегут в паре. Если какие-нибудь области получаются слишком пустыми, то их тоже можно заполнить точками, ставя их не очень часто, практически на максимальном расстоянии, на котором они будут автоматически соединяться путями с соседними точками.


Рисунок 4

На рисунке 4 также более тонкими изображены остальные пути, которые будут проставлены автоматически. Хотя с первого взгляда они не нужны, на самом деле, убирать их, конечно же, не следует. Во-первых, во время битвы бот может перебежать на соседнюю точку и начать движение с неё. Во-вторых, все точки, изображённые на рисунке 4 являются обычными, но если предположить, что какая-нибудь из них была бы главной (например, красной или синей), то бот, выбравший в качестве точки назначения её, воспользовался бы этими второстепенными путями.Если на какой-то местности вы проложили основные дороги, а затем поставили очень много дополнительных точек вокруг, то имеет смысл проверить, сохранились ли пути у основной дороги. Потому что если число окружающих точек превысит 8, игра разобьёт уже существующий путь и вместо него создаст путь с другой, позже поставленной точкой. Вам придётся менять пути назад вручную. В этом недостаток "метода основных дорог".

Ещё одна вещь, о которой вы должны помнить, оставляя пустые пространства, - это то, что во время битвы боты, стрейфясь, могут перебежать на это пустое пространство и в итоге по окончании битвы не найти точки. По собственному опыту могу сказать, что такого я пока не замечал. Например, если на рисунке 4 не заполнять точками весь оставшийся левый верхний угол, то ничего страшного, наверное, не будет. Если только на этом месте часто происходят столкновения противоборствующих сторон и проводятся решающие бои, то несколько точек там лучше всё-таки поставить.Когда вы ставите новую точку, ей автоматически проставляется радиус. Радиус может быть в диапазоне от 0 до 128, хотя опытным путём установлено, что против ввода отрицательных значений программа не возражает. Автоматически проставляемый радиус если и следует корректировать, то только в сторону понижения. Если вы пользуетесь "методом основных дорог", то большие радиусы могут привести к вихлянию ботов из стороны в сторону, поэтому для этих точек радиусы лучше уменьшать примерно до 48.

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

Создание прыгового пути имеет ряд особенностей. Выбрав соответствующий пункт меню, вы должны совершить прыжок точь-в-точь так, как хотите, чтобы его совершал бот. В результате у вас появятся две точки, соединённые прыговым путём: первая - в месте прыжка, вторая - в месте приземления. Обе точки будут иметь нулевой радиус. Его увеличение приводит к тому, что боты будут совершать прыжок не от самой точки, а от любого места в пределах радиуса. В некоторых местах это оправдано. Кроме того, вторая из точек (та, которая появляется при приземлении), может совсем не иметь путей, соединяющих её с соседними точками. Эту недоработку можно обойти, ставя сначала точку на месте приземления, а потом совершая прыжок, приземляясь, соответственно, рядом с поставленной ранее точкой. При этом новая точка создаваться не будет, а прыговой путь будет проведён к ранее поставленной точке. Причём сама точка всё же претерпит небольшие изменения: её радиус изменится и будет равен 0, и сама точка может немного сдвинуться ближе к тому месту, где вы реально приземлились. Точно также можно совершать прыжок от уже имеющихся точек, и в этом случае прыговой путь будет проводиться именно от них. Однако помните, что в этом случае у точки, от которой вы прыгнули, обнулится радиус, а самое печальное, что игра полностью обновит все пути, которые идут от этой точки и к ней. Это означает вот что: если вы поставили точку и долго-долго убирали все ненужные пути, которыми она соединялась с соседними, то впоследствии, совершив прыжок от этой точки (когда ставите прыговой путь), вы увидите, что все удалённые пути появятся заново, как ни в чём не бывало! На приведение в порядок путей уходит масса времени, а если их ещё и по несколько раз убирать… Поэтому выгоднее сначала создавать прыговые пути, затем - корректировать остальные, хотя такой порядок возможен не всегда.

Если вы заполняете точками что-то типа двухъярусной комнаты (например, входная комната на Cs_Mansion), то лучше сначала заполнить нижний ярус, а потом - верхний. Потому что, во-первых, заполняя второй ярус, вы будете видеть пути, идущие сверху вниз, и сможете проверить, будет ли бот терять HP, следуя по таким путям. Во-вторых, программа иногда в таких случаях соединяет нижние точки с верхними двухсторонними путями, и вы, опять же, увидите: если путь жёлтый, а не белый, значит, это произошло, и вам придётся спуститься вниз и удалять ненужные пути.

Вообще, большая часть неправильных путей создаётся именно при создании точек на какой-нибудь высоте. В этом случае программа очень любит ставить пути от верхних точек к нижним там, где спускаться нельзя из-за потери HP. Такие пути нужно обязательно убирать, желательно вообще не иметь на карте путей, следуя по которым, бот теряет HP, потому что бот не обращает внимания на свои проценты здоровья. Кроме того, при работе на высоте может не оказаться путей, идущих вниз, там, где они должны быть. А самое плохое, что могут оказаться пути, идущие снизу вверх. Таким образом, в таких местах карты надо особенно тщательно просматривать пути. Впрочем, если вы и упустите эти ошибки из виду, то достаточно быстро обнаружите их при тестировании.

Если с крыши или откуда-нибудь ещё можно свалиться, то рано или поздно разбушевавшийся во время битвы бот оттуда свалится. На это вы вэйпойнтами повлиять не можете. Хуже, когда бот, например, прибегает на край крыши, чтобы покемперить там, а в итоге пробегает край и падает. Существует способ замедления скорости движения ботов. Вы должны проложить путь с приседанием к той точке, которая стоит на краю. Бот падает с крыши, потому что пробегает точку по инерции. Когда он ползёт, такого не происходит. Поэтому, чтобы замедлить скорость бота, используйте пути с приседанием. вы, конечно же, помните, что к кемперским точкам не может быть проведено путей с приседанием. (Кемперская точка, поставленная в положении "сидя", означает, что бот будет на ней кемперить сидя.) Поэтому если надо замедлить скорость бота при подходе к кемперской точке, поставьте рядом с кемперской точкой обычную в положении "присев". И соедините кемперскую точку с остальными через эту обычную точку. (См. рисунок 5; кружок с чёрной точкой внутри - это точка, поставленная с приседанием).


Рисунок 5

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

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


Рисунок 6

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


Рисунок 7

Обычный прыжок сделать нельзя: по инерции бот пролетит мимо и свалится вниз. Можно было бы сделать не прыговой путь, а обычный, чтобы бот подбежал прямо к карнизу и запрыгнул на него оттого, что у него не получается добежать до точки обычным путём. Но и для этого способа есть препятствие. Дело в том, что бот считает, что достиг точки, несколько раньше, чем он реально оказывается на ней. Для разного типа точек это расстояние разное. Поэтому бот не станет прыгать, подбежав к карнизу: он окажется на достаточно близком расстоянии, чтобы считать, что он уже на кемперской точке, и сядет кемперить под карнизом. Такой способ подходит только для достаточно широких карнизов. Поэтому остаётся один реальный способ: делать прыжок под достаточно острым углом к карнизу, в этом случае у бота не хватит инерции, чтобы свалиться с него.                (См. рисунок 7).

Впрочем, существует ещё один способ борьбы с инерцией. Но он работает в том случае, если точка приземления - не кемперская. Заключается он в том, чтобы заменить путь, идущий от точки приземления, с обычного на прыговой. (См. рисунок 8)


Рисунок 8

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

Существует ещё одна хитрость заставить ботов выполнять то, что обычными средствами не получается. Дело в том, что точки можно ставить за пределами карты, то есть внутри стен. Напоминаю: бот считает, что он достиг точки даже в том случае, если он находится на некотором расстоянии от неё. Получается, что точка может быть "спрятана" в стене, но бот всё равно пробежит по ней. Такие точки можно использовать для того, чтобы "приблизить" бота к стене в том случае, если это необходимо. Например, вы хотите, чтобы бот нажимал на кнопку (См. рисунок 9), которая нажимается не кликом, а надавливанием. Если просто поставить точку рядом с кнопкой, то ничего не получится: бот посчитает, что достиг точки, ещё до того, как коснётся стены. В результате он на кнопку не нажмёт. Если же "задвинуть" точку в стенку за кнопкой, то мы добьёмся нужного результата. Только не ставьте точки слишком далеко за стенами, в этом случае бот не сможет их достичь. Чтобы поставить точку внутри стены, пользуйтесь читом noclip.


Рисунок 9

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


Рисунок 10

Наличие у точки зоны достижения можно использовать в самых разнообразных ситуациях. Например, на карте Cs_Assault, чтобы спрыгнуть с синего ящика и не потерять HP, нужно попасть точно на наклонную поверхность бордюра. (См. рисунок 11.) Всё бы хорошо, но программа бота, увы, не фиксирует факт вашего приземления на наклонную поверхность. Поэтому, если вы попробуете создать такой прыговой путь, точка приземления поставится уже на самой земле, что в данном случае бессмысленно. выход из данной ситуации есть. вы ставите точку приземления не на наклонную поверхность бордюра, а чуть дальше, на сам бордюр.


Рисунок 11

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

Теперь настало время рассказать о том, как делать вэйпойнты на воде. В описании к боту написано, что у ботов проблемы с погружением вглубь. Есть способ, который позволяет эти проблемы решать. В качестве примера возьмём известную карту Cs_Docks.

Если у вас на карте просто полоска воды, и надо сделать так, чтобы бот не тонул, то сделать это достаточно просто. Просто ставите вэйпойнты у поверхности воды или чуть-чуть выше. (См. рисунок 12.)


Рисунок 12

Однако заставить бота погружаться в воду не так просто. Происходит это по следующей причине. Бот знает, на каком расстоянии расположена следующая точка по маршруту, и рассчитывает время, за которое он должен успешно добраться до этой точки. Если реально время оказывается значительно больше, то бот считает, что у него не получилось добраться до следующей точки и возвращается на предыдущую, после чего повторяет попытку. При погружении в воду игрок движется медленнее, чем просто при движении. Поэтому если вы просто расставите точки сверху вниз, ничего не получится: бот будет пытаться погрузиться, но постоянно возвращаться наверх. Отсюда вывод: чтобы бот не реагировал на время достижения следующей точки и не возвращался к предыдущей, нужно расстояние между точками уменьшить, причём уменьшить настолько, чтобы бот при своей скорости погружения успевал бы достичь следующей точки раньше, чем решал бы, что это у него не получилось. Именно таким способом следует решать проблему погружения. А чтобы стоящие слишком близко точки не сливались в одну, их можно расположить по небольшой спирали. В этом случае у ботов ещё будет горизонтальная составляющая скорости, что в данном случае идёт на пользу, поскольку в целом бот движется быстрее. На карте Cs_Docks есть затопленный колодец, образующий дополнительный ход. Именно в него должны погружаться боты. Как это сделано, показано на рисунке 13.


Рисунок 13

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

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

А для особо терпеливых и трудолюбивых могу рассказать о том, как заставить ботов забираться на наклонные поверхности, по типу той, которая показана на рисунке 14. Человек по такой поверхности забирается, постоянно зажав кнопку "вперёд" и двигаясь очень медленно. Если же кнопку отпустить, вы сразу же свалитесь вниз. Для ботов подобные условия, конечно, специфичны, но, как это ни странно, решение этой проблемы точно такое же, как и решение проблемы с погружением ботов. За исключением того, что здесь точки придётся ставить ещё чаще, настолько часто, чтобы бот достигал при движении каждой следующей точки раньше, чем думал бы, что это у него не получилось. Каждая точка соединяется только со следующей и с предыдущей.


Рисунок 14

Думаю, не стоит даже упоминать о том, сколько времени вы можете потратить, убирая лишние пути в таких местах. Однако, в любом случае, сам факт есть: по таким поверхностям ботов научить забираться можно. Всё зависит от того, стоит ли их этому учить на каждой конкретной карте, то есть, представляет ли то место, куда они могут так забраться, какой-нибудь тактический интерес.

Из рисунка 14 непонятно, зачем ботам взбираться на эту наклонную стену. На самом деле там наверху расположена обычная кемперская точка, просто она расположена внутри стены. (См. рисунок 15.) Просто из-за наличия зоны достижения бот решает, что он добрался до точки раньше, чем он оказывается на ней. В результате он в самый последний момент скатывается со стены со словами "I’m In Position". Если задвинуть кемперскую точку дальше, за стену, то такого не будет.


Рисунок 15

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

Лестничные точки. Используйте их на всех лестницах. На очень коротких лестницах достаточно одной лестничной точки, но не меньше. На очень длинных лестницах вы можете ставить больше, чем две точки. Точки нужно ставить именно туда, где они должны стоять. Чтобы поставить нижнюю точку, подойдите к лестнице и совсем немного (буквально однократное нажатие кнопки "вперёд") взберитесь на неё. В этом положении поставьте нижнюю точку. Верхняя точка ставится примерно в таком положении, как показано на рисунке 16, - чтобы ваша голова была чуть выше уровня конца лестницы.


Рисунок 16

Все проблемы на лестницах возникают только из-за неправильно проложенных путей. Помните, что на лестницах надо обязательно прокладывать пути так, как они должны быть, потому что автоматически они не соединяются. Сначала разберёмся с нижней точкой. Необходимо следить за тем, чтобы боты подходили к лестницы практически под прямым углом - в противном случае они могут сваливаться. Поэтому рекомендуется напротив лестницы (См. рисунок 17) ставить обычную точку нулевого радиуса, и только эту точку соединять с лестничной. Кстати, когда вы ставите лестничную точку (нижнюю), она автоматически соединяется только с одной точкой, которая ближе всех к ней. Это стоит использовать.


Рисунок 17

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

Поставив верхнюю точку, соедините вручную нижнюю с верхней. Путь между лестничными точками должен быть двухсторонним. Также от верхней лестничной точки желательно не иметь никаких путей, идущих к другим точкам нижнего яруса. Обычно парочка таких путей ставится автоматически, и их надо вручную убрать.Наконец, вам надо на верхнем уровне также поставить одну единственную точку, которая будет соединена с лестничной, и сделать так, чтобы она соединялась с верхней двухсторонним путём. Этим вы также обеспечите прямой угол подхода бота к лестнице.

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


Рисунок 18

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

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

Лестничные точки имеют радиус 0, и изменение его ни к чему хорошему не приведёт.

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

Основные точки карты. Здесь стоит рассмотреть отдельно все три вида карт, поддерживаемые POD-Bot.

На CS-картах эти точки ставятся там, где стоят заложники. Если несколько заложников стоит рядом, достаточно одной точки. Причём не обязательно её ставить прямо "внутрь" заложника. Бот заложников и так найдёт, потому что при виде их он начинает двигаться не по точкам, а прямо по направлению к ним. Когда он их всех возьмёт, он подбежит к основной точке и ещё раз сделает проверку, нет ли поблизости заложников. Поэтому если вы поставили основную точку слишком близко к заложникам, бот увидит их раньше, возьмёт, затем вернётся на точку, откуда он их увидел, после чего подбежит к основной точке. Эти шатания бота туда-сюда на одном месте, да ещё и с заложниками, со стороны выглядят неестественно. Поэтому основную точку лучше ставить с той стороны от заложников, откуда бот будет к ним подбегать.

На DE-картах основные точки ставятся там, где можно заложить бомбу. Здесь, пожалуй, нужно следить лишь за тем, чтобы точка не оказалась слишком близко к краю области, где можно заложить бомбу. Ведь бот, прибежавший на точку закладки, может по инерции "проехать" некоторое расстояние, да ещё и повернуться не в ту сторону, в результате чего окажется за пределами области закладки. Понятно, что в этом случае бомбу он заложить не сможет. Ещё помните, что боты всегда закладывают бомбу, присев. На карте De_Prodigy есть одно место, где, если стоять в полный рост, бомбу заложить можно, а если присесть, то нельзя.

Чтобы разнообразить процедуру закладки бомбы, ставьте на каждый бомбплейс несколько точек, от 3 до 7. Причём ставить их лучше в труднодоступные места - на открытом пространстве боты-контры бомбу и так найдут. Если на карте несколько бомбплейсов, на них нужно ставить одинаковое количество основных точек, иначе к тому месту, на котором этих точек будет больше, боты будут бегать чаще.На AS-картах основные точки ставятся там, где спасается VIP. Здесь, в общем-то, никаких сложностей нет.

Выбрав в качестве точки назначения основную точку, бот всегда бежит к ней одним и тем же путём. Можно ли это изменить? Можно, но только на AS-картах. Процедура заключается в том, что вы ставите основные точки не только в местах спасения VIP, но и ещё где-нибудь. Просто VIP всегда выбирает в качестве назначения только основные точки. Добежав до одной, он начинает бежать к другой (если он не спасся), поэтому поставьте одну основную точку на альтернативную дорогу, по которой VIP не бегает, и в результате он будет в половине раундов бегать по старой дороге, в половине - по новой. Однако не стоит увлекаться и ставить основные точки на всех дорогах. Ведь настоящее-то место спасения - одно или два, и рано или поздно VIP должен прибежать туда. Если вы поставите слишком много мнимых основных точек, то VIP очень долго будет плутать по карте, пока найдёт ту точку, с которой он реально спасётся. Если на карте одно место спасения - поставьте максимум ещё 2 основных точки, если два места спасения - поставьте ещё 3.

На CS и DE-картах такой способ не работает, и понятно, почему. На CS картах поставленная лишняя основная точка никак не скажется на движении контр-террористов, на DE-картах бот, прибегающий на такую мнимую точку, будет отвлекать всех других своим криком "Need Backup!" и ничего больше.

Как быть, если на карте два совмещённых сценария? Например, на карте Cs_Rush есть и заложник, и бомба у террористов. Ставить основные точки и у заложника и на месте закладки - это не дело. Да и кроме того, террористы в любом случае не будут закладывать бомбу, потому что у карты префикс CS. Вот если изменить его на DE, тогда можно добиться кое-какого результата. Переименовываем карту в De_Rush и ставим основные точки на месте закладки, а также ставим точку спасения заложника. А у самого заложника ставим несколько главных контерских точек, чтобы контр-террористы часто сюда прибегали. В результате террористы успешно закладывают бомбу, а контр-террористы вполне нормально юзают и выводят заложника.

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

Кемперские точки. Здесь речь идёт только об обычных кемперских точках, на которых не стоит флаг, обозначающий их принадлежность одной из сторон. Оказывается, они играют на карте очень важную роль, и пренебрегать ими ни в коем случае нельзя. Тем более что им дано не совсем точное название, поскольку они служат для гораздо больших целей.

Представьте, что вы встретили врага, пострелялись с ним, и настало время перезарядиться. Куда вы отбежите? Естественно, за ящик, который стоит рядом, чтобы не находиться на линии огня. Вот и боты пытаются сделать то же самое. Они ищут безопасные точки, а к таким они относят кемперские точки и обычные точки, у которых радиус как можно меньше. Другой пример: вы купили AWP. Не пойдёте же вы с ней на раш! Вы займёте удобную для себя позицию и будете спокойно ждать. Это не кемперство, это снайперство! Почему бы ни дать ботам возможность точно также выбирать удобную позицию? А когда у вас осталось 10 HP, то разве вы не спрячетесь подальше, предоставив вашим товарищам возможность отстреливать врагов? И боты делают то же самое, они иногда убегают с поля боя и ищут безопасные места. Вот именно для этого нужны кемперские точки, для ботов они представляют собой ничто иное, как самые безопасные точки. Ну а уж то, что они кемперят на них - так ведь и люди этим балуются. Так что кемперские точки нужны на карте обязательно. Ставить их нужно практически по всей карте, их число должно составлять процентов 12–18 от всех точек на карте. Ставьте их за ящиками, за поворотами, на более выгодных позициях, в общем, везде, где только можно. Только не ставьте их на открытых местах.

Чтобы поставить кемперскую точку, нужно совершить ряд действий. Сама точка состоит из двух, каждая из которых указывает направление, между которыми должен смотреть бот, находясь на этой точке. Точка, поставленная с приседанием, говорит о том, что бот, находясь на ней, присядет. Таким образом, вы должны встать на место, где собираетесь поставить кемперскую точку, повернуться в одном из ограничивающих направлений, присесть, если необходимо, и поставить Campstart Waypoint, а затем повернуться в сторону другого ограничивающего направления и поставить Campend Waypoint. Последнюю операцию необходимо проделывать даже в том случае, если второе направление с самого начала рисуется правильно. Если угол между задающими направлениями слишком большой, то бот может смотреть в произвольном направлении. Кроме того, он реагирует на звуки, издаваемые врагами, и может поворачиваться в ту сторону, откуда они слышатся.

Помните, что к кемперским точкам не может приходить путей с приседанием. В большинстве случаев бот догадается присесть сам, а если это всё-таки нужно ему объяснить, то пользуйтесь схемой, изображённой на рисунке 5.

Кемперские точки должны всегда иметь радиус 0!

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

Честно говоря, на мой взгляд, такого инструмента, как главные точки, явно недостаточно, чтобы можно было объяснить ботам, как именно играть на конкретной карте. Понятно, что в самом начале раунда игроки будут стремиться занять выгодные позиции, до которых они смогут добежать, не встречая противника. Однако дальше, по мере развития боёв и передвижения противника, нужно принимать решения, которые зависят каждый раз от конкретной ситуации. Что нужно делать каждый раз, ботам объяснить невозможно, они это решают сами, и решают, практически ни на что не ориентируясь, то есть случайным образом. Если вы находитесь на одной части карты и видите, что с другого фланга ваших сильно потеснили, то несколько человек отправятся туда на помощь своим. Боты этого никогда не сделают, или сделают по команде "Taking Fire, Need Assistance!", но все сразу, обнажив этот фланг. В общем, возможности наши явно ограничены в реализации продвинутой ботской тактики, но будем довольствоваться тем, что имеем.

Главные точки делятся на два типа. Во-первых, это обычные главные точки, которые бот выбирает в качестве точек назначения. Добегая до такой точки, он тут же придумывает себе новую точку назначения и бежит к ней. Во-вторых, это кемперские главные точки, на которых бот ещё на некоторое время задерживается. Честно говоря, я затрудняюсь, относятся ли главные кемперские точки больше к главным или к кемперским, но то, что с помощью них можно лучше организовывать тактику, это факт. Таким образом, основной принцип расстановки точек при организации тактики выглядит так: ставьте обычные главные точки там, куда надо прорываться, а кемперские главные точки ставьте там, где обычно создаётся засада. Единственное различие засады людей от засады ботов будет в том, что боты будут не двигаясь сидеть на своих точках и спокойно ждать врага, а люди всё-таки более любопытны.На мой взгляд, главные точки лучше ставить с расчётом на начало раунда. Понятно, что в середине раунда может случиться всякое, даже, например, стороны могут поменяться местами на карте - но все случаи предусмотреть невозможно, а начало раунда по крайней мере бывает в каждом раунде. Таким образом вы обеспечите правильность движения ботов хотя бы на первую минуту.

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

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

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

Чтобы не ограничиваться теорией, стоит привести какой-нибудь пример. Вот как бы я расположил главные точки на всем известной карте De_Dust. Начнём с базы террористов. В её окрестностях - пара-тройка CT точек, чтобы контры могли бегать по всей карте. У входа в тоннель - достаточное количество кемперских T точек, чтобы ловить особо проворных контр-террористов. В середине тоннеля - и T и CT точки, на выходе к воротам - кемперские CT точки, на выходе из тоннеля к бомбплейсу - несколько T точек, а также в большом количестве CT точки, как обычные, так и кемперские. Если из тоннеля со стороны террористов заворачивать вправо - там также несколько CT кемперских точек. Внизу под мостом - обычные точки CT, а со стороны террористов - много T точек, как обычных, так и кемперских. Поскольку боты бегают закладывать бомбу всегда только через тоннель, под мостом стоит поставить побольше T точек, для равномерного распределения террористов по карте. На самом известном снайперском месте со стороны CT (Рядом с ящиками, откуда просматривается и мост, и дорога под мостом.), конечно же, кемперские CT точки. Оставшаяся область - респаун контров и всё, что рядом с ним, равномерно заполнено и T и CT точками. Конечно, здесь всё это представлено упрощённо. Как видите, реализация тактики очень зависит от того, как вы сами её понимаете. Наверняка найдутся люди, которые видят тактику по-другому, не так, как здесь изложено. Именно поэтому никогда не будет вэйпойнтов, созданных разными людьми, которые (вэйпойнты) были бы похожи, как две капли воды. В идеальных вэйпойнтах, сделанных к одной карте двумя разными людьми, практически всё будет одинаково: и расстановка основных и кемперских точек, и пути, и прочее. Единственное, чем они будут различаться - это расстановкой главных точек, определяющих тактику.

В заключение этого раздела хочу напомнить, чтобы при создании вэйпойнтов вы чаще сохранялись командой waypoint save nocheck. Лучше перестраховываться, чем потом делать ещё раз то, что вы уже сделали.

Тестирование вэйпойнтов

Наконец, настал тот долгожданный момент, когда вы расставили точки по всей карте. Что нужно делать дальше? Во-первых, вы должны проверить вэйпойнты на ошибки и сохранить их. Во время создания вэйпойнтов вам следовало использовать команду waypoint save nocheck для сохранения без проверки на ошибки. Теперь же нужно использовать команду waypoint save. Однако перед ней советую сделать две вещи: во-первых, сохранитесь последний раз командой waypoint save nocheck, а во-вторых, перезапустите раунд командой sv_restartround 1. Просто если у вас на карте есть ошибки, которые обнаружатся при сохранении, то вам придётся эти ошибки исправлять до того, как закончится время раунда. В противном случае по истечении времени игра может зависнуть - я сталкивался с этим не раз. Девяти минут вполне достаточно, чтобы исправить все ошибки, которые найдёт компилятор вэйпойнтов. Итак, вы перезапускаете раунд и набираете команду waypoint save. По этой команде сначала производится ряд тестов вэйпойнтов на играбельность, и если возникают какие-то ошибки, вам нужно их исправить. Часто в сообщении об ошибке указывается номер точки, с которой связана ошибка. В этом случае вы командой waypoint teleport x перемещаетесь на указанную точку и исправляете ошибку, затем повторяете попытку сохраниться. И так до тех пор, пока не получите желанное сообщение "waypoints saved". Помните, что играть можно только в вэйпойнты, не содержащие никаких ошибок. Если компилятор обнаружил ошибку, то теоретически вы можете загрузить ботов и играть с ними на таких вэйпойнтах, но в результате могут появиться разного рода глюки.

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

Во время сохранения процессор тестирует вэйпойнты и выполняет огромное количество вычислений, из-за чего на некоторое время CS "зависает". То же самое происходит и при загрузке и инициализации вэйпойнтов.

После того, как вэйпойнты успешно сохранены, вам обязательно нужно их загрузить ещё раз. Делается это командой waypoint load. По этой команде вэйпойнты не только загружаются, но и инициализируются. Инициализация заключается в том, что вэйпойнты загружаются в память в таком виде, в каком их используют боты. Именно поэтому после каждого удачного сохранения вэйпойнты нужно загружать. Если этого не сделать, то попытка добавить бота на сервер закончится зависанием последнего.Если вы удачно сохранили и загрузили вэйпойнты, то рекомендуется вам самим провести ряд тестов на карте, прежде чем вы начнёте играть с ботами. При таком тестировании вы выявите такие ошибки, которые непременно бы обнаружили себя сразу во время игры и испортили бы впечатление от неё. Загрузите бота за свою команду и побегайте за ним в течение десяти минут. (Можно загрузить бота и за чужую команду, но, чтобы он вас не убивал, включите чит noclip.) Если он не допустил никаких ошибок при движении, то это может говорить об отсутствии ошибок, которые бы проявляли себя слишком часто. Кроме того, вы можете протестировать некоторые отдельные сложные места на карте, в которых сомневаетесь, что бот будет выполнять там то, что вы от него хотите. Используйте для этого команду debuggoal x, где x - номер точки, куда вы отправляете бота. Бот должен успешно достигать точки x. Если вдруг вы выявили ошибку, то перед её исправлением обязательно уберите бота с сервера. Категорически запрещается одновременно иметь бегающих ботов на сервере и при этом редактировать вэйпойнты. Точно также запрещено добавлять ботов на сервер, если до этого не были инициализированы вэйпойнты. Если с момента последней инициализации вы добавили хотя бы одну точку или даже просто добавили один путь, вэйпойнты нужно заново сохранить и загрузить, лишь затем можно добавлять бота. Нарушение этих правил приведёт к таким последствиям, что вам придётся жать на одну известную кнопку, расположенную на системном блоке. Также помните, что вы могли забиндить некоторые клавиши, которые используете в обычной игре, по-другому. Например, на клавишу, на которой у вас обычно команда "+attack2", вы могли забиндить команду "waypoint add". В результате, увлёкшись тестированием, вы можете нажать на эту клавишу, чтобы нанести тупому боту, не делающему то, что вы от него хотите, альтернативный удар ножом, а в результате поставите ещё одну точку. Поверьте, месть бота за это будет очень страшной: он просто повесит вам сервер…

Таким образом, если вы добросовестно проверили самые сложные места на карте и уверены, что бот будет бегать абсолютно нормально, можете выходить из режима создания вэйпойнтов и загружать ботов. Но лучше на всякий случай перезагрузить сервер. Дальше, собственно, начинается то, для чего вы так старательно и мучительно создавали эти вэйпойнты. Единственное, что хочу ещё заметить: на первых порах игры внимательно следите за ботами, не совершают ли они ошибок. Достаточно некоторое время поиграть на карте с ботами, чтобы понять, что именно можно сделать лучше, какие места чуть-чуть исправить и т.д. Не поленитесь затем это сделать, и таким образом вы в конце концов очень сильно повысите качество ваших вэйпойнтов. Кроме того, особенно внимательно следите за тактикой ботов, её в любом случае придётся подгонять под ту, которую вы себе представляете. Можете считать, что в ваших вэйпойнтах нет ошибок, если вы не выявили ни одного недостатка после часа игры. Однако это вовсе не означает, что их там на самом деле нет, просто оставшиеся ошибки будут проявляться настолько редко, что здесь уже появляется вопрос: а имеет ли смысл тратить время на поиск таких ошибок и их исправление?

В заключение этого раздела пара слов о том, можно ли менять карту во время редактирования вэйпойнтов. В принципе, можно. Но здесь могут быть две проблемы. Во-первых, при смене карты могут не показываться пути и радиусы точек - вроде бы Count Floyd исправил этот глюк, но иногда он всё же проявляется. Во-вторых, при смене карты обязательно вводите команды debuggoal –1 и waypoint find –1 (если, конечно же, вы пользовались этими командами на предыдущей карте). Если этого не сделать, последствия будут непредсказуемыми.

Ошибки и их устранение

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

Ошибки, возникающие при редактировании вэйпоинтов

Проблема
Причина и методы решения
При удалении точки с номером 0 сервер зависает. Глюк POD-Bot, решить эту проблему невозможно.
При смене карты не показываются пути и радиусы точек. Также глюк POD-Bot. Создайте сервер заново.
При добавлении новой точки у уже существующих соседних точек убирается путь. Из каждой точки может исходить не более 8 путей. Если их уже 8, то при добавлении новой точки один из старых путей убирается.
Прыговой путь не создаётся. Из данной точки уже исходит 8 путей. Даже если вы их все удалите, то при прыжке точка обновится, и все 8 путей появятся заново, прежде чем вы успеете приземлиться. Придётся удалить несколько точек вокруг, затем создать прыговой путь, а затем вернуть эти точки на место.
Прыговой путь появился там, где он не должен быть, а там, где он был раньше, теперь обычный путь. Глюк, возникающий достаточно редко, когда от одной точки отходит более чем один прыговой путь. Придётся удалять все неправильные пути и создавать их заново.

Ошибки, возникающие при сохранении вэйпоинтов

Сообщение об ошибке
Что нужно делать
“You didn’t set any Terrorist (Counter, Goal, Rescue) Point!” Чтобы боты могли бегать по карте, на ней обязательно должны быть точки назначения. Поэтому на любой карте должны быть хотя бы в единственном экземпляре главные точки, как T, так и CT, а также основные точки карты, а на CS-картах - ещё и точки вывода заложников.
“Node X isn’t connected with other Waypoint!” Точка с номером X не соединена путями с другими точками. Такого быть не должно. Телепортируйтесь на эту точку и исправьте ошибку.
“Path broken from Nr. X to Y! One or both of them are unconnected”. Основной принцип движения по точкам - это возможность от любой точки добежать до любой другой по проложенным путям. При сохранении компилятор проверяет эту возможность. Сперва он проверяет, можно ли от точки с номером 0 добежать до всех остальных точек, а затем проверяет, можно ли от каждой из точек добежать до точки с номером 0. Если можно, значит, отсюда автоматически следует, что можно добежать от любой точки до любой другой. Данное сообщение означает, что подобная проверка не удалась. Одна из точек X и Y всегда будет 0. Телепортируйтесь на другую указанную точку и проверьте пути у всех соседних точек. Ошибка должна быть где-то рядом: либо на эту точку нельзя попасть от соседних, либо с этой точки нельзя убежать на соседние.
“Node X Pathindex Y points to itself!” Ошибка могла возникнуть по двум причинам. Либо вы вручную указали "pathwaypoint add x", стоя прямо на этой точке, либо вы совершили прыжок, прокладывая прыговой путь, таким образом, что точка прыжка совпадает с точкой приземления. Телепортируйтесь на точку X и наберите в консоли "pathwaypoint delete x", где X, естественно, номер точки.
“Node X Camp_End position not set!” Когда ставите кемперскую точку, у неё обязательно необходимо указывать второе задающее направление, даже если оно по умолчанию ориентировано правильно. Телепортируйтесь на точку X и поставьте CampEnd Waypoint.

С остальными ошибками я не встречался, поэтому описывать их не буду.

Ошибки, возникающие при загрузке вэйпоинтов

Сообщение об ошибке
Причина ошибки
"No waypoints for this map, Can’t create Bot!" - Возникает при попытке добавить ботов на карте, к которой нет вэйпойнтов.
- Файл находится не в директории, заданной переменной WPTFolder, а где-нибудь ещё. По умолчанию файл должен находиться в директории …cstrike\PODBot\WPTDefault.
- Была переименована карта и файл вэйпойнтов. Однако название карты хранится в самом файле вэйпойнтов (с 17 по 48 байты). Нужно загрузить файл в любом текстовом редакторе, воспринимающем кодировку целиком, и вручную поменять имя.
"Waypoints changed/not initialised, can’t create Bot!" Чтобы добавить бота, необходимо инициализировать вэйпойнты. Сохраните вэйпойнты и загрузите их ещё раз.
"Waypoint file … doesn’t exist!" Скорее всего, при смене карты вы использовали верхний регистр, вводя её название. POD-Bot реагирует на изменение регистра, поэтому не может найти соответствующий файл. Вводите название карты строчными буквами.
"No experience Data File or old one - starting new!" Это просто сообщение, которое появляется, когда вы используете файлы опыта. Оно означает, что либо файла опыта нет, либо вы изменили вэйпойнты, поэтому старый файл опыта уже не действителен.

Ошибки, записываемые в файл PODERROR.TXT

Сообщение об ошибке
Причина ошибки
"POD Bot Waypoints are not for this map!" Изменено название карты и файла вэйпойнтов. Необходимо изменить название, хранящееся внутри файла вэйпойнтов. (См. предыдущую таблицу.)
"mapname.pwf doesn’t exist!" Нет файла с вэйпойнтами к загружаемой карте. Зачем делать каждый раз об этом запись в файле PODError.txt, я не знаю.
"Findpath Dest Invalid!" Вы тестировали вэйпойнты на одной карте и использовали команду debuggoal X, а затем сменили карту, и на новой карте точек оказалось меньше, чем X. Загрузившийся бот увидел, что его посылают буквально вникуда, и подвесил вам сервер. Чтобы такого не было, при смене карты вводите "debuggoal –1".
"No Path from X to Y!" Такое сообщение записывается в том случае, если вы играете на карте, сохранённой с ошибкой "Path broken from Nr. X1 to Y1! One or both of them are unconnected". Появление этой ошибки будет сопровождаться глюками ботов. Так что лучше эти ошибки исправлять.
"No Path from X to Y! (with Hostage)" Бот не может найти дорогу от точки X до точки Y, при этом он тащит заложников. На всех возможных путях стоит флаг "Block With Hostage". На движении ботов это практически никак не сказывается, тем более что ошибка могла появиться по следующей причине: бот мог увидеть заложников, находясь на точке с вышеуказанным флагом. Естественно, какой бы он себе маршрут не придумал, самая первая точка будет иметь этот флаг, а значит, появится данная ошибка. Обращать на неё внимания особо не стоит.

Вывод: все сообщения, записываемые в файл "PODError.txt", достаточно бесполезны, и особо увлекаться их исправлением не стоит. Иногда стоит очищать этот файл, а то со временем он разрастается до огромных размеров.

Ошибки ботов во время игры

Неправильные действия ботов
Как это исправить
Боты (все) не бегают по карте, а упираются в ближайшую стенку и тупо прыгают. Возможно, изменилась версия карты.
Боты (все) бегут к одной точке и прыгают над ней. Вы пользовались командой debuggoal x. Отключите её, введя debuggoal –1.
Один из ботов тупо прыгает на месте около стены. Здесь вариантов очень много:
- Он только что упал с крыши и всё ещё надеется туда запрыгнуть. Скоро он поймёт, что сильно переоценил свои возможности.
- Бот бежал за товарищем, который сказал ему "Follow Me!" В результате товарищ завернул за угол, а этот бот не успел и потерял товарища из виду. Если поблизости есть точки, то бот вскоре прекратит биение в стену и начнёт нормально двигаться.
- Поблизости нет ни одной точки. Когда бот не видит точек поблизости, он бежит в случайном направлении. Это случайное направление всегда указывает на ближайшую стену.
- Возможно, за стеной находится нечто интересное, что привлекло любопытного бота: например, выключатель. Поскольку боты - прекрасные электрики, то они всегда проверяют исправность системы освещения. Исправить это, увы, нельзя. Разве что попробуйте проложить путь подальше от такой стены.
- Может быть, бот увидел оружие или бомбу, которая залетела куда-нибудь в щель между ящиками. Упрямый бот будет лезть напролом, и это тоже не исправить.
Бот перебегает от точки к точке, останавливается на каждой и подолгу прыгает. Странная ошибка, которая проявляется крайне редко. Причина возникновения неизвестна.
Бот сваливается в яму, хотя через неё идёт прыговой путь. Скорее всего, этот бот бежал за своим товарищем, который сказал "Follow Me!" В этом случае бот ориентируется не по точкам, а по товарищу. Поэтому в таком месте он обязательно забудет прыгнуть. Выходом может быть только одно: уменьшите значение переменной botsfollowuser в файле PODBot.cfg, лучше всего до нуля.
Бот всегда выводит заложника, бежит ставить бомбу или бежит к месту спасения VIP одним и тем же путём. Боты стараются использовать кратчайшие маршруты. Бежать разными путями можно заставить только VIP на AS-картах, об этом см. раздел "Советы по созданию точек и путей".
Бот бежит с заложниками туда, где они пройти не могут, хотя флаг "Block With Hostage" стоит везде, где надо. Недоработка в программе; см. раздел "Как бот движется по точкам".
Бот недовыводит заложников, и они остаются стоять рядом с местом спасения. Скорее всего, заложники застревают где-нибудь в пути и прибегают к месту спасения уже тогда, когда бот бежит назад. Попробуйте поставить точку спасения заложников подальше вглубь зоны спасения.
Бот прибегает на место закладки бомбы, кричит "Need Backup!", а затем с бомбой в руках бежит на другое место закладки. Странная ошибка, которая стала часто появляться в КС 1.5. Причина возникновения неизвестна.
Боты падают с лестниц. Прочитайте о том, как нужно ставить лестничные точки. См. раздел "Советы по созданию точек и путей".
Бот не разминирует бомбу, заложенную на небольшой возвышенности типа ящика. Видя бомбу, бот перестаёт бежать по точкам и движется прямо к ней. Если она стоит на ящике, то боту нужно на этот ящик запрыгнуть, чтобы он смог её правильно разминировать. Однако он пытается разминировать её с земли, и в итоге не может это сделать. Возможно, стоит убрать точку для закладки с ящика, но ведь люди-то всё равно будут туда её закладывать. Так что определённого решения проблема не имеет.
Боты часто врезаются друг в друга и "склеиваются" на некоторое время. Полностью неисправимо, но, возможно, точки стоят слишком редко, и боты не могут правильно разбежаться.
Боты застревают где-нибудь в стене или в потолке. Из-за чего это происходит, я объяснить не могу, но совершенно точно, что это связано с точками. Попробуйте в этом месте поставить их как-нибудь по-другому.
Боты слишком часто (редко) бегают в какую-либо область карты. Уточните тактику, поставьте побольше главных точек туда, где боты бывают нечасто, и уберите несколько главных точек оттуда, где боты бывают слишком часто.

На этом, наверное, всё. Спасибо всем, кто это прочитал и воспользуется полученной информацией. Удачной вам игры с ботами!
Hosted by uCoz