mirror of
https://notabug.org/TenPlus1/protector.git
synced 2025-01-10 08:37:30 +01:00
added protector placement tool (thanks shara)
This commit is contained in:
parent
1e10553838
commit
c0e0230367
@ -42,6 +42,9 @@ Change log:
|
|||||||
1.9 - Renamed 'protector_pvp_spawn' setting to 'protector_spawn' which protects
|
1.9 - Renamed 'protector_pvp_spawn' setting to 'protector_spawn' which protects
|
||||||
an area around static spawnpoint and disables pvp if active.
|
an area around static spawnpoint and disables pvp if active.
|
||||||
(note: previous name can still be used)
|
(note: previous name can still be used)
|
||||||
|
2.0 - Added protector placement tool (thanks to Shara) so that players can easily
|
||||||
|
stand on a protector, face in a direction and it places a new one at a set
|
||||||
|
distance to cover protection radius.
|
||||||
|
|
||||||
Lucky Blocks: 6
|
Lucky Blocks: 6
|
||||||
|
|
||||||
|
1
init.lua
1
init.lua
@ -644,6 +644,7 @@ local path = minetest.get_modpath("protector")
|
|||||||
dofile(path .. "/doors_chest.lua")
|
dofile(path .. "/doors_chest.lua")
|
||||||
dofile(path .. "/pvp.lua")
|
dofile(path .. "/pvp.lua")
|
||||||
dofile(path .. "/admin.lua")
|
dofile(path .. "/admin.lua")
|
||||||
|
dofile(path .. "/tool.lua")
|
||||||
dofile(path .. "/lucky_block.lua")
|
dofile(path .. "/lucky_block.lua")
|
||||||
|
|
||||||
print (S("[MOD] Protector Redo loaded"))
|
print (S("[MOD] Protector Redo loaded"))
|
||||||
|
115
tool.lua
Normal file
115
tool.lua
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
|
||||||
|
-- protector placement tool (thanks to Shara for code and idea)
|
||||||
|
|
||||||
|
minetest.register_craftitem("protector:tool", {
|
||||||
|
description = "Protector Placer Tool (stand on protector, face direction and use)",
|
||||||
|
inventory_image = "protector_display.png",
|
||||||
|
stack_max = 1,
|
||||||
|
|
||||||
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
|
|
||||||
|
local name = user:get_player_name()
|
||||||
|
|
||||||
|
-- check node player occupies
|
||||||
|
local pos = user:getpos()
|
||||||
|
local nod = minetest.get_node(pos).name
|
||||||
|
if nod ~= "protector:protect2" then
|
||||||
|
-- check node under player
|
||||||
|
pos.y = pos.y - 1
|
||||||
|
nod = minetest.get_node(pos).name
|
||||||
|
if nod ~= "protector:protect"
|
||||||
|
and nod ~= "protector:protect2" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- get direction player is facing
|
||||||
|
local dir = minetest.dir_to_facedir( user:get_look_dir() )
|
||||||
|
local vec = {x = 0, y = 0, z = 0}
|
||||||
|
local gap = (protector.radius * 2) + 1
|
||||||
|
|
||||||
|
-- set placement coords
|
||||||
|
if dir == 0 then
|
||||||
|
vec.z = gap -- north
|
||||||
|
elseif dir == 1 then
|
||||||
|
vec.x = gap -- east
|
||||||
|
elseif dir == 2 then
|
||||||
|
vec.z = -gap -- south
|
||||||
|
elseif dir == 3 then
|
||||||
|
vec.x = -gap -- west
|
||||||
|
end
|
||||||
|
|
||||||
|
-- new position
|
||||||
|
pos.x = pos.x + vec.x
|
||||||
|
pos.y = pos.y + vec.y
|
||||||
|
pos.z = pos.z + vec.z
|
||||||
|
|
||||||
|
-- does placing a protector overlap existing area
|
||||||
|
if not protector.can_dig(protector.radius * 2, pos,
|
||||||
|
user:get_player_name(), true, 3) then
|
||||||
|
|
||||||
|
minetest.chat_send_player(name,
|
||||||
|
"Overlaps into above players protected area")
|
||||||
|
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- does a protector already exist ?
|
||||||
|
if #minetest.find_nodes_in_area(
|
||||||
|
vector.subtract(pos, 1), vector.add(pos, 1),
|
||||||
|
{"protector:protect", "protector:protect2"}) > 0 then
|
||||||
|
|
||||||
|
minetest.chat_send_player(name, "Protector already in place!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- do we have protectors to use ?
|
||||||
|
local inv = user:get_inventory()
|
||||||
|
|
||||||
|
if not inv:contains_item("main", "protector:protect")
|
||||||
|
and not inv:contains_item("main", "protector:protect2") then
|
||||||
|
minetest.chat_send_player(name, "No protectors available to place!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- take protector
|
||||||
|
if inv:contains_item("main", "protector:protect") then
|
||||||
|
inv:remove_item("main", "protector:protect")
|
||||||
|
elseif inv:contains_item("main", "protector:protect2") then
|
||||||
|
inv:remove_item("main", "protector:protect2")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- place protector
|
||||||
|
minetest.set_node(pos, {name = nod, param2 = 1})
|
||||||
|
|
||||||
|
-- set protector metadata
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("owner", name)
|
||||||
|
meta:set_string("infotext", "Protection (owned by " .. name .. ")")
|
||||||
|
meta:set_string("members", "")
|
||||||
|
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- tool recipe
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "protector:tool",
|
||||||
|
recipe = {
|
||||||
|
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
|
||||||
|
{"default:steel_ingot", "protector:protect", "default:steel_ingot"},
|
||||||
|
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
-- recipes to switch between protectors
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = "protector:protect",
|
||||||
|
recipe = {"protector:protect2"}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = "protector:protect2",
|
||||||
|
recipe = {"protector:protect"}
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user