2014-11-29 15:40:55 +01:00
|
|
|
-- State Changes
|
|
|
|
|
|
|
|
local update_bobtrap = function (pos, node)
|
|
|
|
local nodename=""
|
|
|
|
local param2=""
|
|
|
|
--Switch Trap State
|
2015-05-23 18:33:53 +02:00
|
|
|
if
|
2014-11-29 15:40:55 +01:00
|
|
|
-- Swap Traps
|
|
|
|
node.name == 'bobblocks:trap_spike' then nodename = 'bobblocks:trap_spike_set'
|
|
|
|
elseif node.name == 'bobblocks:trap_spike_set' then nodename = 'bobblocks:trap_spike'
|
|
|
|
elseif node.name == 'bobblocks:trap_spike_major' then nodename = 'bobblocks:trap_spike_major_set'
|
|
|
|
elseif node.name == 'bobblocks:trap_spike_major_set' then nodename = 'bobblocks:trap_spike_major'
|
|
|
|
end
|
2015-02-02 18:37:29 +01:00
|
|
|
minetest.add_node(pos, {name = nodename})
|
2014-11-29 15:40:55 +01:00
|
|
|
end
|
|
|
|
|
2015-05-23 18:33:53 +02:00
|
|
|
-- Punch Traps
|
2014-11-29 15:40:55 +01:00
|
|
|
local on_bobtrap_punched = function (pos, node, puncher)
|
2015-05-23 18:33:53 +02:00
|
|
|
if
|
2014-11-29 15:40:55 +01:00
|
|
|
-- Start Traps
|
|
|
|
node.name == 'bobblocks:trap_spike' or node.name == 'bobblocks:trap_spike_set' or
|
2015-05-23 18:33:53 +02:00
|
|
|
node.name == 'bobblocks:trap_spike_major' or node.name == 'bobblocks:trap_spike_major_set'
|
2014-11-29 15:40:55 +01:00
|
|
|
then
|
|
|
|
update_bobtrap(pos, node)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
minetest.register_on_punchnode(on_bobtrap_punched)
|
|
|
|
|
|
|
|
|
|
|
|
--ABM (Spring The Traps)
|
|
|
|
|
|
|
|
minetest.register_abm(
|
|
|
|
{nodenames = {"bobblocks:trap_spike_set"},
|
|
|
|
interval = 1.0,
|
|
|
|
chance = 1,
|
|
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
2015-02-02 18:37:29 +01:00
|
|
|
local objs = minetest.get_objects_inside_radius(pos, 1)
|
2014-11-29 15:40:55 +01:00
|
|
|
for k, obj in pairs(objs) do
|
2015-05-23 18:33:53 +02:00
|
|
|
|
2014-11-29 15:40:55 +01:00
|
|
|
update_bobtrap(pos, node)
|
|
|
|
end
|
|
|
|
end,
|
2015-05-23 18:33:53 +02:00
|
|
|
|
2014-11-29 15:40:55 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_abm(
|
|
|
|
{nodenames = {"bobblocks:trap_spike_major_set"},
|
|
|
|
interval = 1.0,
|
|
|
|
chance = 1,
|
|
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
2015-02-02 18:37:29 +01:00
|
|
|
local objs = minetest.get_objects_inside_radius(pos, 1)
|
2014-11-29 15:40:55 +01:00
|
|
|
for k, obj in pairs(objs) do
|
2015-05-23 18:33:53 +02:00
|
|
|
|
2014-11-29 15:40:55 +01:00
|
|
|
update_bobtrap(pos, node)
|
|
|
|
end
|
|
|
|
end,
|
2015-05-23 18:33:53 +02:00
|
|
|
|
2014-11-29 15:40:55 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- Nodes
|
|
|
|
minetest.register_node("bobblocks:trap_grass", {
|
|
|
|
description = "Trap Grass",
|
|
|
|
tile_images = {"default_grass.png"},
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
legacy_facedir_simple = true,
|
|
|
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
|
|
is_ground_content = false,
|
|
|
|
walkable = false,
|
|
|
|
climbable = false,
|
|
|
|
})
|
|
|
|
|
2015-05-23 18:33:53 +02:00
|
|
|
local function spikenode(name, desc, texture, drop, groups, drawtype)
|
|
|
|
minetest.register_node("bobblocks:trap_"..name, {
|
|
|
|
description = desc,
|
|
|
|
drawtype = drawtype,
|
|
|
|
tile_images = {"bobblocks_"..texture..".png"},
|
|
|
|
inventory_image = ("bobblocks_"..texture..".png"),
|
2014-11-29 15:40:55 +01:00
|
|
|
paramtype = "light",
|
|
|
|
walkable = false,
|
|
|
|
sunlight_propagates = true,
|
2015-05-23 18:33:53 +02:00
|
|
|
groups = groups,
|
|
|
|
drop = drop,
|
2014-11-29 15:40:55 +01:00
|
|
|
})
|
2015-05-23 18:33:53 +02:00
|
|
|
end
|
2014-11-29 15:40:55 +01:00
|
|
|
|
2015-05-23 18:33:53 +02:00
|
|
|
local function spike1(name, desc, texture)
|
|
|
|
spikenode(name, desc, texture, "bobblocks:trap_"..name, {cracky=3,melty=3}, "plantlike")
|
|
|
|
end
|
2014-11-29 15:40:55 +01:00
|
|
|
|
2015-05-23 18:33:53 +02:00
|
|
|
local function spike2(name, desc, texture, drop)
|
|
|
|
spikenode(name, desc, texture, drop, {cracky=3,melty=3,not_in_creative_inventory=1}, "raillike")
|
|
|
|
end
|
2014-11-29 15:40:55 +01:00
|
|
|
|
2015-05-23 18:33:53 +02:00
|
|
|
spike1("spike", "Trap Spike Minor", "minorspike")
|
|
|
|
spike2("spike_set", "Trap Spike Minor Set", "trap_set", 'bobblocks:trap_spike')
|
|
|
|
spike1("spike_major", "Trap Spike Major", "majorspike")
|
|
|
|
spike2("spike_major_set", "Trap Spike Major Set", "trap_set", 'bobblocks:trap_spike_major')
|
2014-11-29 15:40:55 +01:00
|
|
|
|
2015-03-20 23:58:58 +01:00
|
|
|
minetest.register_node("bobblocks:spike_major_reverse", {
|
|
|
|
description = "Trap Spike Major Reverse",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
visual_scale = 1,
|
|
|
|
tile_images = {"bobblocks_majorspike_reverse.png"},
|
|
|
|
inventory_image = ("bobblocks_majorspike_reverse.png"),
|
|
|
|
paramtype = "light",
|
|
|
|
walkable = false,
|
|
|
|
sunlight_propagates = true,
|
|
|
|
groups = {cracky=2,melty=2},
|
|
|
|
})
|
|
|
|
|
2014-11-29 15:40:55 +01:00
|
|
|
-- Crafting
|
|
|
|
|
|
|
|
minetest.register_craft({
|
2015-03-15 00:20:38 +01:00
|
|
|
output = 'bobblocks:trap_spike 3',
|
2014-11-29 15:40:55 +01:00
|
|
|
recipe = {
|
2015-03-15 00:19:38 +01:00
|
|
|
{'', 'default:obsidian_shard', ''},
|
|
|
|
{'', 'default:steel_ingot', ''},
|
2014-11-29 15:40:55 +01:00
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_craft({
|
|
|
|
output = 'bobblocks:trap_spike_major',
|
|
|
|
recipe = {
|
2015-03-15 00:19:38 +01:00
|
|
|
{'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'},
|
|
|
|
{'', 'default:steel_ingot', ''},
|
2014-11-29 15:40:55 +01:00
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_craft({
|
|
|
|
output = 'bobblocks:trap_grass',
|
|
|
|
recipe = {
|
|
|
|
{'', '', ''},
|
|
|
|
{'', 'default:dirt', ''},
|
|
|
|
{'', 'default:stick', ''},
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
2015-03-20 23:58:58 +01:00
|
|
|
minetest.register_craft({
|
|
|
|
output = 'bobblocks:spike_major_reverse',
|
|
|
|
recipe = {
|
|
|
|
{'', 'default:steel_ingot', ''},
|
|
|
|
{'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'},
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
2014-11-29 15:40:55 +01:00
|
|
|
-- ABM
|
|
|
|
minetest.register_abm(
|
|
|
|
{nodenames = {"bobblocks:trap_spike"},
|
|
|
|
interval = 1.0,
|
|
|
|
chance = 1,
|
|
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
2015-02-02 18:37:29 +01:00
|
|
|
local objs = minetest.get_objects_inside_radius(pos, 1)
|
2014-11-29 15:40:55 +01:00
|
|
|
for k, obj in pairs(objs) do
|
|
|
|
obj:set_hp(obj:get_hp()-1)
|
|
|
|
minetest.sound_play("bobblocks_trap_fall",
|
|
|
|
{pos = pos, gain = 1.0, max_hear_distance = 3,})
|
|
|
|
end
|
|
|
|
end,
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_abm(
|
|
|
|
{nodenames = {"bobblocks:trap_spike_major"},
|
|
|
|
interval = 1.0,
|
|
|
|
chance = 1,
|
|
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
2015-02-02 18:37:29 +01:00
|
|
|
local objs = minetest.get_objects_inside_radius(pos, 1)
|
2014-11-29 15:40:55 +01:00
|
|
|
for k, obj in pairs(objs) do
|
|
|
|
obj:set_hp(obj:get_hp()-100)
|
|
|
|
minetest.sound_play("bobblocks_trap_fall",
|
2015-05-23 18:33:53 +02:00
|
|
|
{pos = pos, gain = 1.0, max_hear_distance = 3,})
|
2014-11-29 15:40:55 +01:00
|
|
|
end
|
|
|
|
end,
|
|
|
|
|
|
|
|
})
|
2015-03-20 23:58:58 +01:00
|
|
|
|
|
|
|
minetest.register_abm(
|
|
|
|
{nodenames = {"bobblocks:spike_major_reverse"},
|
|
|
|
interval = 1.0,
|
|
|
|
chance = 1,
|
|
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
|
|
pos.y = pos.y-1.2
|
|
|
|
local objs = minetest.get_objects_inside_radius(pos, 1)
|
|
|
|
for k, obj in pairs(objs) do
|
|
|
|
obj:set_hp(obj:get_hp()-100)
|
|
|
|
minetest.sound_play("bobblocks_trap_fall",
|
2015-06-10 17:14:58 +02:00
|
|
|
{pos = pos, gain = 1.0, max_hear_distance = 3,})
|
2015-03-20 23:58:58 +01:00
|
|
|
end
|
|
|
|
end,
|
2015-06-10 17:14:58 +02:00
|
|
|
|
2015-03-20 23:58:58 +01:00
|
|
|
})
|