Триггеры средствами lua.

Кому интересно, добился кое каких результатов.
Вообщем создал ентити которое реагирует на ивент OnStartTouch через данный код:
Код:
local trigger = SpawnEntityFromTableSynchronous("trigger_dota", {origin=caster:GetAbsOrigin(), model=caster:GetModelName(), targetname="t_hero_trigger", vscripts="hero_ability.lua", IsRealHero=1, teamnumber=2, wait=1})
trigger:ConnectOutput("OnStartTouch", "TestTouching")
Но есть 1 ньюанс, каждый раз когда соприкасаешься с ним, вместо действий в функции, консоль выдает следующие ошибки:
Код:
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
[ W Entity System    ]: Encountered unknown entity i/o target type!
в ошибках говорится о том что тип ентити не подходит под триггер, скорей всего, потому-что на нем нет специального материала из хамера toolstrigger.vmat который придает ентити свойства триггера. Как наложить его через lua я не нашел. Есть теория что можно наложить эту специальную текстуру через AddEffects(), ибо в хамере есть nodraw.vmat и подобные, которые можно использовать через AddEffects(EF_NODRAW). Но это только догадка , ибо ничего у меня с этим не вышло.
 
Последнее редактирование модератором:
Кароче сделал все. Работает как часы.
Код:
local trigger = SpawnEntityFromTableSynchronous("trigger_dota", {origin=caster:GetAbsOrigin(), model=caster:GetModelName(), targetname="t_hero_trigger", vscripts="hero_ability.lua", IsRealHero=1, teamnumber=2, wait=1})
trigger:RedirectOutput("OnStartTouch", "TestTouching", trigger)

Код:
function TestTouching() 
 DebugPrint("TOUCHING!!!")
end

Код:
[  VScript       ]: [BAREBONES] OnAbilityCastBegins
[  VScript       ]: PlayerID: 0
[  VScript       ]: abilityname: berserk_slam
[  VScript       ]: splitscreenplayer: -1
[  VScript       ]: [BAREBONES] AbilityUsed
[  VScript       ]: PlayerID: 0
[  VScript       ]: abilityname: berserk_slam
[  VScript       ]: splitscreenplayer: -1
[  VScript       ]: DAMAGE BY ABILITY
[  VScript       ]: DAMAGE IS 13.68
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
[  VScript       ]: TOUCHING!!!
 
Последнее редактирование модератором:
Код:
local trigger = SpawnEntityFromTableSynchronous("trigger_dota", {origin=self.hHealer:GetAbsOrigin(), model=self.hHealer:GetModelName(), targetname="t_hero_trigger", IsRealHero=1, teamnumber=2, wait=1})
trigger:RedirectOutput("OnStartTouch", "OnStartTouch", trigger)
trigger:RedirectOutput("OnEndTouch", "OnEndTouch", trigger)
local scope = trigger:GetOrCreatePrivateScriptScope()
scope.OnStartTouch = function(trigger) print("StartTouch", trigger.activator:GetUnitName(), trigger.activator:entindex()) end
scope.OnEndTouch = function(trigger) print("EndTouch", trigger.activator:GetUnitName(), trigger.activator:entindex()) end
 
Последнее редактирование модератором:
Так, а теперь в чем соль этого триггера?

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

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