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

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

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

Оффлайн HardMen

  • 5
  • Мощь: 0
Библиотека Timers из Angel Arena Reborn
Автор библиотеки: BMD

Недавно я начал разработку карты по типу Angel Arena Reborn и задался вопросом спавна крипов. Я решил вскрыть файлы Angel Arena Reborn. В итоге я разобрался как там устроены спавны крипов. Главной проблемой было сделать этот спавн каждую минуту начиная с 00:00 на таймере. Я сразу обнаружил файл timers.lua. Я понял что это библиотека т.е этот файл можно подключить к любому аддону. Вы спросите как же подключить эту библиотеку.

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

Теперь вы можите использовать эту библиотеку в любом файле который связан с 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 )
[свернуть]
« Последнее редактирование: 23-07-2017, 15:20:29 от HardMen »

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: Библиотека Timers из Angel Arena Reborn
« Ответ #1 : 23-07-2017, 15:13:14 »
Эм. ЩИТО?
Кэп намекает что библиотека это BMD, и я ее просто использовал оО

Оффлайн HardMen

  • 5
  • Мощь: 0
Re: Библиотека Timers из Angel Arena Reborn
« Ответ #2 : 23-07-2017, 15:20:06 »
Эм. ЩИТО?
Кэп намекает что библиотека это BMD, и я ее просто использовал оО
Ну блин ладно я не знал, исправлю автора но мне кажется что удалять не надо пускай останется

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: Библиотека Timers из Angel Arena Reborn
« Ответ #3 : 23-07-2017, 15:28:04 »
Ну блин ладно я не знал, исправлю автора но мне кажется что удалять не надо пускай останется
Прошлая тема вполне исчерпывающая

Оффлайн HardMen

  • 5
  • Мощь: 0
Re: Библиотека Timers из Angel Arena Reborn
« Ответ #4 : 23-07-2017, 15:29:25 »
CryDeS, Понял я удалю. Ответь в личке

Оффлайн I_GRIN_I

  • Продвинутый
  • 517
  • Мощь: 9
  • Научиться бы скриптить...
Re: Библиотека Timers из Angel Arena Reborn
« Ответ #5 : 23-07-2017, 22:26:58 »
>но так принято в программировании
Ору

Оффлайн I_GRIN_I

  • Продвинутый
  • 517
  • Мощь: 9
  • Научиться бы скриптить...
Re: Библиотека Timers из Angel Arena Reborn
« Ответ #6 : 23-07-2017, 22:30:56 »
GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
Это тоже таймер, но вальвовский. Функция OnThink будет вызываться каждые 2 секунды

Оффлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Библиотека Timers из Angel Arena Reborn
« Ответ #7 : 24-07-2017, 00:02:05 »
BMD таймер реализован на основе вальвовского, насколько мне известно. Но гораздо эффективнее, по словам знатоков. Ибо он каждый раз запускает один и тот же вальвовский таймер. Таким образом, вместо пяти вальвовских, используя пять от BMD, ты получаешь один вальвовский. Но я в его коде не копался и не проверял.

Оффлайн HardMen

  • 5
  • Мощь: 0
Re: Библиотека Timers из Angel Arena Reborn
« Ответ #8 : 24-07-2017, 08:04:49 »
GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
Это тоже таймер, но вальвовский. Функция OnThink будет вызываться каждые 2 секунды
Спасибо

Оффлайн ZLOY

  • Супермодератор
  • 395
  • Мощь: 5
Re: Библиотека Timers из Angel Arena Reborn
« Ответ #9 : 24-07-2017, 08:58:39 »
Таймеры в отличие от синкеров по дефолту не срабатывают во время пауз.