diff options
Diffstat (limited to 'nodes/mesecons_lagger.lua')
-rw-r--r-- | nodes/mesecons_lagger.lua | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/nodes/mesecons_lagger.lua b/nodes/mesecons_lagger.lua new file mode 100644 index 0000000..e4d966e --- /dev/null +++ b/nodes/mesecons_lagger.lua @@ -0,0 +1,59 @@ + +local wait = mesecons_debug.wait + +mesecon.queue:add_function("create_lag", function(_pos, duration) + wait(duration) +end) + + +minetest.register_node("mesecons_debug:mesecons_lagger", { + description = "machine for adding artificial mesecons lag", + group = { + not_in_creative_inventory = 1, + unbreakable = 1, + }, + tiles = {"default_mese_block.png^[colorize:#F00:128"}, + on_blast = function() end, + drop = "", + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_float("lag", 0.0) + meta:set_float("chance", 0.0) + meta:set_string("formspec", + ("field[lag;Lag (in us);%s]field[chance;Chance;%s]"):format(0.0, 0.0)) + + local timer = minetest.get_node_timer(pos) + timer:start(0) + end, + + on_receive_fields = function(pos, _formname, fields, sender) + if not minetest.check_player_privs(sender, "mesecons_debug") then + return + end + local meta = minetest.get_meta(pos) + if fields.lag then + meta:set_float("lag", fields.lag) + end + if fields.chance then + meta:set_float("chance", fields.chance) + end + meta:set_string("formspec", + ("field[lag;Lag (in us);%s]field[chance;Chance;%s]"):format( + meta:get_float("lag"), meta:get_float("chance"))) + + end, + + on_timer = function(pos, _elapsed) + local meta = minetest.get_meta(pos) + local lag = meta:get_float("lag") + local chance = meta:get_float("chance") + if lag > 0 and chance > 0 then + if math.random() < 1 / chance then + mesecon.queue:add_action(pos, "create_lag", { lag }) + end + end + + return true + end, +}) |