mirror of
https://github.com/sys4-fr/server-nalc.git
synced 2024-11-11 04:50:17 +01:00
Updated Mesecons and Pipeworks mods
- Updated pipeworks because of a bug related to vacuuming tubes, which has caused at least 5 crashs. - Updated mesecons too, because the mods are often used together.
This commit is contained in:
parent
6ddddb2017
commit
ef93a5ca8a
|
@ -6,18 +6,6 @@ function mesecon.move_node(pos, newpos)
|
||||||
minetest.get_meta(pos):from_table(meta)
|
minetest.get_meta(pos):from_table(meta)
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[ new functions:
|
|
||||||
mesecon.flattenrules(allrules)
|
|
||||||
mesecon.rule2bit(findrule, allrules)
|
|
||||||
mesecon.rule2meta(findrule, allrules)
|
|
||||||
dec2bin(n)
|
|
||||||
mesecon.getstate(nodename, states)
|
|
||||||
mesecon.getbinstate(nodename, states)
|
|
||||||
mesecon.get_bit(binary, bit)
|
|
||||||
mesecon.set_bit(binary, bit, value)
|
|
||||||
mesecon.invertRule(r)
|
|
||||||
--]]
|
|
||||||
|
|
||||||
function mesecon.flattenrules(allrules)
|
function mesecon.flattenrules(allrules)
|
||||||
--[[
|
--[[
|
||||||
{
|
{
|
||||||
|
@ -71,7 +59,6 @@ end
|
||||||
|
|
||||||
function mesecon.rule2metaindex(findrule, allrules)
|
function mesecon.rule2metaindex(findrule, allrules)
|
||||||
--get the metarule the rule is in, or allrules
|
--get the metarule the rule is in, or allrules
|
||||||
|
|
||||||
if allrules[1].x then
|
if allrules[1].x then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
@ -90,6 +77,8 @@ function mesecon.rule2metaindex(findrule, allrules)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.rule2meta(findrule, allrules)
|
function mesecon.rule2meta(findrule, allrules)
|
||||||
|
if #allrules == 0 then return {} end
|
||||||
|
|
||||||
local index = mesecon.rule2metaindex(findrule, allrules)
|
local index = mesecon.rule2metaindex(findrule, allrules)
|
||||||
if index == nil then
|
if index == nil then
|
||||||
if allrules[1].x then
|
if allrules[1].x then
|
||||||
|
@ -101,21 +90,12 @@ function mesecon.rule2meta(findrule, allrules)
|
||||||
return allrules[index]
|
return allrules[index]
|
||||||
end
|
end
|
||||||
|
|
||||||
if convert_base then
|
function mesecon.dec2bin(n)
|
||||||
print(
|
local x, y = math.floor(n / 2), n % 2
|
||||||
"base2dec is tonumber(num,base1)\n"..
|
if (n > 1) then
|
||||||
"commonlib needs dec2base(num,base2)\n"..
|
return mesecon.dec2bin(x)..y
|
||||||
"and it needs base2base(num,base1,base2),\n"..
|
else
|
||||||
"which is dec2base(tonumber(num,base1),base2)"
|
return ""..y
|
||||||
)
|
|
||||||
else
|
|
||||||
function dec2bin(n)
|
|
||||||
local x, y = math.floor(n / 2), n % 2
|
|
||||||
if (n > 1) then
|
|
||||||
return dec2bin(x)..y
|
|
||||||
else
|
|
||||||
return ""..y
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -129,7 +109,7 @@ function mesecon.getstate(nodename, states)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.getbinstate(nodename, states)
|
function mesecon.getbinstate(nodename, states)
|
||||||
return dec2bin(mesecon.getstate(nodename, states)-1)
|
return mesecon.dec2bin(mesecon.getstate(nodename, states)-1)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.get_bit(binary,bit)
|
function mesecon.get_bit(binary,bit)
|
||||||
|
@ -141,11 +121,11 @@ end
|
||||||
function mesecon.set_bit(binary,bit,value)
|
function mesecon.set_bit(binary,bit,value)
|
||||||
if value == "1" then
|
if value == "1" then
|
||||||
if not mesecon.get_bit(binary,bit) then
|
if not mesecon.get_bit(binary,bit) then
|
||||||
return dec2bin(tonumber(binary,2)+math.pow(2,bit-1))
|
return mesecon.dec2bin(tonumber(binary,2)+math.pow(2,bit-1))
|
||||||
end
|
end
|
||||||
elseif value == "0" then
|
elseif value == "0" then
|
||||||
if mesecon.get_bit(binary,bit) then
|
if mesecon.get_bit(binary,bit) then
|
||||||
return dec2bin(tonumber(binary,2)-math.pow(2,bit-1))
|
return mesecon.dec2bin(tonumber(binary,2)-math.pow(2,bit-1))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return binary
|
return binary
|
||||||
|
|
|
@ -78,7 +78,7 @@ function register_gate(name, inputnumber, assess, recipe)
|
||||||
},{
|
},{
|
||||||
tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_off.png^"..
|
tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_off.png^"..
|
||||||
"jeija_gate_"..name..".png"},
|
"jeija_gate_"..name..".png"},
|
||||||
groups = {dig_immediate = 2},
|
groups = {dig_immediate = 2, overheat = 1},
|
||||||
mesecons = { receptor = {
|
mesecons = { receptor = {
|
||||||
state = "off",
|
state = "off",
|
||||||
rules = gate_get_output_rules
|
rules = gate_get_output_rules
|
||||||
|
@ -89,7 +89,7 @@ function register_gate(name, inputnumber, assess, recipe)
|
||||||
},{
|
},{
|
||||||
tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_on.png^"..
|
tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_on.png^"..
|
||||||
"jeija_gate_"..name..".png"},
|
"jeija_gate_"..name..".png"},
|
||||||
groups = {dig_immediate = 2, not_in_creative_inventory = 1},
|
groups = {dig_immediate = 2, not_in_creative_inventory = 1, overheat = 1},
|
||||||
mesecons = { receptor = {
|
mesecons = { receptor = {
|
||||||
state = "on",
|
state = "on",
|
||||||
rules = gate_get_output_rules
|
rules = gate_get_output_rules
|
||||||
|
|
|
@ -559,7 +559,6 @@ for d = 0, 1 do
|
||||||
node_box = node_box,
|
node_box = node_box,
|
||||||
on_construct = reset_meta,
|
on_construct = reset_meta,
|
||||||
on_receive_fields = on_receive_fields,
|
on_receive_fields = on_receive_fields,
|
||||||
on_timer = handle_timer,
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
mesecons = mesecons,
|
mesecons = mesecons,
|
||||||
digiline = digiline,
|
digiline = digiline,
|
||||||
|
@ -600,7 +599,7 @@ minetest.register_node(BASENAME .. "_burnt", {
|
||||||
groups = {dig_immediate=2, not_in_creative_inventory=1},
|
groups = {dig_immediate=2, not_in_creative_inventory=1},
|
||||||
drop = BASENAME.."0000",
|
drop = BASENAME.."0000",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
selection_box = selectionbox,
|
selection_box = selection_box,
|
||||||
node_box = node_box,
|
node_box = node_box,
|
||||||
on_construct = reset_meta,
|
on_construct = reset_meta,
|
||||||
on_receive_fields = on_receive_fields,
|
on_receive_fields = on_receive_fields,
|
||||||
|
|
|
@ -22,18 +22,12 @@ pp_on_timer = function (pos, elapsed)
|
||||||
if objs[1] == nil and node.name == basename .. "_on" then
|
if objs[1] == nil and node.name == basename .. "_on" then
|
||||||
minetest.add_node(pos, {name = basename .. "_off"})
|
minetest.add_node(pos, {name = basename .. "_off"})
|
||||||
mesecon.receptor_off(pos, mesecon.rules.pplate)
|
mesecon.receptor_off(pos, mesecon.rules.pplate)
|
||||||
-- force deactivation of mesecon two blocks below (hacky)
|
|
||||||
if not mesecon.connected_to_receptor(two_below) then
|
|
||||||
mesecon.turnoff(two_below)
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
for k, obj in pairs(objs) do
|
for k, obj in pairs(objs) do
|
||||||
local objpos = obj:getpos()
|
local objpos = obj:getpos()
|
||||||
if objpos.y > pos.y-1 and objpos.y < pos.y then
|
if objpos.y > pos.y-1 and objpos.y < pos.y then
|
||||||
minetest.add_node(pos, {name = basename .. "_on"})
|
minetest.add_node(pos, {name = basename .. "_on"})
|
||||||
mesecon.receptor_on(pos, mesecon.rules.pplate )
|
mesecon.receptor_on(pos, mesecon.rules.pplate )
|
||||||
-- force activation of mesecon two blocks below (hacky)
|
|
||||||
mesecon.turnon(two_below)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -116,12 +116,12 @@ minetest.override_item("default:chest_locked", {
|
||||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, tubedevice_receiver = 1},
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, tubedevice_receiver = 1},
|
||||||
tube = {
|
tube = {
|
||||||
insert_object = function(pos, node, stack, direction)
|
insert_object = function(pos, node, stack, direction)
|
||||||
local meta = minetest.env:get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
return inv:add_item("main", stack)
|
return inv:add_item("main", stack)
|
||||||
end,
|
end,
|
||||||
can_insert = function(pos, node, stack, direction)
|
can_insert = function(pos, node, stack, direction)
|
||||||
local meta = minetest.env:get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
return inv:room_for_item("main", stack)
|
return inv:room_for_item("main", stack)
|
||||||
end,
|
end,
|
||||||
|
|
|
@ -317,10 +317,8 @@ if pipeworks.enable_mese_tube then
|
||||||
update_formspec(pos)
|
update_formspec(pos)
|
||||||
end,
|
end,
|
||||||
can_dig = function(pos, player)
|
can_dig = function(pos, player)
|
||||||
local meta = minetest.get_meta(pos)
|
update_formspec(pos) -- so non-virtual items would be dropped for old tubes
|
||||||
local inv = meta:get_inventory()
|
return true
|
||||||
return (inv:is_empty("line1") and inv:is_empty("line2") and inv:is_empty("line3") and
|
|
||||||
inv:is_empty("line4") and inv:is_empty("line5") and inv:is_empty("line6"))
|
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
update_formspec(pos) -- For old tubes
|
update_formspec(pos) -- For old tubes
|
||||||
|
@ -520,7 +518,7 @@ if pipeworks.enable_mese_sand_tube then
|
||||||
mese_sand_end_textures, mese_sand_short_texture,mese_sand_inv_texture,
|
mese_sand_end_textures, mese_sand_short_texture,mese_sand_inv_texture,
|
||||||
{groups = {mese_sand_tube = 1},
|
{groups = {mese_sand_tube = 1},
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local meta = minetest.env:get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_int("dist", 0)
|
meta:set_int("dist", 0)
|
||||||
meta:set_string("formspec",
|
meta:set_string("formspec",
|
||||||
"size[2,1]"..
|
"size[2,1]"..
|
||||||
|
@ -528,7 +526,7 @@ if pipeworks.enable_mese_sand_tube then
|
||||||
meta:set_string("infotext", "Adjustable Vacuuming Pneumatic Tube Segment")
|
meta:set_string("infotext", "Adjustable Vacuuming Pneumatic Tube Segment")
|
||||||
end,
|
end,
|
||||||
on_receive_fields = function(pos,formname,fields,sender)
|
on_receive_fields = function(pos,formname,fields,sender)
|
||||||
local meta = minetest.env:get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local dist
|
local dist
|
||||||
_, dist = pcall(tonumber, fields.dist)
|
_, dist = pcall(tonumber, fields.dist)
|
||||||
if dist and 0 <= dist and dist <= 8 then meta:set_int("dist", dist) end
|
if dist and 0 <= dist and dist <= 8 then meta:set_int("dist", dist) end
|
||||||
|
@ -538,7 +536,7 @@ if pipeworks.enable_mese_sand_tube then
|
||||||
local function get_objects_with_square_radius(pos, rad)
|
local function get_objects_with_square_radius(pos, rad)
|
||||||
rad = rad + .5;
|
rad = rad + .5;
|
||||||
local objs = {}
|
local objs = {}
|
||||||
for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, math.sqrt(3)*rad)) do
|
for _,object in ipairs(minetest.get_objects_inside_radius(pos, math.sqrt(3)*rad)) do
|
||||||
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
|
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
|
||||||
local opos = object:getpos()
|
local opos = object:getpos()
|
||||||
if pos.x - rad <= opos.x and opos.x <= pos.x + rad and pos.y - rad <= opos.y and opos.y <= pos.y + rad and pos.z - rad <= opos.z and opos.z <= pos.z + rad then
|
if pos.x - rad <= opos.x and opos.x <= pos.x + rad and pos.y - rad <= opos.y and opos.y <= pos.y + rad and pos.z - rad <= opos.z and opos.z <= pos.z + rad then
|
||||||
|
@ -553,7 +551,7 @@ if pipeworks.enable_mese_sand_tube then
|
||||||
interval = 1,
|
interval = 1,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
for _,object in ipairs(get_objects_with_square_radius(pos, minetest.env:get_meta(pos):get_int("dist"))) do
|
for _,object in ipairs(get_objects_with_square_radius(pos, minetest.get_meta(pos):get_int("dist"))) do
|
||||||
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
|
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
|
||||||
if object:get_luaentity().itemstring ~= "" then
|
if object:get_luaentity().itemstring ~= "" then
|
||||||
pipeworks.tube_inject_item(pos, pos, vector.new(0, 0, 0), object:get_luaentity().itemstring)
|
pipeworks.tube_inject_item(pos, pos, vector.new(0, 0, 0), object:get_luaentity().itemstring)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user