Какая-то там тема (Ошибка в 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)
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Тебе пишет, что не видит Timers.

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

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

Илья

Друзья CG
25 Сен 2015
2,348
41
Хотя я залез в его таймер, там есть такой вариант использования, как у тебя:

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

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

Илья

Друзья CG
25 Сен 2015
2,348
41
Если только на него жалуется, значит не может его определить. Раз он у тебя подключен, то возможно, что этот вариант использования не реализован в самом файле. Попробуй другой вариант таймера.
 

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Да не подключал он таймеры, сразу же видно.
Timers не является стандартной библиотекой, ее нужно вручную подключать. Вот недавно была тема о том что у кого то не было таймеров, юзай поиск.
 

Илья

Друзья CG
25 Сен 2015
2,348
41
Как ты это сразу увидел, он же главный скрипт не скидывал.
Да и он уже работал с таймером от BMD (в других его постах он использовался), значит, должен знать, что это такое.


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

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Как ты это сразу увидел, он же главный скрипт не скидывал.
Да и он уже работал с таймером от BMD (в других его постах он использовался), значит, должен знать, что это такое.
Потому что Timers = nil бывает только при неподключении таймера.
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Не обязательно: он мог накосячить с кодировкой, синтаксисом, а так же иметь неполный файл таймера ;)
 

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Не обязательно: он мог накосячить с кодировкой, синтаксисом, а так же иметь неполный файл таймера ;)
Если он накосячил с кодировкой то ему бы не вывело Timers = nil, как и при синтаксической ошибке.
А вот причин лезть в файл таймера я не вижу, так что эта фигня маловероятна.
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Ну знаешь эту народную мудрость:

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

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

EnDronist

Продвинутый
28 Апр 2016
231
0
Проект
Защитники Изобилия | Defenders of Abundance
[quote author=Илья link=topic=973.msg5006#msg5006 date=1466701637]
Как ты это сразу увидел, он же главный скрипт не скидывал.
Да и он уже работал с таймером от BMD (в других его постах он использовался), значит, должен знать, что это такое.


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

Илья

Друзья CG
25 Сен 2015
2,348
41
...


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