summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--handle_schematics.lua45
-rw-r--r--init.lua6
2 files changed, 38 insertions, 13 deletions
diff --git a/handle_schematics.lua b/handle_schematics.lua
index a80daf6..bd443d7 100644
--- a/handle_schematics.lua
+++ b/handle_schematics.lua
@@ -6,8 +6,12 @@ handle_schematics.SCAFFOLDING = 'random_buildings:support';
handle_schematics.AUTODECAY = 'apartment:autodecay';
+handle_schematics.ENABLE_SLOW_DECAY = false
+
+
minetest.register_privilege("apartment_spawn", { description = "allows you to spawn apartments", give_to_singleplayer = false});
+
-- taken from https://github.com/MirceaKitsune/minetest_mods_structures/blob/master/structures_io.lua (Taokis Sructures I/O mod)
-- gets the size of a structure file
-- nodenames: contains all the node names that are used in the schematic
@@ -183,11 +187,26 @@ handle_schematics.update_nodes = function( start_pos, end_pos, on_constr, after_
-- steel doors are annoying because the cannot be catched with the functions above
local doornodes = minetest.find_nodes_in_area( start_pos, end_pos,
{'doors:door_steel_b_1','doors:door_steel_b_2',
- 'doors:door_steel_t_1','doors:door_steel_t_2'});
+ 'doors:door_steel_t_1','doors:door_steel_t_2',
+ 'doors:door_steel_a', 'doors:door_steel_b'});
for _, p in ipairs( doornodes ) do
+ local node = minetest.get_node( p );
local meta = minetest.get_meta( p );
- meta:set_string("doors_owner", player_name );
- meta:set_string("infotext", "Owned by "..player_name)
+ if( not( node ) or not( node.name )) then
+ -- do nothing
+ elseif( node.name=='doors:door_steel_t_1' or node.name=='doors:door_steel_t_2') then
+ -- replace top of old steel doors with new node
+ minetest.swap_node( p, {name='doors:door_hidden', param2=node.param2} );
+ else
+ -- set the new owner
+ meta:set_string("doors_owner", player_name );
+ meta:set_string("infotext", "Owned by "..player_name)
+ if( node.name == 'doors:door_steel_b_1' ) then
+ minetest.swap_node( p, {name='doors:door_steel_a', param2=nod3.param2});
+ elseif( node.name == 'doors:door_steel_b_2' ) then
+ minetest.swap_node( p, {name='doors:door_steel_b', param2=node.param2});
+ end
+ end
end
@@ -459,7 +478,11 @@ handle_schematics.replacement_function_decay = function( nodenames )
local replacements = {};
for _,v in ipairs( nodenames ) do
- table.insert( replacements, { v, handle_schematics.AUTODECAY })
+ if( handle_schematics.ENABLE_SLOW_DECAY ) then
+ table.insert( replacements, { v, handle_schematics.AUTODECAY })
+ else
+ table.insert( replacements, { v, 'air' })
+ end
end
return replacements;
end
@@ -586,8 +609,8 @@ end
minetest.register_node("apartment:build_chest", {
description = "Apartment spawner",
- tiles = {"default_chest_side.png", "default_chest_top.png^door_steel.png", "default_chest_side.png",
- "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png^door_steel.png"},
+ tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_top.png",
+ "default_chest_top.png", "default_chest_top.png", "apartment_controls_vacant.png"},
paramtype2 = "facedir",
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
legacy_facedir_simple = true,
@@ -642,7 +665,8 @@ minetest.register_node("apartment:build_chest", {
})
-minetest.register_node( handle_schematics.AUTODECAY, {
+if handle_schematics.ENABLE_SLOW_DECAY then
+ minetest.register_node( handle_schematics.AUTODECAY, {
description = "decaying building",
drawtype = "allfaces_optional",
visual_scale = 1.3,
@@ -651,9 +675,9 @@ minetest.register_node( handle_schematics.AUTODECAY, {
waving = 1,
is_ground_content = false,
groups = {snappy=3},
-})
+ })
-minetest.register_abm({
+ minetest.register_abm({
nodenames = {handle_schematics.AUTODECAY},
-- A low interval and a high inverse chance spreads the load
interval = 2,
@@ -661,4 +685,5 @@ minetest.register_abm({
action = function(p0, node, _, _)
minetest.remove_node( p0 );
end
-})
+ })
+end
diff --git a/init.lua b/init.lua
index 2d4a2e3..6425fb5 100644
--- a/init.lua
+++ b/init.lua
@@ -455,7 +455,7 @@ apartment.rent = function( pos, pname, oldmetadata, actor )
-- change the actual owner
-- set a fitting infotext
local itext = 'Object in Ap. '..descr..' ('..rented_by..')';
- n = minetest.get_node( {x=px, y=py, z=pz} );
+ local n = minetest.get_node( {x=px, y=py, z=pz} );
if( n.name == 'default:chest_locked' ) then
if( pname == '' ) then
itext = "Locked Chest (owned by "..original_owner..")";
@@ -733,7 +733,7 @@ minetest.register_node("apartment:apartment_free", {
paramtype = "light",
paramtype2 = "facedir",
light_source = 14,
- groups = {cracky=2},
+ groups = {cracky=2,not_in_creative_inventory=1},
node_box = {
type = "fixed",
fixed = {
@@ -858,7 +858,7 @@ minetest.register_node("apartment:apartment", {
paramtype = "light",
paramtype2 = "facedir",
light_source = 14,
- groups = {cracky=2},
+ groups = {cracky=2,not_in_creative_inventory=1},
node_box = {
type = "fixed",
fixed = {