Dynamic Loop Handler (CMS)

From The Official Visionaire Studio: Adventure Game Engine Wiki

To do... - it works though! ;)


Working example...

--[[
Dynamic Loop Handler [v2] (01/07/2014)
Written by AFRLme [Lee Clarke]
-- + --
alternatingfrequencies@hotmail.com | skype @ AFRLme
-- + --
This script is donation optional. In game credit is non-negotiable.
You are free to: ¹ use it in your game(s). ² modify the script.
Do not remove - or edit - this comment block.
--]]

-- * tables * --
local t = {} -- create a new local table
t["_temporary_"] = "" -- set table as temporary

-- * function for creating a new loop * --
function addLoop(n, d, a)
 if table.maxn(t) > 0 and not checkLoopExists(n) or table.maxn(t) <= 0 then -- check if loop table is less than or more than 0 & if loop already exists
  table.insert(t, n); t[n] = {delay = d, amt = a, time = getTime()} -- create table & insert delay & amount values
  registerEventHandler("mainLoop", n) -- start the loop
 end
end

-- * function for checking if loop already exists * --
function checkLoopExists(n)
 for i = 1, #(t) do if t[i] == n then return true elseif i == table.maxn(t) and t[i] ~= n then return false end end -- if loop exists return true else return false
end

-- * function used to kill the loop * --
function killLoop(n)
 for i = 1, #(t) do if t[i] == n then table.remove(t, i); break end end -- find the loop index value
 unregisterEventHandler("mainLoop", n) -- remove the loop data from the table
end

-- * function which determines if loop should be executed * --
function getLoopStatus(n)
 if getTime() >= t[n].time + t[n].delay then -- if current time is equal to or greater than previous time + delay
  if t[n].amt > 0 or t[n].amt == nil then -- if loop amount if greater than 0 or equal nil
   if t[n].amt ~= nil then t[n].amt = t[n].amt - 1 end -- if loop amount does not equal nil then loop amount - loop amount - 1
   t[n].time = getTime() -- update loop start time
   return true -- execute loop
  else killLoop(n); return false end -- end if 1
 else return false end -- end if 2
end -- end function

function loop001()
 if getLoopStatus("loop001") then
  print("001: " .. t.loop001.amt)
 end
end

function loop002()
 if getLoopStatus("loop002")  then
  print("002: " .. t.loop002.amt)
 end
end