TA4 chest,quarry, and oil explorer reworked

This commit is contained in:
Joachim Stolberg 2020-03-31 18:27:15 +02:00
parent c4392723ff
commit 1024f8ccc5
11 changed files with 252 additions and 217 deletions

View File

@ -199,10 +199,17 @@ minetest.register_node("techage:chest_ta4", {
}) })
techage.register_node({"techage:chest_ta2", "techage:chest_ta3", "techage:chest_ta4"}, { techage.register_node({"techage:chest_ta2", "techage:chest_ta3", "techage:chest_ta4"}, {
on_pull_item = function(pos, in_dir, num) on_pull_item = function(pos, in_dir, num, item_name)
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) if item_name and inv:get_size("main") == 50 then -- TA4 chest?
local taken = inv:remove_item("main", {name = item_name, count = num})
if taken:get_count() > 0 then
return taken
end
else
return techage.get_items(inv, "main", num)
end
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

@ -56,6 +56,11 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player)
return 0 return 0
end end
local nvm = techage.get_nvm(pos)
if CRD(pos).State:get_state(nvm) ~= techage.STOPPED then
return 0
end
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
local list = inv:get_list(listname) local list = inv:get_list(listname)
if list[index]:get_count() == 0 then if list[index]:get_count() == 0 then
@ -71,6 +76,11 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
return 0 return 0
end end
local nvm = techage.get_nvm(pos)
if CRD(pos).State:get_state(nvm) ~= techage.STOPPED then
return 0
end
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
inv:set_stack(listname, index, nil) inv:set_stack(listname, index, nil)
return 0 return 0

View File

@ -37,12 +37,8 @@ local Level2Idx = {[2]=1, [1]=2, [0]=3, [-1]=4, [-2]=5, [-3]=6,
local function formspec(self, pos, nvm) local function formspec(self, pos, nvm)
local tooltip = S("Start level = 0\nmeans the same Y-level\nas the quarry is placed") local tooltip = S("Start level = 0\nmeans the same Y-level\nas the quarry is placed")
local level = "-" local level = nvm.level or "-"
local index = "-" local index = nvm.index or "-"
if nvm.quarry_pos then
level = nvm.quarry_pos.y - pos.y
index = nvm.idx
end
local depth_list = "1,2,3,5,10,15,20,25,40,60,80" local depth_list = "1,2,3,5,10,15,20,25,40,60,80"
if CRD(pos).stage == 3 then if CRD(pos).stage == 3 then
depth_list = "1,2,3,5,10,15,20,25,40" depth_list = "1,2,3,5,10,15,20,25,40"
@ -53,24 +49,24 @@ local function formspec(self, pos, nvm)
nvm.start_level = nvm.start_level or -1 nvm.start_level = nvm.start_level or -1
return "size[8,8]".. return "size[8,8]"..
default.gui_bg.. default.gui_bg..
default.gui_bg_img.. default.gui_bg_img..
default.gui_slots.. default.gui_slots..
"box[0,-0.1;7.8,0.5;#c6e8ff]".. "box[0,-0.1;7.8,0.5;#c6e8ff]"..
"label[3.5,-0.1;"..minetest.colorize( "#000000", S("Quarry")).."]".. "label[3.5,-0.1;"..minetest.colorize( "#000000", S("Quarry")).."]"..
techage.question_mark_help(8, tooltip).. techage.question_mark_help(8, tooltip)..
"dropdown[0,0.8;1.5;level;2,1,0,-1,-2,-3,-5,-10,-15,-20;"..Level2Idx[nvm.start_level].."]".. "dropdown[0,0.8;1.5;level;2,1,0,-1,-2,-3,-5,-10,-15,-20;"..Level2Idx[nvm.start_level].."]"..
"label[1.6,0.9;"..S("Start level").."]".. "label[1.6,0.9;"..S("Start level").."]"..
"dropdown[0,1.8;1.5;depth;"..depth_list..";"..Depth2Idx[nvm.quarry_depth].."]".. "dropdown[0,1.8;1.5;depth;"..depth_list..";"..Depth2Idx[nvm.quarry_depth].."]"..
"label[1.6,1.9;"..S("Digging depth").."]".. "label[1.6,1.9;"..S("Digging depth").."]"..
"label[0,2.9;"..S("level").."="..level..", "..S("pos=")..index.."/25]".. "label[0,2.9;"..S("level").."="..level..", "..S("pos=")..index.."/25]"..
"list[context;main;5,0.8;3,3;]".. "list[context;main;5,0.8;3,3;]"..
"image[4,0.8;1,1;"..techage.get_power_image(pos, nvm).."]".. "image[4,0.8;1,1;"..techage.get_power_image(pos, nvm).."]"..
"image_button[4,2.8;1,1;".. self:get_state_button_image(nvm) ..";state_button;]".. "image_button[4,2.8;1,1;".. self:get_state_button_image(nvm) ..";state_button;]"..
"tooltip[4,2.8;1,1;"..self:get_state_tooltip(nvm).."]".. "tooltip[4,2.8;1,1;"..self:get_state_tooltip(nvm).."]"..
"list[current_player;main;0,4.3;8,4;]".. "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
local function play_sound(pos) local function play_sound(pos)
@ -96,14 +92,13 @@ local function stop_sound(pos)
end end
local function on_node_state_change(pos, old_state, new_state) local function on_node_state_change(pos, old_state, new_state)
local mem = techage.get_mem(pos)
local owner = M(pos):get_string("owner")
mem.co = nil
techage.unmark_position(owner)
if new_state == techage.RUNNING then if new_state == techage.RUNNING then
play_sound(pos) play_sound(pos)
elseif new_state == techage.STOP then
local nvm = techage.get_nvm(pos)
nvm.quarry_pos = nil
stop_sound(pos)
else else
local nvm = techage.get_nvm(pos)
stop_sound(pos) stop_sound(pos)
end end
end end
@ -128,13 +123,20 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
return stack:get_count() return stack:get_count()
end end
local QuarrySchedule = {3,0,0,3,3,3,3,2,2,2,2,1,1,1,1,0,3,0,0,3,3,2,2,1,0} local QuarryPath = {
3,3,3,3,2,
1,1,1,1,2,
3,3,3,3,2,
1,1,1,1,2,
3,3,3,3,2,
}
local function get_next_pos(pos, facedir, dir) local function get_next_pos(pos, facedir, idx)
facedir = (facedir + dir) % 4 facedir = (facedir + QuarryPath[idx]) % 4
return vector.add(pos, core.facedir_to_dir(facedir)) return vector.add(pos, core.facedir_to_dir(facedir))
end end
-- pos is the quarry pos, y_pos the current dug level
local function get_corner_positions(pos, facedir, y_pos) local function get_corner_positions(pos, facedir, y_pos)
local start_pos = get_pos(pos, facedir, "L") local start_pos = get_pos(pos, facedir, "L")
local pos1 = get_pos(start_pos, facedir, "F", 2) local pos1 = get_pos(start_pos, facedir, "F", 2)
@ -145,57 +147,90 @@ local function get_corner_positions(pos, facedir, y_pos)
return pos1, pos2 return pos1, pos2
end end
local function check_protection(pos, nvm, facedir, owner) local function is_air_level(pos1, pos2)
local pos1, pos2 = get_corner_positions(pos, facedir, nvm.start_y) return #minetest.find_nodes_in_area(pos1, pos2, {"air"}) == 25
while true do
if minetest.is_protected(pos1, owner) then
return false
end
if minetest.is_protected(pos2, owner) then
return false
end
if pos1.y < nvm.stop_y then
break
end
pos1.y = pos1.y - 5
pos2.y = pos2.y - 5
end
return true
end end
local function skip_air_levels(pos, nvm, facedir, owner) local function mark_area(pos1, pos2, owner)
local pos1, pos2
pos1, pos2 = get_corner_positions(pos, facedir, nvm.start_y)
while pos1.y >= nvm.stop_y do
local lPos = minetest.find_nodes_in_area(pos1, pos2, {"air"})
if #lPos ~= 25 then break end
pos1.y = pos1.y - 1
pos2.y = pos2.y - 1
end
-- quarry block position with start y-level
nvm.quarry_pos = {x = pos.x, y = pos2.y, z = pos.z}
pos1.y = pos1.y + 0.2 pos1.y = pos1.y + 0.2
techage.mark_cube(owner, pos1, pos2, "quarry", "#FF0000", 20) techage.mark_cube(owner, pos1, pos2, "quarry", "#FF0000", 20)
pos1.y = pos1.y - 0.2
end end
local function can_start(pos, nvm, state) local function peek_node(qpos)
local node = techage.get_node_lvm(qpos)
local ndef = minetest.registered_nodes[node.name]
if techage.can_node_dig(node, ndef) then
return techage.dropped_node(node, ndef)
end
end
local function add_to_inv(pos, item_name)
local inv = M(pos):get_inventory()
if inv:room_for_item("main", {name = item_name}) then
inv:add_item("main", {name = item_name})
return true
end
return false
end
local function quarry_task(pos, crd, nvm)
nvm.start_level = nvm.start_level or 0
nvm.quarry_depth = nvm.quarry_depth or 1
local y_first = pos.y + nvm.start_level
local y_last = y_first - nvm.quarry_depth + 1
local facedir = minetest.get_node(pos).param2 local facedir = minetest.get_node(pos).param2
local owner = M(pos):get_string("owner") local owner = M(pos):get_string("owner")
nvm.start_level = nvm.start_level or 0 nvm.level = 1
nvm.quarry_depth = nvm.quarry_depth or 1 for y_curr = y_first, y_last, -1 do
nvm.start_y = pos.y + nvm.start_level local pos1, pos2 = get_corner_positions(pos, facedir, y_curr)
nvm.stop_y = nvm.start_y - nvm.quarry_depth + 1 local qpos = {x = pos1.x, y = pos1.y, z = pos1.z}
nvm.idx = nvm.idx or 1
if minetest.is_area_protected(pos1, pos2, owner, 5) then
crd.State:fault(pos, nvm, S("area is protected"))
return
end
if not is_air_level(pos1, pos2) then
mark_area(pos1, pos2, owner)
coroutine.yield()
nvm.index = 1
for i = 1, 25 do
local item_name = peek_node(qpos)
if item_name then
if add_to_inv(pos, item_name) then
minetest.remove_node(qpos)
crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS, 1)
else
crd.State:blocked(pos, nvm, S("inventory full"))
end
coroutine.yield()
end
qpos = get_next_pos(qpos, facedir, i)
nvm.index = nvm.index + 1
end
techage.unmark_position(owner)
end
nvm.level = nvm.level + 1
end
crd.State:stop(pos, nvm, S("finished"))
end
if state == techage.STOPPED then local function keep_running(pos, elapsed)
nvm.idx = 1 local mem = techage.get_mem(pos)
if not mem.co then
mem.co = coroutine.create(quarry_task)
end end
if not check_protection(pos, nvm, facedir, owner) then
return S("Quarry area is protected") local nvm = techage.get_nvm(pos)
local crd = CRD(pos)
coroutine.resume(mem.co, pos, crd, nvm)
if techage.is_activeformspec(pos) then
M(pos):set_string("formspec", formspec(crd.State, pos, nvm))
end end
skip_air_levels(pos, nvm, facedir, owner)
return true
end end
local function on_rightclick(pos, node, clicker) local function on_rightclick(pos, node, clicker)
@ -204,58 +239,6 @@ local function on_rightclick(pos, node, clicker)
M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm)) M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm))
end end
local function quarry_next_node(pos, crd, nvm, inv)
if nvm.quarry_pos then
local facedir = minetest.get_node(pos).param2
if nvm.idx <= #QuarrySchedule then
nvm.quarry_pos = get_next_pos(nvm.quarry_pos, facedir, QuarrySchedule[nvm.idx])
nvm.idx = nvm.idx + 1
elseif nvm.quarry_pos.y > nvm.stop_y then
local owner = M(pos):get_string("owner")
local pos1, pos2
pos1, pos2 = get_corner_positions(pos, facedir, nvm.quarry_pos.y - 1)
-- quarry block position with new y-level
nvm.quarry_pos = {x = pos.x, y = pos2.y, z = pos.z}
nvm.idx = 1
pos1.y = pos1.y + 0.2
techage.mark_cube(owner, pos1, pos2, "quarry", "#FF0000", 20)
else
nvm.idx = 1
nvm.quarry_pos = nil
crd.State:stop(pos, nvm)
return
end
local node = techage.get_node_lvm(nvm.quarry_pos)
local ndef = minetest.registered_nodes[node.name]
if techage.can_node_dig(node, ndef) then
local drop_name = techage.dropped_node(node, ndef)
if drop_name then
local inv = M(pos):get_inventory()
if inv:room_for_item("main", {name = drop_name}) then
minetest.remove_node(nvm.quarry_pos)
inv:add_item("main", {name = drop_name})
crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS, 1)
else
crd.State:blocked(pos, nvm)
end
end
end
end
end
local function keep_running(pos, elapsed)
local nvm = techage.get_nvm(pos)
local crd = CRD(pos)
local inv = M(pos):get_inventory()
if inv then
quarry_next_node(pos, crd, nvm, inv)
end
if techage.is_activeformspec(pos) then
M(pos):set_string("formspec", formspec(crd.State, pos, nvm))
end
end
local function can_dig(pos, player) local function can_dig(pos, player)
if minetest.is_protected(pos, player:get_player_name()) then if minetest.is_protected(pos, player:get_player_name()) then
return false return false
@ -269,11 +252,12 @@ local function on_receive_fields(pos, formname, fields, player)
return return
end end
local nvm = techage.get_nvm(pos) local nvm = techage.get_nvm(pos)
local mem = techage.get_mem(pos)
if fields.depth then if fields.depth then
if tonumber(fields.depth) ~= nvm.quarry_depth then if tonumber(fields.depth) ~= nvm.quarry_depth then
nvm.quarry_depth = tonumber(fields.depth) nvm.quarry_depth = tonumber(fields.depth)
nvm.quarry_pos = nil mem.co = nil
CRD(pos).State:stop(pos, nvm) CRD(pos).State:stop(pos, nvm)
end end
end end
@ -281,7 +265,7 @@ local function on_receive_fields(pos, formname, fields, player)
if fields.level then if fields.level then
if tonumber(fields.level) ~= nvm.start_level then if tonumber(fields.level) ~= nvm.start_level then
nvm.start_level = tonumber(fields.level) nvm.start_level = tonumber(fields.level)
nvm.quarry_pos = nil mem.co = nil
CRD(pos).State:stop(pos, nvm) CRD(pos).State:stop(pos, nvm)
end end
end end
@ -360,13 +344,11 @@ local node_name_ta2, node_name_ta3, node_name_ta4 =
standby_ticks = STANDBY_TICKS, standby_ticks = STANDBY_TICKS,
formspec = formspec, formspec = formspec,
tubing = tubing, tubing = tubing,
can_start = can_start,
on_state_change = on_node_state_change, on_state_change = on_node_state_change,
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local inv = M(pos):get_inventory() local inv = M(pos):get_inventory()
local nvm = techage.get_nvm(pos) local nvm = techage.get_nvm(pos)
inv:set_size('main', 9) inv:set_size('main', 9)
nvm.quarry_pos = nil
M(pos):set_string("owner", placer:get_player_name()) M(pos):set_string("owner", placer:get_player_name())
end, end,
can_dig = can_dig, can_dig = can_dig,

