pause function for the burner
locked chests enabled ore probability patched ore Baborium addedmaster
parent
38d115fdf3
commit
73c33a6e7a
|
@ -14,6 +14,23 @@
|
|||
|
||||
]]--
|
||||
|
||||
local OwnerCache = {
|
||||
}
|
||||
|
||||
-- Check if the chest is in the protected area of the owner
|
||||
local function is_owner(pos, meta)
|
||||
local owner = meta:get_string("owner")
|
||||
local key = minetest.hash_node_position(pos)
|
||||
-- If successfull, store info in cache
|
||||
if OwnerCache[key] ~= owner then
|
||||
if not minetest.is_protected(pos, owner) then
|
||||
OwnerCache[key] = owner
|
||||
end
|
||||
end
|
||||
return OwnerCache[key] == owner
|
||||
end
|
||||
|
||||
|
||||
techage.register_node("default:chest", {"default:chest_open"}, {
|
||||
on_pull_item = function(pos, in_dir, num)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
@ -32,6 +49,26 @@ techage.register_node("default:chest", {"default:chest_open"}, {
|
|||
end,
|
||||
})
|
||||
|
||||
techage.register_node("default:chest_locked", {"default:chest_locked_open"}, {
|
||||
on_pull_item = function(pos, in_dir, num)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if is_owner(pos, meta) then
|
||||
local inv = meta:get_inventory()
|
||||
return techage.get_items(inv, "main", num)
|
||||
end
|
||||
end,
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "main", stack)
|
||||
end,
|
||||
on_unpull_item = function(pos, in_dir, stack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "main", stack)
|
||||
end,
|
||||
})
|
||||
|
||||
techage.register_node("default:furnace", {"default:furnace_active"}, {
|
||||
on_pull_item = function(pos, in_dir, num)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
|
|
@ -19,6 +19,12 @@ local PROBABILITY_FACTOR = 2
|
|||
local ore_probability = {
|
||||
}
|
||||
|
||||
local ProbabilityCorrections = {
|
||||
["default:coal_lump"] = 0.5, -- extensively used
|
||||
["default:iron_lump"] = 0.5, -- extensively used
|
||||
["techage:baborium_lump"] = 99999, -- mining required
|
||||
}
|
||||
|
||||
-- collect all registered ores and calculate the probability
|
||||
local function add_ores()
|
||||
for _,item in pairs(minetest.registered_ores) do
|
||||
|
@ -44,6 +50,12 @@ local function add_ores()
|
|||
end
|
||||
end
|
||||
end
|
||||
-- some corrections
|
||||
for key, correction in pairs(ProbabilityCorrections) do
|
||||
if ore_probability[key] then
|
||||
ore_probability[key] = ore_probability[key] * correction
|
||||
end
|
||||
end
|
||||
local overall_probability = 0.0
|
||||
for name,probability in pairs(ore_probability) do
|
||||
minetest.log("info", string.format("[techage] %-32s %u", name, probability))
|
||||
|
|
5
init.lua
5
init.lua
|
@ -36,6 +36,9 @@ else
|
|||
dofile(MP.."/tools/trowel.lua")
|
||||
--dofile(MP.."/tools/repairkit.lua")
|
||||
|
||||
-- Nodes
|
||||
dofile(MP.."/nodes/baborium.lua")
|
||||
|
||||
-- Power networks
|
||||
dofile(MP.."/power/drive_axle.lua")
|
||||
dofile(MP.."/power/steam_pipe.lua")
|
||||
|
@ -91,8 +94,6 @@ else
|
|||
--dofile(MP.."/coal_power_station/cooler.lua")
|
||||
|
||||
|
||||
|
||||
|
||||
dofile(MP.."/test/battery.lua")
|
||||
--dofile(MP.."/test/test.lua")
|
||||
dofile(MP.."/test/generator.lua")
|
||||
|
|
|
@ -18,7 +18,7 @@ local MP = minetest.get_modpath("techage")
|
|||
local S, NS = dofile(MP.."/intllib.lua")
|
||||
|
||||
local PILE_BURN_TIME = 1200
|
||||
local COAL_BURN_TIME = 700
|
||||
local COAL_BURN_TIME = 300
|
||||
|
||||
-- determine the number of wood nodes
|
||||
local function num_wood(pos)
|
||||
|
|
|
@ -17,6 +17,10 @@
|
|||
local MP = minetest.get_modpath("techage")
|
||||
local S, NS = dofile(MP.."/intllib.lua")
|
||||
|
||||
local COAL_BURN_TIME = 700
|
||||
local CYCLE_TIME = 5
|
||||
|
||||
|
||||
local function num_coal(pos)
|
||||
local pos1 = {x=pos.x, y=pos.y+1, z=pos.z}
|
||||
local pos2 = {x=pos.x, y=pos.y+32, z=pos.z}
|
||||
|
@ -31,10 +35,19 @@ local function num_cobble(pos, height)
|
|||
return #nodes
|
||||
end
|
||||
|
||||
local function num_air(pos)
|
||||
local pos1 = {x=pos.x-1, y=pos.y, z=pos.z-1}
|
||||
local pos2 = {x=pos.x+1, y=pos.y, z=pos.z+1}
|
||||
local nodes = minetest.find_nodes_in_area(pos1, pos2, {"air"})
|
||||
return #nodes
|
||||
end
|
||||
|
||||
local function start_burner(pos, height)
|
||||
local pos1 = {x=pos.x-1, y=pos.y+1, z=pos.z-1}
|
||||
local pos2 = {x=pos.x+1, y=pos.y+height, z=pos.z+1}
|
||||
techage.ironage_swap_nodes(pos1, pos2, "techage:charcoal", "techage:charcoal_burn")
|
||||
for _,p in ipairs(minetest.find_nodes_in_area(pos1, pos2, "techage:charcoal")) do
|
||||
minetest.swap_node(p, "techage:charcoal_burn")
|
||||
end
|
||||
end
|
||||
|
||||
local function remove_flame(pos, height)
|
||||
|
@ -51,6 +64,17 @@ local function remove_flame(pos, height)
|
|||
end
|
||||
end
|
||||
|
||||
local function calc_num_coal(meta)
|
||||
local t = minetest.get_gametime() - meta:get_int("ignite")
|
||||
local num = meta:get_int("height")
|
||||
t = t - COAL_BURN_TIME
|
||||
if t > 0 then
|
||||
local x = (COAL_BURN_TIME * 0.2) / num
|
||||
num = math.max(num - math.floor(t/x), 0)
|
||||
end
|
||||
return num
|
||||
end
|
||||
|
||||
local function flame(pos, height, heat, first_time)
|
||||
local idx
|
||||
pos = {x=pos.x, y=pos.y+height, z=pos.z}
|
||||
|
@ -76,8 +100,9 @@ local function flame(pos, height, heat, first_time)
|
|||
end
|
||||
|
||||
|
||||
lRatio = {120, 110, 95, 75, 55, 28, 0}
|
||||
lColor = {"000080", "400040", "800000", "800000", "800000", "800000", "800000"}
|
||||
local lRatio = {120, 110, 95, 75, 55, 28, 0}
|
||||
local lColor = {"000080", "400040", "800000", "800000", "800000", "800000", "800000"}
|
||||
|
||||
for idx,ratio in ipairs(lRatio) do
|
||||
local color = "techage_flame_animated.png^[colorize:#"..lColor[idx].."B0:"..ratio
|
||||
minetest.register_node("techage:flame"..idx, {
|
||||
|
@ -150,7 +175,7 @@ function techage.start_burner(pos, playername)
|
|||
gain = height/12.0,
|
||||
loop = true})
|
||||
meta:set_int("handle", handle)
|
||||
minetest.get_node_timer(pos):start(5)
|
||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -164,13 +189,18 @@ function techage.keep_running_burner(pos)
|
|||
meta:set_int("handle", 0)
|
||||
end
|
||||
if num_cobble(pos, height) == height * 8 then
|
||||
local new_height = num_coal(pos)
|
||||
if new_height > 0 then
|
||||
flame(pos, height, new_height, false)
|
||||
local num = calc_num_coal(meta)
|
||||
if num > 0 then
|
||||
if num_air(pos) == 0 then
|
||||
-- pause the burner
|
||||
meta:set_int("ignite", meta:get_int("ignite") + CYCLE_TIME)
|
||||
return true
|
||||
end
|
||||
flame(pos, height, num, false)
|
||||
handle = minetest.sound_play("techage_gasflare", {
|
||||
pos = {x=pos.x, y=pos.y+height, z=pos.z},
|
||||
max_hear_distance = 32,
|
||||
gain = new_height/12.0,
|
||||
gain = num/12.0,
|
||||
loop = true})
|
||||
meta:set_int("handle", handle)
|
||||
else
|
||||
|
@ -199,6 +229,7 @@ local BurnerHelp = S([[Coal Burner to heat the melting pot:
|
|||
- fill the tower from the top with charcoal
|
||||
- ignite the lighter
|
||||
- place the pot in the flame, (one block above the tower)
|
||||
- to pause the burner, close the hole temporarily with e.g. dirt
|
||||
(see plan)]])
|
||||
|
||||
local BurnerImages = {
|
||||
|
|
Loading…
Reference in New Issue