added traps
|
@ -174,6 +174,7 @@ mobs - http://minetest.net/forum/viewtopic.php?id=3063
|
|||
pipeworks - http://minetest.net/forum/viewtopic.php?id=2155
|
||||
pushable_block - http://minetest.net/forum/viewtopic.php?id=730
|
||||
technic - http://minetest.net/forum/viewtopic.php?id=2538
|
||||
traps - http://minetest.net/forum/viewtopic.php?id=2838
|
||||
workers - http://minetest.net/forum/viewtopic.php?id=2576
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
Minetest-Traps-Mod
|
||||
==================
|
||||
|
||||
This is a mod for Minetest-c55 that adds booby traps to the game. Made for the Hunger Games Server by "Rubenwardy"
|
||||
|
||||
|
||||
The Blocks
|
||||
==========
|
||||
|
||||
* Mine Trap - A mine disguised as a dirt_with_grass block
|
||||
|
||||
* Cage Trap - A cage trap that traps the player and requires another player to resque them
|
||||
|
||||
* Lava Trap - A deadly and awkward trap that spawns lava above the player, that forms walls around them
|
|
@ -0,0 +1,178 @@
|
|||
-- Rubenwardy's Trap Mod
|
||||
--
|
||||
--
|
||||
--
|
||||
--
|
||||
-- Cage Trap
|
||||
|
||||
|
||||
minetest.register_node("traps:cage",{
|
||||
tile_images = {"traps_grass.png", "default_dirt.png",
|
||||
"default_grass_side.png", "default_grass_side.png",
|
||||
"default_grass_side.png", "default_grass_side.png"},
|
||||
inventory_image = minetest.inventorycube("traps_grass.png",
|
||||
"default_grass_side.png", "default_grass_side.png"),
|
||||
dug_item = '', -- Get nothing
|
||||
groups={immortal},
|
||||
description = "Cage Trap",
|
||||
})
|
||||
|
||||
minetest.register_node("traps:uncage",{
|
||||
tile_images = {"trap_uncage.png"},
|
||||
inventory_image = minetest.inventorycube("traps_uncage.png",
|
||||
"traps_uncage.png", "traps_uncage.png"),
|
||||
dug_item = '', -- Get nothing
|
||||
groups={immortal},
|
||||
description = "Cage Trap Release",
|
||||
})
|
||||
|
||||
local block_to_place="moreblocks:superglowglass"
|
||||
|
||||
minetest.register_abm(
|
||||
{nodenames = {"traps:cage"},
|
||||
interval = 0.2,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
||||
for k, obj in pairs(objs) do
|
||||
print("HIT!")
|
||||
--local objpos=obj:getpos()
|
||||
|
||||
local tmp
|
||||
|
||||
minetest.env:add_node(pos,{name=block_to_place})
|
||||
|
||||
--Left
|
||||
print("Left")
|
||||
tmp={x=(pos.x+1),y=(pos.y+1),z=(pos.z)}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--Right
|
||||
print("right")
|
||||
tmp={x=(pos.x-1),y=(pos.y+1),z=(pos.z)}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--Front
|
||||
print("front")
|
||||
tmp={x=(pos.x),y=(pos.y+1),z=(pos.z+1)}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--Back
|
||||
print("back")
|
||||
tmp={x=(pos.x),y=(pos.y+1),z=(pos.z-1)}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--Left
|
||||
print("Left")
|
||||
tmp={x=(pos.x+1),y=(pos.y+2),z=(pos.z)}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--Right
|
||||
print("right")
|
||||
tmp={x=(pos.x-1),y=(pos.y+2),z=(pos.z)}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--Front
|
||||
print("front")
|
||||
tmp={x=(pos.x),y=(pos.y+2),z=(pos.z+1)}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--Back
|
||||
print("back")
|
||||
tmp={x=(pos.x),y=(pos.y+2),z=(pos.z-1)}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--Top
|
||||
print("top")
|
||||
tmp={x=(pos.x),y=(pos.y+3),z=(pos.z)}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--Release
|
||||
print("release")
|
||||
tmp={x=(pos.x+1),y=(pos.y),z=(pos.z+1)}
|
||||
minetest.env:add_node(tmp,{name="traps:uncage"})
|
||||
|
||||
--if objpos.y>pos.y-1 and objpos.y<pos.y then
|
||||
-- local tmp
|
||||
-- minetest.env:add_node(tmp,{name=block_to_place})
|
||||
--end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Rubenwardy's Trap Mod
|
||||
--
|
||||
--
|
||||
--
|
||||
--
|
||||
-- Decage
|
||||
|
||||
local air_to_place="air"
|
||||
|
||||
minetest.register_abm(
|
||||
{nodenames = {"traps:uncage"},
|
||||
interval = 0.2,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
||||
for k, obj in pairs(objs) do
|
||||
print("HIT!")
|
||||
--local objpos=obj:getpos()
|
||||
|
||||
local tmp
|
||||
|
||||
minetest.env:add_node(pos,{name="default:dirt"})
|
||||
|
||||
--Left
|
||||
print("Left")
|
||||
tmp={x=(pos.x),y=(pos.y+1),z=(pos.z-1)}
|
||||
minetest.env:add_node(tmp,{name=air_to_place})
|
||||
|
||||
--Right
|
||||
print("right")
|
||||
tmp={x=(pos.x-2),y=(pos.y+1),z=(pos.z-1)}
|
||||
minetest.env:add_node(tmp,{name=air_to_place})
|
||||
|
||||
--Front
|
||||
print("front")
|
||||
tmp={x=(pos.x-1),y=(pos.y+1),z=(pos.z)}
|
||||
minetest.env:add_node(tmp,{name=air_to_place})
|
||||
|
||||
--Back
|
||||
print("back")
|
||||
tmp={x=(pos.x-1),y=(pos.y+1),z=(pos.z-2)}
|
||||
minetest.env:add_node(tmp,{name=air_to_place})
|
||||
|
||||
--Left
|
||||
print("Left")
|
||||
tmp={x=(pos.x),y=(pos.y+2),z=(pos.z-1)}
|
||||
minetest.env:add_node(tmp,{name=air_to_place})
|
||||
|
||||
--Right
|
||||
print("right")
|
||||
tmp={x=(pos.x-2),y=(pos.y+2),z=(pos.z-1)}
|
||||
minetest.env:add_node(tmp,{name=air_to_place})
|
||||
|
||||
--Front
|
||||
print("front")
|
||||
tmp={x=(pos.x-1),y=(pos.y+2),z=(pos.z)}
|
||||
minetest.env:add_node(tmp,{name=air_to_place})
|
||||
|
||||
--Back
|
||||
print("back")
|
||||
tmp={x=(pos.x-1),y=(pos.y+2),z=(pos.z-2)}
|
||||
minetest.env:add_node(tmp,{name=air_to_place})
|
||||
|
||||
--Top
|
||||
print("top")
|
||||
tmp={x=(pos.x-1),y=(pos.y+3),z=(pos.z-1)}
|
||||
minetest.env:add_node(tmp,{name=air_to_place})
|
||||
|
||||
-- Floor
|
||||
print("release")
|
||||
tmp={x=(pos.x-1),y=(pos.y),z=(pos.z-1)}
|
||||
minetest.env:add_node(tmp,{name="default:dirt"})
|
||||
|
||||
end
|
||||
end,
|
||||
})
|
|
@ -0,0 +1,2 @@
|
|||
default
|
||||
moreblocks
|
|
@ -0,0 +1,45 @@
|
|||
dofile(minetest.get_modpath("traps").."/mine.lua")
|
||||
dofile(minetest.get_modpath("traps").."/cage.lua")
|
||||
dofile(minetest.get_modpath("traps").."/lava.lua")
|
||||
|
||||
|
||||
if not minetest.get_modpath("bobblocks") then
|
||||
dofile(minetest.get_modpath("traps").."/spikes.lua")
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output="traps:cage",
|
||||
recipe={
|
||||
{"","default:mese",""},
|
||||
{"","default:mese",""},
|
||||
{"","default:dirt",""}}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output="traps:mine",
|
||||
recipe={
|
||||
{"","default:coal_lump",""},
|
||||
{"","default:coal_lump",""},
|
||||
{"default:mese","default:dirt","default:mese"}}
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("traps:trap_sand", {
|
||||
description = "Trap Sand",
|
||||
tile_images = {"default_sand.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,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'traps:trap_sand',
|
||||
recipe = {
|
||||
{'', '', ''},
|
||||
{'', 'default:sand', ''},
|
||||
{'', 'default:stick', ''},
|
||||
}
|
||||
})
|
|
@ -0,0 +1,179 @@
|
|||
-- Rubenwardy's Trap Mod
|
||||
--
|
||||
--
|
||||
--
|
||||
--
|
||||
-- Cage Trap
|
||||
|
||||
|
||||
minetest.register_node("traps:lava",{
|
||||
tile_images = {"traps_grass.png", "default_dirt.png",
|
||||
"default_grass_side.png", "default_grass_side.png",
|
||||
"default_grass_side.png", "default_grass_side.png"},
|
||||
inventory_image = minetest.inventorycube("traps_grass.png",
|
||||
"default_grass_side.png", "default_grass_side.png"),
|
||||
dug_item = '', -- Get nothing
|
||||
groups={immortal},
|
||||
description = "Lava Drop Trap",
|
||||
})
|
||||
|
||||
local block_to_place="default:lava_source"
|
||||
local hi=5 --How high the lava is
|
||||
|
||||
minetest.register_abm(
|
||||
{nodenames = {"traps:lava"},
|
||||
interval = 0.2,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
||||
for k, obj in pairs(objs) do
|
||||
print("HIT!")
|
||||
--local objpos=obj:getpos()
|
||||
|
||||
local tmp
|
||||
|
||||
minetest.env:add_node(pos,{name="default:dirt"})
|
||||
|
||||
--Left side pit
|
||||
tmp={x=pos.x-2,y=pos.y,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
--Right side pit
|
||||
tmp={x=pos.x+2,y=pos.y,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
--front side pit
|
||||
tmp={x=pos.x-1,y=pos.y,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x,y=pos.y,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
--back side pit
|
||||
tmp={x=pos.x-1,y=pos.y,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x,y=pos.y,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
|
||||
-- PLACE LAVA
|
||||
--
|
||||
--
|
||||
|
||||
--Left side lava
|
||||
tmp={x=pos.x-2,y=pos.y+hi,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y+hi,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y+hi,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y+hi,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y+hi,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--Right side lava
|
||||
tmp={x=pos.x+2,y=pos.y+hi,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y+hi,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y+hi,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y+hi,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y+hi,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--front side pit
|
||||
tmp={x=pos.x-1,y=pos.y+hi,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x,y=pos.y+hi,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y+hi,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--back side lava
|
||||
tmp={x=pos.x-1,y=pos.y+hi,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x,y=pos.y+hi,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y+hi,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
|
||||
--block barrier
|
||||
tmp={x=pos.x,y=pos.y+hi-1,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
|
||||
--1
|
||||
tmp={x=pos.x+1,y=pos.y+hi-1,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y+hi-1,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y+hi-1,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
|
||||
--2
|
||||
tmp={x=pos.x,y=pos.y+hi-1,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
|
||||
tmp={x=pos.x-1,y=pos.y+hi-1,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
|
||||
tmp={x=pos.x-1,y=pos.y+hi-1,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
|
||||
tmp={x=pos.x,y=pos.y+hi-1,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
|
||||
tmp={x=pos.x-1,y=pos.y+hi-1,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
|
||||
|
||||
end
|
||||
end,
|
||||
})
|
|
@ -0,0 +1,100 @@
|
|||
function spawn_tnt(pos, entname)
|
||||
minetest.sound_play("nuke_ignite", {pos = pos,gain = 1.0,max_hear_distance = 8,})
|
||||
return minetest.env:add_entity(pos, entname)
|
||||
end
|
||||
|
||||
function activate_if_tnt(nname, np, tnt_np, tntr)
|
||||
if nname == "experimental:tnt" or nname == "traps:mine" or nname == "nuke:mese_tnt" or nname == "nuke:hardcore_iron_tnt" or nname == "nuke:hardcore_mese_tnt" then
|
||||
local e = spawn_tnt(np, nname)
|
||||
e:setvelocity({x=(np.x - tnt_np.x)*3+(tntr / 4), y=(np.y - tnt_np.y)*3+(tntr / 3), z=(np.z - tnt_np.z)*3+(tntr / 4)})
|
||||
end
|
||||
end
|
||||
|
||||
function do_tnt_physics(tnt_np,tntr)
|
||||
local objs = minetest.env:get_objects_inside_radius(tnt_np, tntr)
|
||||
for k, obj in pairs(objs) do
|
||||
local oname = obj:get_entity_name()
|
||||
local v = obj:getvelocity()
|
||||
local p = obj:getpos()
|
||||
if oname == "experimental:tnt" or oname == "traps:mine" or oname == "nuke:mese_tnt" or oname == "nuke:hardcore_iron_tnt" or oname == "nuke:hardcore_mese_tnt" then
|
||||
obj:setvelocity({x=(p.x - tnt_np.x) + (tntr / 2) + v.x, y=(p.y - tnt_np.y) + tntr + v.y, z=(p.z - tnt_np.z) + (tntr / 2) + v.z})
|
||||
else
|
||||
if v ~= nil then
|
||||
obj:setvelocity({x=(p.x - tnt_np.x) + (tntr / 4) + v.x, y=(p.y - tnt_np.y) + (tntr / 2) + v.y, z=(p.z - tnt_np.z) + (tntr / 4) + v.z})
|
||||
else
|
||||
if obj:get_player_name() ~= nil then
|
||||
obj:set_hp(0)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("traps:mine", {
|
||||
tile_images = {"traps_grass.png", "default_dirt.png",
|
||||
"default_grass_side.png", "default_grass_side.png",
|
||||
"default_grass_side.png", "default_grass_side.png"},
|
||||
inventory_image = minetest.inventorycube("traps_grass.png",
|
||||
"nuke_iron_tnt_side.png", "nuke_iron_tnt_side.png"),
|
||||
dug_item = '', -- Get nothing
|
||||
material = {
|
||||
diggability = "not",
|
||||
},
|
||||
description = "Minetrap",
|
||||
})
|
||||
|
||||
|
||||
|
||||
local IRON_TNT_RANGE = 3
|
||||
local IRON_TNT = {
|
||||
-- Static definition
|
||||
physical = true, -- Collides with things
|
||||
-- weight = 5,
|
||||
collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
|
||||
visual = "cube",
|
||||
textures = {"nuke_iron_tnt_top.png", "nuke_iron_tnt_bottom.png",
|
||||
"nuke_iron_tnt_side.png", "nuke_iron_tnt_side.png",
|
||||
"nuke_iron_tnt_side.png", "nuke_iron_tnt_side.png"},
|
||||
-- Initial value for our timer
|
||||
timer = 0,
|
||||
-- Number of punches required to defuse
|
||||
health = 1,
|
||||
blinktimer = 0,
|
||||
blinkstatus = true,
|
||||
}
|
||||
|
||||
minetest.register_abm(
|
||||
{nodenames = {"traps:mine"},
|
||||
interval = 0.2,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
||||
for k, obj in pairs(objs) do
|
||||
print("HIT!")
|
||||
|
||||
for x=-IRON_TNT_RANGE,IRON_TNT_RANGE do
|
||||
for y=-IRON_TNT_RANGE,IRON_TNT_RANGE do
|
||||
for z=-IRON_TNT_RANGE,IRON_TNT_RANGE do
|
||||
if x*x+y*y+z*z <= IRON_TNT_RANGE * IRON_TNT_RANGE + IRON_TNT_RANGE then
|
||||
local np={x=pos.x+x,y=pos.y+y,z=pos.z+z}
|
||||
local n = minetest.env:get_node(np)
|
||||
if n.name ~= "air" then
|
||||
minetest.env:remove_node(np)
|
||||
end
|
||||
--activate_if_tnt(n.name, np, pos, IRON_TNT_RANGE)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if obj:get_player_name() ~= nil then
|
||||
obj:set_hp(obj:get_hp() - 10)
|
||||
end
|
||||
minetest.env:add_node(pos,{name="air"})
|
||||
--self.object:remove()
|
||||
--minetest.env:remove_node(pos)
|
||||
--spawn_tnt(pos, "nuke:iron_tnt")
|
||||
--nodeupdate(pos)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
|
@ -0,0 +1,189 @@
|
|||
-- Code License
|
||||
--
|
||||
-- This code can originally be found in the mod "bobblocks"
|
||||
--
|
||||
-- http://minetest.net/forum/viewtopic.php?id=1274
|
||||
|
||||
local update_bobtrap = function (pos, node)
|
||||
local nodename=""
|
||||
local param2=""
|
||||
--Switch Trap State
|
||||
if
|
||||
-- Swap Traps
|
||||
node.name == 'traps:trap_spike' then nodename = 'traps:trap_spike_set'
|
||||
elseif node.name == 'traps:trap_spike_set' then nodename = 'traps:trap_spike'
|
||||
elseif node.name == 'traps:trap_spike_major' then nodename = 'traps:trap_spike_major_set'
|
||||
elseif node.name == 'traps:trap_spike_major_set' then nodename = 'traps:trap_spike_major'
|
||||
end
|
||||
minetest.env:add_node(pos, {name = nodename})
|
||||
end
|
||||
|
||||
-- Punch Traps
|
||||
local on_bobtrap_punched = function (pos, node, puncher)
|
||||
if
|
||||
-- Start Traps
|
||||
node.name == 'traps:trap_spike' or node.name == 'traps:trap_spike_set' or
|
||||
node.name == 'traps:trap_spike_major' or node.name == 'traps:trap_spike_major_set'
|
||||
then
|
||||
update_bobtrap(pos, node)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_on_punchnode(on_bobtrap_punched)
|
||||
|
||||
|
||||
--ABM (Spring The Traps)
|
||||
|
||||
minetest.register_abm(
|
||||
{nodenames = {"traps:trap_spike_set"},
|
||||
interval = 1.0,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
||||
for k, obj in pairs(objs) do
|
||||
|
||||
update_bobtrap(pos, node)
|
||||
end
|
||||
end,
|
||||
|
||||
})
|
||||
|
||||
minetest.register_abm(
|
||||
{nodenames = {"traps:trap_spike_major_set"},
|
||||
interval = 1.0,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
||||
for k, obj in pairs(objs) do
|
||||
|
||||
update_bobtrap(pos, node)
|
||||
end
|
||||
end,
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
-- Nodes
|
||||
minetest.register_node("traps:trap_grass", {
|
||||
description = "Trap Grass",
|
||||
tile_images = {"traps_grass.png", "default_dirt.png",
|
||||
"default_grass_side.png", "default_grass_side.png",
|
||||
"default_grass_side.png", "default_grass_side.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,
|
||||
})
|
||||
|
||||
minetest.register_node("traps:trap_spike", {
|
||||
description = "Trap Spike Minor",
|
||||
drawtype = "plantlike",
|
||||
visual_scale = 1,
|
||||
tile_images = {"traps_minorspike.png"},
|
||||
inventory_image = ("traps_minorspike.png"),
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
sunlight_propagates = true,
|
||||
groups = {cracky=3,melty=3},
|
||||
})
|
||||
|
||||
minetest.register_node("traps:trap_spike_set", {
|
||||
description = "Trap Spike Minor",
|
||||
drawtype = "raillike",
|
||||
visual_scale = 1,
|
||||
tile_images = {"traps_trap_set.png"},
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
sunlight_propagates = true,
|
||||
groups = {cracky=3,melty=3},
|
||||
drop = 'traps:trap_spike',
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("traps:trap_spike_major", {
|
||||
description = "Trap Spike Minor",
|
||||
drawtype = "plantlike",
|
||||
visual_scale = 1,
|
||||
tile_images = {"traps_majorspike.png"},
|
||||
inventory_image = ("traps_majorspike.png"),
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
sunlight_propagates = true,
|
||||
groups = {cracky=2,melty=2},
|
||||
})
|
||||
|
||||
minetest.register_node("traps:trap_spike_major_set", {
|
||||
description = "Trap Spike Major",
|
||||
drawtype = "raillike",
|
||||
visual_scale = 1,
|
||||
tile_images = {"traps_trap_set.png"},
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
sunlight_propagates = true,
|
||||
groups = {cracky=3,melty=3},
|
||||
drop = 'traps:trap_spike',
|
||||
})
|
||||
|
||||
|
||||
-- Crafting
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'traps:trap_spike',
|
||||
recipe = {
|
||||
{'', '', ''},
|
||||
{'', 'default:cobble', ''},
|
||||
{'default:cobble', 'default:apple', 'default:cobble'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'traps:trap_spike_major',
|
||||
recipe = {
|
||||
{'', 'default:cobble', ''},
|
||||
{'', 'default:apple', ''},
|
||||
{'default:cobble', 'default:apple', 'default:cobble'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'traps:trap_grass',
|
||||
recipe = {
|
||||
{'', '', ''},
|
||||
{'', 'default:dirt', ''},
|
||||
{'', 'default:stick', ''},
|
||||
}
|
||||
})
|
||||
|
||||
-- ABM
|
||||
minetest.register_abm(
|
||||
{nodenames = {"traps:trap_spike"},
|
||||
interval = 1.0,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
||||
for k, obj in pairs(objs) do
|
||||
obj:set_hp(obj:get_hp()-1)
|
||||
minetest.sound_play("traps_trap_fall",
|
||||
{pos = pos, gain = 1.0, max_hear_distance = 3,})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_abm(
|
||||
{nodenames = {"traps:trap_spike_major"},
|
||||
interval = 1.0,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
||||
for k, obj in pairs(objs) do
|
||||
obj:set_hp(obj:get_hp()-100)
|
||||
minetest.sound_play("traps_trap_fall",
|
||||
{pos = pos, gain = 1.0, max_hear_distance = 3,})
|
||||
end
|
||||
end,
|
||||
|
||||
})
|
After Width: | Height: | Size: 978 B |
After Width: | Height: | Size: 604 B |
After Width: | Height: | Size: 794 B |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 604 B |