Событие при входе в триггер

  • Автор темы Автор темы doter 2
  • Дата начала Дата начала

doter 2

Новичок
2 Июл 2017
6
0
Всем привет! Я недавно начал заниматься разработкой карт, нашёл интересный скрипт в гайдах.
Хочу сделать так, что-бы когда герой входил в триггер, срабатывал этот скрипт
Лучше сразу, весь скрипт
Код:
function ResetAllAbilitiesCooldown(table unit, bool refresh_items) 
	local abilities = unit:GetAbilityCount()
	for i = 0, abilities-1 do
		local ability = unit:GetAbilityByIndex(i)
		if ability and not ability:IsCooldownReady() then
			ability:EndCooldown()
		end
	end
	if unit:HasInventory() and refresh_items then
		for i = 0, 5 do
			local item = unit:GetItemInSlot(i)
			if item and not item:IsCooldownReady() then
			item:EndCooldown()
			end
		end
	end
end
Это должно быть вот так?
Код:
function OnStartTouch(trigger)
 
	print(trigger.activator)
	print(trigger.caller)
end -- надо писать или нет?
function ResetAllAbilitiesCooldown(table unit, bool refresh_items) 
	local abilities = unit:GetAbilityCount()
	for i = 0, abilities-1 do
		local ability = unit:GetAbilityByIndex(i)
		if ability and not ability:IsCooldownReady() then
			ability:EndCooldown()
		end
	end
	if unit:HasInventory() and refresh_items then
		for i = 0, 5 do
			local item = unit:GetItemInSlot(i)
			if item and not item:IsCooldownReady() then
			item:EndCooldown()
			end
		end
	end
end
Или так?
Код:
 function ResetAllAbilitiesCooldown(trigger.activator,true)
	local abilities = unit:GetAbilityCount()
	for i = 0, abilities-1 do
		local ability = unit:GetAbilityByIndex(i)
		if ability and not ability:IsCooldownReady() then
			ability:EndCooldown()
		end
	end
	if unit:HasInventory() and refresh_items then
		for i = 0, 5 do
			local item = unit:GetItemInSlot(i)
			if item and not item:IsCooldownReady() then
			item:EndCooldown()
			end
		end
	end
end
end
 
Читал?

В последнем коде делаешь так:

Код:
function ResetAllAbilitiesCooldown(data)
	local unit = data.activator
	local refresh_items = true

И вызываешь в триггере эту функцию ResetAllAbilitiesCooldown.
 
Отличный совет, лол.
 
Супермодератор,
Код:
function ResetAllAbilitiesCooldown(data)
	local unit = data.activator
	local refresh_items = true

 -- Это команда рефрешает тока итемы, а чтобы скилы надо так прописать?

function ResetAllAbilitiesCooldown(data)
	local unit = data.activator
	local refresh_items = true
    local refresh_ability = true
end
И да, пожалуйста, скинь весь скрипт сразу, а то я не очень понял :)
 
Код:
function ResetAllAbilitiesCooldown(data)
	local unit = data.activator
	local refresh_items = true
	local abilities = unit:GetAbilityCount()
	for i = 0, abilities-1 do
		local ability = unit:GetAbilityByIndex(i)
		if ability and not ability:IsCooldownReady() then
			ability:EndCooldown()
		end
	end
	if unit:HasInventory() and refresh_items then
		for i = 0, 5 do
			local item = unit:GetItemInSlot(i)
			if item and not item:IsCooldownReady() then
			item:EndCooldown()
			end
		end
	end
end
 
Илья, вот я ввёл скрипт, но он не работает. Вот что пишет консоль:
[ W Entity System ]: Entity I/O attempted to invoke unknown private or global script function "refresh" on entity "rull"!
refresh это название функии в папки, lua.
rull это название dota_custom_game_events
может я не тот триггер создал? trigger_dota
>:(
 
Последнее редактирование модератором:
Создал триггер, всё как на офиц. сайте valve.
Но все равно не работает!
Ctrl+T тоже сделал!
Посмотрел в других кастомках, там стоит !self а не Name custom_event
 
да, всё читал и все гайды про API посмотрел, но я мою проблема не решена
может надо поставить во 2 строчке !self ? или name custom_event?
 
Ну тогда пиши, что у тебя в trigger_hero в OnStartTouch. Каждую строчку по порядку. И как сам триггер называется.
 
Код:
function OnStartTouch(table)
    ResetAllAbilitiesCooldown(table.activator, true) 
end
function ResetAllAbilitiesCooldown(unit,refresh_items) 
	local abilities = unit:GetAbilityCount()
	for i = 0, abilities-1 do
		local ability = unit:GetAbilityByIndex(i)
		if ability and not ability:IsCooldownReady() then
			ability:EndCooldown()
		end
	end
	if unit:HasInventory() and refresh_items then
		for i = 0, 5 do
			local item = unit:GetItemInSlot(i)
			if item and not item:IsCooldownReady() then
			item:EndCooldown()
			end
		end
	end
end
 
Да зачем делать побочную функцию, вот же код:

Код:
function ResetAllAbilitiesCooldown(data) 
	local unit = data.activator
	local refresh_items = true
	local abilities = unit:GetAbilityCount()
	for i = 0, abilities-1 do
		local ability = unit:GetAbilityByIndex(i)
		if ability and not ability:IsCooldownReady() then
			ability:EndCooldown()
		end
	end
	if unit:HasInventory() and refresh_items then
		for i = 0, 5 do
			local item = unit:GetItemInSlot(i)
			if item and not item:IsCooldownReady() then
			item:EndCooldown()
			end
		end
	end
end

Или даже так:
Код:
function ResetAllAbilitiesCooldown(data) 
	local unit = data.activator
	local abilities = unit:GetAbilityCount()
	for i = 0, abilities-1 do
		local ability = unit:GetAbilityByIndex(i)
		if ability and not ability:IsCooldownReady() then
			ability:EndCooldown()
		end
	end
	if unit:HasInventory() then
		for i = 0, 5 do
			local item = unit:GetItemInSlot(i)
			if item and not item:IsCooldownReady() then
			item:EndCooldown()
			end
		end
	end
end
 
Чтобы юзать эту функцию в другом месте
 
Ну ты же прекрасно понимаешь, что для этого потребуется держать её в конкретном месте в конкретном файле, либо в файле с местом её вызова указывать путь к этой функции. Да и предмет разговора не о "мобильности", а о запуске функции в триггере. И парень просто напросто неверные данные указывает в триггер.
 
Последнее редактирование модератором:
Раз не получается с предметами, это можно сделать со скилами?
 
Ты вообще читаешь, что тебе пишут?

Скинь параметры триггера своего.
 
Реклама: