CustomGames.ru - Dota 2 пользовательские игры

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

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн doter 2

  • 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
[свернуть]
« Последнее редактирование: 02-07-2017, 08:54:42 от -ErøtiC- »

Оффлайн Илья

  • Супермодератор
  • 1912
  • Мощь: 16
Re: Событие при входе в триггер
« Ответ #1 : 02-07-2017, 08:58:41 »
Читал?

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

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

И вызываешь в триггере эту функцию ResetAllAbilitiesCooldown.

Оффлайн ZLOY

  • Супермодератор
  • 369
  • Мощь: 4
Re: Событие при входе в триггер
« Ответ #2 : 02-07-2017, 09:13:51 »
Отличный совет, лол.

Оффлайн doter 2

  • 6
  • Мощь: 0
Re: Событие при входе в триггер
« Ответ #3 : 02-07-2017, 09:44:40 »
Супермодератор,
Код
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

И да, пожалуйста, скинь весь скрипт сразу, а то я не очень понял :)
« Последнее редактирование: 02-07-2017, 09:49:01 от doter 2 »

Оффлайн Илья

  • Супермодератор
  • 1912
  • Мощь: 16
Re: Событие при входе в триггер
« Ответ #4 : 02-07-2017, 11:19:36 »
Код
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

Оффлайн doter 2

  • 6
  • Мощь: 0
Re: Событие при входе в триггер
« Ответ #5 : 02-07-2017, 12:03:39 »
Илья, вот я ввёл скрипт, но он не работает. Вот что пишет консоль:
[ 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
 >:(

Оффлайн Илья

  • Супермодератор
  • 1912
  • Мощь: 16
Re: Событие при входе в триггер
« Ответ #6 : 02-07-2017, 16:01:15 »
Иди про триггеры читай.

Оффлайн doter 2

  • 6
  • Мощь: 0
Re: Событие при входе в триггер
« Ответ #7 : 03-07-2017, 06:26:59 »
Создал триггер, всё как на офиц. сайте valve.
Но все равно не работает!
Ctrl+T тоже сделал!
Посмотрел в других кастомках, там стоит !self а не Name custom_event

Оффлайн Илья

  • Супермодератор
  • 1912
  • Мощь: 16

Оффлайн doter 2

  • 6
  • Мощь: 0
Re: Событие при входе в триггер
« Ответ #9 : 03-07-2017, 11:12:23 »
да, всё читал и все гайды про API посмотрел, но я мою проблема не решена
может надо поставить во 2 строчке !self ? или name custom_event?

Оффлайн Илья

  • Супермодератор
  • 1912
  • Мощь: 16
Re: Событие при входе в триггер
« Ответ #10 : 03-07-2017, 12:31:13 »
Ну тогда пиши, что у тебя в trigger_hero в OnStartTouch. Каждую строчку по порядку. И как сам триггер называется.

Оффлайн I_GRIN_I

  • Продвинутый
  • 390
  • Мощь: 6
  • Научиться бы скриптить...
Re: Событие при входе в триггер
« Ответ #11 : 03-07-2017, 12:53:50 »
Код
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

Оффлайн Илья

  • Супермодератор
  • 1912
  • Мощь: 16
Re: Событие при входе в триггер
« Ответ #12 : 03-07-2017, 13:19:08 »
Да зачем делать побочную функцию, вот же код:

Спойлер
Код
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
[свернуть]

Оффлайн ZLOY

  • Супермодератор
  • 369
  • Мощь: 4
Re: Событие при входе в триггер
« Ответ #13 : 03-07-2017, 16:02:39 »
Чтобы юзать эту функцию в другом месте

Оффлайн Илья

  • Супермодератор
  • 1912
  • Мощь: 16
Re: Событие при входе в триггер
« Ответ #14 : 03-07-2017, 17:18:35 »
Ну ты же прекрасно понимаешь, что для этого потребуется держать её в конкретном месте в конкретном файле, либо в файле с местом её вызова указывать путь к этой функции. Да и предмет разговора не о "мобильности", а о запуске функции в триггере. И парень просто напросто неверные данные указывает в триггер.