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

HardMen

Новичок
25 Апр 2017
5
0
1
18
Реакции
0 0 0
#1
Библиотека 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
9
38
18
Реакции
9 0 0
#2
Эм. ЩИТО?
Кэп намекает что библиотека это BMD, и я ее просто использовал оО
 

HardMen

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

CryDeS

Друзья CG
14 Июл 2015
1,210
9
38
18
Реакции
9 0 0
#4
Последнее редактирование модератором:

HardMen

Новичок
25 Апр 2017
5
0
1
18
Реакции
0 0 0
#5
CryDeS, Понял я удалю. Ответь в личке
 
Реклама:

I_GRIN_I

Друзья CG
15 Мар 2016
1,156
93
48
20
Реакции
92 0 1
#6
>но так принято в программировании
Ору
 
Последнее редактирование модератором:

I_GRIN_I

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

Илья

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

HardMen

Новичок
25 Апр 2017
5
0
1
18
Реакции
0 0 0
#9
Последнее редактирование модератором:

ZLOY

Администратор
27 Июн 2016
668
94
28
18
Реакции
92 0 2
#10
Таймеры в отличие от синкеров по дефолту не срабатывают во время пауз.
 
Реклама:
Реклама: