TA4 chest,quarry, and oil explorer reworked
This commit is contained in:
parent
c4392723ff
commit
1024f8ccc5
@ -199,10 +199,17 @@ minetest.register_node("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 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,
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
@ -56,6 +56,11 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
return 0
|
||||
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 list = inv:get_list(listname)
|
||||
if list[index]:get_count() == 0 then
|
||||
@ -71,6 +76,11 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
|
||||
return 0
|
||||
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()
|
||||
inv:set_stack(listname, index, nil)
|
||||
return 0
|
||||
|
@ -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 tooltip = S("Start level = 0\nmeans the same Y-level\nas the quarry is placed")
|
||||
local level = "-"
|
||||
local index = "-"
|
||||
if nvm.quarry_pos then
|
||||
level = nvm.quarry_pos.y - pos.y
|
||||
index = nvm.idx
|
||||
end
|
||||
local level = nvm.level or "-"
|
||||
local index = nvm.index or "-"
|
||||
local depth_list = "1,2,3,5,10,15,20,25,40,60,80"
|
||||
if CRD(pos).stage == 3 then
|
||||
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
|
||||
|
||||
return "size[8,8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
"box[0,-0.1;7.8,0.5;#c6e8ff]"..
|
||||
"label[3.5,-0.1;"..minetest.colorize( "#000000", S("Quarry")).."]"..
|
||||
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].."]"..
|
||||
"label[1.6,0.9;"..S("Start level").."]"..
|
||||
"dropdown[0,1.8;1.5;depth;"..depth_list..";"..Depth2Idx[nvm.quarry_depth].."]"..
|
||||
"label[1.6,1.9;"..S("Digging depth").."]"..
|
||||
"label[0,2.9;"..S("level").."="..level..", "..S("pos=")..index.."/25]"..
|
||||
"list[context;main;5,0.8;3,3;]"..
|
||||
"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;]"..
|
||||
"tooltip[4,2.8;1,1;"..self:get_state_tooltip(nvm).."]"..
|
||||
"list[current_player;main;0,4.3;8,4;]"..
|
||||
"listring[context;main]"..
|
||||
"listring[current_player;main]"
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
"box[0,-0.1;7.8,0.5;#c6e8ff]"..
|
||||
"label[3.5,-0.1;"..minetest.colorize( "#000000", S("Quarry")).."]"..
|
||||
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].."]"..
|
||||
"label[1.6,0.9;"..S("Start level").."]"..
|
||||
"dropdown[0,1.8;1.5;depth;"..depth_list..";"..Depth2Idx[nvm.quarry_depth].."]"..
|
||||
"label[1.6,1.9;"..S("Digging depth").."]"..
|
||||
"label[0,2.9;"..S("level").."="..level..", "..S("pos=")..index.."/25]"..
|
||||
"list[context;main;5,0.8;3,3;]"..
|
||||
"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;]"..
|
||||
"tooltip[4,2.8;1,1;"..self:get_state_tooltip(nvm).."]"..
|
||||
"list[current_player;main;0,4.3;8,4;]"..
|
||||
"listring[context;main]"..
|
||||
"listring[current_player;main]"
|
||||
end
|
||||
|
||||
local function play_sound(pos)
|
||||
@ -96,14 +92,13 @@ local function stop_sound(pos)
|
||||
end
|
||||
|
||||
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
|
||||
play_sound(pos)
|
||||
elseif new_state == techage.STOP then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.quarry_pos = nil
|
||||
stop_sound(pos)
|
||||
else
|
||||
local nvm = techage.get_nvm(pos)
|
||||
stop_sound(pos)
|
||||
end
|
||||
end
|
||||
@ -128,13 +123,20 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
|
||||
return stack:get_count()
|
||||
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)
|
||||
facedir = (facedir + dir) % 4
|
||||
local function get_next_pos(pos, facedir, idx)
|
||||
facedir = (facedir + QuarryPath[idx]) % 4
|
||||
return vector.add(pos, core.facedir_to_dir(facedir))
|
||||
end
|
||||
|
||||
-- pos is the quarry pos, y_pos the current dug level
|
||||
local function get_corner_positions(pos, facedir, y_pos)
|
||||
local start_pos = get_pos(pos, facedir, "L")
|
||||
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
|
||||
end
|
||||
|
||||
local function check_protection(pos, nvm, facedir, owner)
|
||||
local pos1, pos2 = get_corner_positions(pos, facedir, nvm.start_y)
|
||||
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
|
||||
local function is_air_level(pos1, pos2)
|
||||
return #minetest.find_nodes_in_area(pos1, pos2, {"air"}) == 25
|
||||
end
|
||||
|
||||
local function skip_air_levels(pos, nvm, facedir, 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}
|
||||
local function mark_area(pos1, pos2, owner)
|
||||
pos1.y = pos1.y + 0.2
|
||||
techage.mark_cube(owner, pos1, pos2, "quarry", "#FF0000", 20)
|
||||
pos1.y = pos1.y - 0.2
|
||||
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 owner = M(pos):get_string("owner")
|
||||
|
||||
nvm.start_level = nvm.start_level or 0
|
||||
nvm.quarry_depth = nvm.quarry_depth or 1
|
||||
nvm.start_y = pos.y + nvm.start_level
|
||||
nvm.stop_y = nvm.start_y - nvm.quarry_depth + 1
|
||||
nvm.idx = nvm.idx or 1
|
||||
nvm.level = 1
|
||||
for y_curr = y_first, y_last, -1 do
|
||||
local pos1, pos2 = get_corner_positions(pos, facedir, y_curr)
|
||||
local qpos = {x = pos1.x, y = pos1.y, z = pos1.z}
|
||||
|
||||
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
|
||||
nvm.idx = 1
|
||||
local function keep_running(pos, elapsed)
|
||||
local mem = techage.get_mem(pos)
|
||||
if not mem.co then
|
||||
mem.co = coroutine.create(quarry_task)
|
||||
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
|
||||
skip_air_levels(pos, nvm, facedir, owner)
|
||||
return true
|
||||
end
|
||||
|
||||
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))
|
||||
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)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return false
|
||||
@ -269,11 +252,12 @@ local function on_receive_fields(pos, formname, fields, player)
|
||||
return
|
||||
end
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
|
||||
if fields.depth then
|
||||
if tonumber(fields.depth) ~= nvm.quarry_depth then
|
||||
nvm.quarry_depth = tonumber(fields.depth)
|
||||
nvm.quarry_pos = nil
|
||||
mem.co = nil
|
||||
CRD(pos).State:stop(pos, nvm)
|
||||
end
|
||||
end
|
||||
@ -281,7 +265,7 @@ local function on_receive_fields(pos, formname, fields, player)
|
||||
if fields.level then
|
||||
if tonumber(fields.level) ~= nvm.start_level then
|
||||
nvm.start_level = tonumber(fields.level)
|
||||
nvm.quarry_pos = nil
|
||||
mem.co = nil
|
||||
CRD(pos).State:stop(pos, nvm)
|
||||
end
|
||||
end
|
||||
@ -360,13 +344,11 @@ local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
standby_ticks = STANDBY_TICKS,
|
||||
formspec = formspec,
|
||||
tubing = tubing,
|
||||
can_start = can_start,
|
||||
on_state_change = on_node_state_change,
|
||||
after_place_node = function(pos, placer)
|
||||
local inv = M(pos):get_inventory()
|
||||
local nvm = techage.get_nvm(pos)
|
||||
inv:set_size('main', 9)
|
||||
nvm.quarry_pos = nil
|
||||
M(pos):set_string("owner", placer:get_player_name())
|
||||
end,
|
||||
can_dig = can_dig,
|
||||
|
@ -684,14 +684,14 @@ techage.manual_DE.aText = {
|
||||
"\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"..
|
||||
"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"..
|
||||
"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"..
|
||||
"\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"..
|
||||
"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"..
|
||||
@ -700,7 +700,7 @@ techage.manual_DE.aText = {
|
||||
"\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"..
|
||||
"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"..
|
||||
@ -720,7 +720,7 @@ techage.manual_DE.aText = {
|
||||
"\n",
|
||||
"Der Öltank ist die große Ausführung des TA3 Tanks (siehe Flüssigkeiten -> TA3 Tank).\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",
|
||||
@ -1329,6 +1329,8 @@ techage.manual_DE.aText = {
|
||||
"\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"..
|
||||
"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"..
|
||||
"\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"..
|
||||
|
@ -101,6 +101,7 @@ Nacelle is missing=Die Gondel fehlt
|
||||
Needle Powder=Nadel Pulver
|
||||
Network Data=Netzwerkdaten
|
||||
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 wind at this altitude!=Kein Wind auf dieser Höhe
|
||||
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.
|
||||
Pusher=Schieber
|
||||
Quarry=Steinbrecher
|
||||
Quarry area is protected=Bereich ist geschützt
|
||||
Recipe=Rezept
|
||||
Red Mud=Rotschlamm
|
||||
Red Mud Barrel=Rotschlamm Fass
|
||||
@ -344,7 +344,6 @@ Water Barrel=Wasserfass
|
||||
Water Boiler=Wasserboiler
|
||||
Water Pump=Wasserpumpe
|
||||
[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]
|
||||
[TA] Area is protected!=[TA] Bereich ist geschützt
|
||||
[TA] Derrick is being built!=[TA] Bohrturm wird errichtet
|
||||
@ -360,14 +359,17 @@ Water Pump=Wasserpumpe
|
||||
accept=akzeptieren
|
||||
added=hinzugefügt 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
|
||||
connected with=verbunden mit
|
||||
depth=Tiefe
|
||||
did you check the plan?=hast du den Plan geprüft?
|
||||
empty=leer
|
||||
finished=fertig
|
||||
full=voll
|
||||
inlet/pipe error=Einlass/Röhrenfehler
|
||||
inventory full=Inventar ist voll
|
||||
item output blocked=Ausgang blockiert
|
||||
level=Ebene
|
||||
light=Licht
|
||||
loaded=geladen
|
||||
@ -390,4 +392,7 @@ stopped=gestoppt
|
||||
storage empty?=Speicher leer?
|
||||
water temperature=Wassertemperatur
|
||||
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!
|
@ -99,6 +99,7 @@ Nacelle is missing=
|
||||
Needle Powder=
|
||||
Network Data=
|
||||
No network or active generator available!=
|
||||
No oil found=
|
||||
No plan available=
|
||||
No wind at this altitude!=
|
||||
Node number to send the events to=
|
||||
@ -127,7 +128,6 @@ Pumpjack=
|
||||
Punch the block to make the area visible.=
|
||||
Pusher=
|
||||
Quarry=
|
||||
Quarry area is protected=
|
||||
Recipe=
|
||||
Red Mud=
|
||||
Red Mud Barrel=
|
||||
@ -342,7 +342,6 @@ Water Barrel=
|
||||
Water Boiler=
|
||||
Water Pump=
|
||||
[Bucket] Lava can only be placed below sea level!=
|
||||
[TA Oil] No oil exploration possible at this depth! =
|
||||
[TA4 Wind Turbine]=
|
||||
[TA] Area is protected!=
|
||||
[TA] Derrick is being built!=
|
||||
@ -358,14 +357,17 @@ Water Pump=
|
||||
accept=
|
||||
added=
|
||||
added or removed=
|
||||
block can't be dug=
|
||||
area is protected=
|
||||
commands like: help=
|
||||
connected with=
|
||||
depth=
|
||||
did you check the plan?=
|
||||
empty=
|
||||
finished=
|
||||
full=
|
||||
inlet/pipe error=
|
||||
inventory full=
|
||||
item output blocked=
|
||||
level=
|
||||
light=
|
||||
loaded=
|
||||
|
@ -294,14 +294,14 @@ Dazu dienen dir TA3 Ölexplorer, TA3 Ölbohrkiste und TA3 Ölpumpe.
|
||||
|
||||
### 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.
|
||||
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.
|
||||
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.
|
||||
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
|
||||
|
||||
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.
|
||||
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 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]
|
||||
|
||||
|
@ -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 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:
|
||||
|
||||
- `count` dient zur Anfrage, wie viele Items in der Kiste sind.
|
||||
|
@ -21,7 +21,7 @@ local CRD = function(pos) return (minetest.registered_nodes[techage.get_node_lvm
|
||||
|
||||
local STANDBY_TICKS = 1
|
||||
local COUNTDOWN_TICKS = 6
|
||||
local CYCLE_TIME = 2 ---------------------------------------- TODO 16
|
||||
local CYCLE_TIME = 16
|
||||
|
||||
local formspec0 = "size[5,4]"..
|
||||
default.gui_bg..
|
||||
@ -56,7 +56,7 @@ local function formspec(self, pos, nvm)
|
||||
if not nvm.assemble_build then
|
||||
return formspec0
|
||||
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
|
||||
return "size[8,8]"..
|
||||
default.gui_bg..
|
||||
@ -139,9 +139,6 @@ local function drilling(pos, crd, nvm, inv)
|
||||
elseif node.name == "techage:oilstorage" then -- old oil bubble node?
|
||||
nvm.drill_pos.y = nvm.drill_pos.y-1
|
||||
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
|
||||
crd.State:fault(pos, nvm, S("Drill area is protected"))
|
||||
elseif node.name == "techage:oil_drillbit2" then
|
||||
@ -238,11 +235,14 @@ local tubing = {
|
||||
end
|
||||
end,
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
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)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if not nvm.assemble_locked then
|
||||
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)
|
||||
end
|
||||
end
|
||||
end,
|
||||
on_unpull_item = function(pos, in_dir, stack)
|
||||
|
137
oil/explore.lua
137
oil/explore.lua
@ -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 S = techage.S
|
||||
|
||||
local PROBABILITY = 20
|
||||
local OIL_MIN = 2000
|
||||
local PROBABILITY = 100
|
||||
local OIL_MIN = 4096
|
||||
local OIL_MAX = 20000
|
||||
local DEPTH_MIN = 16
|
||||
local DEPTH_MAX = 30*16
|
||||
local DEPTH_MAX = 25*16
|
||||
local DEPTH_STEP = 16
|
||||
local YPOS_MAX = -6*16
|
||||
local RADIUS = 8
|
||||
local YPOS_MAX = -6*16 -- oil can found below this level
|
||||
local OIL_BUBBLE_SIZE = 4096
|
||||
|
||||
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
|
||||
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)
|
||||
return pos.y - explore_pos.y + 1
|
||||
end
|
||||
|
||||
local function gen_oil_slice(ypos, from, to, data, id)
|
||||
for x = from, to do
|
||||
for z = from, to do
|
||||
local idx = (x + (ypos * 16) + (z * 16 * 16)) + 1
|
||||
data[idx] = id
|
||||
-- posC is the center position of the oil bubble
|
||||
-- idx is the vmdata index
|
||||
-- function returns the real position {x,y,z}
|
||||
local function calc_vmdata_pos(posC, idx)
|
||||
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
|
||||
|
||||
local function gen_oil_bubble(data)
|
||||
local function gen_oil_bubble(vmdata)
|
||||
local id = minetest.get_content_id("techage:oil_source")
|
||||
|
||||
gen_oil_slice(1, 3, 12, data, id)
|
||||
gen_oil_slice(2, 2, 13, data, id)
|
||||
gen_oil_slice(1, 3, 12, vmdata, id)
|
||||
gen_oil_slice(2, 2, 13, vmdata, id)
|
||||
for offs = 3, 12 do
|
||||
gen_oil_slice(offs, 1, 14, data, id)
|
||||
gen_oil_slice(offs, 1, 14, vmdata, id)
|
||||
end
|
||||
gen_oil_slice(13, 2, 13, data, id)
|
||||
gen_oil_slice(14, 3, 12, data, id)
|
||||
gen_oil_slice(13, 2, 13, vmdata, id)
|
||||
gen_oil_slice(14, 3, 12, vmdata, id)
|
||||
end
|
||||
|
||||
local function useable_stone_block(data)
|
||||
@ -91,14 +121,12 @@ local function useable_stone_block(data)
|
||||
if not ValidGroundNodes[itemname] then
|
||||
local ndef = minetest.registered_nodes[itemname]
|
||||
if InvalidGroundNodes[itemname] or not ndef or ndef.is_ground_content == false then
|
||||
print("useable_stone_block false", itemname)
|
||||
return false
|
||||
end
|
||||
end
|
||||
valid[id] = true
|
||||
end
|
||||
end
|
||||
print("useable_stone_block true")
|
||||
return true
|
||||
end
|
||||
|
||||
@ -111,9 +139,16 @@ local function get_next_explore_pos(pos)
|
||||
local d = calc_depth(pos, {y = ypos})
|
||||
if d + DEPTH_STEP < DEPTH_MAX then
|
||||
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
|
||||
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)}
|
||||
end
|
||||
|
||||
@ -123,7 +158,8 @@ end
|
||||
|
||||
local function set_oil_amount(pos, amount)
|
||||
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
|
||||
|
||||
local function status(pos, player_name, explore_pos, amount)
|
||||
@ -134,20 +170,17 @@ end
|
||||
|
||||
local function marker(player_name, pos)
|
||||
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 pos2 = {x = posC.x + 1, y = posC.y + 3, z = posC.z + 1}
|
||||
local pos1 = {x = posC.x - 2, y = posC.y - 2, z = posC.z - 2}
|
||||
local pos2 = {x = posC.x + 2, y = posC.y + 5, z = posC.z + 2}
|
||||
techage.switch_region(player_name, pos1, pos2)
|
||||
end
|
||||
|
||||
-- check if oil can be placed and if so, do it and return true
|
||||
local function generate_oil_bubble(posC, amount)
|
||||
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 pos1, pos2 = mapblock_coordinates(posC)
|
||||
local vm = minetest.get_voxel_manip(pos1, pos2)
|
||||
local data = vm:get_data()
|
||||
|
||||
print("#data", #data)
|
||||
|
||||
if useable_stone_block(data) then
|
||||
gen_oil_bubble(data)
|
||||
vm:set_data(data)
|
||||
@ -159,26 +192,6 @@ local function generate_oil_bubble(posC, amount)
|
||||
return false
|
||||
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)
|
||||
if M(pos):get_int("oil_amount") == 0 then -- nothing found so far?
|
||||
local posC, amount
|
||||
@ -193,7 +206,6 @@ local function explore_area(pos, node, player_name)
|
||||
for i = 1,4 do
|
||||
posC = get_next_explore_pos(pos)
|
||||
amount = oil_amount(posC)
|
||||
print("explore", P2S(posC), amount)
|
||||
if amount > 0 then
|
||||
break
|
||||
end
|
||||
@ -300,19 +312,32 @@ function techage.explore.get_oil_info(pos)
|
||||
depth = calc_depth(pos, posC)
|
||||
posC.y = posC.y - DEPTH_STEP
|
||||
end
|
||||
posC.y = posC.y + DEPTH_STEP
|
||||
return {depth = depth, amount = amount, storage_pos = posC}
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
function techage.explore.dec_oil_amount(posC)
|
||||
local meta = M(posC)
|
||||
local amount = meta:get_int("oil_amount")
|
||||
meta:set_int("oil_amount", amount-1)
|
||||
return amount-1
|
||||
local oil_amount, oil_initial = techage.explore.get_oil_amount(posC)
|
||||
oil_amount = oil_amount - 1
|
||||
M(posC):set_int("oil_amount", oil_amount)
|
||||
|
||||
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
|
||||
|
||||
-- generate_air_bubble(posC)
|
||||
techage.explore.generate_air_bubble = generate_air_bubble
|
@ -31,11 +31,10 @@ local CYCLE_TIME = 8
|
||||
local function has_oil(pos, meta)
|
||||
local storage_pos = meta:get_string("storage_pos")
|
||||
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
|
||||
return true
|
||||
end
|
||||
techage.explore.generate_air_bubble(P(storage_pos))
|
||||
end
|
||||
end
|
||||
|
||||
@ -58,11 +57,12 @@ local function formspec(self, pos, nvm)
|
||||
default.gui_slots..
|
||||
"box[0,-0.1;4.8,0.5;#c6e8ff]"..
|
||||
"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).."]"..
|
||||
"tooltip[4,0.8;1,1;"..S("needs power").."]"..
|
||||
"label[0,2.5;"..S("Oil amount")..": "..amount.."]"..
|
||||
"image_button[2.5,2.2;1,1;".. self:get_state_button_image(nvm) ..";state_button;]"
|
||||
"label[0,0.8;"..S("Oil amount")..": "..amount.."]"..
|
||||
"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
|
||||
|
||||
local function play_sound(pos)
|
||||
|
Loading…
Reference in New Issue
Block a user