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

Se7eN

Друзья CG
22 Ноя 2014
314
4
18
24
Реакции
4 0 0
#1
Многие из вас захотят сделать кастомные телепорты в своей карте.
И сегодня вы получите это знание :)

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

1. Создайте коробку, (Shift + B). - Эту будет наша область, войдя в которую герой будет телепортирован в другое место. Выглядеть должно так!

proxy.php?image=http%3A%2F%2Fi71.fastpic.ru%2Fbig%2F2015%2F0628%2F2f%2Fab0b3bd49594c04c888b871073ca362f.jpg&hash=f28a9b50cacbad7b9a4a5b21c3d93272


Geometry type: Block
Active material: Trigger

2. Привяжите коробку к энтити. Для этого достаточно нажать Ctrl + T, выбрав коробку. Тип должен быть: trigger_hero.
proxy.php?image=http%3A%2F%2Fi72.fastpic.ru%2Fbig%2F2015%2F0628%2Ff2%2Fbcfcec69c0c16e406a12b9a3c9fbe0f2.jpg&hash=29f488768760f2df96c459b0660cc7e4


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

4. Дайте второму ящику имя. В свойствах name: дайте ему имя как на картинке.
proxy.php?image=http%3A%2F%2Fi70.fastpic.ru%2Fbig%2F2015%2F0628%2F79%2Fc9603a4a8338b02b816b1cdcdec85579.jpg&hash=e23c28fcb8f04f81f6e634e4ad76d134

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

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.
proxy.php?image=http%3A%2F%2Fi71.fastpic.ru%2Fbig%2F2015%2F0628%2F5a%2F7affe749e016507b271d2be7642e4b5a.jpg&hash=e174accf0a985441e5309f580b4539bd


7. Итак теперь программируем триггер: выделяем первую коробку и нажимаем alt + enter.
proxy.php?image=http%3A%2F%2Fi72.fastpic.ru%2Fbig%2F2015%2F0628%2F05%2F79ae24bff9c98dc641354f2623e8f805.jpg&hash=64a8f2edcb2bd48a0e4370fcdf053f17


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

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

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

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

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

Скоро обещаю запилить уроки по скриптингу.

Гайд обновлен: добавлено выделение жирным для важных пунктов
 
Последнее редактирование модератором:

Se7eN

Друзья CG
22 Ноя 2014
314
4
18
24
Реакции
4 0 0
#4
Админ, ты когда мета теги расставляешь, какими пользуешься?

Не забывай от этого зависит сколько юзеров придёт, так что обязательно ставь)

Если лень подбирать, могу набросать примерные слова для индексации)
 

-ExotiC-

Администратор
Команда форума
11 Авг 2014
453
41
28
23
customgames.ru
Проект
Trolls vs Elves
Реакции
41 0 0
#5
Se7eN написал(а):
Админ, ты когда мета теги расставляешь, какими пользуешься?

Не забывай от этого зависит сколько юзеров придёт, так что обязательно ставь)

Если лень подбирать, могу набросать примерные слова для индексации)
На главной они генерируются автоматически, в зависимости от контента.
 
Последнее редактирование:
Реклама:

-ExotiC-

Администратор
Команда форума
11 Авг 2014
453
41
28
23
customgames.ru
Проект
Trolls vs Elves
Реакции
41 0 0
#6
Сейчас сидели с doter.ua, разбирали, почему не работал скрипт.
Код:
   local point = ent:GetAbsOrigin() -- Тут мы берем значение в координатах x y z.
   event.activator:SetAbsOrigin( wws ) -- А тут ставим значение переменной wws, которое равно pnt1, т.е. это cstring, что не правильно. Должны быть координаты x y z, а значит переменная point.
doter.ua собственно и нашел в чем проблема.

Исправил на главной и здесь.
 

doter.ua

Продвинутый
17 Авг 2014
280
4
18
25
UA
Реакции
4 0 0
#7
[quote author=-ExotiC- link=topic=149.msg676#msg676 date=1435700980]
Сейчас сидели с doter.ua, разбирали, почему не работал скрипт.
Код:
   local point = ent:GetAbsOrigin() -- Тут мы берем значение в координатах x y z.
   event.activator:SetAbsOrigin( wws ) -- А тут ставим значение переменной [b]wws[/b], которое равно [b]pnt1[/b] т.е. это [b]cstring[/b], что не правильно. Должны быть координаты x y z, а значит переменная [b]point[/b].
doter.ua собственно и нашел в чем проблема.

Исправил на главной и здесь.
[/quote]
В теге код не работают другие теги :)
 

