Уроки

Как телепортировать героя из одной зоны, в другую

Многие из вас захотят сделать кастомные телепорты в своей карте.
И сегодня вы получите это знание 🙂:)

В действительности сделать это очень просто, начнём 🙂

1. Создайте коробку, (Shift+B). Это будет наша область, войдя в которую герой будет телепортирован в другое место.  Параметры: Geometry type: Block, Active material: Trigger.

2. Привяжите коробку к энтити. Для этого достаточно нажать Ctrl + T, выбрав коробку. Тип должен быть: trigger_hero.

3. Теперь надо создать вторую коробку, это та область куда герой будет телепортирован.
Создайте ящик, привяжите к энтити и выберите тип: point_teleport

4. Дайте второму ящику имя. В свойствах name: дайте ему имя как на картинке.

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

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

Создайте файл tp.lua
Внесите внутрь вот этот скрипт:

Код:
function tp1(event)
   local unit = event.activator
   local wws= "pnt1" -- вот та сама точка, куда мы будем телепортировать героя, мы её указали в скрипте

   local ent = Entities:FindByName( nil, wws) --строка ищет как раз таки нашу точку pnt1
   local point = ent:GetAbsOrigin() --эта строка выясняет где находится pnt1 и получает её координаты
   event.activator:SetAbsOrigin( point ) -- получили координаты, теперь меняем место героя на pnt1
   FindClearSpaceForUnit(event.activator, point, false) --нужно чтобы герой не застрял
   event.activator:Stop() --приказываем ему остановиться, иначе он побежит назад к предыдущей точке
end

6. Теперь идём к первому ящику. В поле скрипты вводим: tp.lua
Имя тоже выставьте tp_first.

7. Итак теперь программируем триггер: выделяем первую коробку и нажимаем Alt + Enter.

Нажимаем кнопку add и выбираем событие OnStartTouch. Это значит, что когда герой наступит на эту коробку должно что-то произойти.
Теперь надо выбрать во втором пункте: tp_first. Мы можем выбрать, потому что указали раньше имя, помните?

Здесь имеется в виду, когда герой наступает на ЛЮБОЙ ЯЩИК, и тут игра спрашивает себя: а на какой?
И мы ей говорим — на tp_first!

Третий пункт: CallScriptFunction — вызываем функцию из нашего скрипта!

Там всего одна функция и пишем её — tp_1

Вуаля! Теперь работает! Включайте, тестируйте!

Автор — Se7en