Posted: Sat Feb 02, 2013 20:38
In which way I can add new machine to function check_LV_node_subp in battery box? I ask because I create new mod wich use energy from LV battery box.
The official Minetest discussion board
https://forum.minetest.net/
by now only manually by adding there your power receiver (or producer)1244 wrote:In which way I can add new machine to function check_LV_node_subp in battery box? I ask because I create new mod wich use energy from LV battery box.
Code: Select all
if minetest.env:get_node(pos1).name == "technic:mv_electric_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
if minetest.env:get_node(pos1).name == "technic:mv_electric_furnace_active" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
hehe, forgot to update this file ofc youre right, i will make register functionNore wrote:I tried to use the MV furnace, but it looks like it doesn't receive power from the MV cables, battery boxes and solar panels. Am I doing something wrong?
EDIT: found where the bug comes from: you should add the following at line 320 of battery_box_mv.lua:It could be even better if you used something in the node definition, so one could easily define new machines and power producers, and the code would be more simpler.Code: Select all
if minetest.env:get_node(pos1).name == "technic:mv_electric_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:mv_electric_furnace_active" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
Code: Select all
minetest.register_craft({
output = 'pipeworks:accelerator_tube_000000',
recipe = {
{'technic:copper_coil', 'pipeworks:tube_000000', 'technic:copper_coil'},
}
})
minetest.register_craft({
output = 'pipeworks:detector_tube_off_000000',
recipe = {
{'mesecons:mesecon', 'pipeworks:tube_000000', 'mesecons:mesecon'},
}
})
minetest.register_craft({
output = 'pipeworks:sand_tube_000000',
recipe = {
{'default:sand', 'pipeworks:tube_000000', 'default:sand'},
}
})
minetest.register_craft({
output = 'pipeworks:teleport_tube_000000',
recipe = {
{'default:mese_crystal', 'default:desert_stone', 'default:mese_crystal'},
{'default:desert_stone', 'pipeworks:tube_000000', 'default:desert_stone'},
{'default:mese_crystal', 'default:desert_stone', 'default:mese_crystal'},
}
})
Recipes added, with some changes to teleport tube.Nore wrote:Suggestion for tube crafting recipes:
Code: Select all
minetest.register_craft({ output = 'pipeworks:accelerator_tube_000000', recipe = { {'technic:copper_coil', 'pipeworks:tube_000000', 'technic:copper_coil'}, } }) minetest.register_craft({ output = 'pipeworks:detector_tube_off_000000', recipe = { {'mesecons:mesecon', 'pipeworks:tube_000000', 'mesecons:mesecon'}, } }) minetest.register_craft({ output = 'pipeworks:sand_tube_000000', recipe = { {'default:sand', 'pipeworks:tube_000000', 'default:sand'}, } }) minetest.register_craft({ output = 'pipeworks:teleport_tube_000000', recipe = { {'default:mese_crystal', 'default:desert_stone', 'default:mese_crystal'}, {'default:desert_stone', 'pipeworks:tube_000000', 'default:desert_stone'}, {'default:mese_crystal', 'default:desert_stone', 'default:mese_crystal'}, } })
Implemented.1244 wrote:In which way I can add new machine to function check_LV_node_subp in battery box? I ask because I create new mod wich use energy from LV battery box.
18:57:40: VERBOSE[main]: error_message = ServerError: LuaError: error: ...n\..\mods\minetest\technic\unified_inventory/api.lua:465: bad argument #1 to 'lower' (string expected, got table)
Code: Select all
function get_face(pos,ppos,pvect)
ppos={x=ppos.x-pos.x,y=ppos.y-pos.y+1.5,z=ppos.z-pos.z}
if pvect.x>0 then
local t=(-0.5-ppos.x)/pvect.x
local y_int=ppos.y+t*pvect.y
local z_int=ppos.z+t*pvect.z
if y_int>-0.4 and y_int<0.4 and z_int>-0.4 and z_int<0.4 then return 1 end
elseif pvect.x<0 then
local t=(0.5-ppos.x)/pvect.x
local y_int=ppos.y+t*pvect.y
local z_int=ppos.z+t*pvect.z
if y_int>-0.4 and y_int<0.4 and z_int>-0.4 and z_int<0.4 then return 2 end
end
if pvect.y>0 then
local t=(-0.5-ppos.y)/pvect.y
local x_int=ppos.x+t*pvect.x
local z_int=ppos.z+t*pvect.z
if x_int>-0.4 and x_int<0.4 and z_int>-0.4 and z_int<0.4 then return 3 end
elseif pvect.y<0 then
local t=(0.5-ppos.y)/pvect.y
local x_int=ppos.x+t*pvect.x
local z_int=ppos.z+t*pvect.z
if x_int>-0.4 and x_int<0.4 and z_int>-0.4 and z_int<0.4 then return 4 end
end
if pvect.z>0 then
local t=(-0.5-ppos.z)/pvect.z
local x_int=ppos.x+t*pvect.x
local y_int=ppos.y+t*pvect.y
if x_int>-0.4 and x_int<0.4 and y_int>-0.4 and y_int<0.4 then return 5 end
elseif pvect.z<0 then
local t=(0.5-ppos.z)/pvect.z
local x_int=ppos.x+t*pvect.x
local y_int=ppos.y+t*pvect.y
if x_int>-0.4 and x_int<0.4 and y_int>-0.4 and y_int<0.4 then return 6 end
end
end
for xm=0,1 do
for xp=0,1 do
for ym=0,1 do
for yp=0,1 do
for zm=0,1 do
for zp=0,1 do
local outimgs = {}
if yp==1 then
table.insert(outimgs, "technic_lv_cable.png")
else
table.insert(outimgs, "default_stone.png")
end
if ym==1 then
table.insert(outimgs, "technic_lv_cable.png")
else
table.insert(outimgs, "default_stone.png")
end
if xp==1 then
table.insert(outimgs, "technic_lv_cable.png")
else
table.insert(outimgs, "default_stone.png")
end
if xm==1 then
table.insert(outimgs, "technic_lv_cable.png")
else
table.insert(outimgs, "default_stone.png")
end
if zp==1 then
table.insert(outimgs, "technic_lv_cable.png")
else
table.insert(outimgs, "default_stone.png")
end
if zm==1 then
table.insert(outimgs, "technic_lv_cable.png")
else
table.insert(outimgs, "default_stone.png")
end
local nameext=tostring(xm)..tostring(xp)..tostring(ym)..tostring(yp)..tostring(zm)..tostring(zp)
local groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}
if nameext~="111111" then groups.not_in_creative_inventory=1 end
minetest.register_node("technic:frame_"..nameext,{
description = "Frame",
tiles = outimgs,
groups=groups,
frame=1,
drop="technic:frame_111111",
frame_connect_all=function(pos)
local nodename=minetest.env:get_node(pos).name
l2={}
l1={{x=-1,y=0,z=0},{x=1,y=0,z=0},{x=0,y=-1,z=0},{x=0,y=1,z=0},{x=0,y=0,z=-1},{x=0,y=0,z=1}}
for i,dir in ipairs(l1) do
if string.sub(nodename,-7+i,-7+i)=="1" then
l2[#(l2)+1]=dir
end
end
return l2
end,
on_punch=function(pos,node,puncher)
local ppos=puncher:getpos()
local pvect=puncher:get_look_dir()
local pface=get_face(pos,ppos,pvect)
if pface==nil then return end
local nodename=node.name
local newstate=tostring(1-tonumber(string.sub(nodename,-7+pface,-7+pface)))
if pface<=5 then
nodename=string.sub(nodename,1,-7+pface-1)..newstate..string.sub(nodename,-7+pface+1)
else
nodename=string.sub(nodename,1,-2)..newstate
end
node.name=nodename
minetest.env:set_node(pos,node)
end
})
end
end
end
end
end
end
function frame_motor1_on(pos,node)
local npos={x=pos.x,y=pos.y+1,z=pos.z}
local nnode=minetest.env:get_node(npos)
if node.param2==0 then
dir={x=1,y=0,z=0}
elseif node.param2==1 then
dir={x=0,y=0,z=-1}
elseif node.param2==2 then
dir={x=-1,y=0,z=0}
else
dir={x=0,y=0,z=1}
end
if minetest.registered_nodes[nnode.name].frame==1 then
local connected_nodes=get_connected_nodes(npos)
move_nodes_vect(connected_nodes,dir)
end
end
function frame_motor2_on(pos,node)
local npos={x=pos.x,y=pos.y-1,z=pos.z}
local nnode=minetest.env:get_node(npos)
if node.param2==0 then
dir={x=1,y=0,z=0}
elseif node.param2==1 then
dir={x=0,y=0,z=-1}
elseif node.param2==2 then
dir={x=-1,y=0,z=0}
else
dir={x=0,y=0,z=1}
end
if minetest.registered_nodes[nnode.name].frame==1 then
local connected_nodes=get_connected_nodes(npos)
move_nodes_vect(connected_nodes,dir)
end
end
function frame_motor3_on(pos,node)
local npos={x=pos.x,y=pos.y,z=pos.z}
if node.param2==0 then
dir={x=1,y=0,z=0}
npos.z=npos.z-1
elseif node.param2==1 then
dir={x=0,y=0,z=-1}
npos.x=npos.x-1
elseif node.param2==2 then
dir={x=-1,y=0,z=0}
npos.z=npos.z+1
else
dir={x=0,y=0,z=1}
npos.x=npos.x+1
end
local nnode=minetest.env:get_node(npos)
if minetest.registered_nodes[nnode.name].frame==1 then
local connected_nodes=get_connected_nodes(npos)
move_nodes_vect(connected_nodes,dir)
end
end
function frame_motor4_on(pos,node)
local npos={x=pos.x,y=pos.y,z=pos.z}
if node.param2==0 then
dir={x=-1,y=0,z=0}
npos.z=npos.z-1
elseif node.param2==1 then
dir={x=0,y=0,z=1}
npos.x=npos.x-1
elseif node.param2==2 then
dir={x=1,y=0,z=0}
npos.z=npos.z+1
else
dir={x=0,y=0,z=-1}
npos.x=npos.x+1
end
local nnode=minetest.env:get_node(npos)
if minetest.registered_nodes[nnode.name].frame==1 then
local connected_nodes=get_connected_nodes(npos)
move_nodes_vect(connected_nodes,dir)
end
end
function frame_motor5_on(pos,node)
local npos={x=pos.x,y=pos.y,z=pos.z}
if node.param2==0 then
npos.z=npos.z-1
elseif node.param2==1 then
npos.x=npos.x-1
elseif node.param2==2 then
npos.z=npos.z+1
else
npos.x=npos.x+1
end
dir={x=0,y=1,z=0}
local nnode=minetest.env:get_node(npos)
if minetest.registered_nodes[nnode.name].frame==1 then
local connected_nodes=get_connected_nodes(npos)
move_nodes_vect(connected_nodes,dir)
end
end
function frame_motor6_on(pos,node)
local npos={x=pos.x,y=pos.y,z=pos.z}
if node.param2==0 then
npos.z=npos.z-1
elseif node.param2==1 then
npos.x=npos.x-1
elseif node.param2==2 then
npos.z=npos.z+1
else
npos.x=npos.x+1
end
dir={x=0,y=-1,z=0}
local nnode=minetest.env:get_node(npos)
if minetest.registered_nodes[nnode.name].frame==1 then
local connected_nodes=get_connected_nodes(npos)
move_nodes_vect(connected_nodes,dir)
end
end
minetest.register_node("technic:frame_motor1",{
description = "Frame motor 1",
tiles = {"pipeworks_filter_top.png", "technic_lv_cable.png", "technic_lv_cable.png",
"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"},
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
paramtype2 = "facedir",
mesecons={effector={action_on=frame_motor1_on}},
frames_can_connect=function(pos,dir)
return dir.y~=-1
end
})
minetest.register_node("technic:frame_motor2",{
description = "Frame motor 2",
tiles = {"technic_lv_cable.png", "pipeworks_filter_top.png", "technic_lv_cable.png",
"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"},
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
paramtype2 = "facedir",
mesecons={effector={action_on=frame_motor2_on}},
frames_can_connect=function(pos,dir)
return dir.y~=1
end
})
minetest.register_node("technic:frame_motor3",{
description = "Frame motor 3",
tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
"technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png"},
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
paramtype2 = "facedir",
mesecons={effector={action_on=frame_motor3_on}},
frames_can_connect=function(pos,dir)
local node=minetest.env:get_node(pos)
if node.param2==0 then return dir.z~=1
elseif node.param2==1 then return dir.x~=1
elseif node.param2==2 then return dir.z~=-1
else return dir.x~=-1 end
end
})
minetest.register_node("technic:frame_motor4",{
description = "Frame motor 4",
tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
"technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png"},
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
paramtype2 = "facedir",
mesecons={effector={action_on=frame_motor4_on}},
frames_can_connect=function(pos,dir)
local node=minetest.env:get_node(pos)
if node.param2==0 then return dir.z~=1
elseif node.param2==1 then return dir.x~=1
elseif node.param2==2 then return dir.z~=-1
else return dir.x~=-1 end
end
})
minetest.register_node("technic:frame_motor5",{
description = "Frame motor 5",
tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
"technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png"},
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
paramtype2 = "facedir",
mesecons={effector={action_on=frame_motor5_on}},
frames_can_connect=function(pos,dir)
local node=minetest.env:get_node(pos)
if node.param2==0 then return dir.z~=1
elseif node.param2==1 then return dir.x~=1
elseif node.param2==2 then return dir.z~=-1
else return dir.x~=-1 end
end
})
minetest.register_node("technic:frame_motor6",{
description = "Frame motor 6",
tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
"technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png"},
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
paramtype2 = "facedir",
mesecons={effector={action_on=frame_motor6_on}},
frames_can_connect=function(pos,dir)
local node=minetest.env:get_node(pos)
if node.param2==0 then return dir.z~=1
elseif node.param2==1 then return dir.x~=1
elseif node.param2==2 then return dir.z~=-1
else return dir.x~=-1 end
end
})
function move_nodes_vect(poslist,vect)
for _,pos in ipairs(poslist) do
local npos=addVect(pos,vect)
if minetest.env:get_node(npos).name~="air" and not(pos_in_list(poslist,npos)) then return end
end
nodelist={}
for _,pos in ipairs(poslist) do
local node=minetest.env:get_node(pos)
local meta=minetest.env:get_meta(pos):to_table()
nodelist[#(nodelist)+1]={pos=pos,node=node,meta=meta}
minetest.env:remove_node(pos)
end
for _,n in ipairs(nodelist) do
local npos=addVect(n.pos,vect)
minetest.env:set_node(npos,n.node)
local meta=minetest.env:get_meta(npos)
meta:from_table(n.meta)
end
end
function get_connected_nodes(pos)
c={pos}
local nodename=minetest.env:get_node(pos).name
connected(pos,c,minetest.registered_nodes[nodename].frame_connect_all(pos))
return c
end
function addVect(pos,vect)
return {x=pos.x+vect.x,y=pos.y+vect.y,z=pos.z+vect.z}
end
function pos_in_list(l,pos)
for _,p in ipairs(l) do
if p.x==pos.x and p.y==pos.y and p.z==pos.z then return true end
end
return false
end
function connected(pos,c,adj)
for _,vect in ipairs(adj) do
local pos1=addVect(pos,vect)
local nodename=minetest.env:get_node(pos1).name
if not(pos_in_list(c,pos1)) and nodename~="air" and
(minetest.registered_nodes[nodename].frames_can_connect==nil or
minetest.registered_nodes[nodename].frames_can_connect(pos1,vect)) then
c[#(c)+1]=pos1
if minetest.registered_nodes[nodename].frame==1 then
local adj=minetest.registered_nodes[nodename].frame_connect_all(pos1)
connected(pos1,c,adj)
end
end
end
end
Yikes! im testin it right nowNore wrote:Try to upgrade to latest stairplus.
Also, I have a more or less working frame code:
Please delete folder "creative" from minetest_gameInocudom wrote:In creative mode in the latest xyz build of 0.4.4, unified_inventory's inventory menu disappears and never comes back. Instead, I end up having to use the default creative menu.
im workin on the motor right nowNore wrote:Thanks. Could you make better textures for the frame motor? Moreover, have you got a way to rotate a frame motor without using 6 different nodes?
Code: Select all
ERROR[EmergeThread]: ERROR: An unhandled exception occurred: LuaError: error: ...n\..\mods\minetest\technic-master\technic/rubber.lua:111: attempt to call method 'spawn_tree' (a nil value)
Sorry but i cannot see anythin on this screenshot.BZab wrote:1. Am I alone? im using latest technic, but MV wires, vertical are 'invisible'... isnt missing texture?
PS how to use frames and f. motors? (I think they arent just decorative)