From e8e9d0d2f2c0241005ca592f403c5f3f48186e13 Mon Sep 17 00:00:00 2001 From: Billy S Date: Tue, 24 Jul 2018 21:28:56 -0400 Subject: [PATCH] Prevented 'player chains' --- handlers.lua | 18 +++--------------- init.lua | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/handlers.lua b/handlers.lua index 9996ee5..41268ae 100644 --- a/handlers.lua +++ b/handlers.lua @@ -1,15 +1,3 @@ -local function carrierQuit(pName) - if knockout.carrying[pName] then - local cName = knockout.carrying[pName] - local carried = minetest.get_player_by_name(cName) - if carried then - carried:set_detach() - end - knockout.knockout(cName) - knockout.carrying[pName] = nil - end -end - -- Create formspec structure local function getFs(name) return "size[5,3]label[1.4,1;You are unconscious!]label[0.8,2;Time remaining: " .. tostring(knockout.knocked_out[name]) .. " seconds]" @@ -34,7 +22,7 @@ minetest.register_globalstep(function(dtime) for name, _ in pairs(knockout.carrying) do local p = minetest.get_player_by_name(name) if p:get_player_control().jump then - carrierQuit(name) + knockout.carrier_drop(name) end end end) @@ -53,12 +41,12 @@ minetest.register_on_dieplayer(function(p) local pName = p:get_player_name() knockout.wake_up(pName) -- If the player is carrying another player, drop them - carrierQuit(pName) + knockout.carrier_drop(pName) end) -- If the player was carrying another player, drop them minetest.register_on_leaveplayer(function(p, _) - carrierQuit(p:get_player_name()) + knockout.carrier_drop(p:get_player_name()) end) -- Catch those pesky players that try to leave/join to get un-knocked out diff --git a/init.lua b/init.lua index 1a7a065..5388952 100644 --- a/init.lua +++ b/init.lua @@ -84,6 +84,19 @@ knockout.save = function() knockout.storage:set_string("knocked_out", minetest.serialize(knockout.knocked_out)) end +-- Drop a player +knockout.carrier_drop = function(pName) -- pname = name of carrier + if knockout.carrying[pName] then + local cName = knockout.carrying[pName] + local carried = minetest.get_player_by_name(cName) + if carried then + carried:set_detach() + end + knockout.knockout(cName) + knockout.carrying[pName] = nil + end +end + -- Knock out player knockout.knockout = function(pName, duration) local p = minetest.get_player_by_name(pName) @@ -94,6 +107,8 @@ knockout.knockout = function(pName, duration) end -- Incase player is riding a horse or something p:set_detach() + -- If the player is carrying another player, fix that + knockout.carrier_drop(pName) -- Freeze player using entites local pos = p:get_pos() local e = minetest.add_entity(pos, "knockout:entity", pName)