forked from nalc/areas
Add translation support
This commit is contained in:
parent
aca830fd22
commit
4179917eb4
@ -9,7 +9,6 @@ read_globals = {
|
||||
"VoxelManip", "VoxelArea",
|
||||
"PseudoRandom", "ItemStack",
|
||||
"AreaStore",
|
||||
"intllib",
|
||||
"default",
|
||||
table = { fields = { "copy", "getn" } }
|
||||
}
|
||||
|
242
chatcommands.lua
242
chatcommands.lua
@ -1,15 +1,16 @@
|
||||
local S = minetest.get_translator("areas")
|
||||
|
||||
minetest.register_chatcommand("protect", {
|
||||
params = "<AreaName>",
|
||||
description = "Protect your own area",
|
||||
params = S("<AreaName>"),
|
||||
description = S("Protect your own area"),
|
||||
privs = {[areas.config.self_protection_privilege]=true},
|
||||
func = function(name, param)
|
||||
if param == "" then
|
||||
return false, "Invalid usage, see /help protect."
|
||||
return false, S("Invalid usage, see /help @1.", "protect")
|
||||
end
|
||||
local pos1, pos2 = areas:getPos(name)
|
||||
if not (pos1 and pos2) then
|
||||
return false, "You need to select an area first."
|
||||
return false, S("You need to select an area first.")
|
||||
end
|
||||
|
||||
minetest.log("action", "/protect invoked, owner="..name..
|
||||
@ -19,38 +20,37 @@ minetest.register_chatcommand("protect", {
|
||||
|
||||
local canAdd, errMsg = areas:canPlayerAddArea(pos1, pos2, name)
|
||||
if not canAdd then
|
||||
return false, "You can't protect that area: "..errMsg
|
||||
return false, S("You can't protect that area: @1", errMsg)
|
||||
end
|
||||
|
||||
local id = areas:add(name, param, pos1, pos2, nil)
|
||||
areas:save()
|
||||
|
||||
return true, "Area protected. ID: "..id
|
||||
return true, S("Area protected. ID: @1", id)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("set_owner", {
|
||||
params = "<PlayerName> <AreaName>",
|
||||
description = "Protect an area beetween two positions and give"
|
||||
params = S("<PlayerName>").." "..S("<AreaName>"),
|
||||
description = S("Protect an area beetween two positions and give"
|
||||
.." a player access to it without setting the parent of the"
|
||||
.." area to any existing area",
|
||||
.." area to any existing area"),
|
||||
privs = areas.adminPrivs,
|
||||
func = function(name, param)
|
||||
local ownerName, areaName = param:match('^(%S+)%s(.+)$')
|
||||
|
||||
if not ownerName then
|
||||
return false, "Incorrect usage, see /help set_owner."
|
||||
return false, S("Invalid usage, see /help @1.", "set_owner")
|
||||
end
|
||||
|
||||
local pos1, pos2 = areas:getPos(name)
|
||||
if not (pos1 and pos2) then
|
||||
return false, "You need to select an area first."
|
||||
return false, S("You need to select an area first.")
|
||||
end
|
||||
|
||||
if not areas:player_exists(ownerName) then
|
||||
return false, "The player \""
|
||||
..ownerName.."\" does not exist."
|
||||
return false, S("The player \"@1\" does not exist.", ownerName)
|
||||
end
|
||||
|
||||
minetest.log("action", name.." runs /set_owner. Owner = "..ownerName..
|
||||
@ -62,34 +62,34 @@ minetest.register_chatcommand("set_owner", {
|
||||
areas:save()
|
||||
|
||||
minetest.chat_send_player(ownerName,
|
||||
"You have been granted control over area #"..
|
||||
id..". Type /list_areas to show your areas.")
|
||||
return true, "Area protected. ID: "..id
|
||||
S("You have been granted control over area #@1. "..
|
||||
"Type /list_areas to show your areas.", id))
|
||||
return true, S("Area protected. ID: @1", id)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("add_owner", {
|
||||
params = "<ParentID> <Player> <AreaName>",
|
||||
description = "Give a player access to a sub-area beetween two"
|
||||
params = S("<ParentID>").." "..S("<PlayerName>").." "..S("<AreaName>"),
|
||||
description = S("Give a player access to a sub-area beetween two"
|
||||
.." positions that have already been protected,"
|
||||
.." Use set_owner if you don't want the parent to be set.",
|
||||
.." Use set_owner if you don't want the parent to be set."),
|
||||
func = function(name, param)
|
||||
local pid, ownerName, areaName
|
||||
= param:match('^(%d+) ([^ ]+) (.+)$')
|
||||
|
||||
if not pid then
|
||||
minetest.chat_send_player(name, "Incorrect usage, see /help add_owner")
|
||||
minetest.chat_send_player(name, S("Invalid usage, see /help @1.", "add_owner"))
|
||||
return
|
||||
end
|
||||
|
||||
local pos1, pos2 = areas:getPos(name)
|
||||
if not (pos1 and pos2) then
|
||||
return false, "You need to select an area first."
|
||||
return false, S("You need to select an area first.")
|
||||
end
|
||||
|
||||
if not areas:player_exists(ownerName) then
|
||||
return false, "The player \""..ownerName.."\" does not exist."
|
||||
return false, S("The player \"@1\" does not exist.", ownerName)
|
||||
end
|
||||
|
||||
minetest.log("action", name.." runs /add_owner. Owner = "..ownerName..
|
||||
@ -101,52 +101,52 @@ minetest.register_chatcommand("add_owner", {
|
||||
pid = tonumber(pid)
|
||||
if (not areas:isAreaOwner(pid, name)) or
|
||||
(not areas:isSubarea(pos1, pos2, pid)) then
|
||||
return false, "You can't protect that area."
|
||||
return false, S("You can't protect that area.")
|
||||
end
|
||||
|
||||
local id = areas:add(ownerName, areaName, pos1, pos2, pid)
|
||||
areas:save()
|
||||
|
||||
minetest.chat_send_player(ownerName,
|
||||
"You have been granted control over area #"..
|
||||
id..". Type /list_areas to show your areas.")
|
||||
return true, "Area protected. ID: "..id
|
||||
S("You have been granted control over area #@1. "..
|
||||
"Type /list_areas to show your areas.", id))
|
||||
return true, S("Area protected. ID: @1", id)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("rename_area", {
|
||||
params = "<ID> <newName>",
|
||||
description = "Rename a area that you own",
|
||||
params = S("<ID>").." "..S("<newName>"),
|
||||
description = S("Rename a area that you own"),
|
||||
func = function(name, param)
|
||||
local id, newName = param:match("^(%d+)%s(.+)$")
|
||||
if not id then
|
||||
return false, "Invalid usage, see /help rename_area."
|
||||
return false, S("Invalid usage, see /help @1.", "rename_area")
|
||||
end
|
||||
|
||||
id = tonumber(id)
|
||||
if not id then
|
||||
return false, "That area doesn't exist."
|
||||
return false, S("That area doesn't exist.")
|
||||
end
|
||||
|
||||
if not areas:isAreaOwner(id, name) then
|
||||
return true, "You don't own that area."
|
||||
return true, S("You don't own that area.")
|
||||
end
|
||||
|
||||
areas.areas[id].name = newName
|
||||
areas:save()
|
||||
return true, "Area renamed."
|
||||
return true, S("Area renamed.")
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("find_areas", {
|
||||
params = "<regexp>",
|
||||
description = "Find areas using a Lua regular expression",
|
||||
params = S("<regexp>"),
|
||||
description = S("Find areas using a Lua regular expression"),
|
||||
privs = areas.adminPrivs,
|
||||
func = function(name, param)
|
||||
if param == "" then
|
||||
return false, "A regular expression is required."
|
||||
return false, S("A regular expression is required.")
|
||||
end
|
||||
|
||||
-- Check expression for validity
|
||||
@ -154,7 +154,7 @@ minetest.register_chatcommand("find_areas", {
|
||||
("Test [1]: Player (0,0,0) (0,0,0)"):find(param)
|
||||
end
|
||||
if not pcall(testRegExp) then
|
||||
return false, "Invalid regular expression."
|
||||
return false, S("Invalid regular expression.")
|
||||
end
|
||||
|
||||
local matches = {}
|
||||
@ -167,14 +167,14 @@ minetest.register_chatcommand("find_areas", {
|
||||
if #matches > 0 then
|
||||
return true, table.concat(matches, "\n")
|
||||
else
|
||||
return true, "No matches found."
|
||||
return true, S("No matches found.")
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("list_areas", {
|
||||
description = "List your areas, or all areas if you are an admin.",
|
||||
description = S("List your areas, or all areas if you are an admin."),
|
||||
func = function(name, param)
|
||||
local admin = minetest.check_player_privs(name, areas.adminPrivs)
|
||||
local areaStrings = {}
|
||||
@ -184,7 +184,7 @@ minetest.register_chatcommand("list_areas", {
|
||||
end
|
||||
end
|
||||
if #areaStrings == 0 then
|
||||
return true, "No visible areas."
|
||||
return true, S("No visible areas.")
|
||||
end
|
||||
return true, table.concat(areaStrings, "\n")
|
||||
end
|
||||
@ -192,154 +192,154 @@ minetest.register_chatcommand("list_areas", {
|
||||
|
||||
|
||||
minetest.register_chatcommand("recursive_remove_areas", {
|
||||
params = "<id>",
|
||||
description = "Recursively remove areas using an id",
|
||||
params = S("<ID>"),
|
||||
description = S("Recursively remove areas using an id"),
|
||||
func = function(name, param)
|
||||
local id = tonumber(param)
|
||||
if not id then
|
||||
return false, "Invalid usage, see"
|
||||
.." /help recursive_remove_areas"
|
||||
return false, S("Invalid usage, see"
|
||||
.." /help @1.", "recursive_remove_areas")
|
||||
end
|
||||
|
||||
if not areas:isAreaOwner(id, name) then
|
||||
return false, "Area "..id.." does not exist or is"
|
||||
.." not owned by you."
|
||||
return false, S("Area @1 does not exist or is"
|
||||
.." not owned by you.", id)
|
||||
end
|
||||
|
||||
areas:remove(id, true)
|
||||
areas:save()
|
||||
return true, "Removed area "..id.." and it's sub areas."
|
||||
return true, S("Removed area @1 and it's sub areas.", id)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("remove_area", {
|
||||
params = "<id>",
|
||||
description = "Remove an area using an id",
|
||||
params = S("<ID>"),
|
||||
description = S("Remove an area using an id"),
|
||||
func = function(name, param)
|
||||
local id = tonumber(param)
|
||||
if not id then
|
||||
return false, "Invalid usage, see /help remove_area"
|
||||
return false, S("Invalid usage, see /help @1.", "remove_area")
|
||||
end
|
||||
|
||||
if not areas:isAreaOwner(id, name) then
|
||||
return false, "Area "..id.." does not exist or"
|
||||
.." is not owned by you."
|
||||
return false, S("Area @1 does not exist or"
|
||||
.." is not owned by you.", id)
|
||||
end
|
||||
|
||||
areas:remove(id)
|
||||
areas:save()
|
||||
return true, "Removed area "..id
|
||||
return true, S("Removed area @1", id)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("change_owner", {
|
||||
params = "<ID> <NewOwner>",
|
||||
description = "Change the owner of an area using it's ID",
|
||||
params = S("<ID>").." "..S("<NewOwner>"),
|
||||
description = S("Change the owner of an area using it's ID"),
|
||||
func = function(name, param)
|
||||
local id, newOwner = param:match("^(%d+)%s(%S+)$")
|
||||
if not id then
|
||||
return false, "Invalid usage, see"
|
||||
.." /help change_owner."
|
||||
return false, S("Invalid usage, see"
|
||||
.." /help @1.", "change_owner")
|
||||
end
|
||||
|
||||
if not areas:player_exists(newOwner) then
|
||||
return false, "The player \""..newOwner
|
||||
.."\" does not exist."
|
||||
return false, S("The player \"@1\" does not exist.", newOwner)
|
||||
end
|
||||
|
||||
id = tonumber(id)
|
||||
if not areas:isAreaOwner(id, name) then
|
||||
return false, "Area "..id.." does not exist"
|
||||
.." or is not owned by you."
|
||||
return false, S("Area @1 does not exist"
|
||||
.." or is not owned by you.", id)
|
||||
end
|
||||
areas.areas[id].owner = newOwner
|
||||
areas:save()
|
||||
minetest.chat_send_player(newOwner,
|
||||
("%s has given you control over the area %q (ID %d).")
|
||||
:format(name, areas.areas[id].name, id))
|
||||
return true, "Owner changed."
|
||||
S("@1 has given you control over the area \"@2\" (ID @3).",
|
||||
name, areas.areas[id].name, id))
|
||||
return true, S("Owner changed.")
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("area_open", {
|
||||
params = "<ID>",
|
||||
description = "Toggle an area open (anyone can interact) or closed",
|
||||
params = S("<ID>"),
|
||||
description = S("Toggle an area open (anyone can interact) or closed"),
|
||||
func = function(name, param)
|
||||
local id = tonumber(param)
|
||||
if not id then
|
||||
return false, "Invalid usage, see /help area_open."
|
||||
return false, S("Invalid usage, see /help @1.", "area_open")
|
||||
end
|
||||
|
||||
if not areas:isAreaOwner(id, name) then
|
||||
return false, "Area "..id.." does not exist"
|
||||
.." or is not owned by you."
|
||||
return false, S("Area @1 does not exist"
|
||||
.." or is not owned by you.", id)
|
||||
end
|
||||
local open = not areas.areas[id].open
|
||||
-- Save false as nil to avoid inflating the DB.
|
||||
areas.areas[id].open = open or nil
|
||||
areas:save()
|
||||
return true, ("Area %s."):format(open and "opened" or "closed")
|
||||
return true, open and S("Area opened.") or S("Area closed.")
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
if areas.factions_available then
|
||||
minetest.register_chatcommand("area_faction_open", {
|
||||
params = "<ID>",
|
||||
description = "Toggle an area open/closed for members in your faction.",
|
||||
params = S("<ID>"),
|
||||
description = S("Toggle an area open/closed for members in your faction."),
|
||||
func = function(name, param)
|
||||
local id = tonumber(param)
|
||||
if not id then
|
||||
return false, "Invalid usage, see /help area_faction_open."
|
||||
return false, S("Invalid usage, see /help @1.", "area_faction_open")
|
||||
end
|
||||
|
||||
if not areas:isAreaOwner(id, name) then
|
||||
return false, "Area "..id.." does not exist"
|
||||
.." or is not owned by you."
|
||||
return false, S("Area @1 does not exist"
|
||||
.." or is not owned by you.", id)
|
||||
end
|
||||
local open = not areas.areas[id].faction_open
|
||||
-- Save false as nil to avoid inflating the DB.
|
||||
areas.areas[id].faction_open = open or nil
|
||||
areas:save()
|
||||
return true, ("Area %s for faction members."):format(open and "opened" or "closed")
|
||||
return true, open and S("Area opened for faction members.")
|
||||
or S("Area closed for faction members.")
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
minetest.register_chatcommand("move_area", {
|
||||
params = "<ID>",
|
||||
description = "Move (or resize) an area to the current positions.",
|
||||
params = S("<ID>"),
|
||||
description = S("Move (or resize) an area to the current positions."),
|
||||
privs = areas.adminPrivs,
|
||||
func = function(name, param)
|
||||
local id = tonumber(param)
|
||||
if not id then
|
||||
return false, "Invalid usage, see /help move_area."
|
||||
return false, S("Invalid usage, see /help @1.", "move_area")
|
||||
end
|
||||
|
||||
local area = areas.areas[id]
|
||||
if not area then
|
||||
return false, "Area does not exist."
|
||||
return false, S("Area does not exist.")
|
||||
end
|
||||
|
||||
local pos1, pos2 = areas:getPos(name)
|
||||
if not pos1 then
|
||||
return false, "You need to select an area first."
|
||||
return false, S("You need to select an area first.")
|
||||
end
|
||||
|
||||
areas:move(id, area, pos1, pos2)
|
||||
areas:save()
|
||||
|
||||
return true, "Area successfully moved."
|
||||
return true, S("Area successfully moved.")
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("area_info", {
|
||||
description = "Get information about area configuration and usage.",
|
||||
description = S("Get information about area configuration and usage."),
|
||||
func = function(name, param)
|
||||
local lines = {}
|
||||
local privs = minetest.get_player_privs(name)
|
||||
@ -362,26 +362,33 @@ minetest.register_chatcommand("area_info", {
|
||||
size_limit_high or size_limit
|
||||
|
||||
-- Privilege information
|
||||
local self_prot_line = ("Self protection is %sabled"):format(
|
||||
self_prot and "en" or "dis")
|
||||
if self_prot and prot_priv then
|
||||
self_prot_line = self_prot_line..
|
||||
(" %s have the neccessary privilege (%q).")
|
||||
:format(
|
||||
has_prot_priv and "and you" or
|
||||
"but you don't",
|
||||
prot_priv)
|
||||
else
|
||||
self_prot_line = self_prot_line.."."
|
||||
end
|
||||
local self_prot_line = (self_prot and prot_priv) and
|
||||
(has_prot_priv and
|
||||
(self_prot and
|
||||
S("Self protection is enabled and you have the "..
|
||||
"necessary privilege (\"@1\").", prot_priv) or
|
||||
S("Self protection is disabled and you have the "..
|
||||
"necessary privilege (\"@1\").", prot_priv)
|
||||
) or
|
||||
(self_prot and
|
||||
S("Self protection is enabled but you don't have the "..
|
||||
"necessary privilege (\"@1\").", prot_priv) or
|
||||
S("Self protection is disabled but you don't have the "..
|
||||
"necessary privilege (\"@1\").", prot_priv)
|
||||
)
|
||||
) or
|
||||
(self_prot and
|
||||
S("Self protection is enabled.") or
|
||||
S("Self protection is disabled.")
|
||||
)
|
||||
table.insert(lines, self_prot_line)
|
||||
if privs.areas then
|
||||
table.insert(lines, "You are an area"..
|
||||
" administrator (\"areas\" privilege).")
|
||||
table.insert(lines, S("You are an area"..
|
||||
" administrator (\"areas\" privilege)."))
|
||||
elseif has_high_limit then
|
||||
table.insert(lines,
|
||||
"You have extended area protection"..
|
||||
" limits (\"areas_high_limit\" privilege).")
|
||||
S("You have extended area protection"..
|
||||
" limits (\"areas_high_limit\" privilege)."))
|
||||
end
|
||||
|
||||
-- Area count
|
||||
@ -391,26 +398,35 @@ minetest.register_chatcommand("area_info", {
|
||||
area_num = area_num + 1
|
||||
end
|
||||
end
|
||||
local count_line = ("You have %d area%s"):format(
|
||||
area_num, area_num == 1 and "" or "s")
|
||||
if privs.areas then
|
||||
count_line = count_line..
|
||||
" and have no area protection limits."
|
||||
elseif can_prot then
|
||||
count_line = count_line..(", out of a maximum of %d.")
|
||||
:format(max_count)
|
||||
end
|
||||
local count_line = privs.areas and
|
||||
((area_num <= 1) and
|
||||
S("You have @1 area and have no area "..
|
||||
"protection limits.", area_num) or
|
||||
S("You have @1 areas and have no area "..
|
||||
"protection limits.", area_num)
|
||||
) or
|
||||
(can_prot and (
|
||||
(area_num <= 1) and
|
||||
S("You have @1 area, out of a "..
|
||||
"maximum of @2.", area_num, max_count) or
|
||||
S("You have @1 areas, out of a "..
|
||||
"maximum of @2.", area_num, max_count)
|
||||
) or
|
||||
(area_num <= 1) and
|
||||
S("You have @1 area.", area_num) or
|
||||
S("You have @1 areas.", area_num)
|
||||
)
|
||||
table.insert(lines, count_line)
|
||||
|
||||
-- Area size limits
|
||||
local function size_info(str, size)
|
||||
table.insert(lines, ("%s spanning up to %dx%dx%d.")
|
||||
:format(str, size.x, size.y, size.z))
|
||||
table.insert(lines, S("@1 spanning up to @2x@3x@4.",
|
||||
str, size.x, size.y, size.z))
|
||||
end
|
||||
local function priv_limit_info(lpriv, lmax_count, lmax_size)
|
||||
size_info(("Players with the %q privilege"..
|
||||
" can protect up to %d areas"):format(
|
||||
lpriv, lmax_count), lmax_size)
|
||||
size_info(S("Players with the \"@1\" privilege"..
|
||||
" can protect up to @2 areas", lpriv, lmax_count),
|
||||
lmax_size)
|
||||
end
|
||||
if self_prot then
|
||||
if privs.areas then
|
||||
@ -419,7 +435,7 @@ minetest.register_chatcommand("area_info", {
|
||||
priv_limit_info("areas_high_limit",
|
||||
limit_high, size_limit_high)
|
||||
elseif has_prot_priv then
|
||||
size_info("You can protect areas", max_size)
|
||||
size_info(S("You can protect areas"), max_size)
|
||||
end
|
||||
end
|
||||
|
||||
|
6
hud.lua
6
hud.lua
@ -1,5 +1,5 @@
|
||||
-- This is inspired by the landrush mod by Bremaweb
|
||||
|
||||
local S = minetest.get_translator("areas")
|
||||
areas.hud = {}
|
||||
areas.hud.refresh = 0
|
||||
|
||||
@ -26,7 +26,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 ":open" or "",
|
||||
area.open and S(":open") or "",
|
||||
faction_info and ":"..faction_info or ""))
|
||||
end
|
||||
|
||||
@ -38,7 +38,7 @@ minetest.register_globalstep(function(dtime)
|
||||
table.insert(areaStrings, str)
|
||||
end
|
||||
|
||||
local areaString = "Areas:"
|
||||
local areaString = S("Areas:")
|
||||
if #areaStrings > 0 then
|
||||
areaString = areaString.."\n"..
|
||||
table.concat(areaStrings, "\n")
|
||||
|
@ -1,3 +1,4 @@
|
||||
local S = minetest.get_translator("areas")
|
||||
|
||||
local old_is_protected = minetest.is_protected
|
||||
function minetest.is_protected(pos, name)
|
||||
@ -11,7 +12,7 @@ minetest.register_on_protection_violation(function(pos, name)
|
||||
if not areas:canInteract(pos, name) then
|
||||
local owners = areas:getNodeOwners(pos)
|
||||
minetest.chat_send_player(name,
|
||||
("%s is protected by %s."):format(
|
||||
S("@1 is protected by @2.",
|
||||
minetest.pos_to_string(pos),
|
||||
table.concat(owners, ", ")))
|
||||
end
|
||||
|
15
internal.lua
15
internal.lua
@ -1,3 +1,4 @@
|
||||
local S = minetest.get_translator("areas")
|
||||
|
||||
function areas:player_exists(name)
|
||||
return minetest.get_auth_handler().get_auth(name) ~= nil
|
||||
@ -212,8 +213,8 @@ function areas:canPlayerAddArea(pos1, pos2, name)
|
||||
-- and if the area is too big.
|
||||
if not self.config.self_protection or
|
||||
not privs[areas.config.self_protection_privilege] then
|
||||
return false, "Self protection is disabled or you do not have"
|
||||
.." the necessary privilege."
|
||||
return false, S("Self protection is disabled or you do not have"
|
||||
.." the necessary privilege.")
|
||||
end
|
||||
|
||||
local max_size = privs.areas_high_limit and
|
||||
@ -223,7 +224,7 @@ function areas:canPlayerAddArea(pos1, pos2, name)
|
||||
(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, "Area is too big."
|
||||
return false, S("Area is too big.")
|
||||
end
|
||||
|
||||
-- Check number of areas the user has and make sure it not above the max
|
||||
@ -237,16 +238,16 @@ function areas:canPlayerAddArea(pos1, pos2, name)
|
||||
self.config.self_protection_max_areas_high or
|
||||
self.config.self_protection_max_areas
|
||||
if count >= max_areas then
|
||||
return false, "You have reached the maximum amount of"
|
||||
.." areas that you are allowed to protect."
|
||||
return false, S("You have reached the maximum amount of"
|
||||
.." areas that you are allowed to protect.")
|
||||
end
|
||||
|
||||
-- Check intersecting areas
|
||||
local can, id = self:canInteractInArea(pos1, pos2, name)
|
||||
if not can then
|
||||
local area = self.areas[id]
|
||||
return false, ("The area intersects with %s [%u] (%s).")
|
||||
:format(area.name, id, area.owner)
|
||||
return false, S("The area intersects with @1 [@2] (@3).",
|
||||
area.name, id, area.owner)
|
||||
end
|
||||
|
||||
return true
|
||||
|
23
legacy.lua
23
legacy.lua
@ -1,25 +1,26 @@
|
||||
-- This file contains functions to convert from
|
||||
-- the old areas format and other compatability code.
|
||||
local S = minetest.get_translator("areas")
|
||||
|
||||
minetest.register_chatcommand("legacy_load_areas", {
|
||||
params = "<version>",
|
||||
description = "Loads, converts, and saves the areas from"
|
||||
.." a legacy save file.",
|
||||
params = S("<version>"),
|
||||
description = S("Loads, converts, and saves the areas from"
|
||||
.." a legacy save file."),
|
||||
privs = {areas=true, server=true},
|
||||
func = function(name, param)
|
||||
minetest.chat_send_player(name, "Converting areas...")
|
||||
minetest.chat_send_player(name, S("Converting areas…"))
|
||||
local version = tonumber(param)
|
||||
if version == 0 then
|
||||
local err = areas:node_ownership_load()
|
||||
if err then
|
||||
minetest.chat_send_player(name, "Error loading legacy file: "..err)
|
||||
minetest.chat_send_player(name, S("Error loading legacy file: @1", err))
|
||||
return
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(name, "Invalid version number. (0 allowed)")
|
||||
minetest.chat_send_player(name, S("Invalid version number. (0 allowed)"))
|
||||
return
|
||||
end
|
||||
minetest.chat_send_player(name, "Legacy file loaded.")
|
||||
minetest.chat_send_player(name, S("Legacy file loaded."))
|
||||
|
||||
for k, area in pairs(areas.areas) do
|
||||
-- New position format
|
||||
@ -34,15 +35,15 @@ minetest.register_chatcommand("legacy_load_areas", {
|
||||
areas:sortPos(area.pos1, area.pos2)
|
||||
|
||||
-- Add name
|
||||
area.name = "unnamed"
|
||||
area.name = S("unnamed")
|
||||
|
||||
-- Remove ID
|
||||
area.id = nil
|
||||
end
|
||||
minetest.chat_send_player(name, "Table format updated.")
|
||||
minetest.chat_send_player(name, S("Table format updated."))
|
||||
|
||||
areas:save()
|
||||
minetest.chat_send_player(name, "Converted areas saved. Done.")
|
||||
minetest.chat_send_player(name, S("Converted areas saved. Done."))
|
||||
end
|
||||
})
|
||||
|
||||
@ -130,7 +131,7 @@ if areas.config.legacy_table then
|
||||
{x=a.x2, y=a.y2, z=a.z2}
|
||||
a.x1, a.y1, a.z1, a.x2, a.y2, a.z2 =
|
||||
nil, nil, nil, nil, nil, nil
|
||||
a.name = a.name or "unnamed"
|
||||
a.name = a.name or S("unnamed")
|
||||
a.id = nil
|
||||
return rawset(areas.areas, key, a)
|
||||
end
|
||||
|
137
locale/template.txt
Normal file
137
locale/template.txt
Normal file
@ -0,0 +1,137 @@
|
||||
# textdomain: areas
|
||||
|
||||
|
||||
### chatcommands.lua ###
|
||||
|
||||
<AreaName>=
|
||||
<NewOwner>=
|
||||
<ParentID>=
|
||||
<PlayerName>=
|
||||
<newName>=
|
||||
<regexp>=
|
||||
@1 has given you control over the area "@2" (ID @3).=
|
||||
@1 spanning up to @2x@3x@4.=
|
||||
A regular expression is required.=
|
||||
Area @1 does not exist or is not owned by you.=
|
||||
Area closed for faction members.=
|
||||
Area closed.=
|
||||
Area does not exist.=
|
||||
Area opened for faction members.=
|
||||
Area opened.=
|
||||
Area protected. ID: @1=
|
||||
Area renamed.=
|
||||
Area successfully moved.=
|
||||
Change the owner of an area using it's ID=
|
||||
Find areas using a Lua regular expression=
|
||||
Get information about area configuration and usage.=
|
||||
|
||||
Give a player access to a sub-area beetween two positions that have already been protected, Use set_owner if you don't want the parent to be set.=
|
||||
|
||||
Invalid regular expression.=
|
||||
List your areas, or all areas if you are an admin.=
|
||||
Move (or resize) an area to the current positions.=
|
||||
No matches found.=
|
||||
No visible areas.=
|
||||
Owner changed.=
|
||||
Players with the "@1" privilege can protect up to @2 areas=
|
||||
|
||||
Protect an area beetween two positions and give a player access to it without setting the parent of the area to any existing area=
|
||||
|
||||
Protect your own area=
|
||||
Recursively remove areas using an id=
|
||||
Remove an area using an id=
|
||||
Removed area @1=
|
||||
Removed area @1 and it's sub areas.=
|
||||
Rename a area that you own=
|
||||
|
||||
Self protection is disabled and you have the necessary privilege ("@1").=
|
||||
|
||||
Self protection is disabled but you don't have the necessary privilege ("@1").=
|
||||
|
||||
Self protection is disabled.=
|
||||
|
||||
Self protection is enabled and you have the necessary privilege ("@1").=
|
||||
|
||||
Self protection is enabled but you don't have the necessary privilege ("@1").=
|
||||
|
||||
Self protection is enabled.=
|
||||
That area doesn't exist.=
|
||||
The player "@1" does not exist.=
|
||||
Toggle an area open (anyone can interact) or closed=
|
||||
Toggle an area open/closed for members in your faction.=
|
||||
You are an area administrator ("areas" privilege).=
|
||||
You can protect areas=
|
||||
You can't protect that area.=
|
||||
You can't protect that area: @1=
|
||||
You don't own that area.=
|
||||
You have @1 area and have no area protection limits.=
|
||||
You have @1 area, out of a maximum of @2.=
|
||||
You have @1 area.=
|
||||
You have @1 areas and have no area protection limits.=
|
||||
You have @1 areas, out of a maximum of @2.=
|
||||
You have @1 areas.=
|
||||
|
||||
You have been granted control over area #@1. Type /list_areas to show your areas.=
|
||||
|
||||
You have extended area protection limits ("areas_high_limit" privilege).=
|
||||
|
||||
You need to select an area first.=
|
||||
|
||||
### chatcommands.lua ###
|
||||
### pos.lua ###
|
||||
|
||||
<ID>=
|
||||
Invalid usage, see /help @1.=
|
||||
|
||||
### hud.lua ###
|
||||
|
||||
:open=
|
||||
Areas:=
|
||||
|
||||
### interact.lua ###
|
||||
|
||||
@1 is protected by @2.=
|
||||
|
||||
### internal.lua ###
|
||||
|
||||
Area is too big.=
|
||||
|
||||
Self protection is disabled or you do not have the necessary privilege.=
|
||||
|
||||
The area intersects with @1 [@2] (@3).=
|
||||
|
||||
You have reached the maximum amount of areas that you are allowed to protect.=
|
||||
|
||||
|
||||
### legacy.lua ###
|
||||
|
||||
<version>=
|
||||
Converted areas saved. Done.=
|
||||
Converting areas…=
|
||||
Error loading legacy file: @1=
|
||||
Invalid version number. (0 allowed)=
|
||||
Legacy file loaded.=
|
||||
|
||||
Loads, converts, and saves the areas from a legacy save file.=
|
||||
|
||||
Table format updated.=
|
||||
unnamed=
|
||||
|
||||
### pos.lua ###
|
||||
|
||||
<not set>=
|
||||
Area @1 selected.=
|
||||
Area position @1 set to @2=
|
||||
Position @1 set to @2=
|
||||
Position @1: =
|
||||
Select a area by id.=
|
||||
Select position @1 by punching a node.=
|
||||
Select positions by punching two nodes.=
|
||||
|
||||
Set area protection region position @1 to your location or the one specified=
|
||||
|
||||
Set area protection region, position 1, or position 2 by punching nodes, or display the region=
|
||||
|
||||
The area @1 does not exist.=
|
||||
Unable to get position.=
|
||||
Unknown subcommand: @1=
|
66
pos.lua
66
pos.lua
@ -1,4 +1,4 @@
|
||||
|
||||
local S = minetest.get_translator("areas")
|
||||
-- I could depend on WorldEdit for this, but you need to have the 'worldedit'
|
||||
-- permission to use those commands and you don't have
|
||||
-- /area_pos{1,2} [X Y Z|X,Y,Z].
|
||||
@ -22,27 +22,27 @@ local function posLimit(pos)
|
||||
end
|
||||
|
||||
minetest.register_chatcommand("select_area", {
|
||||
params = "<ID>",
|
||||
description = "Select a area by id.",
|
||||
params = S("<ID>"),
|
||||
description = S("Select a area by id."),
|
||||
func = function(name, param)
|
||||
local id = tonumber(param)
|
||||
if not id then
|
||||
return false, "Invalid usage, see /help select_area."
|
||||
return false, S("Invalid usage, see /help @1.", "select_area")
|
||||
end
|
||||
if not areas.areas[id] then
|
||||
return false, "The area "..id.." does not exist."
|
||||
return false, S("The area @1 does not exist.", id)
|
||||
end
|
||||
|
||||
areas:setPos1(name, areas.areas[id].pos1)
|
||||
areas:setPos2(name, areas.areas[id].pos2)
|
||||
return true, "Area "..id.." selected."
|
||||
return true, S("Area @1 selected.", id)
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("area_pos1", {
|
||||
params = "[X Y Z|X,Y,Z]",
|
||||
description = "Set area protection region position 1 to your"
|
||||
.." location or the one specified",
|
||||
description = S("Set area protection region position @1 to your"
|
||||
.." location or the one specified", "1"),
|
||||
privs = {},
|
||||
func = function(name, param)
|
||||
local pos
|
||||
@ -55,22 +55,22 @@ minetest.register_chatcommand("area_pos1", {
|
||||
if player then
|
||||
pos = player:get_pos()
|
||||
else
|
||||
return false, "Unable to get position."
|
||||
return false, S("Unable to get position.")
|
||||
end
|
||||
else
|
||||
return false, "Invalid usage, see /help area_pos1."
|
||||
return false, S("Invalid usage, see /help @1.", "area_pos1")
|
||||
end
|
||||
pos = posLimit(vector.round(pos))
|
||||
areas:setPos1(name, pos)
|
||||
return true, "Area position 1 set to "
|
||||
..minetest.pos_to_string(pos)
|
||||
return true, S("Area position @1 set to @2", "1",
|
||||
minetest.pos_to_string(pos))
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("area_pos2", {
|
||||
params = "[X Y Z|X,Y,Z]",
|
||||
description = "Set area protection region position 2 to your"
|
||||
.." location or the one specified",
|
||||
description = S("Set area protection region position @1 to your"
|
||||
.." location or the one specified", "2"),
|
||||
func = function(name, param)
|
||||
local pos
|
||||
local found, _, x, y, z = param:find(
|
||||
@ -82,48 +82,48 @@ minetest.register_chatcommand("area_pos2", {
|
||||
if player then
|
||||
pos = player:get_pos()
|
||||
else
|
||||
return false, "Unable to get position."
|
||||
return false, S("Unable to get position.")
|
||||
end
|
||||
else
|
||||
return false, "Invalid usage, see /help area_pos2."
|
||||
return false, S("Invalid usage, see /help @1.", "area_pos2")
|
||||
end
|
||||
pos = posLimit(vector.round(pos))
|
||||
areas:setPos2(name, pos)
|
||||
return true, "Area position 2 set to "
|
||||
..minetest.pos_to_string(pos)
|
||||
return true, S("Area position @1 set to @2", "2",
|
||||
minetest.pos_to_string(pos))
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("area_pos", {
|
||||
params = "set/set1/set2/get",
|
||||
description = "Set area protection region, position 1, or position 2"
|
||||
.." by punching nodes, or display the region",
|
||||
description = S("Set area protection region, position 1, or position 2"
|
||||
.." by punching nodes, or display the region"),
|
||||
func = function(name, param)
|
||||
if param == "set" then -- Set both area positions
|
||||
areas.set_pos[name] = "pos1"
|
||||
return true, "Select positions by punching two nodes."
|
||||
return true, S("Select positions by punching two nodes.")
|
||||
elseif param == "set1" then -- Set area position 1
|
||||
areas.set_pos[name] = "pos1only"
|
||||
return true, "Select position 1 by punching a node."
|
||||
return true, S("Select position @1 by punching a node.", "1")
|
||||
elseif param == "set2" then -- Set area position 2
|
||||
areas.set_pos[name] = "pos2"
|
||||
return true, "Select position 2 by punching a node."
|
||||
return true, S("Select position @1 by punching a node.", "2")
|
||||
elseif param == "get" then -- Display current area positions
|
||||
local pos1str, pos2str = "Position 1: ", "Position 2: "
|
||||
local pos1str, pos2str = S("Position @1: ", "1"), S("Position @1: ", "2")
|
||||
if areas.pos1[name] then
|
||||
pos1str = pos1str..minetest.pos_to_string(areas.pos1[name])
|
||||
else
|
||||
pos1str = pos1str.."<not set>"
|
||||
pos1str = pos1str..S("<not set>")
|
||||
end
|
||||
if areas.pos2[name] then
|
||||
pos2str = pos2str..minetest.pos_to_string(areas.pos2[name])
|
||||
else
|
||||
pos2str = pos2str.."<not set>"
|
||||
pos2str = pos2str..S("<not set>")
|
||||
end
|
||||
return true, pos1str.."\n"..pos2str
|
||||
else
|
||||
return false, "Unknown subcommand: "..param
|
||||
return false, S("Unknown subcommand: @1", param)
|
||||
end
|
||||
end,
|
||||
})
|
||||
@ -159,22 +159,22 @@ minetest.register_on_punchnode(function(pos, node, puncher)
|
||||
areas.markPos1(name)
|
||||
areas.set_pos[name] = "pos2"
|
||||
minetest.chat_send_player(name,
|
||||
"Position 1 set to "
|
||||
..minetest.pos_to_string(pos))
|
||||
S("Position @1 set to @2", "1",
|
||||
minetest.pos_to_string(pos)))
|
||||
elseif areas.set_pos[name] == "pos1only" then
|
||||
areas.pos1[name] = pos
|
||||
areas.markPos1(name)
|
||||
areas.set_pos[name] = nil
|
||||
minetest.chat_send_player(name,
|
||||
"Position 1 set to "
|
||||
..minetest.pos_to_string(pos))
|
||||
S("Position @1 set to @2", "1",
|
||||
minetest.pos_to_string(pos)))
|
||||
elseif areas.set_pos[name] == "pos2" then
|
||||
areas.pos2[name] = pos
|
||||
areas.markPos2(name)
|
||||
areas.set_pos[name] = nil
|
||||
minetest.chat_send_player(name,
|
||||
"Position 2 set to "
|
||||
..minetest.pos_to_string(pos))
|
||||
S("Position @1 set to @2", "2",
|
||||
minetest.pos_to_string(pos)))
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
Loading…
Reference in New Issue
Block a user