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)
if meta:get_int("pull_dir") == in_dir then
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, idx)
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()
CRD(pos).State:start_if_standby(pos)
return techage.put_items(inv, "src", stack)
return techage.put_items(inv, "src", stack, idx)
end
end,
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
end
else
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)

View File

@ -42,6 +42,7 @@ local function filter_settings(pos)
local ItemFilter = {} -- {<item:name> = {dir,...}]
local OpenPorts = {} -- {dir, ...}
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
for idx,slot in ipairs(SlotColors) do
if filter[idx] == true then
@ -50,7 +51,7 @@ local function filter_settings(pos)
if inv:is_empty(slot) then
table.insert(OpenPorts, out_dir)
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()
if name ~= "" then
if not ItemFilter[name] then
@ -58,6 +59,7 @@ local function filter_settings(pos)
end
table.insert(ItemFilter[name], out_dir)
table.insert(FilterItems, name)
FilterItemIdx[name] = idx2
end
end
end
@ -68,6 +70,7 @@ local function filter_settings(pos)
ItemFilter = ItemFilter,
OpenPorts = OpenPorts,
FilterItems = FilterItems,
FilterItemIdx = FilterItemIdx,
}
end
@ -89,8 +92,19 @@ local function get_filter_settings(pos)
return FilterCache[hash].ItemFilter, FilterCache[hash].OpenPorts, FilterCache[hash].FilterItems
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 cnt = 0
if CRD(pos).stage == 2 then return "" end
for _,val in ipairs(filter) do
if val then cnt = cnt + 1 end
end
@ -288,7 +302,7 @@ local function sequencing(pos, inv, crd, nvm)
if not inv:contains_item("src", stack) then
break
end
if not techage.push_items(pos, push_dir, stack) then
if not techage.push_items(pos, push_dir, stack, offs) then
blocked = true
break
end
@ -342,7 +356,7 @@ local function on_receive_fields(pos, formname, fields, player)
filter[3] = fields.filter3 == "true"
elseif fields.filter4 ~= nil then
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)
local nvm = techage.get_nvm(pos)
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",
}
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 = {
on_pull_item = function(pos, in_dir, num)
local inv = M(pos):get_inventory()
return techage.get_items(inv, "src", num)
return techage.get_items(pos, inv, "src", num)
end,
on_push_item = function(pos, in_dir, stack)
local inv = M(pos):get_inventory()
CRD(pos).State:start_if_standby(pos)
return techage.put_items(inv, "src", stack)
return put_items(pos, stack)
end,
on_unpull_item = function(pos, in_dir, stack)
local inv = M(pos):get_inventory()
return techage.put_items(inv, "src", stack)
return put_items(pos, stack)
end,
on_recv_message = function(pos, src, topic, payload)
if topic == "info" then

View File

@ -175,15 +175,15 @@ local tubing = {
local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then
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, idx)
local meta = minetest.get_meta(pos)
if meta:get_int("push_dir") == in_dir or in_dir == 5 then
local inv = M(pos):get_inventory()
CRD(pos).State:start_if_standby(pos)
return techage.put_items(inv, "src", stack)
return techage.put_items(inv, "src", stack, idx)
end
end,
on_unpull_item = function(pos, in_dir, stack)

View File

@ -219,7 +219,7 @@ local tubing = {
local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then
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)

View File

@ -152,7 +152,7 @@ local tubing = {
local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then
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)

View File

@ -165,7 +165,7 @@ local tubing = {
local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then
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)

View File

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

View File

@ -153,7 +153,7 @@ local tubing = {
local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then
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)

View File

@ -29,7 +29,7 @@ local S = techage.S
-- Consumer Related Data
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 CYCLE_TIME = 2

View File

@ -329,7 +329,7 @@ local tubing = {
local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then
local inv = M(pos):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)

View File

@ -112,8 +112,22 @@ local function sort_in(pos, inv, nvm, stack)
return false
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}
nvm.inventory = nvm.inventory or {}
if not inv:is_empty("main") then
if item_name then
local taken = inv:remove_item("main", {name = item_name, count = count})
@ -121,23 +135,46 @@ local function get_item(inv, nvm, item_name, count)
return taken
end
else
return techage.get_items(inv, "main", count)
return techage.get_items(pos, inv, "main", count)
end
end
for _,item in ipairs(nvm.inventory or {}) do
if (item_name == nil and stack.name == nil) or item.name == item_name then
local num = math.min(item.count, count - stack.count, max_stacksize(item.name))
item.count = item.count - num
stack.count = stack.count + num
if item.name ~= "" then
stack.name = item.name
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))
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
return ItemStack(stack)
end
end
if item.count == 0 then
item.name = "" -- empty
end
if stack.count == count then
return ItemStack(stack)
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
@ -171,13 +208,18 @@ local function formspec(pos)
local nvm = techage.get_nvm(pos)
local inv = M(pos):get_inventory()
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_img..
default.gui_slots..
"label[0,-0.2;"..S("Size")..": 8x"..size.."]"..
formspec_container(0, 0.4, nvm, inv)..
"list[current_player;main;0,3.9;8,4;]"..
formspec_container(0, 0, nvm, inv)..
"button[1,3;2,1;unlock;"..S("Unlock").."]"..
"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[current_player;main]"
end
@ -221,13 +263,32 @@ local function convert_to_chest_again(pos, node, player)
local dir = techage.side_to_outdir("B", node.param2)
local pos1 = tubelib2.get_pos(pos, dir)
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
node1.name = "techage:ta4_chest"
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
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)
if minetest.is_protected(pos, player:get_player_name()) then
return 0
@ -320,6 +381,12 @@ local function on_receive_fields(pos, formname, fields, player)
break
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))
end
@ -385,7 +452,7 @@ minetest.register_node("techage:ta4_chest", {
on_metadata_inventory_take = on_metadata_inventory_take,
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,
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)
local nvm = techage.get_nvm(pos)
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
M(pos):set_string("formspec", formspec(pos))
end

View File

@ -406,10 +406,10 @@ function techage.pull_items(pos, out_dir, num, item_name)
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)
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
minetest.add_item(npos, stack)
return true
@ -461,20 +461,22 @@ end
-------------------------------------------------------------------
-- 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.
function techage.get_items(inv, listname, num)
function techage.get_items(pos, inv, listname, num)
if inv:is_empty(listname) then
return nil
end
local size = inv:get_size(listname)
local startpos = math.random(1, size)
for idx = startpos, startpos+size do
local mem = techage.get_mem(pos)
mem.ta_startpos = mem.ta_startpos or 1
for idx = mem.ta_startpos, mem.ta_startpos+size do
idx = (idx % size) + 1
local items = inv:get_stack(listname, idx)
if items:get_count() > 0 then
local taken = items:take_item(num)
inv:set_stack(listname, idx, items)
mem.ta_startpos = idx
return taken
end
end
@ -483,10 +485,19 @@ end
-- Put the given stack into the given ItemList.
-- Function returns false if ItemList is full.
function techage.put_items(inv, listname, stack)
if inv and inv.room_for_item and inv:room_for_item(listname, stack) then
inv:add_item(listname, stack)
return true
function techage.put_items(inv, listname, item, idx)
if idx and inv and idx <= inv:get_size(listname) then
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
end
else
if inv and inv:room_for_item(listname, item) then
inv:add_item(listname, item)
return true
end
end
return false
end

