Add option to disable bones

- Players keep inventory on death if disabled
This commit is contained in:
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. # By default, all the settings are commented and not functional.
# Uncomment settings by removing the preceding #. # Uncomment settings by removing the preceding #.
# Whether creative mode (fast digging of all blocks, unlimited resources) should be enabled # Whether creative mode (fast digging of all blocks, unlimited resources) should be enabled
#creative_mode = false #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 # The time in seconds after which the bones of a dead player can be looted by everyone
# 0 to disable # 0 to disable
#share_bones_time = 1200 #share_bones_time = 1200

View File

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