forked from nalc/areas
Ajoute certaines modifications venant de MFF + ajustement HUD
* Aires openfarming * Privilège megabuilder * HUD légèrement modifié pour laisser de la place à celui de factions
This commit is contained in:
parent
aca830fd22
commit
feae9967dc
27
api.lua
27
api.lua
@ -1,5 +1,14 @@
|
|||||||
local hudHandlers = {}
|
local hudHandlers = {}
|
||||||
|
|
||||||
|
---plants to place in openfarming
|
||||||
|
local plants = {
|
||||||
|
["farming:blueberries"]="air", ["farming:carrot"]="air", ["farming:coffee_beans"]="air",
|
||||||
|
["farming:corn"]="air", ["farming:cucumber"]="air", ["farming:melon_slice"]="air",
|
||||||
|
["farming:potato"]="air", ["farming:pumpkin_slice"]="air", ["farming:raspberries"]="air",
|
||||||
|
["farming:rhubarb"]="air", ["farming:tomato"]="air", ["farming:seed_cotton"]="air",
|
||||||
|
["farming:seed_wheat"]="air",["default:papyrus"]="air", ["farming:trellis"]="air",
|
||||||
|
["farming:grapes"]="farming:trellis", ["farming:beanpole"]="air", ["farming:beans"]="farming:beanpole",
|
||||||
|
}
|
||||||
|
|
||||||
areas.registered_on_adds = {}
|
areas.registered_on_adds = {}
|
||||||
areas.registered_on_removes = {}
|
areas.registered_on_removes = {}
|
||||||
@ -94,6 +103,24 @@ function areas:canInteract(pos, name)
|
|||||||
for _, area in pairs(self:getAreasAtPos(pos)) do
|
for _, area in pairs(self:getAreasAtPos(pos)) do
|
||||||
if area.owner == name or area.open then
|
if area.owner == name or area.open then
|
||||||
return true
|
return true
|
||||||
|
elseif area.openfarming then
|
||||||
|
-- if area is openfarming
|
||||||
|
local node = minetest.get_node(pos).name
|
||||||
|
if not minetest.registered_nodes[node] then return false end
|
||||||
|
local player = minetest.get_player_by_name(name)
|
||||||
|
if not player then return false end
|
||||||
|
local wstack = player:get_wielded_item():get_name()
|
||||||
|
if wstack == "" then wstack = "hand" end
|
||||||
|
|
||||||
|
--on_dig
|
||||||
|
if minetest.get_item_group(node, "plant") == 1 and (wstack == "hand" or minetest.registered_tools[wstack]) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
--on_place
|
||||||
|
if plants[wstack] ~= nil and plants[wstack] == node then
|
||||||
|
return true
|
||||||
|
end
|
||||||
elseif areas.factions_available and area.faction_open then
|
elseif areas.factions_available and area.faction_open then
|
||||||
local faction_name = factions.get_player_faction(area.owner)
|
local faction_name = factions.get_player_faction(area.owner)
|
||||||
if faction_name ~= nil and faction_name == factions.get_player_faction(name) then
|
if faction_name ~= nil and faction_name == factions.get_player_faction(name) then
|
||||||
|
@ -286,6 +286,28 @@ minetest.register_chatcommand("area_open", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_chatcommand(
|
||||||
|
"area_openfarming", {
|
||||||
|
params = "<ID>",
|
||||||
|
description = "Toggle an area as open farming (anyone can harvest and plant) or closed",
|
||||||
|
func = function(name, param)
|
||||||
|
local id = tonumber(param)
|
||||||
|
if not id then
|
||||||
|
return false, "Invalid usage, see /help area_openfarming."
|
||||||
|
end
|
||||||
|
|
||||||
|
if not areas:isAreaOwner(id, name) then
|
||||||
|
return false, "Area "..id.." does not exist"
|
||||||
|
.." or is not owned by you."
|
||||||
|
end
|
||||||
|
local open = not areas.areas[id].openfarming
|
||||||
|
-- Save false as nil to avoid inflating the DB.
|
||||||
|
areas.areas[id].openfarming = open or nil
|
||||||
|
areas:save()
|
||||||
|
return true, ("Area %s to farming."):format(open and "opened" or "closed")
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
if areas.factions_available then
|
if areas.factions_available then
|
||||||
minetest.register_chatcommand("area_faction_open", {
|
minetest.register_chatcommand("area_faction_open", {
|
||||||
params = "<ID>",
|
params = "<ID>",
|
||||||
|
4
hud.lua
4
hud.lua
@ -26,7 +26,7 @@ minetest.register_globalstep(function(dtime)
|
|||||||
area.faction_open = faction_info
|
area.faction_open = faction_info
|
||||||
table.insert(areaStrings, ("%s [%u] (%s%s%s)")
|
table.insert(areaStrings, ("%s [%u] (%s%s%s)")
|
||||||
:format(area.name, id, area.owner,
|
:format(area.name, id, area.owner,
|
||||||
area.open and ":open" or "",
|
area.open and ":open" or area.openfarming and ":openfarming" or "",
|
||||||
faction_info and ":"..faction_info or ""))
|
faction_info and ":"..faction_info or ""))
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ minetest.register_globalstep(function(dtime)
|
|||||||
name = "Areas",
|
name = "Areas",
|
||||||
number = 0xFFFFFF,
|
number = 0xFFFFFF,
|
||||||
position = {x=0, y=1},
|
position = {x=0, y=1},
|
||||||
offset = {x=8, y=-8},
|
offset = {x=8, y=-24},
|
||||||
text = areaString,
|
text = areaString,
|
||||||
scale = {x=200, y=60},
|
scale = {x=200, y=60},
|
||||||
alignment = {x=1, y=-1},
|
alignment = {x=1, y=-1},
|
||||||
|
48
internal.lua
48
internal.lua
@ -1,3 +1,5 @@
|
|||||||
|
-- Mega_builder privilege
|
||||||
|
minetest.register_privilege("megabuilder", "Can protect an infinite amount of areas.")
|
||||||
|
|
||||||
function areas:player_exists(name)
|
function areas:player_exists(name)
|
||||||
return minetest.get_auth_handler().get_auth(name) ~= nil
|
return minetest.get_auth_handler().get_auth(name) ~= nil
|
||||||
@ -216,39 +218,41 @@ function areas:canPlayerAddArea(pos1, pos2, name)
|
|||||||
.." the necessary privilege."
|
.." the necessary privilege."
|
||||||
end
|
end
|
||||||
|
|
||||||
local max_size = privs.areas_high_limit and
|
-- MFF: megabuilders skip checks on size and number of areas
|
||||||
|
if not privs.megabuilder then
|
||||||
|
local max_size = privs.areas_high_limit and
|
||||||
self.config.self_protection_max_size_high or
|
self.config.self_protection_max_size_high or
|
||||||
self.config.self_protection_max_size
|
self.config.self_protection_max_size
|
||||||
if
|
if
|
||||||
(pos2.x - pos1.x) > max_size.x or
|
(pos2.x - pos1.x) > max_size.x or
|
||||||
(pos2.y - pos1.y) > max_size.y or
|
(pos2.y - pos1.y) > max_size.y or
|
||||||
(pos2.z - pos1.z) > max_size.z then
|
(pos2.z - pos1.z) > max_size.z then
|
||||||
return false, "Area is too big."
|
return false, "Area is too big."
|
||||||
end
|
|
||||||
|
|
||||||
-- Check number of areas the user has and make sure it not above the max
|
|
||||||
local count = 0
|
|
||||||
for _, area in pairs(self.areas) do
|
|
||||||
if area.owner == name then
|
|
||||||
count = count + 1
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
local max_areas = privs.areas_high_limit and
|
-- Check number of areas the user has and make sure it not above the max
|
||||||
|
local count = 0
|
||||||
|
for _, area in pairs(self.areas) do
|
||||||
|
if area.owner == name then
|
||||||
|
count = count + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local max_areas = privs.areas_high_limit and
|
||||||
self.config.self_protection_max_areas_high or
|
self.config.self_protection_max_areas_high or
|
||||||
self.config.self_protection_max_areas
|
self.config.self_protection_max_areas
|
||||||
if count >= max_areas then
|
if count >= max_areas then
|
||||||
return false, "You have reached the maximum amount of"
|
return false, "You have reached the maximum amount of"
|
||||||
.." areas that you are allowed to protect."
|
.." areas that you are allowed to protect."
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Check intersecting areas
|
-- Check intersecting areas
|
||||||
local can, id = self:canInteractInArea(pos1, pos2, name)
|
local can, id = self:canInteractInArea(pos1, pos2, name)
|
||||||
if not can then
|
if not can then
|
||||||
local area = self.areas[id]
|
local area = self.areas[id]
|
||||||
return false, ("The area intersects with %s [%u] (%s).")
|
return false, ("The area intersects with %s [%u] (%s).")
|
||||||
:format(area.name, id, area.owner)
|
:format(area.name, id, area.owner)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user