View File

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

View File

@ -76,7 +76,7 @@ techage.manual_DE.aTitel = {
"3,TA3 Ölexplorer / Oil Explorer",
"3,TA3 Ölbohrkiste / Oil Drill Box",
"3,TA3 Ölpumpe / Oil Pumpjack",
"3,TA3 Bohrgestänge / Drill Bit",
"3,TA3 Bohrgestänge / Drill Pipe",
"3,Öltank / Oil Tank",
"2,Öl-Transport",
"2,Öl-Verarbeitung",
@ -111,6 +111,7 @@ techage.manual_DE.aTitel = {
"3,Techage Info Tool",
"3,TechAge Programmer",
"3,TechAge Kelle / Trowel",
"3,TA3 Bohrgestängezange / TA3 Drill Pipe Wrench",
"1,TA4: Zukunft",
"2,Windkraftanlage",
"3,TA4 Windkraftanlage / Wind Turbine",
@ -387,7 +388,7 @@ techage.manual_DE.aText = {
"\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"..
"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"..
@ -401,8 +402,6 @@ techage.manual_DE.aText = {
"\n"..
"Einstellbar ist die Betriebsart über die \">>|\" Checkbox (an => Betriebsart 2)\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"..
"\n"..
"\n"..
@ -717,7 +716,7 @@ techage.manual_DE.aText = {
"\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",
@ -917,7 +916,15 @@ techage.manual_DE.aText = {
"\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"..
"\n"..
"\n"..
@ -974,6 +981,8 @@ techage.manual_DE.aText = {
"\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"..
"\n"..
"\n"..
@ -1342,7 +1351,7 @@ techage.manual_DE.aText = {
"\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"..
"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"..
"*Reihenfunktion*\n"..
"\n"..
@ -1350,7 +1359,12 @@ techage.manual_DE.aText = {
"\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"..
"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"..
"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"..
@ -1495,6 +1509,7 @@ techage.manual_DE.aItemName = {
"ta3_end_wrench",
"ta3_programmer",
"ta3_trowel",
"",
"techage_ta4",
"",
"ta4_windturbine",
@ -1670,6 +1685,7 @@ techage.manual_DE.aPlanTable = {
"",
"",
"",
"",
"ta4_windturbine",
"",
"",

View File

@ -216,14 +216,14 @@ local tubing = {
local meta = minetest.get_meta(pos)
if meta:get_int("pull_dir") == in_dir then
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, idx)
local meta = minetest.get_meta(pos)
if meta:get_int("push_dir") == in_dir or in_dir == 5 then
local inv = M(pos):get_inventory()
return techage.put_items(inv, "src", stack)
return techage.put_items(inv, "src", stack, idx)
end
end,
on_unpull_item = function(pos, in_dir, stack)

View File

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

View File

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

View File

@ -109,6 +109,7 @@ More water expected (2 m deep)!=Mehr Wasser erwartet (2 m tief)
Nacelle is missing=Die Gondel fehlt
Needle Powder=Nadel Pulver
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 plan available=Kein Plan verfügar
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 Base=TA3 Destillationsturm Basis
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 Fuel Oil=TA3 Schweröl
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!
Turned on:=Eingeschaltet:
Type=Typ
Unlock=Entsperren
Unlock connected chest@nif all slots are below 2000=Nachfolgende Kiste entsperren,@nsofern alle Slots <= 2000
Update=Update
Usmium Nuggets=Usmium Nuggets
Usmium Powder=Usmium Pulver
@ -399,6 +403,7 @@ full=voll
inlet/pipe error=Einlass/Röhrenfehler
inventory full=Inventar ist voll
item output blocked=Ausgang blockiert
keep assignment=Zuordnung beibehalten
light=Licht
loaded=geladen
needs power=benötigt Strom

View File

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

View File

@ -185,7 +185,7 @@ techage.register_node({"techage:ta4_sensor_chest"}, {
on_pull_item = function(pos, in_dir, num)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return techage.get_items(inv, "main", num)
return techage.get_items(pos, inv, "main", num)
end,
on_push_item = function(pos, in_dir, stack)
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
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.
@ -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)
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.
[ta2_distributor|image]

View File

@ -333,9 +333,9 @@ Ist alles Öl abgepumpt, kann auch die Ölpumpe wieder entfernt werden.
[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]
@ -607,7 +607,15 @@ Die Verarbeitungsleistung beträgt 6 Items alle 2 s.
### 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.
[ta3_distributor|image]
@ -696,3 +704,7 @@ Die Kelle dient zum Verputzen von Stromkabel. Siehe dazu "TA Stromkabel".
[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 ü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**
@ -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.
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.

View File

@ -75,7 +75,7 @@
- [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 Ö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)
- [Öl-Transport](./manual_ta3_DE.md#Öl-transport)
- [Öl-Verarbeitung](./manual_ta3_DE.md#Öl-verarbeitung)
@ -110,6 +110,7 @@
- [Techage Info Tool](./manual_ta3_DE.md#techage-info-tool)
- [TechAge Programmer](./manual_ta3_DE.md#techage-programmer)
- [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)
- [Windkraftanlage](./manual_ta4_DE.md#windkraftanlage)
- [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)
if meta:get_int("pull_dir") == in_dir then
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)

View File

@ -162,7 +162,7 @@ minetest.register_node("techage:oiltower5", {
})
minetest.register_node("techage:oil_drillbit", {
description = S("TA3 Drill Bit"),
description = S("TA3 Drill Pipe"),
drawtype = "plantlike",
tiles = {"techage_oil_drillbit.png"},
inventory_image = "techage_oil_drillbit_inv.png",
@ -175,7 +175,7 @@ minetest.register_node("techage:oil_drillbit", {
})
minetest.register_node("techage:oil_drillbit2", {
description = S("TA3 Drill Bit"),
description = S("TA3 Drill Pipe"),
drawtype = "plantlike",
tiles = {"techage_oil_drillbit.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
minetest.register_tool("techage:ta3_pipe_wrench", {
description = S("TA3 Pipe Wrench"),
minetest.register_tool("techage:ta3_drill_pipe_wrench", {
description = S("TA3 Drill Pipe Wrench"),
inventory_image = "techage_pipe_wrench.png",
wield_image = "techage_pipe_wrench.png",
groups = {cracky=1},
@ -32,9 +32,9 @@ minetest.register_tool("techage:ta3_pipe_wrench", {
})
minetest.register_craft({
output = "techage:ta3_pipe_wrench",
output = "techage:ta3_drill_pipe_wrench",
recipe = {
{"hyperloop:hypersteel_ingot", "hyperloop:hypersteel_ingot", ""},
{"default:diamond", "default:diamond", ""},
{"dye:red", "default:steel_ingot", "dye:red"},
{"default:steel_ingot", "", "default:steel_ingot"},
},