Библиотека Timers из Angel Arena Reborn

HardMen

Новичок
25 Апр 2017
5
0
1
18
Библиотека Timers из Angel Arena Reborn
Автор библиотеки: BMD
[hr]
Недавно я начал разработку карты по типу Angel Arena Reborn и задался вопросом спавна крипов. Я решил вскрыть файлы Angel Arena Reborn. В итоге я разобрался как там устроены спавны крипов. Главной проблемой было сделать этот спавн каждую минуту начиная с 00:00 на таймере. Я сразу обнаружил файл timers.lua. Я понял что это библиотека т.е этот файл можно подключить к любому аддону. Вы спросите как же подключить эту библиотеку.
[hr]

  • [li]Создайте папку lib или libs в папке *\scripts\vscripts (Это не обязательно но так принято в программировании)[/li]
    [li]Добавите в созданную папку библиотеку timers.lua[/li]
    [li]Подключите библиотеку к вашему аддону. По умолчанию вы можете сделать это в файле *\scripts\vscripts\addon_game_mode[/li]
Код:
require('lib/timers')
[hr]
Теперь вы можите использовать эту библиотеку в любом файле который связан с addon_game_mode в приделах аддона.
Но вы спросите как же приручить эту библиотеку и что она может?


Вы можете создать таймер в любой функции или условии. Например:
Код:
function CAddonTemplateGameMode:InitGameMode() --[[Функция выполняется при запуске аддона]]
    print( "Template addon is loaded." ) --[[Выводит в консоль Template addon is loaded.]]--
	GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 ) --[[Я не знаю что это можите мне объяснить если вам не лень]]
	ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(GrandArenaOfGods, 'OnGameStateChange'), self) --[[Объявление слушателя события game_rules_state_change создаёт кастомную функцию под это событие. Эта функция вызывается function CAddonTemplateGameMode:OnGameStateChange()]]
end

function CAddonTemplateGameMode:OnGameStateChange()
  if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then --[[Условие выполняется при начале игры кода на таймере 00:00 и звучит горн]]
	 	Timers:CreateTimer(0.1, function() --[[Создание таймер для спавна нейтралов]]
	   					SpawnCreeps() --[[Вызывает кастомную функцию SpawnCreeps()]]
					   	return 60.0 --[[Этот таймер сработает через 60 секунд]]
	 					end )
	end
end
Так же вы можете создать таймер и по другому (Вместо print вы можете вызывать функцию)
Таймер, выполняющийся каждую секунду, которая начинается сразу на следующем кадре, учитывает паузы
Код:
Timers:CreateTimer(function()
   print ("Hello. I'm running immediately and then every second thereafter.")
   return 1.0
  end
 )
Таймер, выполняющий каждую секунду, которая начинается через 5 секунд в будущем, соблюдает паузы
Код:
Timers:CreateTimer(5, function()
   print ("Hello. I'm running 5 seconds after you called me and then every second thereafter.")
   return 1.0
  end
 )
10 секунд с задержкой, запуск один раз с использованием gametime (соблюдает паузы)
Код:
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
 })
10 секунд с задержкой, выполняется один раз независимо от пауз
Код:
Timers:CreateTimer({
  useGameTime = false,
  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 I was started even if someone paused the game.")
  end
 })
Таймер работает каждую секунду, которая начинается через 2 минуты независимо от пауз
Код:
Timers:CreateTimer("uniqueTimerString3", {
  useGameTime = false,
  endTime = 120,
  callback = function()
   print ("Hello. I'm running after 2 minutes and then every second thereafter.")
   return 1
  end
 })
Самый легкий тамер
Код:
Timers:CreateTimer(0.1, function() --[[Создание таймер для спавна нейтралов]]
	   					SpawnCreeps() --[[Вызывает кастомную функцию SpawnCreeps()]]
					   	return 60.0 --[[Этот таймер сработает через 60 секунд]]
	 					end )
 
Последнее редактирование модератором:

CryDeS

Друзья CG
14 Июл 2015
1,210
5
38
18
Эм. ЩИТО?
Кэп намекает что библиотека это BMD, и я ее просто использовал оО
 

HardMen

Новичок
25 Апр 2017
5
0
1
18
[quote author=CryDeS link=topic=1626.msg10692#msg10692 date=1500822794]
Эм. ЩИТО?
Кэп намекает что библиотека это BMD, и я ее просто использовал оО
[/quote]
Ну блин ладно я не знал, исправлю автора но мне кажется что удалять не надо пускай останется
 
Реклама:

I_GRIN_I

Друзья CG
15 Мар 2016
1,222
85
48
20
>но так принято в программировании
Ору
 
Последнее редактирование модератором:

I_GRIN_I

Друзья CG
15 Мар 2016
1,222
85
48
20
GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
Это тоже таймер, но вальвовский. Функция OnThink будет вызываться каждые 2 секунды
 
Последнее редактирование модератором:

Илья

Супермодератор
Команда форума
25 Сен 2015
2,348
31
48
27
BMD таймер реализован на основе вальвовского, насколько мне известно. Но гораздо эффективнее, по словам знатоков. Ибо он каждый раз запускает один и тот же вальвовский таймер. Таким образом, вместо пяти вальвовских, используя пять от BMD, ты получаешь один вальвовский. Но я в его коде не копался и не проверял.
 

ZLOY

Администратор
Команда форума
27 Июн 2016
671
72
28
18
Таймеры в отличие от синкеров по дефолту не срабатывают во время пауз.
 
Реклама:
Реклама: