distri 1:1 mode changed, drill pipe wrench added, ta4_chest modes enhanced, further improvements

This commit is contained in:
Joachim Stolberg 2020-04-13 13:20:38 +02:00
parent f3d8002832
commit ea4765ce46
30 changed files with 243 additions and 91 deletions

View File

@ -338,15 +338,15 @@ local tubing = {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then if meta:get_int("pull_dir") == in_dir then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.get_items(inv, "dst", num) return techage.get_items(pos, inv, "dst", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack, idx)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("push_dir") == in_dir or in_dir == 5 then if meta:get_int("push_dir") == in_dir or in_dir == 5 then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
CRD(pos).State:start_if_standby(pos) CRD(pos).State:start_if_standby(pos)
return techage.put_items(inv, "src", stack) return techage.put_items(inv, "src", stack, idx)
end end
end, end,
on_unpull_item = function(pos, in_dir, stack) on_unpull_item = function(pos, in_dir, stack)

View File

@ -208,7 +208,7 @@ techage.register_node({"techage:chest_ta2", "techage:chest_ta3", "techage:chest_
return taken return taken
end end
else else
return techage.get_items(inv, "main", num) return techage.get_items(pos, inv, "main", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)

View File

@ -42,6 +42,7 @@ local function filter_settings(pos)
local ItemFilter = {} -- {<item:name> = {dir,...}] local ItemFilter = {} -- {<item:name> = {dir,...}]
local OpenPorts = {} -- {dir, ...} local OpenPorts = {} -- {dir, ...}
local FilterItems = {} -- {<item:name>, <item:name>, ...} for sequencing only local FilterItems = {} -- {<item:name>, <item:name>, ...} for sequencing only
local FilterItemIdx = {} -- {<item:name> = <slot-idx>, <item:name> = <slot-idx>, ...} for sequencing only
-- collect all filter settings -- collect all filter settings
for idx,slot in ipairs(SlotColors) do for idx,slot in ipairs(SlotColors) do
if filter[idx] == true then if filter[idx] == true then
@ -50,7 +51,7 @@ local function filter_settings(pos)
if inv:is_empty(slot) then if inv:is_empty(slot) then
table.insert(OpenPorts, out_dir) table.insert(OpenPorts, out_dir)
else else
for _,stack in ipairs(inv:get_list(slot)) do for idx2,stack in ipairs(inv:get_list(slot)) do
local name = stack:get_name() local name = stack:get_name()
if name ~= "" then if name ~= "" then
if not ItemFilter[name] then if not ItemFilter[name] then
@ -58,6 +59,7 @@ local function filter_settings(pos)
end end
table.insert(ItemFilter[name], out_dir) table.insert(ItemFilter[name], out_dir)
table.insert(FilterItems, name) table.insert(FilterItems, name)
FilterItemIdx[name] = idx2
end end
end end
end end
@ -68,6 +70,7 @@ local function filter_settings(pos)
ItemFilter = ItemFilter, ItemFilter = ItemFilter,
OpenPorts = OpenPorts, OpenPorts = OpenPorts,
FilterItems = FilterItems, FilterItems = FilterItems,
FilterItemIdx = FilterItemIdx,
} }
end end
@ -89,8 +92,19 @@ local function get_filter_settings(pos)
return FilterCache[hash].ItemFilter, FilterCache[hash].OpenPorts, FilterCache[hash].FilterItems return FilterCache[hash].ItemFilter, FilterCache[hash].OpenPorts, FilterCache[hash].FilterItems
end end
local function get_slot_index(pos, name)
local hash = minetest.hash_node_position(pos)
if FilterCache[hash] == nil then
filter_settings(pos)
end
return FilterCache[hash].FilterItemIdx[name]
end
local function order_checkbox(pos, filter) local function order_checkbox(pos, filter)
local cnt = 0 local cnt = 0
if CRD(pos).stage == 2 then return "" end
for _,val in ipairs(filter) do for _,val in ipairs(filter) do
if val then cnt = cnt + 1 end if val then cnt = cnt + 1 end
end end
@ -288,7 +302,7 @@ local function sequencing(pos, inv, crd, nvm)
if not inv:contains_item("src", stack) then if not inv:contains_item("src", stack) then
break break
end end
if not techage.push_items(pos, push_dir, stack) then if not techage.push_items(pos, push_dir, stack, offs) then
blocked = true blocked = true
break break
end end
@ -342,7 +356,7 @@ local function on_receive_fields(pos, formname, fields, player)
filter[3] = fields.filter3 == "true" filter[3] = fields.filter3 == "true"
elseif fields.filter4 ~= nil then elseif fields.filter4 ~= nil then
filter[4] = fields.filter4 == "true" filter[4] = fields.filter4 == "true"
elseif fields.order ~= nil then elseif fields.order ~= nil and CRD(pos).stage > 2 then
meta:set_int("order", fields.order == "true" and 1 or 0) meta:set_int("order", fields.order == "true" and 1 or 0)
local nvm = techage.get_nvm(pos) local nvm = techage.get_nvm(pos)
nvm.last_index = 1 -- start from the beginning nvm.last_index = 1 -- start from the beginning
@ -418,19 +432,37 @@ tiles.act = {
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_distri_blue.png", "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_distri_blue.png",
} }
local function put_items(pos, item)
local order = M(pos):get_int("order") == 1
local inv = M(pos):get_inventory()
if order then
local name = item:get_name()
local idx = get_slot_index(pos, name)
if idx then
local stack = inv:get_stack("src", idx)
if stack:item_fits(item) then
stack:add_item(item)
inv:set_stack("src", idx, stack)
return true
end
end
return false
else
return techage.put_items(inv, "src", item)
end
end
local tubing = { local tubing = {
on_pull_item = function(pos, in_dir, num) on_pull_item = function(pos, in_dir, num)
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.get_items(inv, "src", num) return techage.get_items(pos, inv, "src", num)
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)
local inv = M(pos):get_inventory()
CRD(pos).State:start_if_standby(pos) CRD(pos).State:start_if_standby(pos)
return techage.put_items(inv, "src", stack) return put_items(pos, stack)
end, end,
on_unpull_item = function(pos, in_dir, stack) on_unpull_item = function(pos, in_dir, stack)
local inv = M(pos):get_inventory() return put_items(pos, stack)
return techage.put_items(inv, "src", stack)
end, end,
on_recv_message = function(pos, src, topic, payload) on_recv_message = function(pos, src, topic, payload)
if topic == "info" then if topic == "info" then

View File

@ -175,15 +175,15 @@ local tubing = {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then if meta:get_int("pull_dir") == in_dir then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.get_items(inv, "dst", num) return techage.get_items(pos, inv, "dst", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack, idx)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("push_dir") == in_dir or in_dir == 5 then if meta:get_int("push_dir") == in_dir or in_dir == 5 then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
CRD(pos).State:start_if_standby(pos) CRD(pos).State:start_if_standby(pos)
return techage.put_items(inv, "src", stack) return techage.put_items(inv, "src", stack, idx)
end end
end, end,
on_unpull_item = function(pos, in_dir, stack) on_unpull_item = function(pos, in_dir, stack)

View File

@ -219,7 +219,7 @@ local tubing = {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then if meta:get_int("pull_dir") == in_dir then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.get_items(inv, "dst", num) return techage.get_items(pos, inv, "dst", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)

View File

@ -152,7 +152,7 @@ local tubing = {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then if meta:get_int("pull_dir") == in_dir then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.get_items(inv, "dst", num) return techage.get_items(pos, inv, "dst", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)

View File

@ -165,7 +165,7 @@ local tubing = {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then if meta:get_int("pull_dir") == in_dir then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.get_items(inv, "dst", num) return techage.get_items(pos, inv, "dst", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)

View File

@ -35,7 +35,7 @@ techage.register_node({"default:chest", "default:chest_open"}, {
on_pull_item = function(pos, in_dir, num) on_pull_item = function(pos, in_dir, num)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
return techage.get_items(inv, "main", num) return techage.get_items(pos, inv, "main", num)
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
@ -54,7 +54,7 @@ techage.register_node({"default:chest_locked", "default:chest_locked_open"}, {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if is_owner(pos, meta) then if is_owner(pos, meta) then
local inv = meta:get_inventory() local inv = meta:get_inventory()
return techage.get_items(inv, "main", num) return techage.get_items(pos, inv, "main", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)
@ -73,7 +73,7 @@ techage.register_node({"default:furnace", "default:furnace_active"}, {
on_pull_item = function(pos, in_dir, num) on_pull_item = function(pos, in_dir, num)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
return techage.get_items(inv, "dst", num) return techage.get_items(pos, inv, "dst", num)
end, end,
on_push_item = function(pos, side, stack) on_push_item = function(pos, side, stack)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)

View File

@ -153,7 +153,7 @@ local tubing = {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then if meta:get_int("pull_dir") == in_dir then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.get_items(inv, "dst", num) return techage.get_items(pos, inv, "dst", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)

View File

@ -29,7 +29,7 @@ local S = techage.S
-- Consumer Related Data -- Consumer Related Data
local CRD = function(pos) return (minetest.registered_nodes[techage.get_node_lvm(pos).name] or {}).consumer end local CRD = function(pos) return (minetest.registered_nodes[techage.get_node_lvm(pos).name] or {}).consumer end
local STANDBY_TICKS = 3 local STANDBY_TICKS = 2
local COUNTDOWN_TICKS = 4 local COUNTDOWN_TICKS = 4
local CYCLE_TIME = 2 local CYCLE_TIME = 2

View File

@ -329,7 +329,7 @@ local tubing = {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then if meta:get_int("pull_dir") == in_dir then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.get_items(inv, "main", num) return techage.get_items(pos, inv, "main", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)

View File

@ -112,8 +112,22 @@ local function sort_in(pos, inv, nvm, stack)
return false return false
end end
local function get_item(inv, nvm, item_name, count) local function move_items_to_stack(item, stack, num)
item.count = item.count - num
stack.count = stack.count + num
if stack.count > 0 then
stack.name = item.name
end
if item.count == 0 then
item.name = "" -- empty
end
return stack
end
local function get_item(pos, inv, nvm, item_name, count)
local stack = {count = 0} local stack = {count = 0}
nvm.inventory = nvm.inventory or {}
if not inv:is_empty("main") then if not inv:is_empty("main") then
if item_name then if item_name then
local taken = inv:remove_item("main", {name = item_name, count = count}) local taken = inv:remove_item("main", {name = item_name, count = count})
@ -121,25 +135,48 @@ local function get_item(inv, nvm, item_name, count)
return taken return taken
end end
else else
return techage.get_items(inv, "main", count) return techage.get_items(pos, inv, "main", count)
end end
end end
for _,item in ipairs(nvm.inventory or {}) do
if (item_name == nil and stack.name == nil) or item.name == item_name then if item_name then
-- Take specified items from the chest
for _,item in ipairs(nvm.inventory) do
if item.name == item_name then
local num = math.min(item.count, count - stack.count, max_stacksize(item.name)) local num = math.min(item.count, count - stack.count, max_stacksize(item.name))
item.count = item.count - num if M(pos):get_int("assignment") == 1 and num == item.count then
stack.count = stack.count + num -- never take the last item
if item.name ~= "" then num = num - 1
stack.name = item.name
end
if item.count == 0 then
item.name = "" -- empty
end end
stack = move_items_to_stack(item, stack, num)
if stack.count == count then if stack.count == count then
return ItemStack(stack) return ItemStack(stack)
end end
end end
end end
else
-- Take any items. The position within the inventory
-- is incremented each time so that different item stacks will be considered.
local mem = techage.get_mem(pos)
mem.startpos = mem.startpos or 1
for idx = mem.startpos, mem.startpos + 8 do
idx = (idx % 8) + 1
local item = nvm.inventory[idx]
if item.name ~= "" and (stack.name == nil or stack.name == item.name) then
local num = math.min(item.count, count - stack.count, max_stacksize(item.name))
if M(pos):get_int("assignment") == 1 and num == item.count then
-- never take the last item
num = num - 1
end
stack = move_items_to_stack(item, stack, num)
if stack.count == count then
mem.startpos = idx
return ItemStack(stack)
end
end
mem.startpos = idx
end
end
if stack.count > 0 then if stack.count > 0 then
return ItemStack(stack) return ItemStack(stack)
end end
@ -171,13 +208,18 @@ local function formspec(pos)
local nvm = techage.get_nvm(pos) local nvm = techage.get_nvm(pos)
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
local size = get_stacksize(pos) local size = get_stacksize(pos)
return "size[8,7.6]".. local assignment = M(pos):get_int("assignment") == 1 and "true" or "false"
return "size[8,8]"..
default.gui_bg.. default.gui_bg..
default.gui_bg_img.. default.gui_bg_img..
default.gui_slots.. default.gui_slots..
"label[0,-0.2;"..S("Size")..": 8x"..size.."]".. formspec_container(0, 0, nvm, inv)..
formspec_container(0, 0.4, nvm, inv).. "button[1,3;2,1;unlock;"..S("Unlock").."]"..
"list[current_player;main;0,3.9;8,4;]".. "tooltip[1,3;2,1;"..S("Unlock connected chest\nif all slots are below 2000")..";#0C3D32;#FFFFFF]"..
"label[4,3;"..S("Size")..": 8x"..size.."]"..
"checkbox[4,3.3;assignment;"..S("keep assignment")..";"..assignment.."]"..
"tooltip[4,3.5;2,0.6;"..S("Never completely empty the slots\nwith the pusher to keep the items assignment")..";#0C3D32;#FFFFFF]"..
"list[current_player;main;0,4.3;8,4;]"..
"listring[context;main]".. "listring[context;main]"..
"listring[current_player;main]" "listring[current_player;main]"
end end
@ -221,13 +263,32 @@ local function convert_to_chest_again(pos, node, player)
local dir = techage.side_to_outdir("B", node.param2) local dir = techage.side_to_outdir("B", node.param2)
local pos1 = tubelib2.get_pos(pos, dir) local pos1 = tubelib2.get_pos(pos, dir)
local node1 = techage.get_node_lvm(pos1) local node1 = techage.get_node_lvm(pos1)
if minetest.is_protected(pos1, player:get_player_name()) then
return
end
if node1.name == "techage:ta4_chest_dummy" then if node1.name == "techage:ta4_chest_dummy" then
node1.name = "techage:ta4_chest" node1.name = "techage:ta4_chest"
minetest.swap_node(pos1, node1) minetest.swap_node(pos1, node1)
M(pos1):set_int("disabled", 1) --M(pos1):set_int("disabled", 1)
local nvm = techage.get_nvm(pos1)
gen_inv(nvm)
local number = techage.add_node(pos1, "techage:ta4_chest")
M(pos1):set_string("owner", player:get_player_name())
M(pos1):set_string("formspec", formspec(pos1))
M(pos1):set_string("infotext", DESCRIPTION.." "..number)
end end
end end
local function unlock_chests(pos, player)
local nvm = techage.get_nvm(pos)
for idx = 1,8 do
if get_count(nvm, idx) > STACK_SIZE then return end
end
local node = techage.get_node_lvm(pos)
convert_to_chest_again(pos, node, player)
M(pos):set_int("stacksize", STACK_SIZE)
end
local function allow_metadata_inventory_put(pos, listname, index, stack, player) local function allow_metadata_inventory_put(pos, listname, index, stack, player)
if minetest.is_protected(pos, player:get_player_name()) then if minetest.is_protected(pos, player:get_player_name()) then
return 0 return 0
@ -320,6 +381,12 @@ local function on_receive_fields(pos, formname, fields, player)
break break
end end
end end
if fields.unlock then
unlock_chests(pos, player)
end
if fields.assignment then
M(pos):set_int("assignment", fields.assignment == "true" and 1 or 0)
end
M(pos):set_string("formspec", formspec(pos)) M(pos):set_string("formspec", formspec(pos))
end end
@ -385,7 +452,7 @@ minetest.register_node("techage:ta4_chest", {
on_metadata_inventory_take = on_metadata_inventory_take, on_metadata_inventory_take = on_metadata_inventory_take,
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {choppy=2, cracky=2, crumbly=2, not_in_creative_inventory = 1}, groups = {choppy=2, cracky=2, crumbly=2},
is_ground_content = false, is_ground_content = false,
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),
}) })
@ -416,7 +483,7 @@ techage.register_node({"techage:ta4_chest"}, {
on_pull_item = function(pos, in_dir, num, item_name) on_pull_item = function(pos, in_dir, num, item_name)
local nvm = techage.get_nvm(pos) local nvm = techage.get_nvm(pos)
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
local res = get_item(inv, nvm, item_name, num) local res = get_item(pos, inv, nvm, item_name, num)
if techage.is_activeformspec(pos) then if techage.is_activeformspec(pos) then
M(pos):set_string("formspec", formspec(pos)) M(pos):set_string("formspec", formspec(pos))
end end

View File

@ -406,10 +406,10 @@ function techage.pull_items(pos, out_dir, num, item_name)
end end
end end
function techage.push_items(pos, out_dir, stack) function techage.push_items(pos, out_dir, stack, idx)
local npos, in_dir, name = get_dest_node(pos, out_dir) local npos, in_dir, name = get_dest_node(pos, out_dir)
if npos and NodeDef[name] and NodeDef[name].on_push_item then if npos and NodeDef[name] and NodeDef[name].on_push_item then
return NodeDef[name].on_push_item(npos, in_dir, stack) return NodeDef[name].on_push_item(npos, in_dir, stack, idx)
elseif is_air_like(name) or check_cart(npos) then elseif is_air_like(name) or check_cart(npos) then
minetest.add_item(npos, stack) minetest.add_item(npos, stack)
return true return true
@ -461,20 +461,22 @@ end
------------------------------------------------------------------- -------------------------------------------------------------------
-- Get the given number of items from the inv. The position within the list -- Get the given number of items from the inv. The position within the list
-- is random so that different item stacks will be considered. -- is incremented each time so that different item stacks will be considered.
-- Returns nil if ItemList is empty. -- Returns nil if ItemList is empty.
function techage.get_items(inv, listname, num) function techage.get_items(pos, inv, listname, num)
if inv:is_empty(listname) then if inv:is_empty(listname) then
return nil return nil
end end
local size = inv:get_size(listname) local size = inv:get_size(listname)
local startpos = math.random(1, size) local mem = techage.get_mem(pos)
for idx = startpos, startpos+size do mem.ta_startpos = mem.ta_startpos or 1
for idx = mem.ta_startpos, mem.ta_startpos+size do
idx = (idx % size) + 1 idx = (idx % size) + 1
local items = inv:get_stack(listname, idx) local items = inv:get_stack(listname, idx)
if items:get_count() > 0 then if items:get_count() > 0 then
local taken = items:take_item(num) local taken = items:take_item(num)
inv:set_stack(listname, idx, items) inv:set_stack(listname, idx, items)
mem.ta_startpos = idx
return taken return taken
end end
end end
@ -483,11 +485,20 @@ end
-- Put the given stack into the given ItemList. -- Put the given stack into the given ItemList.
-- Function returns false if ItemList is full. -- Function returns false if ItemList is full.
function techage.put_items(inv, listname, stack) function techage.put_items(inv, listname, item, idx)
if inv and inv.room_for_item and inv:room_for_item(listname, stack) then if idx and inv and idx <= inv:get_size(listname) then
inv:add_item(listname, stack) local stack = inv:get_stack(listname, idx)
if stack:item_fits(item) then
stack:add_item(item)
inv:set_stack(listname, idx, stack)
return true return true
end end
else
if inv and inv:room_for_item(listname, item) then
inv:add_item(listname, item)
return true
end
end
return false return false
end end

View File

@ -187,7 +187,7 @@ techage.register_node({"techage:coalfirebox"}, {
on_pull_item = function(pos, in_dir, num) on_pull_item = function(pos, in_dir, num)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
return techage.get_items(inv, "fuel", num) return techage.get_items(pos, inv, "fuel", num)
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)
if firebox.Burntime[stack:get_name()] then if firebox.Burntime[stack:get_name()] then

View File

@ -76,7 +76,7 @@ techage.manual_DE.aTitel = {
"3,TA3 Ölexplorer / Oil Explorer", "3,TA3 Ölexplorer / Oil Explorer",
"3,TA3 Ölbohrkiste / Oil Drill Box", "3,TA3 Ölbohrkiste / Oil Drill Box",
"3,TA3 Ölpumpe / Oil Pumpjack", "3,TA3 Ölpumpe / Oil Pumpjack",
"3,TA3 Bohrgestänge / Drill Bit", "3,TA3 Bohrgestänge / Drill Pipe",
"3,Öltank / Oil Tank", "3,Öltank / Oil Tank",
"2,Öl-Transport", "2,Öl-Transport",
"2,Öl-Verarbeitung", "2,Öl-Verarbeitung",
@ -111,6 +111,7 @@ techage.manual_DE.aTitel = {
"3,Techage Info Tool", "3,Techage Info Tool",
"3,TechAge Programmer", "3,TechAge Programmer",
"3,TechAge Kelle / Trowel", "3,TechAge Kelle / Trowel",
"3,TA3 Bohrgestängezange / TA3 Drill Pipe Wrench",
"1,TA4: Zukunft", "1,TA4: Zukunft",
"2,Windkraftanlage", "2,Windkraftanlage",
"3,TA4 Windkraftanlage / Wind Turbine", "3,TA4 Windkraftanlage / Wind Turbine",
@ -387,7 +388,7 @@ techage.manual_DE.aText = {
"\n".. "\n"..
"\n".. "\n"..
"\n", "\n",
"Der Verteiler ist in der Lage\\, die Items aus seinem Inventar sortieren in bis zu vier Richtungen weiter zu transportieren. Dazu muss der Verteiler entsprechend konfiguriert werden. \n".. "Der Verteiler ist in der Lage\\, die Items aus seinem Inventar sortiert in bis zu vier Richtungen weiter zu transportieren. Dazu muss der Verteiler entsprechend konfiguriert werden. \n"..
"\n".. "\n"..
"Der Verteiler besitzt dazu ein Menü mit 4 Filter mit unterschiedlichen Farben\\, entsprechend den 4 Ausgängen. Soll ein Ausgang genutzt werden\\, so muss der entsprechende Filter über die \"on\" Checkbox aktiviert werden. Alle Items\\, die für diesen Filter konfiguriert sind\\, werden über den zugeordneten Ausgang ausgegeben. Wird ein Filter aktiviert\\, ohne das Items konfiguriert werden\\, so sprechen wir hier von einem \"nicht-konfigurierten\"\\, offenen Ausgang.\n".. "Der Verteiler besitzt dazu ein Menü mit 4 Filter mit unterschiedlichen Farben\\, entsprechend den 4 Ausgängen. Soll ein Ausgang genutzt werden\\, so muss der entsprechende Filter über die \"on\" Checkbox aktiviert werden. Alle Items\\, die für diesen Filter konfiguriert sind\\, werden über den zugeordneten Ausgang ausgegeben. Wird ein Filter aktiviert\\, ohne das Items konfiguriert werden\\, so sprechen wir hier von einem \"nicht-konfigurierten\"\\, offenen Ausgang.\n"..
"\n".. "\n"..
@ -401,8 +402,6 @@ techage.manual_DE.aText = {
"\n".. "\n"..
"Einstellbar ist die Betriebsart über die \">>|\" Checkbox (an => Betriebsart 2)\n".. "Einstellbar ist die Betriebsart über die \">>|\" Checkbox (an => Betriebsart 2)\n"..
"\n".. "\n"..
"Wird nur ein Ausgang aktiviert und mit mehreren Items konfiguriert\\, so kann die 1:1 Checkbox angeklickt werden. In diesem Falle werden Items streng gemäß der Filtereinstellung weitergegeben. Fehlt ein Item in der Reihenfolge\\, blockiert der Verteiler. Damit lassen sich andere Maschinen wie bspw. der Autocrafter exakt gemäß dem eingestellten Rezept bestücken.\n"..
"\n"..
"Der Verarbeitungsleistung eines TA2 Verteilers beträgt 4 Items alle 2 s\\, wobei der Verteiler dabei versucht\\, die 4 Items auf die offenen Ausgänge zu verteilen.\n".. "Der Verarbeitungsleistung eines TA2 Verteilers beträgt 4 Items alle 2 s\\, wobei der Verteiler dabei versucht\\, die 4 Items auf die offenen Ausgänge zu verteilen.\n"..
"\n".. "\n"..
"\n".. "\n"..
@ -717,7 +716,7 @@ techage.manual_DE.aText = {
"\n".. "\n"..
"\n".. "\n"..
"\n", "\n",
"Das Bohrgestänge wird für die Bohrung benötigt. Es werden so viele Bohrgestänge Items benötigt wie als Tiefe für das Ölfeld angegeben wurde. Das Bohrgestänge ist nach der Bohrung nutzlos\\, kann aber auch nicht abgebaut werden und verbleibt im Boden.\n".. "Das Bohrgestänge wird für die Bohrung benötigt. Es werden so viele Bohrgestänge Items benötigt wie als Tiefe für das Ölfeld angegeben wurde. Das Bohrgestänge ist nach der Bohrung nutzlos\\, kann aber auch nicht abgebaut werden und verbleibt im Boden. Es gibt aber ein Werkzeug\\, um die Bohrgestänge Blöcke wieder entfernen zu können (-> Werkzeuge -> TA3 Bohrgestängezange).\n"..
"\n".. "\n"..
"\n".. "\n"..
"\n", "\n",
@ -917,7 +916,15 @@ techage.manual_DE.aText = {
"\n".. "\n"..
"\n".. "\n"..
"\n", "\n",
"Die Funktion entspricht der von TA2.\n".. "Die Funktion des TA3 Verteilers entspricht der von TA2 mit einer weiteren Betriebart.\n"..
"\n"..
"*1:1 Bestückungsfunktion*\n"..
"\n"..
"Wird nur ein Ausgang aktiviert und mit mehreren Items konfiguriert\\, so kann die 1:1 Checkbox angeklickt werden. In diesem Falle werden nur Items gemäß der Filtereinstellung angenommen und in der Reihenfolge\\, wie die Items im Filter eingetragen sind\\, in definierte Positionen im Ziel-Inventar abgelegt. Damit kann weder das Inventar des Verteilers noch des Zielblocks volllaufen. Dies funktioniert für Autocrafter\\, Industrieofen und Elektronikfabrik.\n"..
"Mit dieser Betriebsart lassen sich andere Maschinen wie bspw. der Autocrafter exakt gemäß dem eingestellten Rezept bestücken. \n"..
"\n"..
"Dies funktioniert nur nur\\, wenn die Inventare des Verteilers und des Zielblocks zuvor frei sind.\n"..
"\n"..
"Die Verarbeitungsleistung beträgt 12 Items alle 4 s.\n".. "Die Verarbeitungsleistung beträgt 12 Items alle 4 s.\n"..
"\n".. "\n"..
"\n".. "\n"..
@ -974,6 +981,8 @@ techage.manual_DE.aText = {
"\n".. "\n"..
"\n".. "\n"..
"\n", "\n",
"Mit diesem Werkzeug lassen sich die Bohrgestängezange Blöcke wieder entfernen\\, wenn dort bspw. ein Tunnel durch soll.\n"..
"\n",
"Regenerative Energiequellen wie Wind\\, Sonne und Biokraft helfen dir\\, das Ölzeitalter zu verlassen. Mit modernen Technologien und intelligenten Maschinen machst du dich auf in die Zukunft.\n".. "Regenerative Energiequellen wie Wind\\, Sonne und Biokraft helfen dir\\, das Ölzeitalter zu verlassen. Mit modernen Technologien und intelligenten Maschinen machst du dich auf in die Zukunft.\n"..
"\n".. "\n"..
"\n".. "\n"..
@ -1342,7 +1351,7 @@ techage.manual_DE.aText = {
"\n".. "\n"..
"Wird die Kiste mit einem Schieber gefüllt\\, so füllen sich alle Speicherplätze von links nach rechts. Sind alle 8 Speicher voll und können keine weiteren Items hinzugefügt werden\\, so werden diese Items im Ein-/Ausgabe-Inventar gespeichert. Die Kiste ist damit für den Schieberbetrieb vollständig gefüllt und weitere Items werden abgewiesen.\n".. "Wird die Kiste mit einem Schieber gefüllt\\, so füllen sich alle Speicherplätze von links nach rechts. Sind alle 8 Speicher voll und können keine weiteren Items hinzugefügt werden\\, so werden diese Items im Ein-/Ausgabe-Inventar gespeichert. Die Kiste ist damit für den Schieberbetrieb vollständig gefüllt und weitere Items werden abgewiesen.\n"..
"\n".. "\n"..
"Wird die Kiste über einen Schieber geleert\\, leeren sich auch die Speicher wieder von links nach rechts.\n".. "Wird die Kiste über einen Schieber geleert\\, werden von Speicherplätzen Items entnommen.\n"..
"\n".. "\n"..
"*Reihenfunktion*\n".. "*Reihenfunktion*\n"..
"\n".. "\n"..
@ -1350,7 +1359,12 @@ techage.manual_DE.aText = {
"\n".. "\n"..
"Zuerst muss die Front-Kiste gesetzt werden\\, dann werden die Stapel-Kisten mit gleicher Blickrichtung dahinter gesetzt (alle Kisten haben die Front in Richtung Spieler). Bei 2 Kisten in Reihe erhöht sich die Größe auf 8x4000\\, usw.\n".. "Zuerst muss die Front-Kiste gesetzt werden\\, dann werden die Stapel-Kisten mit gleicher Blickrichtung dahinter gesetzt (alle Kisten haben die Front in Richtung Spieler). Bei 2 Kisten in Reihe erhöht sich die Größe auf 8x4000\\, usw.\n"..
"\n".. "\n"..
"Die angereihten Kisten können nun nicht mehr entfernt werden. Um die Kisten wieder abbauen zu können\\, muss zuerst die Frontkiste entfernt werden. Danach können die Kisten der Reihe nach wieder entfernt werden. \n".. "Die angereihten Kisten können nun nicht mehr entfernt werden. Um die Kisten wieder abbauen zu können\\, gibt es zwei Möglichkeiten:\n"..
"\n"..
" - Die Frontkiste leeren und entfernen. Damit wird die nächste Kiste entsperrt und kann entfernt werden.\n"..
" - Die Frontkiste soweit leeren dass alle Speicherplätzen maximal 2000 Items beinhalten. Damit wird die nächste Kiste entsperrt und kann entfernt werden.\n"..
"\n"..
"Die Kisten haben eine \"Reihenfolge\" Checkbox. Wird diese Checkbox aktiviert\\, werden die Speicherplätze durch einen Schieber nicht mehr vollständig entleert. Das letzte Item verbleibt als Vorbelegung in dem Speicherplatz. Damit ergibt sich eine feste Zuordnung von Items zu Speicherplätzen.\n"..
"\n".. "\n"..
"Die Kiste kann nur von den Spielern genutzt werden\\, die an diesem Ort auch bauen können\\, also Protection Rechte besitzen. Es spielt dabei keine Rolle\\, wer die Kiste setzt. \n".. "Die Kiste kann nur von den Spielern genutzt werden\\, die an diesem Ort auch bauen können\\, also Protection Rechte besitzen. Es spielt dabei keine Rolle\\, wer die Kiste setzt. \n"..
"\n".. "\n"..
@ -1495,6 +1509,7 @@ techage.manual_DE.aItemName = {
"ta3_end_wrench", "ta3_end_wrench",
"ta3_programmer", "ta3_programmer",
"ta3_trowel", "ta3_trowel",
"",
"techage_ta4", "techage_ta4",
"", "",
"ta4_windturbine", "ta4_windturbine",
@ -1670,6 +1685,7 @@ techage.manual_DE.aPlanTable = {
"", "",
"", "",
"", "",
"",
"ta4_windturbine", "ta4_windturbine",
"", "",
"", "",

View File

@ -216,14 +216,14 @@ local tubing = {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then if meta:get_int("pull_dir") == in_dir then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.get_items(inv, "dst", num) return techage.get_items(pos, inv, "dst", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack, idx)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("push_dir") == in_dir or in_dir == 5 then if meta:get_int("push_dir") == in_dir or in_dir == 5 then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.put_items(inv, "src", stack) return techage.put_items(inv, "src", stack, idx)
end end
end, end,
on_unpull_item = function(pos, in_dir, stack) on_unpull_item = function(pos, in_dir, stack)

View File

@ -23,6 +23,7 @@ else
-- Basis features -- Basis features
local MP = minetest.get_modpath("techage") local MP = minetest.get_modpath("techage")
dofile(MP.."/basis/lib.lua") -- helper functions dofile(MP.."/basis/lib.lua") -- helper functions
dofile(MP.."/basis/storage.lua")
dofile(MP.."/basis/gravel_lib.lua") -- ore probability dofile(MP.."/basis/gravel_lib.lua") -- ore probability
dofile(MP.."/basis/node_states.lua") -- state model dofile(MP.."/basis/node_states.lua") -- state model
dofile(MP.."/basis/tubes.lua") -- tubes for item transport dofile(MP.."/basis/tubes.lua") -- tubes for item transport
@ -38,7 +39,6 @@ else
dofile(MP.."/basis/networks.lua") dofile(MP.."/basis/networks.lua")
dofile(MP.."/basis/recipe_lib.lua") dofile(MP.."/basis/recipe_lib.lua")
dofile(MP.."/basis/formspec_update.lua") dofile(MP.."/basis/formspec_update.lua")
dofile(MP.."/basis/storage.lua")
-- Main doc -- Main doc
dofile(MP.."/doc/manual_DE.lua") dofile(MP.."/doc/manual_DE.lua")

View File

@ -72,7 +72,7 @@ end
local function node_timer(pos, elapsed) local function node_timer(pos, elapsed)
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
if not inv:is_empty("src") then if not inv:is_empty("src") then
local taken = techage.get_items(inv, "src", 1) local taken = techage.get_items(pos, inv, "src", 1)
if liquid.is_container_empty(taken:get_name()) then if liquid.is_container_empty(taken:get_name()) then
return liquid.fill_container({x = pos.x, y = pos.y+1, z = pos.z}, inv, taken:get_name()) return liquid.fill_container({x = pos.x, y = pos.y+1, z = pos.z}, inv, taken:get_name())
else else
@ -132,7 +132,7 @@ minetest.register_node("techage:filler", {
techage.register_node({"techage:filler"}, { techage.register_node({"techage:filler"}, {
on_pull_item = function(pos, in_dir, num) on_pull_item = function(pos, in_dir, num)
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.get_items(inv, "dst", num) return techage.get_items(pos, inv, "dst", num)
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()

View File

@ -221,7 +221,7 @@ techage.register_node({"techage:ta3_silo", "techage:ta4_silo"}, {
on_pull_item = function(pos, in_dir, num) on_pull_item = function(pos, in_dir, num)
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
if not inv:is_empty("main") then if not inv:is_empty("main") then
return techage.get_items(inv, "main", num) return techage.get_items(pos, inv, "main", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)

View File

@ -109,6 +109,7 @@ More water expected (2 m deep)!=Mehr Wasser erwartet (2 m tief)
Nacelle is missing=Die Gondel fehlt Nacelle is missing=Die Gondel fehlt
Needle Powder=Nadel Pulver Needle Powder=Nadel Pulver
Network Data=Netzwerkdaten Network Data=Netzwerkdaten
Never completely empty the slots@nwith the pusher to keep the items assignment=Slots mit dem Schieber nie ganz@nleeren, um die Item-Zuordnung beizubehalten
No network or active generator available!=Kein Stromnetz oder aktiver Generator verfügbar No network or active generator available!=Kein Stromnetz oder aktiver Generator verfügbar
No plan available=Kein Plan verfügar No plan available=Kein Plan verfügar
No power grid or running generator!=Kein Stromnetz oder Generator verfügbar! No power grid or running generator!=Kein Stromnetz oder Generator verfügbar!
@ -241,7 +242,8 @@ TA3 Distillation Tower 3=TA3 Destillationsturm 3
TA3 Distillation Tower 4=TA3 Destillationsturm 4 TA3 Distillation Tower 4=TA3 Destillationsturm 4
TA3 Distillation Tower Base=TA3 Destillationsturm Basis TA3 Distillation Tower Base=TA3 Destillationsturm Basis
TA3 Door Controller=TA3 Tür Controller TA3 Door Controller=TA3 Tür Controller
TA3 Drill Bit=TA3 Bohrgestänge TA3 Drill Pipe=TA3 Bohrgestänge
TA3 Drill Pipe Wrench=TA3 Bohrgestängezange
TA3 Ele Fab=TA3 E-Fabrik TA3 Ele Fab=TA3 E-Fabrik
TA3 Fuel Oil=TA3 Schweröl TA3 Fuel Oil=TA3 Schweröl
TA3 Fuel Oil Barrel=TA3 Schwerölfass TA3 Fuel Oil Barrel=TA3 Schwerölfass
@ -363,6 +365,8 @@ To add water punch@nthe boiler@nwith a water bucket=Um Wasser nachzufüllen,@nsc
To many blocks in the power grid!=Zu viele Blöcke im Stromnetz! To many blocks in the power grid!=Zu viele Blöcke im Stromnetz!
Turned on:=Eingeschaltet: Turned on:=Eingeschaltet:
Type=Typ Type=Typ
Unlock=Entsperren
Unlock connected chest@nif all slots are below 2000=Nachfolgende Kiste entsperren,@nsofern alle Slots <= 2000
Update=Update Update=Update
Usmium Nuggets=Usmium Nuggets Usmium Nuggets=Usmium Nuggets
Usmium Powder=Usmium Pulver Usmium Powder=Usmium Pulver
@ -399,6 +403,7 @@ full=voll
inlet/pipe error=Einlass/Röhrenfehler inlet/pipe error=Einlass/Röhrenfehler
inventory full=Inventar ist voll inventory full=Inventar ist voll
item output blocked=Ausgang blockiert item output blocked=Ausgang blockiert
keep assignment=Zuordnung beibehalten
light=Licht light=Licht
loaded=geladen loaded=geladen
needs power=benötigt Strom needs power=benötigt Strom

View File

@ -107,6 +107,7 @@ More water expected (2 m deep)!=
Nacelle is missing= Nacelle is missing=
Needle Powder= Needle Powder=
Network Data= Network Data=
Never completely empty the slots@nwith the pusher to keep the items assignment=
No network or active generator available!= No network or active generator available!=
No plan available= No plan available=
No power grid or running generator!= No power grid or running generator!=
@ -239,7 +240,8 @@ TA3 Distillation Tower 3=
TA3 Distillation Tower 4= TA3 Distillation Tower 4=
TA3 Distillation Tower Base= TA3 Distillation Tower Base=
TA3 Door Controller= TA3 Door Controller=
TA3 Drill Bit= TA3 Drill Pipe=
TA3 Drill Pipe Wrench=
TA3 Ele Fab= TA3 Ele Fab=
TA3 Fuel Oil= TA3 Fuel Oil=
TA3 Fuel Oil Barrel= TA3 Fuel Oil Barrel=
@ -361,6 +363,8 @@ To add water punch@nthe boiler@nwith a water bucket=
To many blocks in the power grid!= To many blocks in the power grid!=
Turned on:= Turned on:=
Type= Type=
Unlock=
Unlock connected chest@nif all slots are below 2000=
Update= Update=
Usmium Nuggets= Usmium Nuggets=
Usmium Powder= Usmium Powder=
@ -397,6 +401,7 @@ full=
inlet/pipe error= inlet/pipe error=
inventory full= inventory full=
item output blocked= item output blocked=
keep assignment=
light= light=
loaded= loaded=
needs power= needs power=

View File

@ -185,7 +185,7 @@ techage.register_node({"techage:ta4_sensor_chest"}, {
on_pull_item = function(pos, in_dir, num) on_pull_item = function(pos, in_dir, num)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
return techage.get_items(inv, "main", num) return techage.get_items(pos, inv, "main", num)
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)

View File

@ -97,7 +97,7 @@ Der Verarbeitungsleistung eines TA2 Schiebers beträgt 2 Items alle 2 s.
### TA2 Verteiler / Distributor ### TA2 Verteiler / Distributor
Der Verteiler ist in der Lage, die Items aus seinem Inventar sortieren in bis zu vier Richtungen weiter zu transportieren. Dazu muss der Verteiler entsprechend konfiguriert werden. Der Verteiler ist in der Lage, die Items aus seinem Inventar sortiert in bis zu vier Richtungen weiter zu transportieren. Dazu muss der Verteiler entsprechend konfiguriert werden.
Der Verteiler besitzt dazu ein Menü mit 4 Filter mit unterschiedlichen Farben, entsprechend den 4 Ausgängen. Soll ein Ausgang genutzt werden, so muss der entsprechende Filter über die "on" Checkbox aktiviert werden. Alle Items, die für diesen Filter konfiguriert sind, werden über den zugeordneten Ausgang ausgegeben. Wird ein Filter aktiviert, ohne das Items konfiguriert werden, so sprechen wir hier von einem "nicht-konfigurierten", offenen Ausgang. Der Verteiler besitzt dazu ein Menü mit 4 Filter mit unterschiedlichen Farben, entsprechend den 4 Ausgängen. Soll ein Ausgang genutzt werden, so muss der entsprechende Filter über die "on" Checkbox aktiviert werden. Alle Items, die für diesen Filter konfiguriert sind, werden über den zugeordneten Ausgang ausgegeben. Wird ein Filter aktiviert, ohne das Items konfiguriert werden, so sprechen wir hier von einem "nicht-konfigurierten", offenen Ausgang.
@ -111,8 +111,6 @@ Im ersten Fall werden immer alle Items weitergeleitet und der Verteiler läuft n
Einstellbar ist die Betriebsart über die ">>|" Checkbox (an => Betriebsart 2) Einstellbar ist die Betriebsart über die ">>|" Checkbox (an => Betriebsart 2)
Wird nur ein Ausgang aktiviert und mit mehreren Items konfiguriert, so kann die 1:1 Checkbox angeklickt werden. In diesem Falle werden Items streng gemäß der Filtereinstellung weitergegeben. Fehlt ein Item in der Reihenfolge, blockiert der Verteiler. Damit lassen sich andere Maschinen wie bspw. der Autocrafter exakt gemäß dem eingestellten Rezept bestücken.
Der Verarbeitungsleistung eines TA2 Verteilers beträgt 4 Items alle 2 s, wobei der Verteiler dabei versucht, die 4 Items auf die offenen Ausgänge zu verteilen. Der Verarbeitungsleistung eines TA2 Verteilers beträgt 4 Items alle 2 s, wobei der Verteiler dabei versucht, die 4 Items auf die offenen Ausgänge zu verteilen.
[ta2_distributor|image] [ta2_distributor|image]

View File

@ -333,9 +333,9 @@ Ist alles Öl abgepumpt, kann auch die Ölpumpe wieder entfernt werden.
[ta3_pumpjack|image] [ta3_pumpjack|image]
### TA3 Bohrgestänge / Drill Bit ### TA3 Bohrgestänge / Drill Pipe
Das Bohrgestänge wird für die Bohrung benötigt. Es werden so viele Bohrgestänge Items benötigt wie als Tiefe für das Ölfeld angegeben wurde. Das Bohrgestänge ist nach der Bohrung nutzlos, kann aber auch nicht abgebaut werden und verbleibt im Boden. Das Bohrgestänge wird für die Bohrung benötigt. Es werden so viele Bohrgestänge Items benötigt wie als Tiefe für das Ölfeld angegeben wurde. Das Bohrgestänge ist nach der Bohrung nutzlos, kann aber auch nicht abgebaut werden und verbleibt im Boden. Es gibt aber ein Werkzeug, um die Bohrgestänge Blöcke wieder entfernen zu können (-> Werkzeuge -> TA3 Bohrgestängezange).
[ta3_drillbit|image] [ta3_drillbit|image]
@ -607,7 +607,15 @@ Die Verarbeitungsleistung beträgt 6 Items alle 2 s.
### TA3 Verteiler / Distributor ### TA3 Verteiler / Distributor
Die Funktion entspricht der von TA2. Die Funktion des TA3 Verteilers entspricht der von TA2 mit einer weiteren Betriebart.
**1:1 Bestückungsfunktion**
Wird nur ein Ausgang aktiviert und mit mehreren Items konfiguriert, so kann die 1:1 Checkbox angeklickt werden. In diesem Falle werden nur Items gemäß der Filtereinstellung angenommen und in der Reihenfolge, wie die Items im Filter eingetragen sind, in definierte Positionen im Ziel-Inventar abgelegt. Damit kann weder das Inventar des Verteilers noch des Zielblocks volllaufen. Dies funktioniert für Autocrafter, Industrieofen und Elektronikfabrik.
Mit dieser Betriebsart lassen sich andere Maschinen wie bspw. der Autocrafter exakt gemäß dem eingestellten Rezept bestücken.
Dies funktioniert nur nur, wenn die Inventare des Verteilers und des Zielblocks zuvor frei sind.
Die Verarbeitungsleistung beträgt 12 Items alle 4 s. Die Verarbeitungsleistung beträgt 12 Items alle 4 s.
[ta3_distributor|image] [ta3_distributor|image]
@ -696,3 +704,7 @@ Die Kelle dient zum Verputzen von Stromkabel. Siehe dazu "TA Stromkabel".
[ta3_trowel|image] [ta3_trowel|image]
### TA3 Bohrgestängezange / TA3 Drill Pipe Wrench
Mit diesem Werkzeug lassen sich die Bohrgestängezange Blöcke wieder entfernen, wenn dort bspw. ein Tunnel durch soll.

View File

@ -522,7 +522,7 @@ Die TA4 8x2000 Kiste hat kein normales Inventar wir andere Kisten, sondern verf
Wird die Kiste mit einem Schieber gefüllt, so füllen sich alle Speicherplätze von links nach rechts. Sind alle 8 Speicher voll und können keine weiteren Items hinzugefügt werden, so werden diese Items im Ein-/Ausgabe-Inventar gespeichert. Die Kiste ist damit für den Schieberbetrieb vollständig gefüllt und weitere Items werden abgewiesen. Wird die Kiste mit einem Schieber gefüllt, so füllen sich alle Speicherplätze von links nach rechts. Sind alle 8 Speicher voll und können keine weiteren Items hinzugefügt werden, so werden diese Items im Ein-/Ausgabe-Inventar gespeichert. Die Kiste ist damit für den Schieberbetrieb vollständig gefüllt und weitere Items werden abgewiesen.
Wird die Kiste über einen Schieber geleert, leeren sich auch die Speicher wieder von links nach rechts. Wird die Kiste über einen Schieber geleert, werden von Speicherplätzen Items entnommen.
**Reihenfunktion** **Reihenfunktion**
@ -530,7 +530,12 @@ Mehrere TA4 8x2000 Kisten können zu einer großen Kiste mit mehr Inhalt verbund
Zuerst muss die Front-Kiste gesetzt werden, dann werden die Stapel-Kisten mit gleicher Blickrichtung dahinter gesetzt (alle Kisten haben die Front in Richtung Spieler). Bei 2 Kisten in Reihe erhöht sich die Größe auf 8x4000, usw. Zuerst muss die Front-Kiste gesetzt werden, dann werden die Stapel-Kisten mit gleicher Blickrichtung dahinter gesetzt (alle Kisten haben die Front in Richtung Spieler). Bei 2 Kisten in Reihe erhöht sich die Größe auf 8x4000, usw.
Die angereihten Kisten können nun nicht mehr entfernt werden. Um die Kisten wieder abbauen zu können, muss zuerst die Frontkiste entfernt werden. Danach können die Kisten der Reihe nach wieder entfernt werden. Die angereihten Kisten können nun nicht mehr entfernt werden. Um die Kisten wieder abbauen zu können, gibt es zwei Möglichkeiten:
- Die Frontkiste leeren und entfernen. Damit wird die nächste Kiste entsperrt und kann entfernt werden.
- Die Frontkiste soweit leeren dass alle Speicherplätzen maximal 2000 Items beinhalten. Damit wird die nächste Kiste entsperrt und kann entfernt werden.
Die Kisten haben eine "Reihenfolge" Checkbox. Wird diese Checkbox aktiviert, werden die Speicherplätze durch einen Schieber nicht mehr vollständig entleert. Das letzte Item verbleibt als Vorbelegung in dem Speicherplatz. Damit ergibt sich eine feste Zuordnung von Items zu Speicherplätzen.
Die Kiste kann nur von den Spielern genutzt werden, die an diesem Ort auch bauen können, also Protection Rechte besitzen. Es spielt dabei keine Rolle, wer die Kiste setzt. Die Kiste kann nur von den Spielern genutzt werden, die an diesem Ort auch bauen können, also Protection Rechte besitzen. Es spielt dabei keine Rolle, wer die Kiste setzt.

View File

@ -75,7 +75,7 @@
- [TA3 Ölexplorer / Oil Explorer](./manual_ta3_DE.md#ta3-Ölexplorer--oil-explorer) - [TA3 Ölexplorer / Oil Explorer](./manual_ta3_DE.md#ta3-Ölexplorer--oil-explorer)
- [TA3 Ölbohrkiste / Oil Drill Box](./manual_ta3_DE.md#ta3-Ölbohrkiste--oil-drill-box) - [TA3 Ölbohrkiste / Oil Drill Box](./manual_ta3_DE.md#ta3-Ölbohrkiste--oil-drill-box)
- [TA3 Ölpumpe / Oil Pumpjack](./manual_ta3_DE.md#ta3-Ölpumpe--oil-pumpjack) - [TA3 Ölpumpe / Oil Pumpjack](./manual_ta3_DE.md#ta3-Ölpumpe--oil-pumpjack)
- [TA3 Bohrgestänge / Drill Bit](./manual_ta3_DE.md#ta3-bohrgestänge--drill-bit) - [TA3 Bohrgestänge / Drill Pipe](./manual_ta3_DE.md#ta3-bohrgestänge--drill-pipe)
- [Öltank / Oil Tank](./manual_ta3_DE.md#Öltank--oil-tank) - [Öltank / Oil Tank](./manual_ta3_DE.md#Öltank--oil-tank)
- [Öl-Transport](./manual_ta3_DE.md#Öl-transport) - [Öl-Transport](./manual_ta3_DE.md#Öl-transport)
- [Öl-Verarbeitung](./manual_ta3_DE.md#Öl-verarbeitung) - [Öl-Verarbeitung](./manual_ta3_DE.md#Öl-verarbeitung)
@ -110,6 +110,7 @@
- [Techage Info Tool](./manual_ta3_DE.md#techage-info-tool) - [Techage Info Tool](./manual_ta3_DE.md#techage-info-tool)
- [TechAge Programmer](./manual_ta3_DE.md#techage-programmer) - [TechAge Programmer](./manual_ta3_DE.md#techage-programmer)
- [TechAge Kelle / Trowel](./manual_ta3_DE.md#techage-kelle--trowel) - [TechAge Kelle / Trowel](./manual_ta3_DE.md#techage-kelle--trowel)
- [TA3 Bohrgestängezange / TA3 Drill Pipe Wrench](./manual_ta3_DE.md#ta3-bohrgestängezange--ta3-drill-pipe-wrench)
- [TA4: Zukunft](./manual_ta4_DE.md#ta4:-zukunft) - [TA4: Zukunft](./manual_ta4_DE.md#ta4:-zukunft)
- [Windkraftanlage](./manual_ta4_DE.md#windkraftanlage) - [Windkraftanlage](./manual_ta4_DE.md#windkraftanlage)
- [TA4 Windkraftanlage / Wind Turbine](./manual_ta4_DE.md#ta4-windkraftanlage--wind-turbine) - [TA4 Windkraftanlage / Wind Turbine](./manual_ta4_DE.md#ta4-windkraftanlage--wind-turbine)

View File

@ -231,7 +231,7 @@ local tubing = {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then if meta:get_int("pull_dir") == in_dir then
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
return techage.get_items(inv, "dst", num) return techage.get_items(pos, inv, "dst", num)
end end
end, end,
on_push_item = function(pos, in_dir, stack) on_push_item = function(pos, in_dir, stack)

View File

@ -162,7 +162,7 @@ minetest.register_node("techage:oiltower5", {
}) })
minetest.register_node("techage:oil_drillbit", { minetest.register_node("techage:oil_drillbit", {
description = S("TA3 Drill Bit"), description = S("TA3 Drill Pipe"),
drawtype = "plantlike", drawtype = "plantlike",
tiles = {"techage_oil_drillbit.png"}, tiles = {"techage_oil_drillbit.png"},
inventory_image = "techage_oil_drillbit_inv.png", inventory_image = "techage_oil_drillbit_inv.png",
@ -175,7 +175,7 @@ minetest.register_node("techage:oil_drillbit", {
}) })
minetest.register_node("techage:oil_drillbit2", { minetest.register_node("techage:oil_drillbit2", {
description = S("TA3 Drill Bit"), description = S("TA3 Drill Pipe"),
drawtype = "plantlike", drawtype = "plantlike",
tiles = {"techage_oil_drillbit.png"}, tiles = {"techage_oil_drillbit.png"},
inventory_image = "techage_oil_drillbit_inv.png", inventory_image = "techage_oil_drillbit_inv.png",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 B

After

Width:  |  Height:  |  Size: 366 B

View File

@ -22,8 +22,8 @@ local function remove_pipe(itemstack, user, pointed_thing)
end -- remove_pipe end -- remove_pipe
minetest.register_tool("techage:ta3_pipe_wrench", { minetest.register_tool("techage:ta3_drill_pipe_wrench", {
description = S("TA3 Pipe Wrench"), description = S("TA3 Drill Pipe Wrench"),
inventory_image = "techage_pipe_wrench.png", inventory_image = "techage_pipe_wrench.png",
wield_image = "techage_pipe_wrench.png", wield_image = "techage_pipe_wrench.png",
groups = {cracky=1}, groups = {cracky=1},
@ -32,9 +32,9 @@ minetest.register_tool("techage:ta3_pipe_wrench", {
}) })
minetest.register_craft({ minetest.register_craft({
output = "techage:ta3_pipe_wrench", output = "techage:ta3_drill_pipe_wrench",
recipe = { recipe = {
{"hyperloop:hypersteel_ingot", "hyperloop:hypersteel_ingot", ""}, {"default:diamond", "default:diamond", ""},
{"dye:red", "default:steel_ingot", "dye:red"}, {"dye:red", "default:steel_ingot", "dye:red"},
{"default:steel_ingot", "", "default:steel_ingot"}, {"default:steel_ingot", "", "default:steel_ingot"},
}, },