SaveText.Ru

Без имени
  1. Как заставить боссов/NPC двигаться
  2.  
  3. Итак, начнем наш небольшой рассказ о том, как заставить боссов/NPC двигаться при трекинге игроков.
  4.  
  5. Сейчас существует только один способ создания подвижного босса/NPC. Разумеется, вы можете это сделать с разными способами: с помощью энтити и даже скриптов, но в этом гайде мы рассмотрим только один способ.
  6.  
  7. Особое спасибо Luffaren, т.к. именно он научил меня данному способу.
  8. **Этот гайд повествует ТОЛЬКО о движениях босса**
  9.  
  10.  
  11. -------------------------------------------------------------------------------
  12.  
  13.  ДУША ВАШЕГО БОССА
  14.  
  15. Первое, что Вам нужно создать, это  func_physbox_multiplayer
  16.  
  17. func_physbox тоже может подойти, но люди говорят, что func_physbox_multiplayer будет лучше в плане оптимизации. Скорее всего браш нужно будет окрасить в невидимую текстуру (Clip, Nodraw)
  18.  
  19.  
  20. В любом случае это ваш босс-папа. и под ПАПОЙ (daddy) я имею в виду Parent (переменную)
  21.  
  22. Большинство ваших боссов будут parent к этому парню.
  23.  
  24. Вы можете назвать его как угодно, но в этом уроке мы будем использовать имя Daddy_Phys
  25.  
  26. KEYVALUES: (ключи-переменные)
  27.  
  28. Большинство ключей-переменных вашего физбокса напрямую зависят от вас, но здесь вы должны иметь хотя бы следующее:
  29.  
  30. Solid to World (в переменной Not solid to world)
  31.  
  32. Это нужно выбрать только для того, чтобы ваш физбокс не проходил сквозь другие объекты, не проваливался.
  33.  
  34. FLAGS: (Флаги)
  35.  
  36. Во флажках тоже нужно кое что указать, если вы хотите!
  37.  
  38. Debris -  Физбокс не будет физически сталкиваться с игроками, если Вы не хотите чтобы объект наносил именно физический урон. Если хотите, можете поиграться и с другими флажками на своё усмотрение.
  39. --------------------------------------------------
  40.  
  41. СИСТЕМА НАВОДКИ ДЛЯ БОССА
  42.  
  43.  
  44. В этом разделе мы рассмотрим способ как заставить босса НАХОДИТЬ цели для атаки.
  45.  
  46. **Having it attack these targets will be covered in the Boss Movement Sections**
  47.  
  48. *Если цели будут  замечены боссом, то они будут отмечены на его пути*
  49.  
  50. На этом этапе вам понадобятся две энтити Trigger_Multiple и filter_activator_name
  51.  
  52. Для  Trigger_Multiple:
  53.  
  54. Убедитесь что триггер достаточно большой, чтобы охватить всё тело босса, если Вы хотите, чтобы игроки получали урон соприкасаясь с ним.
  55.  
  56. Также убедитесь, что его origin не выходит за пределы карты (или не вызывает лик?)
  57. Для этого урока мы назовём триггер Daddy_Targeter
  58.  
  59. KEYVALUES: (Ключи-свойства энтити)
  60.  
  61. Set its parent to Daddy_Phys (Нужно приклеить триггер к нашему физбоксу через Parent)
  62.  
  63. Set its Delay Before Reset to 0 (время отклика триггера, 0 = сразу реагирует)
  64. FLAGS: (флажки)
  65.  
  66. Clients (Этот флажок обозначает, что триггер будут активировать игроки)
  67. OUTPUTS: (вкладка Ouputs Это исходящие скрипты у энтити)
  68.  
  69. OnTrigger -> !self -> Disable -> -> Delay = 0 seconds
  70.  
  71. OnTrigger -> !activator -> AddOutput -> targetname boss_target -> Delay = 0 seconds
  72.  
  73. OnTrigger -> !activator -> AddOutput -> targetname no_target -> Delay = 4.95 seconds
  74.  
  75. OnTrigger -> !self -> Enable -> -> Delay = 5 seconds
  76.  
  77. Не переживайте если !Activator и !self будут подсвечены красным цветом, это нормально!
  78.  
  79. Что мы сделали? Мы заставили нашего босса самого себя отключать, чтобы включался он только от игроков на карте!
  80.  
  81.  
  82. Это назначает игрока ( !Actrivator) , который зацепил босса, новой целью “Boss_target”
  83.  
  84. По сути это просто подобие именного фильтра, вашу цель вы можете назвать как угодно, но для урока пойдёт и “Boss_target”
  85.  
  86. **Запомните это имя, потому что в дальнейшем оно ещё пригодится нам!**
  87.  
  88. Задержку на цели Вы можете выставлять на сколько Вам угодно, но я выставил на 4.95 для 5 секунд. То есть все 5 секунд босс будет “ненавидеть” игрока, который зацепил триггер.
  89.  
  90. Когда выйдет время (5 секунд) Игрок получит новое имя ”no_target” и Босс уЗбагоится.
  91.  
  92.  
  93. I should also mention that you can name "no_target" whatever you want, as long as it is NOT the same as "boss_target" - all it is is a replacement targetname that is not the boss_target
  94.  
  95. Я должен сказать, что по сути  не важно какое имя может быть вместо “No_target”, это лишь для урока я выбрал такие названия.
  96.  
  97. After the replacement targetname is set, the trigger will then re-enable itself so that it can find a new target to fuck with.
  98.  
  99. Когда первый игрок получит своё новое имя “No_Target” , наш триггер снова включится и будет готов *бать следующего игрока. (перевёл как в оригинале)
  100.  
  101. Настройка для  Filter_Activator_Name:
  102.  
  103. Дать имя можно какое угодно, но для урока мы воспользуется “boss_target_filter”
  104.  
  105. KEYVALUES: Свойства Энтити
  106.  
  107. Filter Mode: to allow entities that match criteria
  108. Filter Name:  boss_target
  109. Или же ваше, любое имя для целли босса. (Почему-то автор постоянно повторяется)
  110.  
  111. --------------------------------------------------
  112.  
  113. ПЕРЕМЕЩЕНИЕ БОССА - Часть 1
  114.  
  115. В этом разделе мы поговорим о настройках для  энтити phys_thrusters, чтобы наш босс “Daddy_Phys” мог двигаться.
  116.  
  117. Триггеры позволяющие двигаться боссу к игроку, будут рассмотрены в разделах ниже!
  118.  
  119. Для простого перемещения по плоской поверхности Вам необходимо будет 2 phys_thruster. (Это двигатели)
  120.  
  121. Наш первый двигатель должен носить имя boss_front_thruster
  122. Этот двигатель будет отвечать за прямое перемещения босса.
  123.  
  124. Наш второй двигатель будет носить имя boss_sides_thruster
  125. Он же будет отвечать за вращение босса, повороты.
  126.  
  127. И снова, какие выбрать имена это только вам решать, но я решил выбрать такие.
  128.  
  129. KEYVALUES: Свойства энтити, переменные ключей.
  130.  
  131. В графе Force вы можете установить мощность для движков босса. Лично я считаю, что 2500 отлично пойдет для фронтального двигла и 500 для флангового. (Ну, помните те 2 двигателя, один вперед толкает, другой вращает)
  132.  
  133.  
  134.  
  135. В графе  Attached Object нужно выбрать босса  “Daddy_Phys”
  136.  
  137.  
  138.  attached object - просто указывается имя нашего физбокса-босса, который так же будет двигаться, вместе с  движком.
  139.  
  140. Имейте в виду, что расположение двигателей относительно физбокса очень важно! Я нахожу, что размещение их перед боссомна Земле ( на том же уровне, что и физбокс) идеально подходит, в других случаях Вы можете получить кривые движения.
  141.  
  142.  
  143. FLAGS: (Флажки у энтити)
  144.  
  145. Apply Force - Значит, что он может насиловать, напирать на объекты.
  146.  
  147. Orient Locally - поместить этот объект в систему координат физического объекта "Attached Object"
  148.  
  149. Ignore Mass -Просто чтобы Вам не пришлось разбираться с мусором под ногами и ситуациями, когда босс буксует, ставьте сюда галку и он станет белазом, которому все пофигу.
  150.  
  151. Apply Torque - Вращать физический объект (УСТАНОВИТЬ ТОЛЬКО БОКОВОМУ ДВИЖКУ!)
  152.  
  153. Этот флажок позволит вашему боссу более плавно вращаться, оборачиваться к противникам.
  154.  
  155. Движки будут двигаться и ориентироваться относительно сетки хаммера и настройки ориентации  в "PITCH YAW ROLL" настройке.
  156.  
  157. Если Ваш босс будет двигаться только по плоской поверхности, то достаточно будет YAW настройки.
  158.  
  159. Если вы посмотрите на 2д окошко TOP в хаммере, то заметите, что направление движения движков подобны розе ветров компаса, лол.. (что смешного, я не понял)
  160.  
  161. Для передвижения по ровной местности:
  162.  
  163.  
  164.  
  165. Приведенное выше изображение будет представлять собой вид сверху вашей карты. (тот, который находится в правом верхнем углу, когда у вас есть все 4 окна)
  166.  
  167. ИМЕЙТЕ В ВИДУ ЭТО, КОГДА БУДЕТЕ НАСТРАИВАТЬ БОССА!!!
  168.  
  169. От этого зависит направление, в котором изначально находится ваш босс.
  170.  
  171. Для этого урока у нас будет пример, когда начальное направление, в котором находится перед нашего босса, - Восток. (чет автор сам себя путает и людей)
  172.  
  173. Если ваш босс смотрит в другую сторону просто отрегулируйте углы соответственно:)
  174.  
  175.  
  176.  
  177. boss_front_thruster (Это имя движкА)
  178.  
  179. Дополнительные KEYVALUE (свойства ключей):
  180.  
  181. установите направление PITCH YAW ROLL на  0 0 0
  182.  
  183. Аналогичным образом, boss_sides_thruster потребуется лишь изменение значения YAW; однако, видя, как мы используем только один двигатель для левой и правой сторон, мы установить значение PITCH YAW ROLL в нейтральном углу.
  184.  
  185. Это значение обычно должно быть противоположно двигателю boss_front.
  186.  
  187. boss_sides_thruster Дополнительные  KEYVALUE (свойства ключей):
  188.  
  189. Установите переменную PITCH YAW ROLL на 0 180 0
  190.  
  191. В следующей части мы изменим значения этого двигателя, чтобы он мог стрелять либо влево, либо вправо.
  192.  
  193. --------------------------------------------------
  194.  
  195. Передвижение BOSSа Часть .2
  196.  
  197. Вот тут-то все и начинается  по-настоящему.
  198.  
  199.  
  200. До этого  мы создали вещь, которая будет нацелена на отдельных людей, и мы создали двигатели с настройками для перемещения нашего босса.
  201.  
  202. Все, что осталось, это соединить их, чтобы у нас был босс, который может передвигаться и следить за игроками!
  203.  
  204. Теперь вам понадобится еще один Trigger_Multiple
  205.  
  206. В идеале вы должны сделать его таким же размером, как и триггер будивший босса. (Daddy_Targeter)
  207.  
  208. Этот триггер будет разрезан на 3 части с помощью  clipping tool (и  vertex tool если вы хотите дополнительно изменить формы)
  209.  
  210. Но сначала я хочу упомянуть некоторые переменные энтити  и флаги, которые будут универсальными среди них 3 ключа:
  211.  
  212. KEYVALUES: (свойства ключей)
  213.  
  214. В графе  parent указать имя  Daddy_Phys
  215. Указать Delay Before Reset  0 (это минимальное время для перезапуска)
  216.  Start Disabled -  YES (Изначально выключить триггер)
  217.  
  218. Вот как мы начнем движение нашего босса, когда начнется бой с боссом, тогда ВКЛЮЧАТСЯ  все эти триггеры, используя любой триггер босса. (любой из триггеров может включить все остальные)
  219.  
  220. Вы можете также выставить NO в том случае, если хотите, чтобы босс моментально начал нападать на тех, кто зашел на его “территорию”...
  221.  
  222. Установите  в графе Filter Name  boss_target_filter
  223.  
  224. **IОчень важно, чтобы у ВСЕХ триггеров был записан данный фильтр boss_target_filter, если этого не будет, то босс станет нападать на всех без разбору.**
  225.  
  226.  
  227. FLAGS: Флажки
  228.  
  229. Clients (Это значит, что только игроки смогут активировать триггер)
  230. ---
  231.  
  232. Теперь разрежьте данный триггер на три части вот так:
  233.  
  234. DV74FqOQMnvbKGhxw2bPp5PP5uVEWdPG-2jvwy-MgcAA63Xp1VY7gZAMjJFn289MHcvoSYHVYXZ9xNOWTFjlde1P5x0mO8wi1xTnnXDS_WGc1Bw6CNMd5ocmoODGCmy4wJvItbf0
  235.  
  236.  
  237. Имена изображенные на рисунки будут присвоенны реальным триггерам.
  238.  
  239. Trig_Front
  240. Trig_Left
  241. Trig_Right
  242.  
  243. Это конечно не критично, Вы можете придумать и свои имена, формы, главное не запутаться.
  244.  
  245. Вы можете разделить триггер даже более чем на 3 части (я позже вернусь к этому).
  246.  
  247. Но в любом случае, эти триггеры просто активируются, когда их коснется boss_target, и отправляют некоторую информацию обратно в движки (thrusterЫ) , чтобы они мог соответствующим образом переместить нашего босса
  248.  
  249. теперь об Outputs данных триггеров.
  250.  
  251. Мы продолжим с примером того, если наш босс изначально смотрит на восток
  252.  
  253. Trig_Front OUTPUTS:
  254.  
  255. OnTrigger -> boss_front_thruster -> Activate -> -> Delay = 0 seconds
  256.  
  257. Поскольку мы уже установили правильное значение, при котором этот двигатель должен пушить, то  все, что нам нужно сделать, - это активировать его.
  258.  
  259. Теперь левый и правый триггеры-это то, где все становится немного сложнее, но совсем  сложно, лол (трудно переводить речь подростка)
  260.  
  261. Так как наш босс изначально обращен на восток (в этом примере), то левая сторона будет Южной (если бы вы стояли лицом к боссу)
  262.  
  263. Точно так же Правая будет севером.
  264.  
  265. Соедините эту информацию с углами, показанными ранее для этих направлений, и у вас есть углы, которые вам нужны! (Как написал автор, так и перевёл, он имеет ввиду направления PYR движка, босса)
  266.  
  267. Trig_Left OUTPUTS:
  268.  
  269. OnTrigger -> boss_sides_thruster -> AddOutput -> angles 0 270 0 -> Delay = 0 seconds
  270.  
  271. OnTrigger -> boss_sides_thruster -> Activate -> -> Delay = 0.01 seconds
  272.  
  273.  
  274. Так, мы указали,  что когда boss_target активирует этот триггер, направление нашего boss_sides_thruster изменится с нейтрального положения ВЛЕВО от босса, а затем активируется, чтобы он мог переместить босса в этом направлении.
  275.  
  276. Trig_Right OUTPUTS:
  277.  
  278. OnTrigger -> boss_sides_thruster -> AddOutput -> angles 0 90 0 -> Delay = 0 seconds
  279.  
  280. OnTrigger -> boss_sides_thruster -> Activate -> -> Delay = 0.01 seconds
  281.  
  282. Тоже самое, только ВПРАВО будет босс повернут и пушить.
  283.  
  284. Теперь я чувствую, что сейчас самое подходящее время, чтобы объяснить флаг "Orient Locally", который мы прожимали у движков (thrusters) . Как вы можете видеть, мы устанавливаем направление  вашего boss_sides_thruster с помощью Trig_Left и Right_Right; однако наш босс не всегда будет смотреть на восток, когда он движется. Вот почему мы используем флаг Orient Locally. Это синхронизирует направление движков и взгляд босса.
  285.  
  286. Вы можете делать классные вещи без флага Orient Locally, но это выходит за рамки этого урока. В любом случае, я просто подумал, что это очень важная информация.
  287.  
  288. А теперь, вернёмся у нашему уроку...
  289.  
  290. Поскольку движки постоянно включаются и получают новую информацию, она должна быть обновлена, чтобы позволить им получить новые значения.
  291.  
  292. Будем использовать точечную энтити Logic_timer
  293.  
  294. Бл*. назовём его просто Boss_timer (автор матерился, и это имя для logic_timer)
  295.  
  296. KEYVALUES: (Свойства энтити)
  297.  
  298. Графа Start Disabled - NO (Выключена ли энтити изначально? нет!)
  299. Графа  Use Random Time - NO (использовать ли случайный таймер - нет)
  300. Refire Interval to 0.1 (перезапускать таймер каждые 0.1)
  301.  
  302. OUTPUTS:
  303.  
  304. OnTimer -> boss_sides_thruster -> Deactivate -> -> Delay = 0 seconds
  305.  
  306. OnTimer -> boss_front_thruster -> Deactivate -> -> Delay = 0 seconds
  307.  
  308. Данный таймер будет постоянно отключать движки, когда он достигает 0.1 тайминга. Это по сути и будет заставлять их постоянно менять направление, если игроки триггерят босса с разных сторон.
  309.  
  310. След строка не была переведена, так как там словесный понос автора, от которого я устал, он очередной раз юморил..
  311.  
  312. EXTRA BITS
  313.  
  314. Another thing you might wanna add is a phys_keepupright
  315.  
  316. Еще одна вещь, которую вы можете добавить, это phys_keepupright
  317.  
  318. Данная энтити не будет позволять боссу упасть набок.
  319.  
  320. KEYVALUES: (Свойства Энтити)
  321.  
  322. В графе Target Entity  -  Daddy_Phys
  323. В графе  Angular Limit -  110
  324. Вы можете указать любое значение, просто убедитесь, что Ваш босс не будет валяться после этого.
  325. --------------------------------------------------
  326.  
  327. Коротко о главном
  328.  
  329. А теперь в том случае, если вы хотите по-быстрому узнать, о чем тут вообще говорилось, попробую объяснить в двух словах.
  330.  
  331. Игрок получает метку  от Daddy_Targeted и получает целевое имя boss_target.
  332. boss_target находится в одном из 3 триггеров  (Trig_Front, Trig_Left, Trig_Right) и как результат триггерит их.
  333.  
  334. Триггер затем отсылает информацию о том, что boss_target находится внутри него соответствующему исполнителю (Движку?)
  335.  
  336. Движок просыпается и тащит за собой нашего босса на игрока.
  337.  
  338. Boss_timer вырубает движки.
  339.  
  340. Проходит время, с игрока снимают метку для босса.
  341.  
  342. На очень короткое мгновение боссу уже не за кем охотиться
  343. Daddy_Targeted повторно включает себя и так до конца игры.
  344. Удачи!
  345.  
  346. Надеюсь, это работает
  347.  
  348. Я правда очень надеюсь, потому что иначе этот гайд не больше чем бумажка, которой можно подтереться
  349.  
  350.  
  351.  

Share with your friends:

Print