Add option to disable bones
- Players keep inventory on death if disabled
This commit is contained in:
parent
5c59fb1091
commit
1c2489e308
@ -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
|
||||
|
@ -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")
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user