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

EnDronist

Продвинутый
28 Апр 2016
231
0
Проект
Защитники Изобилия | Defenders of Abundance
Помогите с проблемой в коде:
Код:
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)
 
Последнее редактирование модератором:
Тебе пишет, что не видит Timers.

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

Кроме того, ты его вообще в главном скрипте подключил?
 
Хотя я залез в его таймер, там есть такой вариант использования, как у тебя:

Код:
 -- 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
 })

Так что тебе остается только проверить, подключил ли ты его в главном скрипте.
 
Последнее редактирование модератором:
Илья, Допустим, но в этом коде (уже другом, полегче) он тоже выписывает, что таймер равен нулю:
Код:
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
 
Последнее редактирование модератором:
Если только на него жалуется, значит не может его определить. Раз он у тебя подключен, то возможно, что этот вариант использования не реализован в самом файле. Попробуй другой вариант таймера.
 
Да не подключал он таймеры, сразу же видно.
Timers не является стандартной библиотекой, ее нужно вручную подключать. Вот недавно была тема о том что у кого то не было таймеров, юзай поиск.
 
Как ты это сразу увидел, он же главный скрипт не скидывал.
Да и он уже работал с таймером от BMD (в других его постах он использовался), значит, должен знать, что это такое.


И, если Cry все же прав и ты понятие не имеешь об этом таймере, то советую сразу начать использовать стандартные. Они будут надежнее, пока ты не освоишься. Есть неплохое видео с примером.
 
Как ты это сразу увидел, он же главный скрипт не скидывал.
Да и он уже работал с таймером от BMD (в других его постах он использовался), значит, должен знать, что это такое.
Потому что Timers = nil бывает только при неподключении таймера.
 
Последнее редактирование модератором:
Не обязательно: он мог накосячить с кодировкой, синтаксисом, а так же иметь неполный файл таймера ;)
 
Не обязательно: он мог накосячить с кодировкой, синтаксисом, а так же иметь неполный файл таймера ;)
Если он накосячил с кодировкой то ему бы не вывело Timers = nil, как и при синтаксической ошибке.
А вот причин лезть в файл таймера я не вижу, так что эта фигня маловероятна.
 
Последнее редактирование модератором:
Ну знаешь эту народную мудрость:

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

Я зачастую рассматриваю маловероятные фигни, т.к. подразумеваю, что мой оппонент в подобной беседе ориентируется в употребляемом им контенте. Но, как ты верно подметил, по большей части надо начинать именно как в анекдоте про лампочку: "выключатель то включил, чтобы свет в комнате появился"?
 
Последнее редактирование модератором:
[quote author=Илья link=topic=973.msg5006#msg5006 date=1466701637]
Как ты это сразу увидел, он же главный скрипт не скидывал.
Да и он уже работал с таймером от BMD (в других его постах он использовался), значит, должен знать, что это такое.


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


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