Add option to disable bones

- Players keep inventory on death if disabled
master
BlockMen 2015-10-21 10:37:35 +02:00
parent 5c59fb1091
commit 1c2489e308
2 changed files with 24 additions and 22 deletions

View File

@ -1,10 +1,13 @@
# This file contains settings of Minetest Game that can be changed in minetest.conf
# This file contains settings of Minetest NeXt that can be changed in minetest.conf
# By default, all the settings are commented and not functional.
# Uncomment settings by removing the preceding #.
# Whether creative mode (fast digging of all blocks, unlimited resources) should be enabled
#creative_mode = false
# Whether players inventory is placed into a node on death (bones node)
#enable_bones = true
# The time in seconds after which the bones of a dead player can be looted by everyone
# 0 to disable
#share_bones_time = 1200

View File

@ -1,5 +1,4 @@
-- Minetest 0.4 mod: bones
-- See README.txt for licensing and other information.
local bones_enabled = core.setting_getbool("enable_bones") ~= false
bones = {}
@ -40,50 +39,50 @@ minetest.register_node("bones:bones", {
footstep = {name="default_gravel_footstep", gain=0.5},
dug = {name="default_gravel_footstep", gain=1.0},
}),
can_dig = function(pos, player)
local inv = minetest.get_meta(pos):get_inventory()
return is_owner(pos, player:get_player_name()) and inv:is_empty("main")
end,
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
if is_owner(pos, player:get_player_name()) then
return count
end
return 0
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
return 0
end,
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
if is_owner(pos, player:get_player_name()) then
return stack:get_count()
end
return 0
end,
on_metadata_inventory_take = function(pos, listname, index, stack, player)
local meta = minetest.get_meta(pos)
if meta:get_inventory():is_empty("main") then
minetest.remove_node(pos)
end
end,
on_punch = function(pos, node, player)
if(not is_owner(pos, player:get_player_name())) then
return
end
if(minetest.get_meta(pos):get_string("infotext") == "") then
return
end
local inv = minetest.get_meta(pos):get_inventory()
local player_inv = player:get_inventory()
local has_space = true
for i=1,inv:get_size("main") do
local stk = inv:get_stack("main", i)
if player_inv:room_for_item("main", stk) then
@ -94,7 +93,7 @@ minetest.register_node("bones:bones", {
break
end
end
-- remove bones if player emptied them
if has_space then
if player_inv:room_for_item("main", {name = "bones:bones"}) then
@ -105,7 +104,7 @@ minetest.register_node("bones:bones", {
minetest.remove_node(pos)
end
end,
on_timer = function(pos, elapsed)
local meta = minetest.get_meta(pos)
local time = meta:get_int("time") + elapsed
@ -150,10 +149,10 @@ local function may_replace(pos, player)
end
minetest.register_on_dieplayer(function(player)
if minetest.setting_getbool("creative_mode") then
if minetest.setting_getbool("creative_mode") or not bones_enabled then
return
end
local player_inv = player:get_inventory()
if player_inv:is_empty("main") and
player_inv:is_empty("craft") then
@ -188,14 +187,14 @@ minetest.register_on_dieplayer(function(player)
return
end
end
minetest.set_node(pos, {name="bones:bones", param2=param2})
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("main", 8*4)
inv:set_list("main", player_inv:get_list("main"))
for i=1,player_inv:get_size("craft") do
local stack = player_inv:get_stack("craft", i)
if inv:room_for_item("main", stack) then
@ -205,13 +204,13 @@ minetest.register_on_dieplayer(function(player)
minetest.add_item(pos, stack)
end
end
player_inv:set_list("main", {})
player_inv:set_list("craft", {})
meta:set_string("formspec", bones.bones_formspec)
meta:set_string("owner", player_name)
if share_bones_time ~= 0 then
meta:set_string("infotext", player_name.."'s fresh bones")