pumpjack added

This commit is contained in:
Joachim Stolberg 2019-06-09 17:20:40 +02:00
parent ae085ddc3f
commit f642bfee60
9 changed files with 216 additions and 14 deletions

View File

@ -38,7 +38,7 @@ local function send_off_command(pos)
local dest_num = meta:get_string("dest_num") local dest_num = meta:get_string("dest_num")
local own_num = meta:get_string("number") local own_num = meta:get_string("number")
local owner = meta:get_string("owner") local owner = meta:get_string("owner")
techage.send_message(dest_num, owner, nil, "off", own_num) techage.send_multi(dest_num, owner, nil, "off", own_num)
end end
@ -48,7 +48,7 @@ local function send_command(pos)
if dest_num ~= "" then if dest_num ~= "" then
local own_num = meta:get_string("number") local own_num = meta:get_string("number")
local owner = meta:get_string("owner") local owner = meta:get_string("owner")
techage.send_message(dest_num, owner, nil, "on", own_num) techage.send_multi(dest_num, owner, nil, "on", own_num)
minetest.after(1, send_off_command, pos) minetest.after(1, send_off_command, pos)
end end
end end

View File

@ -55,7 +55,9 @@ end
local function add_pos(pos, player) local function add_pos(pos, player)
local lPos = minetest.deserialize(player:get_attribute("techage_forceload_blocks")) or {} local lPos = minetest.deserialize(player:get_attribute("techage_forceload_blocks")) or {}
if not in_list(lPos, pos) and #lPos < techage.max_num_forceload_blocks then if not in_list(lPos, pos) and (#lPos < techage.max_num_forceload_blocks or
creative and creative.is_enabled_for and
creative.is_enabled_for(player:get_player_name())) then
lPos[#lPos+1] = pos lPos[#lPos+1] = pos
player:set_attribute("techage_forceload_blocks", minetest.serialize(lPos)) player:set_attribute("techage_forceload_blocks", minetest.serialize(lPos))
return true return true

View File

@ -119,6 +119,7 @@ else
dofile(MP.."/oil/explore.lua") dofile(MP.."/oil/explore.lua")
dofile(MP.."/oil/tower.lua") dofile(MP.."/oil/tower.lua")
dofile(MP.."/oil/drillbox.lua") dofile(MP.."/oil/drillbox.lua")
dofile(MP.."/oil/pumpjack.lua")
--dofile(MP.."/test/generator.lua") --dofile(MP.."/test/generator.lua")

View File

@ -35,6 +35,7 @@ local formspec0 = "size[5,4]"..
"button_exit[1,3.2;3,1;build;"..I("Build Tower").."]" "button_exit[1,3.2;3,1;build;"..I("Build Tower").."]"
local function play_sound(pos) local function play_sound(pos)
local mem = tubelib2.get_mem(pos)
mem.handle = minetest.sound_play("techage_oildrill", { mem.handle = minetest.sound_play("techage_oildrill", {
pos = pos, pos = pos,
gain = 1, gain = 1,
@ -207,9 +208,16 @@ tiles.pas = {
"techage_filling_ta#.png^techage_appl_oildrill.png^techage_frame_ta#.png", "techage_filling_ta#.png^techage_appl_oildrill.png^techage_frame_ta#.png",
"techage_filling_ta#.png^techage_appl_oildrill.png^techage_frame_ta#.png", "techage_filling_ta#.png^techage_appl_oildrill.png^techage_frame_ta#.png",
} }
tiles.act = tiles.pas tiles.act = tiles.pas
tiles.def = tiles.pas tiles.def = {
-- up, down, right, left, back, front
"techage_filling_ta#.png^techage_frame_ta#_top.png",
"techage_filling_ta#.png^techage_frame_ta#.png",
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png^techage_appl_defect.png",
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png^techage_appl_defect.png",
"techage_filling_ta#.png^techage_appl_oildrill.png^techage_frame_ta#.png^techage_appl_defect.png",
"techage_filling_ta#.png^techage_appl_oildrill.png^techage_frame_ta#.png^techage_appl_defect.png",
}
local tubing = { local tubing = {
on_pull_item = function(pos, in_dir, num) on_pull_item = function(pos, in_dir, num)
@ -249,7 +257,7 @@ local tubing = {
end, end,
} }
local node_name_ta2, node_name_ta3, node_name_ta4 = local _, node_name_ta3, _ =
techage.register_consumer("drillbox", I("Oil Drill Box"), tiles, { techage.register_consumer("drillbox", I("Oil Drill Box"), tiles, {
drawtype = "normal", drawtype = "normal",
cycle_time = CYCLE_TIME, cycle_time = CYCLE_TIME,
@ -258,6 +266,7 @@ local node_name_ta2, node_name_ta3, node_name_ta4 =
aging_factor = 10, aging_factor = 10,
formspec = formspec, formspec = formspec,
tubing = tubing, tubing = tubing,
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()
inv:set_size("src", 1) inv:set_size("src", 1)
@ -292,7 +301,7 @@ minetest.register_craft({
recipe = { recipe = {
{"default:steel_ingot", "default:diamond", "default:steel_ingot"}, {"default:steel_ingot", "default:diamond", "default:steel_ingot"},
{"techage:tubeS", "basic_materials:gear_steel", "techage:tubeS"}, {"techage:tubeS", "basic_materials:gear_steel", "techage:tubeS"},
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, {"default:steel_ingot", "techage:vacuum_tube", "default:steel_ingot"},
}, },
}) })

View File

@ -268,7 +268,6 @@ minetest.register_node("techage:oil_source", {
liquid_alternative_source = "techage:oil_source", liquid_alternative_source = "techage:oil_source",
liquid_viscosity = 20, liquid_viscosity = 20,
liquid_range = 10, liquid_range = 10,
damage_per_second = 1,
post_effect_color = {a = 200, r = 1, g = 1, b = 1}, post_effect_color = {a = 200, r = 1, g = 1, b = 1},
groups = {liquid = 5}, groups = {liquid = 5},
}) })
@ -315,7 +314,6 @@ minetest.register_node("techage:oil_flowing", {
liquid_alternative_source = "techage:oil_source", liquid_alternative_source = "techage:oil_source",
liquid_viscosity = 20, liquid_viscosity = 20,
liquid_range = 10, liquid_range = 10,
damage_per_second = 1,
post_effect_color = {a = 200, r = 1, g = 1, b = 1}, post_effect_color = {a = 200, r = 1, g = 1, b = 1},
groups = {liquid = 5, not_in_creative_inventory = 1}, groups = {liquid = 5, not_in_creative_inventory = 1},
}) })
@ -350,11 +348,22 @@ techage.explore = {}
function techage.explore.get_oil_info(pos) function techage.explore.get_oil_info(pos)
local amount = 0 local amount = 0
local depth = DEPTH_MIN local depth = DEPTH_MIN
local posC
while amount == 0 and depth < DEPTH_MAX do while amount == 0 and depth < DEPTH_MAX do
depth = depth + DEPTH_STEP depth = depth + DEPTH_STEP
local posC = {x = center(pos.x), y = center(-depth), z = center(pos.z)} posC = {x = center(pos.x), y = center(-depth), z = center(pos.z)}
amount = get_oil_amount(posC) amount = get_oil_amount(posC)
end end
return {depth = center(depth) - 1 + pos.y, amount = amount} return {depth = center(depth) - 1 + pos.y, amount = amount, storage_pos = posC}
end end
function techage.explore.get_oil_amount(posC)
return M(posC):get_int("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
end

181
oil/pumpjack.lua Normal file
View File

@ -0,0 +1,181 @@
--[[
TechAge
=======
Copyright (C) 2019 Joachim Stolberg
LGPLv2.1+
See LICENSE.txt for more information
TA3 Pumpjack
]]--
-- for lazy programmers
local S = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
-- Consumer Related Data
local CRD = function(pos) return (minetest.registered_nodes[minetest.get_node(pos).name] or {}).consumer end
local CRDN = function(node) return (minetest.registered_nodes[node.name] or {}).consumer end
-- Load support for intllib.
local MP = minetest.get_modpath("techage")
local I,_ = dofile(MP.."/intllib.lua")
local STANDBY_TICKS = 10
local COUNTDOWN_TICKS = 10
local CYCLE_TIME = 8
local function has_oil_item(pos, meta)
local storage_pos = meta:get_string("storage_pos")
if storage_pos ~= "" then
local amount = techage.explore.get_oil_amount(P(storage_pos))
if amount > 0 then
return ItemStack("techage:oil_source")
end
end
end
local function dec_oil_item(pos, meta)
local storage_pos = meta:get_string("storage_pos")
if storage_pos ~= "" then
techage.explore.dec_oil_amount(P(storage_pos))
end
end
local function pumping(pos, crd, meta, mem)
local items = has_oil_item(pos, meta)
if items ~= nil then
if techage.push_items(pos, 6, items) ~= true then
crd.State:blocked(pos, mem)
return
end
dec_oil_item(pos, meta)
crd.State:keep_running(pos, mem, COUNTDOWN_TICKS)
return
end
crd.State:fault(pos, mem)
end
local function keep_running(pos, elapsed)
local mem = tubelib2.get_mem(pos)
local crd = CRD(pos)
pumping(pos, crd, M(pos), mem)
return crd.State:is_active(mem)
end
local function on_rightclick(pos, node, clicker)
local mem = tubelib2.get_mem(pos)
if not minetest.is_protected(pos, clicker:get_player_name()) then
if CRD(pos).State:get_state(mem) == techage.STOPPED then
CRD(pos).State:start(pos, mem)
else
CRD(pos).State:stop(pos, mem)
end
end
end
local tiles = {}
-- '#' will be replaced by the stage number
-- '{power}' will be replaced by the power PNG
tiles.pas = {
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png",
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png",
"techage_appl_pumpjack.png^techage_frame_ta#.png",
"techage_appl_pumpjack.png^techage_frame_ta#.png",
"techage_filling_ta#.png^techage_frame_ta#_top.png^techage_appl_arrow.png^[transformR90]",
"techage_filling_ta#.png^techage_frame_ta#_top.png^techage_appl_arrow.png^[transformR90]",
}
tiles.act = {
-- up, down, right, left, back, front
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png",
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png",
{
image = "techage_appl_pumpjack14.png^techage_frame14_ta#.png",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 32,
aspect_h = 32,
length = 2.0,
},
},
{
image = "techage_appl_pumpjack14.png^techage_frame14_ta#.png",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 32,
aspect_h = 32,
length = 2.0,
},
},
"techage_filling_ta#.png^techage_frame_ta#_top.png^techage_appl_arrow.png^[transformR90]",
"techage_filling_ta#.png^techage_frame_ta#_top.png^techage_appl_arrow.png^[transformR90]",
}
tiles.def = {
-- up, down, right, left, back, front
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png",
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png",
"techage_appl_pumpjack.png^techage_frame_ta#.png^techage_appl_defect.png",
"techage_appl_pumpjack.png^techage_frame_ta#.png^techage_appl_defect.png",
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_defect.png",
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_defect.png",
}
local tubing = {
is_pusher = true, -- is a pulling/pushing node
on_recv_message = function(pos, topic, payload)
local resp = CRD(pos).State:on_receive_message(pos, topic, payload)
if resp then
return resp
else
return "unsupported"
end
end,
on_node_load = function(pos)
CRD(pos).State:on_node_load(pos)
end,
on_node_repair = function(pos)
return CRD(pos).State:on_node_repair(pos)
end,
}
local _, node_name_ta3, _ =
techage.register_consumer("pumpjack", I("TA3 Oil Pumpjack"), tiles, {
cycle_time = CYCLE_TIME,
standby_ticks = STANDBY_TICKS,
has_item_meter = true,
aging_factor = 10,
tubing = tubing,
after_place_node = function(pos, placer)
local node = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z})
if node.name == "techage:oil_drillbit2" then
local info = techage.explore.get_oil_info(pos)
if info then
M(pos):set_string("storage_pos", S(info.storage_pos))
end
end
end,
on_rightclick = on_rightclick,
node_timer = keep_running,
on_rotate = screwdriver.disallow,
groups = {choppy=2, cracky=2, crumbly=2},
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
num_items = {0,1,1,1},
power_consumption = {0,20,20,20},
},
{false, false, true, false}) -- TA3 only
minetest.register_craft({
output = "techage:ta3_pumpjack_pas",
recipe = {
{"", "techage:baborium_ingot", ""},
{"dye:red", "techage:ta3_pusher_pas", "dye:red"},
{"", "techage:oil_drillbit", ""},
},
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

View File

@ -43,9 +43,9 @@ local function read_state(itemstack, user, pointed_thing)
if pos then if pos then
local number = techage.get_node_number(pos) local number = techage.get_node_number(pos)
if number then if number then
local state = techage.send_request(number, "state", nil) local state = techage.send_single(number, "state", nil)
local counter = techage.send_request(number, "counter", nil) local counter = techage.send_single(number, "counter", nil)
local aging = techage.send_request(number, "aging", nil) local aging = techage.send_single(number, "aging", nil)
if state and counter and aging then if state and counter and aging then
if type(counter) ~= "number" then counter = "unknown" end if type(counter) ~= "number" then counter = "unknown" end
minetest.chat_send_player(user:get_player_name(), "[TechAge] state ="..state..", counter = "..counter..", aging = "..aging) minetest.chat_send_player(user:get_player_name(), "[TechAge] state ="..state..", counter = "..counter..", aging = "..aging)