mirror of
https://github.com/joe7575/techpack.git
synced 2024-11-29 10:33:47 +01:00
bug fixes and improvements
This commit is contained in:
parent
48ca13d05d
commit
c5f8e29f10
@ -157,6 +157,8 @@ gn("stairs:stair_desert_cobble")
|
|||||||
|
|
||||||
gn("default:stone", "default:cobble")
|
gn("default:stone", "default:cobble")
|
||||||
gn("default:desert_stone", "default:desert_cobble")
|
gn("default:desert_stone", "default:desert_cobble")
|
||||||
|
gn("default:sandstone", "default:sandstone")
|
||||||
|
gn("default:desert_sandstone", "default:desert_sandstone")
|
||||||
gn("default:clay", "default:clay_lump")
|
gn("default:clay", "default:clay_lump")
|
||||||
gn("default:stone_with_coal", "default:coal_lump")
|
gn("default:stone_with_coal", "default:coal_lump")
|
||||||
gn("default:stone_with_iron", "default:iron_lump")
|
gn("default:stone_with_iron", "default:iron_lump")
|
||||||
|
@ -30,6 +30,7 @@ local BURNING_TIME = 16
|
|||||||
local STANDBY_TICKS = 4
|
local STANDBY_TICKS = 4
|
||||||
local COUNTDOWN_TICKS = 5
|
local COUNTDOWN_TICKS = 5
|
||||||
|
|
||||||
|
local Side2Facedir = {F=0, R=1, B=2, L=3, D=4, U=5}
|
||||||
local Depth2Idx = {[1]=1 ,[2]=2, [3]=3, [5]=4, [10]=5, [15]=6, [20]=7, [25]=8, [50]=9, [100]=10}
|
local Depth2Idx = {[1]=1 ,[2]=2, [3]=3, [5]=4, [10]=5, [15]=6, [20]=7, [25]=8, [50]=9, [100]=10}
|
||||||
local Level2Idx = {[2]=1, [1]=2, [0]=3, [-1]=4, [-2]=5, [-3]=6,
|
local Level2Idx = {[2]=1, [1]=2, [0]=3, [-1]=4, [-2]=5, [-3]=6,
|
||||||
[-5]=7, [-10]=8, [-15]=9, [-20]=10}
|
[-5]=7, [-10]=8, [-15]=9, [-20]=10}
|
||||||
@ -86,12 +87,10 @@ end
|
|||||||
|
|
||||||
State:register_formspec_func(formspec)
|
State:register_formspec_func(formspec)
|
||||||
|
|
||||||
local function get_pos(pos, facedir, side)
|
local function get_pos(pos, facedir, side, steps)
|
||||||
local offs = {F=0, R=1, B=2, L=3, D=4, U=5}
|
facedir = (facedir + Side2Facedir[side]) % 4
|
||||||
local dst_pos = table.copy(pos)
|
local dir = vector.multiply(minetest.facedir_to_dir(facedir), steps or 1)
|
||||||
facedir = (facedir + offs[side]) % 4
|
return vector.add(pos, dir)
|
||||||
local dir = minetest.facedir_to_dir(facedir)
|
|
||||||
return vector.add(dst_pos, dir)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_node_lvm(pos)
|
local function get_node_lvm(pos)
|
||||||
@ -141,6 +140,22 @@ local function get_next_pos(pos, facedir, dir)
|
|||||||
return vector.add(pos, core.facedir_to_dir(facedir))
|
return vector.add(pos, core.facedir_to_dir(facedir))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function skip_the_air(pos, curr_level, facedir)
|
||||||
|
local pos1, pos2, lPos
|
||||||
|
pos1 = get_pos(pos, facedir, "F", 2)
|
||||||
|
pos2 = get_pos(pos, facedir, "B", 2)
|
||||||
|
pos2 = get_pos(pos2, facedir, "L", 5)
|
||||||
|
pos1.y = curr_level
|
||||||
|
pos2.y = curr_level
|
||||||
|
while true do
|
||||||
|
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
|
||||||
|
return pos2.y
|
||||||
|
end
|
||||||
|
|
||||||
local function quarry_next_node(pos, meta)
|
local function quarry_next_node(pos, meta)
|
||||||
-- check fuel
|
-- check fuel
|
||||||
local fuel = meta:get_int("fuel") or 0
|
local fuel = meta:get_int("fuel") or 0
|
||||||
@ -159,38 +174,40 @@ local function quarry_next_node(pos, meta)
|
|||||||
local facedir = meta:get_int("facedir")
|
local facedir = meta:get_int("facedir")
|
||||||
local owner = meta:get_string("owner")
|
local owner = meta:get_string("owner")
|
||||||
local endless = meta:get_int("endless")
|
local endless = meta:get_int("endless")
|
||||||
local curr_level = meta:get_int("curr_level")
|
local start_y = pos.y + meta:get_int("start_level")
|
||||||
local stop_level = pos.y + meta:get_int("start_level")
|
local stop_y = pos.y + meta:get_int("start_level") - meta:get_int("max_levels") + 1
|
||||||
- meta:get_int("max_levels") + 1
|
local quarry_pos = P(meta:get_string("quarry_pos"))
|
||||||
|
|
||||||
local quarry_pos = minetest.string_to_pos(meta:get_string("quarry_pos"))
|
if quarry_pos == nil then -- start at the beginning?
|
||||||
if quarry_pos == nil then
|
|
||||||
curr_level = pos.y + meta:get_int("start_level") -- start level
|
|
||||||
quarry_pos = get_pos(pos, facedir, "L")
|
quarry_pos = get_pos(pos, facedir, "L")
|
||||||
quarry_pos.y = curr_level
|
local y = skip_the_air(quarry_pos, start_y, facedir)
|
||||||
idx = 1
|
if y < stop_y then -- below the base line?
|
||||||
|
meta:set_int("idx", 1)
|
||||||
|
meta:set_string("quarry_pos", nil)
|
||||||
|
State:stop(pos, meta)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
quarry_pos.y = y
|
||||||
elseif idx < #QuarrySchedule then
|
elseif idx < #QuarrySchedule then
|
||||||
quarry_pos = get_next_pos(quarry_pos, facedir, QuarrySchedule[idx])
|
quarry_pos = get_next_pos(quarry_pos, facedir, QuarrySchedule[idx])
|
||||||
idx = idx + 1
|
idx = idx + 1
|
||||||
elseif curr_level > stop_level then
|
elseif quarry_pos.y > stop_y then
|
||||||
curr_level = curr_level - 1
|
local y = quarry_pos.y
|
||||||
quarry_pos = get_pos(pos, facedir, "L")
|
quarry_pos = get_pos(pos, facedir, "L")
|
||||||
quarry_pos.y = curr_level
|
quarry_pos.y = y - 1
|
||||||
idx = 1
|
idx = 1
|
||||||
elseif endless == 1 then -- farming mode
|
elseif endless == 1 then -- farming mode
|
||||||
quarry_pos = get_pos(pos, facedir, "L")
|
quarry_pos = get_pos(pos, facedir, "L")
|
||||||
quarry_pos.y = pos.y + meta:get_int("start_level") -- start level
|
quarry_pos.y = start_y
|
||||||
idx = 1
|
idx = 1
|
||||||
else
|
else
|
||||||
curr_level = pos.y + meta:get_int("start_level") -- start level
|
|
||||||
meta:set_int("idx", 1)
|
meta:set_int("idx", 1)
|
||||||
meta:set_string("quarry_pos", nil)
|
meta:set_string("quarry_pos", nil)
|
||||||
State:stop(pos, meta)
|
State:stop(pos, meta)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
meta:set_int("curr_level", curr_level)
|
|
||||||
meta:set_int("idx", idx)
|
meta:set_int("idx", idx)
|
||||||
meta:set_string("quarry_pos", minetest.pos_to_string(quarry_pos))
|
meta:set_string("quarry_pos", S(quarry_pos))
|
||||||
|
|
||||||
if minetest.is_protected(quarry_pos, owner) then
|
if minetest.is_protected(quarry_pos, owner) then
|
||||||
minetest.chat_send_player(owner, "[Tubelib Quarry] Area is protected!")
|
minetest.chat_send_player(owner, "[Tubelib Quarry] Area is protected!")
|
||||||
@ -208,14 +225,14 @@ local function quarry_next_node(pos, meta)
|
|||||||
minetest.remove_node(quarry_pos)
|
minetest.remove_node(quarry_pos)
|
||||||
inv:add_item("main", ItemStack(order.drop))
|
inv:add_item("main", ItemStack(order.drop))
|
||||||
meta:set_string("infotext", "Tubelib Quarry "..number..
|
meta:set_string("infotext", "Tubelib Quarry "..number..
|
||||||
": running "..idx.."/"..(curr_level-pos.y))
|
": running "..idx.."/"..(start_y-quarry_pos.y+1))
|
||||||
State:keep_running(pos, meta, COUNTDOWN_TICKS, 1)
|
State:keep_running(pos, meta, COUNTDOWN_TICKS, 1)
|
||||||
else
|
else
|
||||||
State:blocked(pos, meta)
|
State:blocked(pos, meta)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
meta:set_string("infotext", "Tubelib Quarry "..number..
|
meta:set_string("infotext", "Tubelib Quarry "..number..
|
||||||
": running "..idx.."/"..(curr_level-pos.y))
|
": running "..idx.."/"..(start_y-quarry_pos.y+1))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user