From ab846b9d7fbee6564f8db67b02ac7f45a01a5edc Mon Sep 17 00:00:00 2001 From: Elkien3 Date: Mon, 12 Dec 2022 13:11:38 -0600 Subject: [PATCH] medical fixes --- mods/medical/body.lua | 93 ++++++++++++++++++++------------------- mods/medical/injuries.lua | 5 ++- mods/medical/vitals.lua | 2 +- 3 files changed, 52 insertions(+), 48 deletions(-) diff --git a/mods/medical/body.lua b/mods/medical/body.lua index dd6f4f0a..dede5766 100644 --- a/mods/medical/body.lua +++ b/mods/medical/body.lua @@ -99,12 +99,12 @@ function medical.detach(name, cname) if drag_player then drag_player:set_detach() if not default.player_attached[name] then - local draggeryaw = dragging_player:get_look_horizontal() - draggeryaw = draggeryaw-math.pi - if draggeryaw < -math.pi then dragger = draggeryaw+(2*math.pi) end - drag_player:set_look_horizontal(draggeryaw) minetest.add_entity(drag_player:get_pos(), "medical:unconsciousattach", name) end + local draggeryaw = dragging_player:get_look_horizontal() + draggeryaw = draggeryaw-math.pi + if draggeryaw < -math.pi then dragger = draggeryaw+(2*math.pi) end + drag_player:set_look_horizontal(draggeryaw) end dragging_tbl[cname] = nil end @@ -117,15 +117,17 @@ if beds then local newplayer = player if name and minetest.get_player_by_name(name) then newplayer = minetest.get_player_by_name(name) + default.player_attached[name] = true medical.detach(name, cname) end return original(pos, newplayer) end end -controls.register_on_release(function(player, key, time) +controls.register_on_press(function(player, key) local name = player:get_player_name() - if dragging_tbl[name] and key == "sneak" then + if dragging_tbl[name] and key == "jump" then + default.player_attached[dragging_tbl[name]] = nil medical.detach(dragging_tbl[name], name) end end) @@ -157,43 +159,6 @@ minetest.register_on_punchplayer(function(player, clicker, time_from_last_punch, local hitloc, local_hitloc = medical.gethitloc(player, clicker, tool_capabilities, dir) local hitlimb = medical.getlimb(player, clicker, tool_capabilities, dir, hitloc) --minetest.chat_send_all(hitlimb) - if wieldname == "" and medical.data[name].unconscious and clicker:get_player_control().sneak then--inventory access - local allowfunc = function(inv, listname, index, stack, player2, count) - if not minetest.get_player_by_name(name) or vector.distance(player:get_pos(), clicker:get_pos()) > 10 then return 0 end - if count then - return count - else - return stack:get_count() - end - end - local player_inv = minetest.get_inventory({type='player', name = name}) --InvRef - local detached_inv = minetest.create_detached_inventory(name, { - on_move = function(inv, from_list, from_index, to_list, to_index, count, player) - player_inv:set_list('main', inv:get_list('main')) - player_inv:set_list('craft', inv:get_list('craft')) - end, - on_put = function(inv, listname, index, stack, player) - player_inv:set_list('main', inv:get_list('main')) - player_inv:set_list('craft', inv:get_list('craft')) - end, - on_take = function(inv, listname, index, stack, player) - player_inv:set_list('main', inv:get_list('main')) - player_inv:set_list('craft', inv:get_list('craft')) - end, - allow_move = allowfunc, - allow_put = allowfunc, - allow_take = allowfunc, - }) --InvRef - detached_inv:set_list('main', player_inv:get_list('main')) - detached_inv:set_list('craft', player_inv:get_list('craft')) - local formspec = - 'size[8,12]' .. - 'label[0,0;' .. name.."'s inventory]".. - 'list[detached:'.. name..';craft;3,0;3,3;]'.. - 'list[detached:'.. name..';main;0,4;8,4;]'.. - "list[current_player;main;0,8;8,4;]" - minetest.show_formspec(cname, 'medical:inventory', formspec) - end if not clicker:get_player_control(clicker).sneak and medical.attachedtools[wieldname] and medical.attachedtools[wieldname](player, clicker, wielditem, hitloc, local_hitloc) then elseif medical.data[name].injuries and medical.data[name].injuries[hitlimb] then return medical.injury_handle(player, clicker, false, wieldname, hitlimb) @@ -231,8 +196,46 @@ minetest.register_on_rightclickplayer(function(player, clicker) local hitlimb = medical.getlimb(player, clicker, tool_capabilities, dir, hitloc) if not clicker:get_player_control(clicker).sneak and medical.usedtools[wieldname] and medical.usedtools[wieldname](player, clicker, wielditem, hitloc, local_hitloc) then - elseif medical.data[name].injuries and medical.data[name].injuries[hitlimb] then - medical.injury_handle(player, clicker, true, wieldname, hitlimb) + elseif medical.data[name].injuries and medical.data[name].injuries[hitlimb] and medical.injury_handle(player, clicker, true, wieldname, hitlimb) then + --lol nothin + else + if wieldname == "" and medical.data[name].unconscious then--inventory access + local allowfunc = function(inv, listname, index, stack, player2, count) + if not minetest.get_player_by_name(name) or vector.distance(player:get_pos(), clicker:get_pos()) > 10 then return 0 end + if count then + return count + else + return stack:get_count() + end + end + local player_inv = minetest.get_inventory({type='player', name = name}) --InvRef + local detached_inv = minetest.create_detached_inventory(name, { + on_move = function(inv, from_list, from_index, to_list, to_index, count, player) + player_inv:set_list('main', inv:get_list('main')) + player_inv:set_list('craft', inv:get_list('craft')) + end, + on_put = function(inv, listname, index, stack, player) + player_inv:set_list('main', inv:get_list('main')) + player_inv:set_list('craft', inv:get_list('craft')) + end, + on_take = function(inv, listname, index, stack, player) + player_inv:set_list('main', inv:get_list('main')) + player_inv:set_list('craft', inv:get_list('craft')) + end, + allow_move = allowfunc, + allow_put = allowfunc, + allow_take = allowfunc, + }) --InvRef + detached_inv:set_list('main', player_inv:get_list('main')) + detached_inv:set_list('craft', player_inv:get_list('craft')) + local formspec = + 'size[8,12]' .. + 'label[0,0;' .. name.."'s inventory]".. + 'list[detached:'.. name..';craft;3,0;3,3;]'.. + 'list[detached:'.. name..';main;0,4;8,4;]'.. + "list[current_player;main;0,8;8,4;]" + minetest.show_formspec(cname, 'medical:inventory', formspec) + end end end) diff --git a/mods/medical/injuries.lua b/mods/medical/injuries.lua index c134615a..6e79b082 100644 --- a/mods/medical/injuries.lua +++ b/mods/medical/injuries.lua @@ -52,7 +52,7 @@ function medical.injury_handle(player, clicker, rightclick, tool, hitlimb, finis local name = player:get_player_name() local cname = clicker:get_player_name() local wielditem = clicker:get_wielded_item() - if not medical.data[name].injuries then return end + if not medical.data[name].injuries then return false end local injury = medical.data[name].injuries[hitlimb] local ent = medical.entities[name] if ent then @@ -61,7 +61,7 @@ function medical.injury_handle(player, clicker, rightclick, tool, hitlimb, finis local injurydef = medical.injuries[injury.name] if not injury.step then injury.step = 1 end local stepdef = injurydef.steps[injury.step] - if not stepdef then return end + if not stepdef then return false end if (tool ~= stepdef.tool and minetest.get_item_group(tool, stepdef.tool) == 0) or rightclick ~= stepdef.rightclick then return false end @@ -173,6 +173,7 @@ function medical.injury_handle(player, clicker, rightclick, tool, hitlimb, finis else medical.start_timer(cname, 0, false, {player, clicker, rightclick, tool, hitlimb, true}, medical.injury_handle, stoparg, stopfunc, key, cname, name) end + return true end minetest.register_entity("medical:injury", { diff --git a/mods/medical/vitals.lua b/mods/medical/vitals.lua index 88f463b8..3160b288 100644 --- a/mods/medical/vitals.lua +++ b/mods/medical/vitals.lua @@ -369,7 +369,7 @@ minetest.register_entity("medical:unconsciousattach", { local player = minetest.get_player_by_name(staticdata) if not player then self.object:remove() return end player:set_attach(self.object) - default.player_attached[staticdata] = true + default.player_attached[staticdata] = self.object self.object:set_yaw(player:get_look_horizontal()) self.object:set_properties({collisionbox = player:get_properties().collisionbox}) end,