Se7eN

Друзья CG
22 Ноя 2014
314
4
18
24
Реакции
4 0 0
#8
Ошибку в коде исправил, извините, писал по памяти)
 

Slavko

Продвинутый
22 Июн 2015
224
0
16
19
Реакции
0 0 0
#9
Можно еще добавить, чтобы камера за игроком после тп следовала что-то вроде
Код:
require('timers')
...  
PlayerResource:SetCameraTarget(event.activator:GetPlayerOwnerID(), event.activator)
  Timers:CreateTimer(0.1, function()
    PlayerResource:SetCameraTarget(event.activator:GetPlayerOwnerID(), nil) -- Чтобы камера разблочилась, т.к. она начинает следовать за игроком постоянно.
    return nil
  end)
 

Se7eN

Друзья CG
22 Ноя 2014
314
4
18
24
Реакции
4 0 0
#10
Спасибо) это поможет новичкам) :)
 
Реклама:

Slavko

Продвинутый
22 Июн 2015
224
0
16
19
Реакции
0 0 0
#11
Se7eN, ахах. Я оказывается у тебя же это и подсмотрел наmoddota.com :D
 

Slavko

Продвинутый
22 Июн 2015
224
0
16
19
Реакции
0 0 0
#12
Как создать эффект при телепортации:
Результат: https://www.youtube.com/watch?v=-K_Do_1DC5s&feature=youtu.be
local wwe = "tp_first" -- Вбиваем в переменную имя нашего первого бокс, из которого мы будем телепортироваться
local ent2 = Entities:FindByName( nil, wwe) -- Находим первый бокс
local point2 = ent2:GetAbsOrigin() -- Находим координаты первого бокса
local particleName = "particles/items2_fx/teleport_end_g_b.vpcf" -- Название эффекта вбиваем в переменную
local particle1 = ParticleManager:CreateParticle( particleName, PATTACH_CUSTOMORIGIN, ent2 ) -- Через менеджер эффектов создаем эффект particleName, PATTACH_CUSTOMORIGIN значит, что его control points мы настроим позже, ent2 - привязываем эффект к нашему боксу.
ParticleManager:SetParticleControl( particle1, 3, point2 ) -- Управляем третьим контрол поинтом эффекта. Именно он в данном случае отвечает за положение в мире http://imgur.com/a/OGODI. Направляем поинт на нашу точку 'point2'.
 
Последнее редактирование модератором:

Se7eN

Друзья CG
22 Ноя 2014
314
4
18
24
Реакции
4 0 0
#13
Спасибо, как будет свободное время, внесу в основной гайд. :) rep+
 

SanyaDuizFX

Пользователь
18 Окт 2015
37
0
6
17
Реакции
0 0 0
#14
Мммм что не так я сделал всё как на писано становлюсь на точку тп куда я поставил и мне пишет:

...ota 2 beta\game\dota_addons\test\scripts\vscripts\tp.lua:7: SetAbsOrigin parameter 0: expected vector but got cstring.
stack traceback:
[C]: in function 'SetAbsOrigin'
...ota 2 beta\game\dota_addons\test\scripts\vscripts\tp.lua:7: in function <...ota 2 beta\game\dota_addons\test\scripts\vscripts\tp.lua:1>

Что делать?! :-*
 
Последнее редактирование модератором:

Илья

Супермодератор
Команда форума
25 Сен 2015
2,346
34
48
26
Реакции
34 0 0
#15
[quote author=SanyaDuizFX link=topic=149.msg1797#msg1797 date=1445253876]
Мммм что не так я сделал всё как на писано становлюсь на точку тп куда я поставил и мне пишет:

...ota 2 beta\game\dota_addons\test\scripts\vscripts\tp.lua:7: SetAbsOrigin parameter 0: expected vector but got cstring.
stack traceback:
[C]: in function 'SetAbsOrigin'
...ota 2 beta\game\dota_addons\test\scripts\vscripts\tp.lua:7: in function <...ota 2 beta\game\dota_addons\test\scripts\vscripts\tp.lua:1>

Что делать?! :-*
[/quote]

Учить английский или хотя бы залезть сюда

SetAbsOrigin parameter 0: expected vector but got cstring.
Тебе пишут, что нулевой параметр в функции "SetAbsOrigin" ты задал строкой, а ожидается вектор.


Прочитай комментарии к теме, а конкретно пятый пост: автор статьи допустил ошибку.
 
Последнее редактирование модератором:
Реклама:
Реклама:
//SNOW CHRISTMAS