mirror of
https://github.com/minetest-mods/towercrane.git
synced 2024-11-22 15:23:51 +01:00
size increased, area protection bug fixed
This commit is contained in:
parent
584daaf147
commit
14591aba9c
@ -1,11 +1,11 @@
|
|||||||
-- Maximum crane height in blocks (12..n)
|
-- Maximum crane height in blocks (12..n)
|
||||||
towercrane.max_height = tonumber(minetest.setting_get("towercrane_max_height")) or 24
|
towercrane.max_height = tonumber(minetest.setting_get("towercrane_max_height")) or 32
|
||||||
|
|
||||||
-- Maximum crane width in blocks (12..n)
|
-- Maximum crane width in blocks (12..n)
|
||||||
towercrane.max_width = tonumber(minetest.setting_get("towercrane_max_width")) or 24
|
towercrane.max_width = tonumber(minetest.setting_get("towercrane_max_width")) or 32
|
||||||
|
|
||||||
-- Crane rope lenght in block (max_height .. max_height+x)
|
-- Crane rope lenght in block (max_height .. max_height+x)
|
||||||
towercrane.rope_length = tonumber(minetest.setting_get("towercrane_rope_length")) or 24
|
towercrane.rope_length = tonumber(minetest.setting_get("towercrane_rope_length")) or 40
|
||||||
|
|
||||||
-- Recipe available (true/false)
|
-- Recipe available (true/false)
|
||||||
towercrane.recipe = tonumber(minetest.setting_get("towercrane_recipe")) or true
|
towercrane.recipe = tonumber(minetest.setting_get("towercrane_recipe")) or true
|
||||||
|
55
init.lua
55
init.lua
@ -3,7 +3,7 @@
|
|||||||
Tower Crane Mod
|
Tower Crane Mod
|
||||||
===============
|
===============
|
||||||
|
|
||||||
v0.12 by JoSt
|
v0.13 by JoSt
|
||||||
|
|
||||||
Copyright (C) 2017 Joachim Stolberg
|
Copyright (C) 2017 Joachim Stolberg
|
||||||
LGPLv2.1+
|
LGPLv2.1+
|
||||||
@ -22,6 +22,7 @@
|
|||||||
2017-08-27 v0.10 hook instance and sound switch off bug fixes
|
2017-08-27 v0.10 hook instance and sound switch off bug fixes
|
||||||
2017-09-09 v0.11 further player bugfixes
|
2017-09-09 v0.11 further player bugfixes
|
||||||
2017-09-24 v0.12 Switched from entity hook model to real fly privs
|
2017-09-24 v0.12 Switched from entity hook model to real fly privs
|
||||||
|
2017-10-17 v0.13 Area protection bugfix
|
||||||
|
|
||||||
]]--
|
]]--
|
||||||
|
|
||||||
@ -113,7 +114,7 @@ local function fly_privs(player, enable)
|
|||||||
player:set_attribute("store_speed", minetest.serialize(physics.speed))
|
player:set_attribute("store_speed", minetest.serialize(physics.speed))
|
||||||
privs["fly"] = true
|
privs["fly"] = true
|
||||||
privs["fast"] = nil
|
privs["fast"] = nil
|
||||||
physics.speed = 0.5
|
physics.speed = 0.7
|
||||||
else
|
else
|
||||||
privs["fast"] = minetest.deserialize(player:get_attribute("store_fast"))
|
privs["fast"] = minetest.deserialize(player:get_attribute("store_fast"))
|
||||||
privs["fly"] = minetest.deserialize(player:get_attribute("store_fly"))
|
privs["fly"] = minetest.deserialize(player:get_attribute("store_fly"))
|
||||||
@ -240,16 +241,18 @@ local function crane_body_plan(pos, dir, height, width, clbk, tArg)
|
|||||||
end
|
end
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------
|
||||||
-- Check space for mast and arm
|
-- Check space are protection for mast and arm
|
||||||
----------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------
|
||||||
local function check_space(pos, dir, height, width)
|
local function check_space(pos, dir, height, width, owner)
|
||||||
local remove = function(pos, node_name, tArg)
|
local remove = function(pos, node_name, tArg)
|
||||||
if minetest.get_node(pos).name ~= "air" then
|
if minetest.get_node(pos).name ~= "air" then
|
||||||
tArg.res = false
|
tArg.res = false
|
||||||
|
elseif minetest.is_protected(pos, tArg.owner) then
|
||||||
|
tArg.res = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local tArg = {res = true}
|
local tArg = {res = true, owner = owner}
|
||||||
crane_body_plan(pos, dir, height, width, remove, tArg)
|
crane_body_plan(pos, dir, height, width, remove, tArg)
|
||||||
return tArg.res
|
return tArg.res
|
||||||
end
|
end
|
||||||
@ -287,20 +290,6 @@ local function remove_crane(pos, dir, height, width)
|
|||||||
crane_body_plan(table.copy(pos), dir, height, width, remove, {})
|
crane_body_plan(table.copy(pos), dir, height, width, remove, {})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Check if the given construction area is not already protected
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
local function check_area(pos1, pos2, owner)
|
|
||||||
if not areas then return true end
|
|
||||||
for id, a in ipairs(areas:getAreasIntersectingArea(pos1, pos2)) do
|
|
||||||
if a.owner ~= owner then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------
|
||||||
-- Calculate and set the protection area (pos1, pos2)
|
-- Calculate and set the protection area (pos1, pos2)
|
||||||
----------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------
|
||||||
@ -377,7 +366,10 @@ minetest.register_node("towercrane:base", {
|
|||||||
"towercrane_base.png",
|
"towercrane_base.png",
|
||||||
"towercrane_base.png",
|
"towercrane_base.png",
|
||||||
},
|
},
|
||||||
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {cracky=2},
|
groups = {cracky=2},
|
||||||
|
|
||||||
@ -439,17 +431,12 @@ minetest.register_node("towercrane:base", {
|
|||||||
meta:set_string("infotext", "Crane size: " .. height .. "," .. width)
|
meta:set_string("infotext", "Crane size: " .. height .. "," .. width)
|
||||||
if no_area_violation(owner, pos) then
|
if no_area_violation(owner, pos) then
|
||||||
if dir ~= nil then
|
if dir ~= nil then
|
||||||
if check_space(table.copy(pos), dir, height, width) then
|
if check_space(table.copy(pos), dir, height, width, owner) then
|
||||||
-- add protection area
|
-- add protection area
|
||||||
local id = protect_area(table.copy(pos), table.copy(dir), height, width, owner)
|
meta:set_int("id", protect_area(table.copy(pos), table.copy(dir), height, width, owner))
|
||||||
if id ~= nil then
|
construct_crane(table.copy(pos), table.copy(dir), height, width, owner)
|
||||||
meta:set_int("id", id)
|
|
||||||
construct_crane(table.copy(pos), table.copy(dir), height, width, owner)
|
|
||||||
else
|
|
||||||
chat(owner, "Construction area is already protected!")
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
chat(owner, "Too less space to raise up the crane!")
|
chat(owner, "area is protected or too less space to raise up the crane!")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -512,7 +499,9 @@ minetest.register_node("towercrane:balance", {
|
|||||||
"towercrane_base.png",
|
"towercrane_base.png",
|
||||||
"towercrane_base.png",
|
"towercrane_base.png",
|
||||||
},
|
},
|
||||||
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
|
sunlight_propagates = true,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {crumbly=0, not_in_creative_inventory=1},
|
groups = {crumbly=0, not_in_creative_inventory=1},
|
||||||
})
|
})
|
||||||
@ -531,7 +520,9 @@ minetest.register_node("towercrane:mast", {
|
|||||||
"towercrane_mast.png",
|
"towercrane_mast.png",
|
||||||
"towercrane_mast.png",
|
"towercrane_mast.png",
|
||||||
},
|
},
|
||||||
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
|
sunlight_propagates = true,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {crumbly=0, not_in_creative_inventory=1},
|
groups = {crumbly=0, not_in_creative_inventory=1},
|
||||||
})
|
})
|
||||||
@ -577,7 +568,9 @@ minetest.register_node("towercrane:mast_ctrl_on", {
|
|||||||
meta:set_string("owner", owner)
|
meta:set_string("owner", owner)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
|
sunlight_propagates = true,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {crumbly=0, not_in_creative_inventory=1},
|
groups = {crumbly=0, not_in_creative_inventory=1},
|
||||||
})
|
})
|
||||||
@ -657,7 +650,9 @@ minetest.register_node("towercrane:mast_ctrl_off", {
|
|||||||
meta:set_string("owner", owner)
|
meta:set_string("owner", owner)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
|
sunlight_propagates = true,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {crumbly=0, not_in_creative_inventory=1},
|
groups = {crumbly=0, not_in_creative_inventory=1},
|
||||||
})
|
})
|
||||||
@ -676,7 +671,9 @@ minetest.register_node("towercrane:arm", {
|
|||||||
"towercrane_arm.png",
|
"towercrane_arm.png",
|
||||||
"towercrane_arm.png",
|
"towercrane_arm.png",
|
||||||
},
|
},
|
||||||
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
|
sunlight_propagates = true,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {crumbly=0, not_in_creative_inventory=1},
|
groups = {crumbly=0, not_in_creative_inventory=1},
|
||||||
})
|
})
|
||||||
@ -695,7 +692,9 @@ minetest.register_node("towercrane:arm2", {
|
|||||||
"towercrane_arm2.png",
|
"towercrane_arm2.png",
|
||||||
"towercrane_arm2.png",
|
"towercrane_arm2.png",
|
||||||
},
|
},
|
||||||
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
|
sunlight_propagates = true,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {crumbly=0, not_in_creative_inventory=1},
|
groups = {crumbly=0, not_in_creative_inventory=1},
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user