1
0
mirror of https://github.com/sys4-fr/server-nalc.git synced 2025-01-12 02:50:25 +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:
LeMagnesium 2015-01-04 13:52:47 +01:00
parent 6ddddb2017
commit ef93a5ca8a
6 changed files with 22 additions and 51 deletions

View File

@ -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,23 +90,14 @@ function mesecon.rule2meta(findrule, allrules)
return allrules[index] return allrules[index]
end end
if convert_base then function mesecon.dec2bin(n)
print(
"base2dec is tonumber(num,base1)\n"..
"commonlib needs dec2base(num,base2)\n"..
"and it needs base2base(num,base1,base2),\n"..
"which is dec2base(tonumber(num,base1),base2)"
)
else
function dec2bin(n)
local x, y = math.floor(n / 2), n % 2 local x, y = math.floor(n / 2), n % 2
if (n > 1) then if (n > 1) then
return dec2bin(x)..y return mesecon.dec2bin(x)..y
else else
return ""..y return ""..y
end end
end end
end
function mesecon.getstate(nodename, states) function mesecon.getstate(nodename, states)
for state, name in ipairs(states) do for state, name in ipairs(states) do
@ -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

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -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,

View File

@ -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)