From 49745879d6de31bd3f8dd06b7dd467687386c462 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com> Date: Mon, 4 Oct 2021 19:05:02 +0200 Subject: [PATCH] Fix crashing in modern MT versions --- init.lua | 70 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 28 deletions(-) diff --git a/init.lua b/init.lua index d2820ee..ef57281 100644 --- a/init.lua +++ b/init.lua @@ -1,3 +1,8 @@ +local get_connected_players = minetest.get_connected_players +local clock = os.clock + +local pairs = pairs + controls = {} controls.players = {} @@ -16,19 +21,24 @@ function controls.register_on_hold(func) controls.registered_on_hold[#controls.registered_on_hold+1]=func end +local known_controls = { + jump = true, + right = true, + left = true, + LMB = true, + RMB = true, + sneak = true, + aux1 = true, + down = true, + up = true, +} + minetest.register_on_joinplayer(function(player) local name = player:get_player_name() - controls.players[name] = { - jump={false}, - right={false}, - left={false}, - LMB={false}, - RMB={false}, - sneak={false}, - aux1={false}, - down={false}, - up={false} - } + controls.players[name] = {} + for cname,_ in pairs(known_controls) do + controls.players[name][cname] = { false } + end end) minetest.register_on_leaveplayer(function(player) @@ -37,26 +47,30 @@ minetest.register_on_leaveplayer(function(player) end) minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do + for _, player in pairs(get_connected_players()) do local player_name = player:get_player_name() local player_controls = player:get_player_control() - for cname, cbool in pairs(player_controls) do - --Press a key - if cbool==true and controls.players[player_name][cname][1]==false then - for _, func in pairs(controls.registered_on_press) do - func(player, cname) - end - controls.players[player_name][cname] = {true, os.clock()} - elseif cbool==true and controls.players[player_name][cname][1]==true then - for _, func in pairs(controls.registered_on_hold) do - func(player, cname, os.clock()-controls.players[player_name][cname][2]) - end - --Release a key - elseif cbool==false and controls.players[player_name][cname][1]==true then - for _, func in pairs(controls.registered_on_release) do - func(player, cname, os.clock()-controls.players[player_name][cname][2]) + if controls.players[player_name] then + for cname, cbool in pairs(player_controls) do + if known_controls[cname] == true then + --Press a key + if cbool == true and controls.players[player_name][cname][1] == false then + for _, func in pairs(controls.registered_on_press) do + func(player, cname) + end + controls.players[player_name][cname] = {true, clock()} + elseif cbool == true and controls.players[player_name][cname][1] == true then + for _, func in pairs(controls.registered_on_hold) do + func(player, cname, clock()-controls.players[player_name][cname][2]) + end + --Release a key + elseif cbool == false and controls.players[player_name][cname][1] == true then + for _, func in pairs(controls.registered_on_release) do + func(player, cname, clock()-controls.players[player_name][cname][2]) + end + controls.players[player_name][cname] = {false} + end end - controls.players[player_name][cname] = {false} end end end -- 2.44.0