Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MIRROR] Fixes lua error logging and a few timer.lua functions #2540

Merged
merged 4 commits into from
Mar 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions code/modules/admin/verbs/lua/lua_state.dm
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,11 @@ GLOBAL_PROTECT(lua_usr)

/datum/lua_state/process(seconds_per_tick)
if(timer_enabled)
call_function("__Timer_timer_process", seconds_per_tick)
var/result = call_function("__Timer_timer_process", seconds_per_tick)
log_result(result, verbose = FALSE)
for(var/function as anything in functions_to_execute)
call_function(list("__Timer_callbacks", function))
result = call_function(list("__Timer_callbacks", function))
log_result(result, verbose = FALSE)
functions_to_execute.Cut()

/datum/lua_state/proc/call_function(function, ...)
Expand Down
31 changes: 17 additions & 14 deletions lua/timer.lua
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,21 @@ end

function __stop_internal_timer(func)
local timer = __Timer_timers[func]
if timer and not timer.executing then
__Timer_timers[func] = nil
__Timer_callbacks[func] = nil
else
timer.terminate = true
if timer then
if not timer.executing then
__Timer_timers[func] = nil
__Timer_callbacks[func] = nil
else
timer.terminate = true
end
end
end

__Timer_timer_processing = __Timer_timer_processing or false
SS13.state:set_var("timer_enabled", 1)
__Timer_timer_process = function(seconds_per_tick)
if __Timer_timer_processing then
return
return 0
end
__Timer_timer_processing = true
local time = dm.world:get_var("time")
Expand All @@ -53,6 +55,7 @@ __Timer_timer_process = function(seconds_per_tick)
end
end
__Timer_timer_processing = false
return 1
end

function Timer.wait(time)
Expand All @@ -77,18 +80,18 @@ function Timer.start_loop(time, amount, func)
if amount == 1 then
return __add_internal_timer(func, time * 10, false)
end
local callback = SS13.new("/datum/callback", SS13.state, "call_function")
local timedevent = dm.global_proc("_addtimer", callback, time * 10, 40, nil, debug.info(1, "sl"))
local doneAmount = 0
-- Lua counts from 1 so let's keep consistent with that
local doneAmount = 1
local funcId
local newFunc = function()
func()
func(doneAmount)
doneAmount += 1
if doneAmount >= amount then
Timer.end_loop(timedevent)
if doneAmount > amount then
Timer.end_loop(funcId)
end
end
__add_internal_timer(newFunc, time * 10, true)
return newFunc
funcId = __add_internal_timer(newFunc, time * 10, true)
return funcId
end

function Timer.end_loop(id)
Expand Down
Loading