521 lines
17 KiB
Lua
521 lines
17 KiB
Lua
minetest.register_craftitem("was:chemical_lump", {
|
|
description = "Chemical lump",
|
|
inventory_image = "was_chemical_lump.png",
|
|
})
|
|
minetest.register_craftitem("was:plastic_piece", {
|
|
description = "Plastic piece",
|
|
inventory_image = "was_plastic_piece.png",
|
|
})
|
|
|
|
minetest.register_node("was:computer", {
|
|
description = "Computer",
|
|
tiles = {
|
|
"was_pc_board.png",
|
|
"was_pc_outside.png",
|
|
"was_pc_screen.png",
|
|
"was_pc_outside.png",
|
|
"was_pc_outside.png",
|
|
"was_pc_screen.png",
|
|
},
|
|
drawtype="nodebox",
|
|
paramtype = "light",
|
|
paramtype2="facedir",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.3, 0.5, -0.43, 0.5},
|
|
{-0.5, -0.5, 0.48, 0.5, 0.3, 0.5},
|
|
}
|
|
},
|
|
groups = {oddly_breakable_by_hand = 3,was_unit=1,tubedevice = 1, tubedevice_receiver = 1},
|
|
on_punch = function(pos, node, player, pointed_thing)
|
|
local meta=minetest.get_meta(pos)
|
|
local name=player:get_player_name() or ""
|
|
if meta:get_string("owner")==name or minetest.check_player_privs(name, {protection_bypass=true}) then
|
|
minetest.swap_node(pos,{name="was:computer_closed",param2=node.param2})
|
|
end
|
|
end,
|
|
after_place_node = function(pos, placer)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("owner",placer:get_player_name() or "")
|
|
meta:get_inventory():set_size("storage", 50)
|
|
meta:set_string("channel", pos.x .." " ..pos.y .." " ..pos.z)
|
|
meta:set_string("last_intensity_check",os.time())
|
|
minetest.swap_node(pos,{name="was:computer_closed",param2=minetest.get_node(pos).param2})
|
|
end,
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local meta=minetest.get_meta(pos)
|
|
local name=player:get_player_name() or ""
|
|
if meta:get_string("owner")==name or minetest.check_player_privs(name, {protection_bypass=true}) then
|
|
if meta:get_string("owner")=="" then
|
|
return
|
|
end
|
|
minetest.swap_node(pos,{name="was:computer",param2=node.param2})
|
|
local punchpos=was.user[name] and was.user[name].punchpos
|
|
was.user[name]={
|
|
nodepos=pos,
|
|
channel=meta:get_string("channel"),
|
|
text=minetest.deserialize(meta:get_string("text")),
|
|
id=pos.x .." " .. pos.y .." " ..pos.z,
|
|
punchpos=punchpos,
|
|
gui=true,
|
|
}
|
|
was.gui(name)
|
|
end
|
|
end,
|
|
can_dig = function(pos, player)
|
|
local meta=minetest.get_meta(pos)
|
|
local name=player:get_player_name() or ""
|
|
if meta:get_inventory():is_empty("storage") and (meta:get_string("owner")==name or minetest.check_player_privs(name, {protection_bypass=true})) then
|
|
return true
|
|
end
|
|
end,
|
|
on_timer = function (pos, elapsed)
|
|
local meta=minetest.get_meta(pos)
|
|
was.compiler(minetest.deserialize(meta:get_string("text")),{
|
|
type="node",
|
|
user=meta:get_string("owner"),
|
|
pos=pos,
|
|
event={type="timer"},
|
|
print=true,
|
|
})
|
|
return true
|
|
end,
|
|
on_waswire=function(pos,channel,from_channel,msg)
|
|
local meta=minetest.get_meta(pos)
|
|
local user=meta:get_string("owner")
|
|
if user~="" and channel==meta:get_string("channel") then
|
|
was.compiler(minetest.deserialize(meta:get_string("text")),{
|
|
type="node",
|
|
user=user,
|
|
pos=pos,
|
|
event={type="wire",channel=channel,from_channel=from_channel,msg=msg},
|
|
print=true,
|
|
})
|
|
end
|
|
end,
|
|
mesecons = {
|
|
receptor = {state = "off"},
|
|
effector = {
|
|
action_on = function (pos, node)
|
|
local meta=minetest.get_meta(pos)
|
|
local user=meta:get_string("owner")
|
|
was.compiler(minetest.deserialize(meta:get_string("text")),{
|
|
type="node",
|
|
user=meta:get_string("owner"),
|
|
pos=pos,
|
|
event={type="mesecon on"},
|
|
print=true,
|
|
})
|
|
end,
|
|
action_off = function (pos, node)
|
|
local meta=minetest.get_meta(pos)
|
|
local user=meta:get_string("owner")
|
|
was.compiler(minetest.deserialize(meta:get_string("text")),{
|
|
type="node",
|
|
user=user,
|
|
pos=pos,
|
|
event={type="mesecon off"},
|
|
print=true,
|
|
})
|
|
end
|
|
}
|
|
},
|
|
digiline = {
|
|
receptor={},
|
|
effector = {
|
|
action = function (pos,node,channel,msg)
|
|
local meta=minetest.get_meta(pos)
|
|
if meta:get_string("channel")==channel then
|
|
local user=meta:get_string("owner")
|
|
was.compiler(minetest.deserialize(meta:get_string("text")),{
|
|
type="node",
|
|
user=meta:get_string("owner"),
|
|
pos=pos,
|
|
event={type="digiline",channel=channel,msg=msg},
|
|
print=true,
|
|
})
|
|
end
|
|
end,
|
|
}
|
|
},
|
|
tube = {insert_object = function(pos, node, stack, direction)
|
|
local meta = minetest.get_meta(pos)
|
|
local user=meta:get_string("owner")
|
|
local text=minetest.deserialize(meta:get_string("text"))
|
|
local n=stack:get_name()
|
|
local c=stack:get_count()
|
|
minetest.after(0, function(text,user,pos,n,c)
|
|
was.compiler(text,{
|
|
type="node",
|
|
user=user,
|
|
pos=pos,
|
|
event={type="pipeworks",msg={item=n,count=c}},
|
|
print=true,
|
|
})
|
|
end, text,user,pos,n,c)
|
|
return meta:get_inventory():add_item("storage", stack)
|
|
end,
|
|
can_insert = function(pos, node, stack, direction)
|
|
return minetest.get_meta(pos):get_inventory():room_for_item("storage", stack)
|
|
end,
|
|
input_inventory = "storage",
|
|
connect_sides = {left=0,right=0,front=0,top=0,back=1,bottom=1}
|
|
},
|
|
})
|
|
|
|
minetest.register_node("was:computer_closed", {
|
|
description = "Computer",
|
|
drop="was:computer",
|
|
tiles = {
|
|
"was_pc_outside.png",
|
|
},
|
|
drawtype="nodebox",
|
|
paramtype = "light",
|
|
paramtype2="facedir",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.3, 0.5, -0.43, 0.5},
|
|
}
|
|
},
|
|
groups = {oddly_breakable_by_hand = 3,was_unit=1,not_in_creative_inventory=1},
|
|
on_punch = function(pos, node, player, pointed_thing)
|
|
local name=player:get_player_name() or ""
|
|
if minetest.get_meta(pos):get_string("owner")==name or minetest.check_player_privs(name, {protection_bypass=true}) then
|
|
minetest.swap_node(pos,{name="was:computer",param2=node.param2})
|
|
end
|
|
end,
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
minetest.registered_nodes["was:computer"].on_rightclick(pos, node, player, itemstack, pointed_thing)
|
|
end,
|
|
can_dig = function(pos, player)
|
|
return minetest.registered_nodes["was:computer"].can_dig(pos, player)
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("was:wire", {
|
|
description = "was wire",
|
|
tiles = {{name="was_wire.png"}},
|
|
inventory_image="was_wire_pre.png",
|
|
wield_image="was_wire_pre.png",
|
|
drop="was:wire",
|
|
drawtype="nodebox",
|
|
paramtype = "light",
|
|
paramtype2="colorwallmounted",
|
|
palette="was_palette.png",
|
|
sunlight_propagates=true,
|
|
walkable=false,
|
|
node_box = {
|
|
type = "connected",
|
|
connect_back={-0.05,-0.5,0, 0.05,-0.45,0.5},
|
|
connect_front={-0.05,-0.5,-0.5, 0.05,-0.45,0},
|
|
connect_left={-0.5,-0.5,-0.05, 0.05,-0.45,0.05},
|
|
connect_right={0,-0.5,-0.05, 0.5,-0.45,0.05},
|
|
connect_top = {-0.05, -0.5, -0.05, 0.05, 0.5, 0.05},
|
|
fixed = {-0.05, -0.5, -0.05, 0.05, -0.45, 0.05},
|
|
},
|
|
connects_to={"group:was_wire","group:was_unit"},
|
|
groups = {dig_immediate = 3,was_wire=1},
|
|
--on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
-- node.param2=node.param2+1
|
|
-- print(node.param2)
|
|
-- minetest.swap_node(pos,node)
|
|
--end,
|
|
after_place_node = function(pos, placer)
|
|
minetest.set_node(pos,{name="was:wire",param2=135})
|
|
end,
|
|
on_timer = function (pos, elapsed)
|
|
minetest.swap_node(pos,{name="was:wire",param2=135})
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("was:touchscreen", {
|
|
description = "Touchscreen (wireless)",
|
|
tiles = {"was_touchscreen.png"},
|
|
drawtype="nodebox",
|
|
paramtype = "light",
|
|
paramtype2="facedir",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.15, -0.25, 0.45, 0.15, 0.25, 0.5},
|
|
}
|
|
},
|
|
groups = {cracky = 3,was_unit=1},
|
|
after_place_node = function(pos, placer)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("owner",placer:get_player_name() or "")
|
|
meta:set_string("channel", pos.x .." " ..pos.y .." " ..pos.z)
|
|
end,
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
local name=player:get_player_name() or ""
|
|
if meta:get_string("owner")==name and not player:get_player_control().aux1 then
|
|
local gui="size[2.5,2.5]"
|
|
.."field[0,0.3;3,1;channel;Channel;" .. meta:get_string("channel") .."]"
|
|
.."field[0,1.3;3,1;channelto;Send to channel;" .. meta:get_string("channelto") .."]"
|
|
.."field[0,2.3;3,1;radius;Radius;" .. meta:get_int("radius") .."]"
|
|
was.user[name]=pos
|
|
minetest.after(0.1, function(gui,name)
|
|
return minetest.show_formspec(name, "was.channel",gui)
|
|
end, gui,name)
|
|
else
|
|
was.send(pos,meta:get_string("channelto"),name,meta:get_string("channel"))
|
|
end
|
|
end,
|
|
on_punch = function(pos, node, player, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
local name=player:get_player_name() or ""
|
|
was.send(pos,meta:get_string("channelto"),name,meta:get_string("channel"))
|
|
end,
|
|
on_waswire=function(pos,channel,from_channel,msg)
|
|
local meta=minetest.get_meta(pos)
|
|
local user=meta:get_string("owner")
|
|
if channel==meta:get_string("channel") and (was.is_string(msg) or was.is_number(msg)) then
|
|
meta:set_string("infotext",msg)
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("was:router", {
|
|
description = "Router",
|
|
tiles = {"was_wire.png"},
|
|
drawtype="nodebox",
|
|
paramtype = "light",
|
|
paramtype2="facedir",
|
|
node_box = {
|
|
type = "connected",
|
|
connect_back={-0.05,-0.5,0, 0.05,-0.45,0.5},
|
|
connect_front={-0.05,-0.5,-0.5, 0.05,-0.45,0},
|
|
connect_left={-0.5,-0.5,-0.05, 0.05,-0.45,0.05},
|
|
connect_right={0,-0.5,-0.05, 0.5,-0.45,0.05},
|
|
connect_top = {-0.05, -0.5, -0.05, 0.05, 0.5, 0.05},
|
|
fixed = {
|
|
{-0.37, -0.5, -0.25, 0.37, -0.37, 0.25},
|
|
{-0.37, -0.37, 0.18, -0.31, -0.125, 0.25},
|
|
{0.31, -0.5, 0.18, 0.37, -0.12, 0.25}
|
|
}
|
|
},
|
|
connects_to={"group:was_wire","group:was_unit"},
|
|
groups = {oddly_breakable_by_hand = 3,was_unit=1},
|
|
on_waswire=function(pos,channel,from_channel,msg)
|
|
local r = minetest.get_meta(pos):get_int("radius")
|
|
for _,p in pairs(minetest.find_nodes_in_area(vector.add(pos,r),vector.subtract(pos,r),"group:was_unit")) do
|
|
local na=was.get_node(p)
|
|
if na~="was:router" and minetest.get_item_group(na,"was_resender")==0 then
|
|
was.send(p,channel,msg,from_channel)
|
|
end
|
|
end
|
|
was.send(pos,channel,msg,from_channel)
|
|
end,
|
|
on_timer = function (pos, elapsed)
|
|
minetest.swap_node(pos,{name="was:wire",param2=135})
|
|
end,
|
|
after_place_node = function(pos, placer)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("owner",placer:get_player_name() or "")
|
|
end,
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
local name=player:get_player_name() or ""
|
|
if meta:get_string("owner")==name then
|
|
local gui="size[2.5,0.7]field[0,0.5;3,1;radius;Radius;" .. meta:get_int("radius") .."]"
|
|
was.user[name]=pos
|
|
minetest.after(0.1, function(gui,name)
|
|
return minetest.show_formspec(name, "was.channel",gui)
|
|
end, gui,name)
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("was:sender", {
|
|
description = "Wireless sender",
|
|
tiles = {{name="was_wire.png"}},
|
|
drop="was:sender",
|
|
drawtype="nodebox",
|
|
paramtype = "light",
|
|
palette="was_palette.png",
|
|
paramtype2="colorwallmounted",
|
|
node_box = {
|
|
type = "connected",
|
|
connect_back={-0.05,-0.5,0, 0.05,-0.45,0.5},
|
|
connect_front={-0.05,-0.5,-0.5, 0.05,-0.45,0},
|
|
connect_left={-0.5,-0.5,-0.05, 0.05,-0.45,0.05},
|
|
connect_right={0,-0.5,-0.05, 0.5,-0.45,0.05},
|
|
connect_top = {-0.05, -0.5, -0.05, 0.05, 0.5, 0.05},
|
|
fixed = {
|
|
{-0.25, -0.5, -0.25, 0.25, -0.3, 0.25},
|
|
}
|
|
},
|
|
connects_to={"group:was_wire","group:was_unit"},
|
|
groups = {oddly_breakable_by_hand = 3,was_wire=1},
|
|
on_waswire=function(pos,channel,from_channel,msg)
|
|
local r = minetest.get_meta(pos):get_int("radius")
|
|
for _,p in pairs(minetest.find_nodes_in_area(vector.add(pos,r),vector.subtract(pos,r),"was:receiver")) do
|
|
was.send(p,channel,msg,from_channel)
|
|
minetest.swap_node(p,{name="was:receiver",param2=3})
|
|
minetest.get_node_timer(p):start(0.1)
|
|
end
|
|
end,
|
|
on_timer = function (pos, elapsed)
|
|
minetest.swap_node(pos,{name="was:sender",param2=135})
|
|
end,
|
|
after_place_node = function(pos, placer)
|
|
minetest.set_node(pos,{name="was:sender",param2=135})
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("owner",placer:get_player_name() or "")
|
|
end,
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
local name=player:get_player_name() or ""
|
|
if meta:get_string("owner")==name then
|
|
local gui="size[2.5,0.7]field[0,0.5;3,1;radius;Radius;" .. meta:get_int("radius") .."]"
|
|
was.user[name]=pos
|
|
minetest.after(0.1, function(gui,name)
|
|
return minetest.show_formspec(name, "was.channel",gui)
|
|
end, gui,name)
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("was:receiver", {
|
|
description = "Wireless receiver",
|
|
tiles = {{name="was_wire.png"}},
|
|
drawtype="nodebox",
|
|
drop="was:receiver",
|
|
paramtype = "light",
|
|
palette="was_palette.png",
|
|
paramtype2="colorwallmounted",
|
|
node_box = {
|
|
type = "connected",
|
|
connect_back={-0.05,-0.5,0, 0.05,-0.45,0.5},
|
|
connect_front={-0.05,-0.5,-0.5, 0.05,-0.45,0},
|
|
connect_left={-0.5,-0.5,-0.05, 0.05,-0.45,0.05},
|
|
connect_right={0,-0.5,-0.05, 0.5,-0.45,0.05},
|
|
connect_top = {-0.05, -0.5, -0.05, 0.05, 0.5, 0.05},
|
|
fixed = {
|
|
{-0.25, -0.5, -0.25, 0.25, -0.3, 0.25},
|
|
{-0.02, -0.3, -0.02, 0.02, -0.1, 0.02},
|
|
}
|
|
},
|
|
connects_to={"group:was_wire","group:was_unit"},
|
|
groups = {oddly_breakable_by_hand = 3,was_wire=1},
|
|
on_timer = function (pos, elapsed)
|
|
minetest.swap_node(pos,{name="was:receiver",param2=135})
|
|
end,
|
|
after_place_node = function(pos, placer)
|
|
minetest.set_node(pos,{name="was:receiver",param2=135})
|
|
end,
|
|
})
|
|
|
|
if minetest.get_modpath("digilines") then
|
|
minetest.register_node("was:digiline_was_converter", {
|
|
description = "digiline/was converter",
|
|
tiles = {{name="was_wire.png"}},
|
|
drop="was:digiline_was_converter",
|
|
drawtype="nodebox",
|
|
paramtype = "light",
|
|
palette="was_palette.png",
|
|
paramtype2="colorwallmounted",
|
|
node_box = {
|
|
type = "connected",
|
|
connect_back={-0.05,-0.5,0, 0.05,-0.45,0.5},
|
|
connect_front={-0.05,-0.5,-0.5, 0.05,-0.45,0},
|
|
connect_left={-0.5,-0.5,-0.05, 0.05,-0.45,0.05},
|
|
connect_right={0,-0.5,-0.05, 0.5,-0.45,0.05},
|
|
connect_top = {-0.05, -0.5, -0.05, 0.05, 0.5, 0.05},
|
|
fixed = {
|
|
{-0.25, -0.5, -0.25, 0.25, -0.3, 0.25},
|
|
}
|
|
},
|
|
connects_to={"group:was_wire","group:was_unit","group:dig_immediate"},
|
|
groups = {oddly_breakable_by_hand = 3,was_wire=1},
|
|
on_timer = function (pos, elapsed)
|
|
minetest.swap_node(pos,{name="was:digiline_was_converter",param2=135})
|
|
end,
|
|
after_place_node = function(pos, placer)
|
|
minetest.set_node(pos,{name="was:digiline_was_converter",param2=135})
|
|
end,
|
|
on_waswire=function(pos,channel,from_channel,msg)
|
|
digilines.receptor_send(pos,digilines.rules.default,channel,msg)
|
|
end,
|
|
digiline = {
|
|
receptor={},
|
|
effector = {
|
|
action = function (pos,node,channel,msg)
|
|
was.send(pos,channel,msg)
|
|
end,
|
|
}
|
|
},
|
|
})
|
|
end
|
|
|
|
minetest.register_node("was:mdoid_gate", { --x+ 1 x- 3 z+ 0 z- 2
|
|
description = "Wire multy doidgate",
|
|
tiles = {"was_mdoidgate.png","was_wire.png","was_wire.png","was_wire.png","was_wire.png","was_wire.png"},
|
|
drawtype="nodebox",
|
|
paramtype = "light",
|
|
paramtype2="facedir",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, -0.4, 0.5},
|
|
}
|
|
},
|
|
groups = {oddly_breakable_by_hand = 3,was_unit=1,was_resender=1},
|
|
on_waswire=function(pos,channel,from_channel,msg)
|
|
local p=minetest.get_node(pos).param2
|
|
local np={x=pos.x,y=pos.y,z=pos.z}
|
|
if p==1 then
|
|
np.x=np.x+1
|
|
elseif p==3 then
|
|
np.x=np.x-1
|
|
elseif p==0 then
|
|
np.z=np.z+1
|
|
elseif p==2 then
|
|
np.z=np.z-1
|
|
end
|
|
if minetest.get_item_group(minetest.get_node(np).name,"was_wire")>0 and not vector.equals(pos,np) then
|
|
was.send(np,channel,msg,from_channel)
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("was:olgate",{
|
|
description = "On load gate (activated when loaded)",
|
|
tiles = {"was_wire.png"},
|
|
groups = {oddly_breakable_by_hand = 3,was_unit=1,was_lbm=1},
|
|
on_wasload=function(pos)
|
|
local meta = minetest.get_meta(pos)
|
|
was.send(pos,meta:get_string("channelto"),"loaded",meta:get_string("channel"))
|
|
end,
|
|
after_place_node = function(pos, placer)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("owner",placer:get_player_name() or "")
|
|
meta:set_string("channel", pos.x .." " ..pos.y .." " ..pos.z)
|
|
end,
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
local name=player:get_player_name() or ""
|
|
if meta:get_string("owner")==name and not player:get_player_control().aux1 then
|
|
local gui="size[2.5,2]"
|
|
.."field[0,0.3;3,1;channel;Channel;" .. meta:get_string("channel") .."]"
|
|
.."field[0,1.3;3,1;channelto;Send to channel;" .. meta:get_string("channelto") .."]"
|
|
was.user[name]=pos
|
|
minetest.after(0.1, function(gui,name)
|
|
return minetest.show_formspec(name, "was.channel",gui)
|
|
end, gui,name)
|
|
else
|
|
was.send(pos,meta:get_string("channelto"),name,meta:get_string("channel"))
|
|
end
|
|
end,
|
|
})
|
|
minetest.register_lbm({
|
|
name="was:lbm",
|
|
nodenames={"group:was_lbm"},
|
|
run_at_every_load=true,
|
|
action=function(pos,node)
|
|
minetest.registered_nodes[node.name].on_wasload(pos)
|
|
end
|
|
}) |