View File

@ -684,14 +684,14 @@ techage.manual_DE.aText = {
"\n".. "\n"..
"\n".. "\n"..
"\n", "\n",
"Mit dem Ölexplorer kannst du nach Öl suchen. Dazu den Block auf den Boden setzen und mit Rechtsklick die Suche starten. Der Ölexplorer kann oberirdisch und unterirdisch in Tiefen bis zu -50 Meter eingesetzt werden.\n".. "Mit dem Ölexplorer kannst du nach Öl suchen. Dazu den Block auf den Boden setzen und mit Rechtsklick die Suche starten. Der Ölexplorer kann oberirdisch und unterirdisch in allen Tiefen eingesetzt werden.\n"..
"Über die Chat-Ausgabe wird dir angezeigt\\, in welcher Tiefe nach Öl gesucht wurde und wie viel Öl (oil) gefunden wurde.\n".. "Über die Chat-Ausgabe wird dir angezeigt\\, in welcher Tiefe nach Öl gesucht wurde und wie viel Öl (oil) gefunden wurde.\n"..
"Du kannst bis zu 4 mal auf den Block klicken\\, um auch in tieferen Bereichen nach Öl zu suchen. Ölfelder haben eine Größe von 2000 bis zu 20000 Items.\n".. "Du kannst mehrfach auf den Block klicken\\, um auch in tieferen Bereichen nach Öl zu suchen. Ölfelder haben eine Größe von 4000 bis zu 20000 Items.\n"..
"\n".. "\n"..
"Falls die Suche erfolglos war\\, musst du den Block ca. 16 m weiter setzen.\n".. "Falls die Suche erfolglos war\\, musst du den Block ca. 16 m weiter setzen.\n"..
"Der Ölexplorer sucht immer innerhalb des ganzen Map-Blocks und darunter nach Öl\\, in dem er gesetzt wurde. Eine erneute Suche im gleichen Map-Block (16x16 Feld) macht daher keinen Sinn.\n".. "Der Ölexplorer sucht immer innerhalb des ganzen Map-Blocks und darunter nach Öl\\, in dem er gesetzt wurde. Eine erneute Suche im gleichen Map-Block (16x16 Feld) macht daher keinen Sinn.\n"..
"\n".. "\n"..
"Falls Öl gefunden wurde\\, wird die Stelle für den Bohrturm angezeigt. Die Mitte des angezeigten Bereiches am besten gleich mit einem Schild markieren und den ganzen Bereich gegen fremde Spieler schützen.\n".. "Falls Öl gefunden wurde\\, wird die Stelle für den Bohrturm angezeigt. Du musst den Bohrturm innerhalb des angezeigten Bereiches errichten\\, die Stelle am besten gleich mit einem Schild markieren und den ganzen Bereich gegen fremde Spieler schützen.\n"..
"\n".. "\n"..
"Gib die Suche nach Öl nicht zu schnell auf. Es kann wenn du Pech hast\\, sehr lange dauern\\, bis du eine Ölquelle gefunden hast.\n".. "Gib die Suche nach Öl nicht zu schnell auf. Es kann wenn du Pech hast\\, sehr lange dauern\\, bis du eine Ölquelle gefunden hast.\n"..
"Es macht auch keinen Sinn\\, einen Bereich den ein anderer Spieler bereits abgesucht hat\\, nochmals abzusuchen. Die Chance\\, irgendwo Öl zu finden\\, ist für alle Spieler gleich.\n".. "Es macht auch keinen Sinn\\, einen Bereich den ein anderer Spieler bereits abgesucht hat\\, nochmals abzusuchen. Die Chance\\, irgendwo Öl zu finden\\, ist für alle Spieler gleich.\n"..
@ -700,7 +700,7 @@ techage.manual_DE.aText = {
"\n".. "\n"..
"\n".. "\n"..
"\n", "\n",
"Die Ölbohrkiste muss genau an die Stelle gesetzt werden\\, die vom Ölexplorer angezeigt wurde.\n".. "Die Ölbohrkiste muss an die Stelle gesetzt werden\\, die vom Ölexplorer angezeigt wurde. An anderen Stellen nach Öl zu bohren ist zwecklos.\n"..
"Wird auf den Button der Ölbohrkiste geklickt\\, wird über der Kiste ein Bohrturm errichtet. Dies dauert einige Sekunden.\n".. "Wird auf den Button der Ölbohrkiste geklickt\\, wird über der Kiste ein Bohrturm errichtet. Dies dauert einige Sekunden.\n"..
"Die Ölbohrkiste hat 4 Seiten\\, bei IN muss das Bohrgestänge über Schieber angeliefert und bei OUT muss das Bohrmaterial abtransportiert werden. Über eine der anderen zwei Seiten muss die Ölbohrkiste mit Strom versorgt werden.\n".. "Die Ölbohrkiste hat 4 Seiten\\, bei IN muss das Bohrgestänge über Schieber angeliefert und bei OUT muss das Bohrmaterial abtransportiert werden. Über eine der anderen zwei Seiten muss die Ölbohrkiste mit Strom versorgt werden.\n"..
"\n".. "\n"..
@ -720,7 +720,7 @@ techage.manual_DE.aText = {
"\n", "\n",
"Der Öltank ist die große Ausführung des TA3 Tanks (siehe Flüssigkeiten -> TA3 Tank).\n".. "Der Öltank ist die große Ausführung des TA3 Tanks (siehe Flüssigkeiten -> TA3 Tank).\n"..
"\n".. "\n"..
"Der große Tank kann 4000 Einheiten Öl aufnehmen.\n".. "Der große Tank kann 4000 Einheiten Öl\\, aber auch jede andere Art von Flüssigkeit aufnehmen.\n"..
"\n".. "\n"..
"\n".. "\n"..
"\n", "\n",
@ -1329,6 +1329,8 @@ techage.manual_DE.aText = {
"\n", "\n",
"Die TA4 8x2000 Kiste hat kein normales Inventar wir andere Kisten\\, sondern verfügt über 8 Speicher\\, wobei jeder Speicher bis zu 2000 Items einer Sorte aufnehmen kann. Über die orangefarbenen Taster können Items in den Speicher verschoben bzw. wieder heraus geholt werden. Die Kiste kann auch wie sonst üblich mit einem Schieber (TA2\\, TA3 oder TA4) gefüllt bzw. geleert werden.\n".. "Die TA4 8x2000 Kiste hat kein normales Inventar wir andere Kisten\\, sondern verfügt über 8 Speicher\\, wobei jeder Speicher bis zu 2000 Items einer Sorte aufnehmen kann. Über die orangefarbenen Taster können Items in den Speicher verschoben bzw. wieder heraus geholt werden. Die Kiste kann auch wie sonst üblich mit einem Schieber (TA2\\, TA3 oder TA4) gefüllt bzw. geleert werden.\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"..
"\n"..
"Der Kiste besitzt ein zusätzliches Kommandos für den Lua Controller:\n".. "Der Kiste besitzt ein zusätzliches Kommandos für den Lua Controller:\n"..
"\n".. "\n"..
" - 'count' dient zur Anfrage\\, wie viele Items in der Kiste sind.\nBeispiel 1: '$read_data(CHEST\\, \"count\")' --> Summe der Items über alle 8 Speicher\nBeispiel 2: '$read_data(CHEST\\, \"count\"\\, 2)' --> Anzahl der Items in Speicher 2 (zweiter von links)\n".. " - 'count' dient zur Anfrage\\, wie viele Items in der Kiste sind.\nBeispiel 1: '$read_data(CHEST\\, \"count\")' --> Summe der Items über alle 8 Speicher\nBeispiel 2: '$read_data(CHEST\\, \"count\"\\, 2)' --> Anzahl der Items in Speicher 2 (zweiter von links)\n"..

View File

@ -101,6 +101,7 @@ Nacelle is missing=Die Gondel fehlt
Needle Powder=Nadel Pulver Needle Powder=Nadel Pulver
Network Data=Netzwerkdaten Network Data=Netzwerkdaten
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 oil found=Kein Öl gefunden
No plan available=Kein Plan verfügar No plan available=Kein Plan verfügar
No wind at this altitude!=Kein Wind auf dieser Höhe No wind at this altitude!=Kein Wind auf dieser Höhe
Node number to send the events to=Knotennummer zum Senden der Events Node number to send the events to=Knotennummer zum Senden der Events
@ -129,7 +130,6 @@ Pumpjack=Ölpumpe
Punch the block to make the area visible.=Schlage auf den Bock um den Bereich anzuzeigen. Punch the block to make the area visible.=Schlage auf den Bock um den Bereich anzuzeigen.
Pusher=Schieber Pusher=Schieber
Quarry=Steinbrecher Quarry=Steinbrecher
Quarry area is protected=Bereich ist geschützt
Recipe=Rezept Recipe=Rezept
Red Mud=Rotschlamm Red Mud=Rotschlamm
Red Mud Barrel=Rotschlamm Fass Red Mud Barrel=Rotschlamm Fass
@ -344,7 +344,6 @@ Water Barrel=Wasserfass
Water Boiler=Wasserboiler Water Boiler=Wasserboiler
Water Pump=Wasserpumpe Water Pump=Wasserpumpe
[Bucket] Lava can only be placed below sea level!=Lava kann nur unterhalb der Meerehöhe platziert werden! [Bucket] Lava can only be placed below sea level!=Lava kann nur unterhalb der Meerehöhe platziert werden!
[TA Oil] No oil exploration possible at this depth! = [TA Oil] Keine Ölsuche in dieser Tiefe möglich!
[TA4 Wind Turbine]=[TA4 Windkraftanlage] [TA4 Wind Turbine]=[TA4 Windkraftanlage]
[TA] Area is protected!=[TA] Bereich ist geschützt [TA] Area is protected!=[TA] Bereich ist geschützt
[TA] Derrick is being built!=[TA] Bohrturm wird errichtet [TA] Derrick is being built!=[TA] Bohrturm wird errichtet
@ -360,14 +359,17 @@ Water Pump=Wasserpumpe
accept=akzeptieren accept=akzeptieren
added=hinzugefügt wird added=hinzugefügt wird
added or removed=hinzugefügt oder entfernt wird added or removed=hinzugefügt oder entfernt wird
block can't be dug=Block kann nicht abgebaut werden area is protected=Bereich ist geschützt
commands like: help=Kommandos wie: help commands like: help=Kommandos wie: help
connected with=verbunden mit connected with=verbunden mit
depth=Tiefe depth=Tiefe
did you check the plan?=hast du den Plan geprüft? did you check the plan?=hast du den Plan geprüft?
empty=leer empty=leer
finished=fertig
full=voll full=voll
inlet/pipe error=Einlass/Röhrenfehler inlet/pipe error=Einlass/Röhrenfehler
inventory full=Inventar ist voll
item output blocked=Ausgang blockiert
level=Ebene level=Ebene
light=Licht light=Licht
loaded=geladen loaded=geladen
@ -390,4 +392,7 @@ stopped=gestoppt
storage empty?=Speicher leer? storage empty?=Speicher leer?
water temperature=Wassertemperatur water temperature=Wassertemperatur
wrong storage diameter=Falscher Wärmespeicher-Durchmesser wrong storage diameter=Falscher Wärmespeicher-Durchmesser
##### not used anymore ##### ##### not used anymore #####
block can't be dug=Block kann nicht abgebaut werden
Quarry area is protected=Bereich ist geschützt
[TA Oil] No oil exploration possible at this depth! = [TA Oil] Keine Ölsuche in dieser Tiefe möglich!

View File

@ -99,6 +99,7 @@ Nacelle is missing=
Needle Powder= Needle Powder=
Network Data= Network Data=
No network or active generator available!= No network or active generator available!=
No oil found=
No plan available= No plan available=
No wind at this altitude!= No wind at this altitude!=
Node number to send the events to= Node number to send the events to=
@ -127,7 +128,6 @@ Pumpjack=
Punch the block to make the area visible.= Punch the block to make the area visible.=
Pusher= Pusher=
Quarry= Quarry=
Quarry area is protected=
Recipe= Recipe=
Red Mud= Red Mud=
Red Mud Barrel= Red Mud Barrel=
@ -342,7 +342,6 @@ Water Barrel=
Water Boiler= Water Boiler=
Water Pump= Water Pump=
[Bucket] Lava can only be placed below sea level!= [Bucket] Lava can only be placed below sea level!=
[TA Oil] No oil exploration possible at this depth! =
[TA4 Wind Turbine]= [TA4 Wind Turbine]=
[TA] Area is protected!= [TA] Area is protected!=
[TA] Derrick is being built!= [TA] Derrick is being built!=
@ -358,14 +357,17 @@ Water Pump=
accept= accept=
added= added=
added or removed= added or removed=
block can't be dug= area is protected=
commands like: help= commands like: help=
connected with= connected with=
depth= depth=
did you check the plan?= did you check the plan?=
empty= empty=
finished=
full= full=
inlet/pipe error= inlet/pipe error=
inventory full=
item output blocked=
level= level=
light= light=
loaded= loaded=

View File

@ -294,14 +294,14 @@ Dazu dienen dir TA3 Ölexplorer, TA3 Ölbohrkiste und TA3 Ölpumpe.
### TA3 Ölexplorer / Oil Explorer ### TA3 Ölexplorer / Oil Explorer
Mit dem Ölexplorer kannst du nach Öl suchen. Dazu den Block auf den Boden setzen und mit Rechtsklick die Suche starten. Der Ölexplorer kann oberirdisch und unterirdisch in Tiefen bis zu -50 Meter eingesetzt werden. Mit dem Ölexplorer kannst du nach Öl suchen. Dazu den Block auf den Boden setzen und mit Rechtsklick die Suche starten. Der Ölexplorer kann oberirdisch und unterirdisch in allen Tiefen eingesetzt werden.
Über die Chat-Ausgabe wird dir angezeigt, in welcher Tiefe nach Öl gesucht wurde und wie viel Öl (oil) gefunden wurde. Über die Chat-Ausgabe wird dir angezeigt, in welcher Tiefe nach Öl gesucht wurde und wie viel Öl (oil) gefunden wurde.
Du kannst bis zu 4 mal auf den Block klicken, um auch in tieferen Bereichen nach Öl zu suchen. Ölfelder haben eine Größe von 2000 bis zu 20000 Items. Du kannst mehrfach auf den Block klicken, um auch in tieferen Bereichen nach Öl zu suchen. Ölfelder haben eine Größe von 4000 bis zu 20000 Items.
Falls die Suche erfolglos war, musst du den Block ca. 16 m weiter setzen. Falls die Suche erfolglos war, musst du den Block ca. 16 m weiter setzen.
Der Ölexplorer sucht immer innerhalb des ganzen Map-Blocks und darunter nach Öl, in dem er gesetzt wurde. Eine erneute Suche im gleichen Map-Block (16x16 Feld) macht daher keinen Sinn. Der Ölexplorer sucht immer innerhalb des ganzen Map-Blocks und darunter nach Öl, in dem er gesetzt wurde. Eine erneute Suche im gleichen Map-Block (16x16 Feld) macht daher keinen Sinn.
Falls Öl gefunden wurde, wird die Stelle für den Bohrturm angezeigt. Die Mitte des angezeigten Bereiches am besten gleich mit einem Schild markieren und den ganzen Bereich gegen fremde Spieler schützen. Falls Öl gefunden wurde, wird die Stelle für den Bohrturm angezeigt. Du musst den Bohrturm innerhalb des angezeigten Bereiches errichten, die Stelle am besten gleich mit einem Schild markieren und den ganzen Bereich gegen fremde Spieler schützen.
Gib die Suche nach Öl nicht zu schnell auf. Es kann wenn du Pech hast, sehr lange dauern, bis du eine Ölquelle gefunden hast. Gib die Suche nach Öl nicht zu schnell auf. Es kann wenn du Pech hast, sehr lange dauern, bis du eine Ölquelle gefunden hast.
Es macht auch keinen Sinn, einen Bereich den ein anderer Spieler bereits abgesucht hat, nochmals abzusuchen. Die Chance, irgendwo Öl zu finden, ist für alle Spieler gleich. Es macht auch keinen Sinn, einen Bereich den ein anderer Spieler bereits abgesucht hat, nochmals abzusuchen. Die Chance, irgendwo Öl zu finden, ist für alle Spieler gleich.
@ -313,7 +313,7 @@ Der Ölexplorer kann immer wieder zur Suche nach Öl eingesetzt werden.
### TA3 Ölbohrkiste / Oil Drill Box ### TA3 Ölbohrkiste / Oil Drill Box
Die Ölbohrkiste muss genau an die Stelle gesetzt werden, die vom Ölexplorer angezeigt wurde. Die Ölbohrkiste muss an die Stelle gesetzt werden, die vom Ölexplorer angezeigt wurde. An anderen Stellen nach Öl zu bohren ist zwecklos.
Wird auf den Button der Ölbohrkiste geklickt, wird über der Kiste ein Bohrturm errichtet. Dies dauert einige Sekunden. Wird auf den Button der Ölbohrkiste geklickt, wird über der Kiste ein Bohrturm errichtet. Dies dauert einige Sekunden.
Die Ölbohrkiste hat 4 Seiten, bei IN muss das Bohrgestänge über Schieber angeliefert und bei OUT muss das Bohrmaterial abtransportiert werden. Über eine der anderen zwei Seiten muss die Ölbohrkiste mit Strom versorgt werden. Die Ölbohrkiste hat 4 Seiten, bei IN muss das Bohrgestänge über Schieber angeliefert und bei OUT muss das Bohrmaterial abtransportiert werden. Über eine der anderen zwei Seiten muss die Ölbohrkiste mit Strom versorgt werden.
@ -342,7 +342,7 @@ Das Bohrgestänge wird für die Bohrung benötigt. Es werden so viele Bohrgestä
Der Öltank ist die große Ausführung des TA3 Tanks (siehe Flüssigkeiten -> TA3 Tank). Der Öltank ist die große Ausführung des TA3 Tanks (siehe Flüssigkeiten -> TA3 Tank).
Der große Tank kann 4000 Einheiten Öl aufnehmen. Der große Tank kann 4000 Einheiten Öl, aber auch jede andere Art von Flüssigkeit aufnehmen.
[oiltank|image] [oiltank|image]

View File

@ -510,6 +510,8 @@ Die Funktion entspricht der von TA3. Die Kiste kann aber mehr Inhalt aufnehmen.
Die TA4 8x2000 Kiste hat kein normales Inventar wir andere Kisten, sondern verfügt über 8 Speicher, wobei jeder Speicher bis zu 2000 Items einer Sorte aufnehmen kann. Über die orangefarbenen Taster können Items in den Speicher verschoben bzw. wieder heraus geholt werden. Die Kiste kann auch wie sonst üblich mit einem Schieber (TA2, TA3 oder TA4) gefüllt bzw. geleert werden. Die TA4 8x2000 Kiste hat kein normales Inventar wir andere Kisten, sondern verfügt über 8 Speicher, wobei jeder Speicher bis zu 2000 Items einer Sorte aufnehmen kann. Über die orangefarbenen Taster können Items in den Speicher verschoben bzw. wieder heraus geholt werden. Die Kiste kann auch wie sonst üblich mit einem Schieber (TA2, TA3 oder TA4) gefüllt bzw. geleert werden.
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.
Der Kiste besitzt ein zusätzliches Kommandos für den Lua Controller: Der Kiste besitzt ein zusätzliches Kommandos für den Lua Controller:
- `count` dient zur Anfrage, wie viele Items in der Kiste sind. - `count` dient zur Anfrage, wie viele Items in der Kiste sind.

View File

@ -21,7 +21,7 @@ local CRD = function(pos) return (minetest.registered_nodes[techage.get_node_lvm
local STANDBY_TICKS = 1 local STANDBY_TICKS = 1
local COUNTDOWN_TICKS = 6 local COUNTDOWN_TICKS = 6
local CYCLE_TIME = 2 ---------------------------------------- TODO 16 local CYCLE_TIME = 16
local formspec0 = "size[5,4]".. local formspec0 = "size[5,4]"..
default.gui_bg.. default.gui_bg..
@ -56,7 +56,7 @@ local function formspec(self, pos, nvm)
if not nvm.assemble_build then if not nvm.assemble_build then
return formspec0 return formspec0
end end
local depth = M(pos):get_int("depth") local depth = M(pos):get_int("depth") - 7 -- oil bubble
local curr_depth = pos.y - (nvm.drill_pos or pos).y local curr_depth = pos.y - (nvm.drill_pos or pos).y
return "size[8,8]".. return "size[8,8]"..
default.gui_bg.. default.gui_bg..
@ -139,9 +139,6 @@ local function drilling(pos, crd, nvm, inv)
elseif node.name == "techage:oilstorage" then -- old oil bubble node? elseif node.name == "techage:oilstorage" then -- old oil bubble node?
nvm.drill_pos.y = nvm.drill_pos.y-1 nvm.drill_pos.y = nvm.drill_pos.y-1
crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS) crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS)
elseif node.name == "techage:oil_source" then
M(pos):set_string("oil_found", "true")
crd.State:stop(pos, nvm)
elseif minetest.is_protected(nvm.drill_pos, owner) then elseif minetest.is_protected(nvm.drill_pos, owner) then
crd.State:fault(pos, nvm, S("Drill area is protected")) crd.State:fault(pos, nvm, S("Drill area is protected"))
elseif node.name == "techage:oil_drillbit2" then elseif node.name == "techage:oil_drillbit2" then
@ -238,11 +235,14 @@ local tubing = {
end end
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 nvm = techage.get_nvm(pos)
if meta:get_int("push_dir") == in_dir or in_dir == 5 then if not nvm.assemble_locked then
local inv = M(pos):get_inventory() local meta = minetest.get_meta(pos)
CRD(pos).State:start_if_standby(pos) if meta:get_int("push_dir") == in_dir or in_dir == 5 then
return techage.put_items(inv, "src", stack) local inv = M(pos):get_inventory()
CRD(pos).State:start_if_standby(pos)
return techage.put_items(inv, "src", stack)
end
end end
end, end,
on_unpull_item = function(pos, in_dir, stack) on_unpull_item = function(pos, in_dir, stack)

View File

@ -17,14 +17,14 @@ local M = minetest.get_meta
local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end
local S = techage.S local S = techage.S
local PROBABILITY = 20 local PROBABILITY = 100
local OIL_MIN = 2000 local OIL_MIN = 4096
local OIL_MAX = 20000 local OIL_MAX = 20000
local DEPTH_MIN = 16 local DEPTH_MIN = 16
local DEPTH_MAX = 30*16 local DEPTH_MAX = 25*16
local DEPTH_STEP = 16 local DEPTH_STEP = 16
local YPOS_MAX = -6*16 local YPOS_MAX = -6*16 -- oil can found below this level
local RADIUS = 8 local OIL_BUBBLE_SIZE = 4096
local seed = tonumber(minetest.settings:get("techage_oil_exploration_seed")) or 1234 -- confidental! local seed = tonumber(minetest.settings:get("techage_oil_exploration_seed")) or 1234 -- confidental!
@ -58,29 +58,59 @@ local function center(coord)
return (math.floor(coord/16) * 16) + 8 return (math.floor(coord/16) * 16) + 8
end end
local function basis(coord)
return (math.floor(coord/16) * 16)
end
-- determine the mapblock coordinates
local function mapblock_coordinates(pos)
local pos1 = {x = basis(pos.x), y = basis(pos.y), z = basis(pos.z)}
local pos2 = {x = pos1.x + 15, y = pos1.y + 15, z = pos1.z + 15}
return pos1, pos2
end
local function calc_depth(pos, explore_pos) local function calc_depth(pos, explore_pos)
return pos.y - explore_pos.y + 1 return pos.y - explore_pos.y + 1
end end
local function gen_oil_slice(ypos, from, to, data, id) -- posC is the center position of the oil bubble
for x = from, to do -- idx is the vmdata index
for z = from, to do -- function returns the real position {x,y,z}
local idx = (x + (ypos * 16) + (z * 16 * 16)) + 1 local function calc_vmdata_pos(posC, idx)
data[idx] = id local rest, xoffs, yoffs, zoffs
rest = idx - 1
xoffs = rest % 16
rest = math.floor(rest / 16)
zoffs = rest % 16
rest = math.floor(rest / 16)
yoffs = rest % 16
return {x = basis(posC.x) + xoffs, y = basis(posC.y) + yoffs, z = basis(posC.z) + zoffs}
end
local function calc_vmdata_index(xoffs, yoffs, zoffs)
return (xoffs + (yoffs * 16) + (zoffs * 16 * 16)) + 1
end
-- from/to are x/z-offsets (0..15) for one layer of oil within one mapblock
local function gen_oil_slice(yoffs, from, to, vmdata, id)
for xoffs = from, to do
for zoffs = from, to do
vmdata[calc_vmdata_index(xoffs, yoffs, zoffs)] = id
end end
end end
end end
local function gen_oil_bubble(data) local function gen_oil_bubble(vmdata)
local id = minetest.get_content_id("techage:oil_source") local id = minetest.get_content_id("techage:oil_source")
gen_oil_slice(1, 3, 12, data, id) gen_oil_slice(1, 3, 12, vmdata, id)
gen_oil_slice(2, 2, 13, data, id) gen_oil_slice(2, 2, 13, vmdata, id)
for offs = 3, 12 do for offs = 3, 12 do
gen_oil_slice(offs, 1, 14, data, id) gen_oil_slice(offs, 1, 14, vmdata, id)
end end
gen_oil_slice(13, 2, 13, data, id) gen_oil_slice(13, 2, 13, vmdata, id)
gen_oil_slice(14, 3, 12, data, id) gen_oil_slice(14, 3, 12, vmdata, id)
end end
local function useable_stone_block(data) local function useable_stone_block(data)
@ -91,14 +121,12 @@ local function useable_stone_block(data)
if not ValidGroundNodes[itemname] then if not ValidGroundNodes[itemname] then
local ndef = minetest.registered_nodes[itemname] local ndef = minetest.registered_nodes[itemname]
if InvalidGroundNodes[itemname] or not ndef or ndef.is_ground_content == false then if InvalidGroundNodes[itemname] or not ndef or ndef.is_ground_content == false then
print("useable_stone_block false", itemname)
return false return false
end end
end end
valid[id] = true valid[id] = true
end end
end end
print("useable_stone_block true")
return true return true
end end
@ -111,9 +139,16 @@ local function get_next_explore_pos(pos)
local d = calc_depth(pos, {y = ypos}) local d = calc_depth(pos, {y = ypos})
if d + DEPTH_STEP < DEPTH_MAX then if d + DEPTH_STEP < DEPTH_MAX then
ypos = ypos - DEPTH_STEP ypos = ypos - DEPTH_STEP
meta:set_int("exploration_ypos", ypos) local posC = {x = center(pos.x), y = center(ypos), z = center(pos.z)}
local node = techage.get_node_lvm(posC)
if node.name ~= "ignore" then
meta:set_int("exploration_ypos", ypos)
else
-- load world and pause for one step
minetest.emerge_area(posC, posC)
end
end end
print(minetest.pos_to_string({x = center(pos.x), y = center(ypos), z = center(pos.z)}))
return {x = center(pos.x), y = center(ypos), z = center(pos.z)} return {x = center(pos.x), y = center(ypos), z = center(pos.z)}
end end
@ -123,7 +158,8 @@ end
local function set_oil_amount(pos, amount) local function set_oil_amount(pos, amount)
minetest.set_node(pos, {name = "techage:oilstorage"}) minetest.set_node(pos, {name = "techage:oilstorage"})
return M(pos):set_int("oil_amount", amount) M(pos):set_int("oil_amount", amount)
M(pos):set_int("initial_oil_amount", amount)
end end
local function status(pos, player_name, explore_pos, amount) local function status(pos, player_name, explore_pos, amount)
@ -134,20 +170,17 @@ end
local function marker(player_name, pos) local function marker(player_name, pos)
local posC = {x = center(pos.x), y = pos.y, z = center(pos.z)} local posC = {x = center(pos.x), y = pos.y, z = center(pos.z)}
local pos1 = {x = posC.x - 1, y = posC.y - 1, z = posC.z - 1} local pos1 = {x = posC.x - 2, y = posC.y - 2, z = posC.z - 2}
local pos2 = {x = posC.x + 1, y = posC.y + 3, z = posC.z + 1} local pos2 = {x = posC.x + 2, y = posC.y + 5, z = posC.z + 2}
techage.switch_region(player_name, pos1, pos2) techage.switch_region(player_name, pos1, pos2)
end end
-- check if oil can be placed and if so, do it and return true -- check if oil can be placed and if so, do it and return true
local function generate_oil_bubble(posC, amount) local function generate_oil_bubble(posC, amount)
local pos1 = {x = posC.x - RADIUS, y = posC.y - RADIUS, z = posC.z - RADIUS} local pos1, pos2 = mapblock_coordinates(posC)
local pos2 = {x = posC.x + RADIUS - 1, y = posC.y + RADIUS - 1, z = posC.z + RADIUS - 1}
local vm = minetest.get_voxel_manip(pos1, pos2) local vm = minetest.get_voxel_manip(pos1, pos2)
local data = vm:get_data() local data = vm:get_data()
print("#data", #data)
if useable_stone_block(data) then if useable_stone_block(data) then
gen_oil_bubble(data) gen_oil_bubble(data)
vm:set_data(data) vm:set_data(data)
@ -159,26 +192,6 @@ local function generate_oil_bubble(posC, amount)
return false return false
end end
-- replace oil by air
local function generate_air_bubble(posC)
local pos1 = {x = posC.x - RADIUS, y = posC.y - RADIUS, z = posC.z - RADIUS}
local pos2 = {x = posC.x + RADIUS - 1, y = posC.y + RADIUS - 1, z = posC.z + RADIUS - 1}
local vm = minetest.get_voxel_manip(pos1, pos2)
local data = vm:get_data()
local air = minetest.get_content_id("air")
local oil = minetest.get_content_id("techage:oil_source")
for i = 1, #data do
if date[i] == oil then
data[i] = air
end
end
vm:set_data(data)
vm:write_to_map()
vm:update_map()
end
local function explore_area(pos, node, player_name) local function explore_area(pos, node, player_name)
if M(pos):get_int("oil_amount") == 0 then -- nothing found so far? if M(pos):get_int("oil_amount") == 0 then -- nothing found so far?
local posC, amount local posC, amount
@ -193,7 +206,6 @@ local function explore_area(pos, node, player_name)
for i = 1,4 do for i = 1,4 do
posC = get_next_explore_pos(pos) posC = get_next_explore_pos(pos)
amount = oil_amount(posC) amount = oil_amount(posC)
print("explore", P2S(posC), amount)
if amount > 0 then if amount > 0 then
break break
end end
@ -300,19 +312,32 @@ function techage.explore.get_oil_info(pos)
depth = calc_depth(pos, posC) depth = calc_depth(pos, posC)
posC.y = posC.y - DEPTH_STEP posC.y = posC.y - DEPTH_STEP
end end
posC.y = posC.y + DEPTH_STEP
return {depth = depth, amount = amount, storage_pos = posC} return {depth = depth, amount = amount, storage_pos = posC}
end end
function techage.explore.get_oil_amount(posC) function techage.explore.get_oil_amount(posC)
return M(posC):get_int("oil_amount") local meta = M(posC)
if meta:get_int("initial_oil_amount") == 0 then
meta:set_int("initial_oil_amount", meta:get_int("oil_amount"))
end
return meta:get_int("oil_amount"), meta:get_int("initial_oil_amount")
end end
function techage.explore.dec_oil_amount(posC) function techage.explore.dec_oil_amount(posC)
local meta = M(posC) local oil_amount, oil_initial = techage.explore.get_oil_amount(posC)
local amount = meta:get_int("oil_amount") oil_amount = oil_amount - 1
meta:set_int("oil_amount", amount-1) M(posC):set_int("oil_amount", oil_amount)
return amount-1
local idx = math.floor(oil_amount * OIL_BUBBLE_SIZE / oil_initial)
idx = idx + 256 -- last level is stone, so add one level
if idx <= (OIL_BUBBLE_SIZE - 256) then -- first level is stone, too
local pos = calc_vmdata_pos(posC, idx)
local node = techage.get_node_lvm(pos)
print(idx, P2S(pos), node.name)
if node.name == "techage:oil_source" then
minetest.remove_node(pos)
end
end
return oil_amount
end end
-- generate_air_bubble(posC)
techage.explore.generate_air_bubble = generate_air_bubble

View File

@ -31,11 +31,10 @@ local CYCLE_TIME = 8
local function has_oil(pos, meta) local function has_oil(pos, meta)
local storage_pos = meta:get_string("storage_pos") local storage_pos = meta:get_string("storage_pos")
if storage_pos ~= "" then if storage_pos ~= "" then
local amount = techage.explore.get_oil_amount(P(storage_pos)) local amount, initial_amount = techage.explore.get_oil_amount(P(storage_pos))
if amount > 0 then if amount > 0 then
return true return true
end end
techage.explore.generate_air_bubble(P(storage_pos))
end end
end end
@ -58,11 +57,12 @@ local function formspec(self, pos, nvm)
default.gui_slots.. default.gui_slots..
"box[0,-0.1;4.8,0.5;#c6e8ff]".. "box[0,-0.1;4.8,0.5;#c6e8ff]"..
"label[1.5,-0.1;"..minetest.colorize( "#000000", S("Pumpjack")).."]".. "label[1.5,-0.1;"..minetest.colorize( "#000000", S("Pumpjack")).."]"..
"image[0.5,1.4;1,1;techage_liquid2_inv.png^[colorize:#000000^techage_liquid1_inv.png]".. "image[0.5,1.5;1,1;techage_liquid2_inv.png^[colorize:#000000^techage_liquid1_inv.png]"..
"image[4,0.8;1,1;"..techage.get_power_image(pos, nvm).."]".. "image[4,0.8;1,1;"..techage.get_power_image(pos, nvm).."]"..
"tooltip[4,0.8;1,1;"..S("needs power").."]".. "tooltip[4,0.8;1,1;"..S("needs power").."]"..
"label[0,2.5;"..S("Oil amount")..": "..amount.."]".. "label[0,0.8;"..S("Oil amount")..": "..amount.."]"..
"image_button[2.5,2.2;1,1;".. self:get_state_button_image(nvm) ..";state_button;]" "image_button[2,2.2;1,1;".. self:get_state_button_image(nvm) ..";state_button;]"..
"tooltip[2,2.2;1,1;"..self:get_state_tooltip(nvm).."]"
end end
local function play_sound(pos) local function play_sound(pos)