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

Какая-то там тема (Ошибка в LUA)

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

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Помогите с проблемой в коде:
Код
function modifier_item_overgilder_recalculate(keys)
Timers:CreateTimer({
callback = function()
while keys.caster:HasModifier("modifier_item_overgilder_buff") do
keys.caster:RemoveModifierByName("modifier_item_overgilder_buff")
end

local overgilder = nil
for i=0, 5, 1 do
local current_item = keys.caster:GetItemInSlot(i)
if current_item ~= nil then
local item_name = current_item:GetName()
if item_name == "item_overgilder" then
overgilder = current_item
end
end
end

if overgilder ~= nil then
overgilder:ApplyDataDrivenModifier(keys.caster, keys.caster, "modifier_item_overgilder_buff", {duration = -1})
end
end
})
end
, при которой выписывает:
Код
[ W VScript              ]: Script Runtime Error: ..._addons\test1\scripts\vscripts\items\item_overgilder.lua:15: attempt to index global 'Timers' (a nil value)
« Последнее редактирование: 22-06-2016, 09:50:55 от EnDronist »
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн Илья

  • Супермодератор
  • 2039
  • Мощь: 19
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #1 : 22-06-2016, 10:37:11 »
Тебе пишет, что не видит Timers.

Вообще BMD-ный timer так задается:
Timers:CreateTimer(время,function() тело функции end)

Кроме того, ты его вообще в главном скрипте подключил?

Оффлайн Илья

  • Супермодератор
  • 2039
  • Мощь: 19
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #2 : 22-06-2016, 10:43:35 »
Хотя я залез в его таймер, там есть такой вариант использования, как у тебя:

Код
  -- 10 second delayed, run once using gametime (respect pauses)
  Timers:CreateTimer({
    endTime = 10, -- when this timer should first execute, you can omit this if you want it to run first on the next frame
    callback = function()
      print ("Hello. I'm running 10 seconds after when I was started.")
    end
  })

Так что тебе остается только проверить, подключил ли ты его в главном скрипте.

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #3 : 23-06-2016, 07:15:38 »
Илья, Допустим, но в этом коде (уже другом, полегче) он тоже выписывает, что таймер равен нулю:
Код
function tidebringer_set_cooldown( keys )
   -- Variables
   local caster = keys.caster
   local ability = keys.ability
   local cooldown = ability:GetCooldown( ability:GetLevel() )
   local modifierName = "modifier_tidebringer_splash_datadriven"
   
   -- Remove cooldown
   caster:RemoveModifierByName( modifierName )
   ability:StartCooldown( cooldown )
   Timers:CreateTimer({
      endTime = cooldown, 
      callback = function()
         ability:ApplyDataDrivenModifier( caster, caster, modifierName, {} )
         return nil
      end
   })
end
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн Илья

  • Супермодератор
  • 2039
  • Мощь: 19
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #4 : 23-06-2016, 10:15:29 »
Если только на него жалуется, значит не может его определить. Раз он у тебя подключен, то возможно, что этот вариант использования не реализован в самом файле. Попробуй другой вариант таймера.

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #5 : 23-06-2016, 11:23:22 »
Да не подключал он таймеры, сразу же видно.
Timers не является стандартной библиотекой, ее нужно вручную подключать. Вот недавно была тема о том что у кого то не было таймеров, юзай поиск.

Оффлайн Илья

  • Супермодератор
  • 2039
  • Мощь: 19
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #6 : 23-06-2016, 17:07:17 »
Как ты это сразу увидел, он же главный скрипт не скидывал.
Да и он уже работал с таймером от BMD (в других его постах он использовался), значит, должен знать, что это такое.


И, если Cry все же прав и ты понятие не имеешь об этом таймере, то советую сразу начать использовать стандартные. Они будут надежнее, пока ты не освоишься. Есть неплохое видео с примером.

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #7 : 23-06-2016, 17:17:28 »
Как ты это сразу увидел, он же главный скрипт не скидывал.
Да и он уже работал с таймером от BMD (в других его постах он использовался), значит, должен знать, что это такое.
Потому что Timers = nil бывает только при неподключении таймера.

Оффлайн Илья

  • Супермодератор
  • 2039
  • Мощь: 19
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #8 : 23-06-2016, 17:21:32 »
Не обязательно: он мог накосячить с кодировкой, синтаксисом, а так же иметь неполный файл таймера  ;)

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #9 : 23-06-2016, 18:44:50 »
Не обязательно: он мог накосячить с кодировкой, синтаксисом, а так же иметь неполный файл таймера  ;)
Если он накосячил с кодировкой то ему бы не вывело Timers = nil, как и при синтаксической ошибке.
А вот причин лезть в файл таймера я не вижу, так что эта фигня маловероятна.

Оффлайн Илья

  • Супермодератор
  • 2039
  • Мощь: 19
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #10 : 23-06-2016, 19:00:30 »
Ну знаешь эту народную мудрость:

Ребус "ОДТЧПШСВД..." школьники отгадывают за 10 минут, студенты за пару часов, а профессора тратят несколько дней.

Я зачастую рассматриваю маловероятные фигни, т.к. подразумеваю, что мой оппонент в подобной беседе ориентируется в употребляемом им контенте. Но, как ты верно подметил, по большей части надо начинать именно как  в анекдоте про лампочку: "выключатель то включил, чтобы свет в комнате появился"?

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #11 : 23-06-2016, 19:00:55 »
Как ты это сразу увидел, он же главный скрипт не скидывал.
Да и он уже работал с таймером от BMD (в других его постах он использовался), значит, должен знать, что это такое.


И, если Cry все же прав и ты понятие не имеешь об этом таймере, то советую сразу начать использовать стандартные. Они будут надежнее, пока ты не освоишься. Есть неплохое видео с примером.
Ни разу не имел дело с таймерами
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн Илья

  • Супермодератор
  • 2039
  • Мощь: 19
Re: Какая-то там тема (Ошибка в LUA)
« Ответ #12 : 23-06-2016, 19:04:09 »


    ...


Ну тогда читай, что я тебе скинул. Либо можешь заглянуть в эту тему, там я впервые узнал о таймерах BMD, например, и её же мне хватило, чтобы понять, как они работают.