mirror of
https://github.com/minetest-mods/areas.git
synced 2025-06-29 22:50:30 +02:00
Compare commits
12 Commits
master
...
nalc-1.2.0
Author | SHA1 | Date | |
---|---|---|---|
99408df96a | |||
42cde6a494 | |||
e0783cf8bf | |||
0b2baacb92 | |||
54c504fa0d | |||
26d6f56485 | |||
57f20bb25f | |||
feae9967dc | |||
c4d0fe020f | |||
b0c229d80a | |||
d7fba610a1 | |||
2a56743f65 |
28
api.lua
28
api.lua
@ -1,5 +1,15 @@
|
||||
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_removes = {}
|
||||
areas.registered_on_moves = {}
|
||||
@ -91,6 +101,24 @@ function areas:canInteract(pos, name)
|
||||
for _, area in pairs(self:getAreasAtPos(pos)) do
|
||||
if area.owner == name or area.open then
|
||||
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
|
||||
local faction_name = factions.get_player_faction(area.owner)
|
||||
if faction_name ~= nil and faction_name == factions.get_player_faction(name) then
|
||||
|
@ -284,6 +284,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
|
||||
minetest.register_chatcommand("area_faction_open", {
|
||||
params = S("<ID>"),
|
||||
@ -375,7 +397,9 @@ minetest.register_chatcommand("area_info", {
|
||||
elseif has_high_limit then
|
||||
table.insert(lines,
|
||||
S("You have extended area protection"..
|
||||
" limits (\"areas_high_limit\" privilege)."))
|
||||
" limits (\"areas_high_limit\" privilege)."))
|
||||
elseif privs.megabuilder then
|
||||
table.insert(lines, "You are a megabuilder (\"megabuilder\" privilege).")
|
||||
end
|
||||
|
||||
-- Area count
|
||||
@ -388,7 +412,7 @@ minetest.register_chatcommand("area_info", {
|
||||
table.insert(lines, S("You have @1 areas.", area_num))
|
||||
|
||||
-- Area limit
|
||||
local area_limit_line = privs.areas and
|
||||
local area_limit_line = (privs.areas or privs.megabuilder) and
|
||||
S("Limit: no area count limit") or
|
||||
S("Limit: @1 areas", max_count)
|
||||
table.insert(lines, area_limit_line)
|
||||
@ -409,6 +433,9 @@ minetest.register_chatcommand("area_info", {
|
||||
limit, size_limit)
|
||||
priv_limit_info("areas_high_limit",
|
||||
limit_high, size_limit_high)
|
||||
table.insert(lines, "Players with the \"megabuilder\" privilege can protect unlimited areas in size and number.")
|
||||
elseif privs.megabuilder then
|
||||
table.insert(lines, "You can protect areas unlimited in size and number.")
|
||||
elseif has_prot_priv then
|
||||
size_info(S("You can protect areas"), max_size)
|
||||
end
|
||||
|
2
hud.lua
2
hud.lua
@ -25,7 +25,7 @@ minetest.register_globalstep(function(dtime)
|
||||
area.faction_open = faction_info
|
||||
table.insert(areaStrings, ("%s [%u] (%s%s%s)")
|
||||
:format(area.name, id, area.owner,
|
||||
area.open and S(":open") or "",
|
||||
area.open and S(":open") or area.openfarming and ":openfarming" or "",
|
||||
faction_info and ":"..faction_info or ""))
|
||||
end
|
||||
|
||||
|
4
init.lua
4
init.lua
@ -27,6 +27,10 @@ minetest.register_privilege("areas", {
|
||||
minetest.register_privilege("areas_high_limit", {
|
||||
description = "Can protect more, bigger areas."
|
||||
})
|
||||
-- Mega_builder privilege -- MFF
|
||||
minetest.register_privilege("megabuilder", {
|
||||
description = "Can protect an infinite amount of areas."
|
||||
})
|
||||
|
||||
if not minetest.registered_privileges[areas.config.self_protection_privilege] then
|
||||
minetest.register_privilege(areas.config.self_protection_privilege, {
|
||||
|
26
internal.lua
26
internal.lua
@ -216,24 +216,27 @@ function areas:canPlayerAddArea(pos1, pos2, name)
|
||||
.." the necessary privilege.")
|
||||
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
|
||||
if
|
||||
if
|
||||
(pos2.x - pos1.x) > max_size.x or
|
||||
(pos2.y - pos1.y) > max_size.y or
|
||||
(pos2.z - pos1.z) > max_size.z then
|
||||
return false, S("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
|
||||
return false, S("Area is too big.")
|
||||
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
|
||||
if count >= max_areas then
|
||||
@ -248,7 +251,6 @@ function areas:canPlayerAddArea(pos1, pos2, name)
|
||||
return false, S("The area intersects with @1 [@2] (@3).",
|
||||
area.name, id, area.owner)
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 123 B |
Binary file not shown.
Before Width: | Height: | Size: 157 B After Width: | Height: | Size: 134 B |
Reference in New Issue
Block a user