Skip to content

Commit

Permalink
medical fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Elkien3 committed Dec 12, 2022
1 parent f66a95c commit ab846b9
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 48 deletions.
93 changes: 48 additions & 45 deletions mods/medical/body.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)

Expand Down
5 changes: 3 additions & 2 deletions mods/medical/injuries.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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", {
Expand Down
2 changes: 1 addition & 1 deletion mods/medical/vitals.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit ab846b9

Please sign in to comment.