diff options
Diffstat (limited to 'chatcommands.lua')
-rw-r--r-- | chatcommands.lua | 275 |
1 files changed, 151 insertions, 124 deletions
diff --git a/chatcommands.lua b/chatcommands.lua index 22c4d8e..8a22887 100644 --- a/chatcommands.lua +++ b/chatcommands.lua @@ -22,7 +22,9 @@ minetest.register_chatcommand("protect", { local canAdd, errMsg = areas:canPlayerAddArea(pos1, pos2, name) if not canAdd then - minetest.chat_send_player(name, "You can't protect that area: "..errMsg) + minetest.chat_send_player(name, + "You can't protect that area: " + ..errMsg) return end @@ -38,103 +40,101 @@ end}) minetest.register_chatcommand("set_owner", { params = "<PlayerName> <AreaName>", - description = "Protect an area beetween two positions and give a player access to it without setting the parent of the area to any existing area", + description = "Protect an area beetween two positions and give" + .." a player access to it without setting the parent of the" + .." area to any existing area", privs = {areas=true}, func = function(name, param) - if param and param ~= "" then - local found, _, ownername, areaname = param:find('^([^%s]+)%s(.+)$') + local found, _, ownername, areaname = param:find('^([^%s]+)%s(.+)$') - if not found then - minetest.chat_send_player(name, "Incorrect usage, see /help set_owner") - return - end - - local pos1, pos2 = {}, {} - if areas:getPos1(name) and areas:getPos2(name) then - pos1 = areas:getPos1(name) - pos2 = areas:getPos2(name) - pos1, pos2 = areas:sortPos(pos1, pos2) - else - minetest.chat_send_player(name, 'You need to select an area first') - return - end - - if not areas:player_exists(ownername) then - minetest.chat_send_player(name, 'The player "'..ownername..'" does not exist') - return - end - - --local canAdd, errMsg = areas:canPlayerAddArea(pos1, pos2, name) - --if not canAdd then - -- minetest.chat_send_player(name, "You can't protect that area: "..errMsg) - -- return - --end - - minetest.log("action", "/set_owner invoked, Owner="..ownername.. - " AreaName="..areaname.. - " StartPos="..minetest.pos_to_string(pos1).. - " EndPos=" ..minetest.pos_to_string(pos2)) + if not found then + minetest.chat_send_player(name, "Incorrect usage, see /help set_owner") + return + end - areas:add(ownername, areaname, pos1, pos2, nil) - areas:save() - - minetest.chat_send_player(ownername, "A concession has been granted to you! Type /list_areas to show your concessions.") - minetest.chat_send_player(name, "Area protected") + local pos1, pos2 = {}, {} + if areas:getPos1(name) and areas:getPos2(name) then + pos1 = areas:getPos1(name) + pos2 = areas:getPos2(name) + pos1, pos2 = areas:sortPos(pos1, pos2) else - minetest.chat_send_player(name, 'Invalid usage, see /help set_owner') + minetest.chat_send_player(name, 'You need to select an area first') + return end + + if not areas:player_exists(ownername) then + minetest.chat_send_player(name, 'The player "' + ..ownername..'" does not exist') + return + end + + minetest.log("action", "/set_owner invoked, Owner="..ownername.. + " AreaName="..areaname.. + " StartPos="..minetest.pos_to_string(pos1).. + " EndPos=" ..minetest.pos_to_string(pos2)) + + areas:add(ownername, areaname, pos1, pos2, nil) + areas:save() + + minetest.chat_send_player(ownername, + "You have been granted control over an area." + .." Type /list_areas to show your areas.") + minetest.chat_send_player(name, "Area protected") end}) minetest.register_chatcommand("add_owner", { params = "<ParentID> <Player> <AreaName>", - description = "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", + description = "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.", privs = {}, func = function(name, param) - if param and param ~= "" then - local found, _, pid, ownername, areaname = param:find('^(%d+)%s([^%s]+)%s(.+)$') + local found, _, pid, ownername, areaname + = param:find('^(%d+)%s([^%s]+)%s(.+)$') - if not found then - minetest.chat_send_player(name, "Incorrect usage, see /help set_owner") - return - end - - local pos1, pos2 = {}, {} - if areas:getPos1(name) and areas:getPos2(name) then - pos1 = areas:getPos1(name) - pos2 = areas:getPos2(name) - pos1, pos2 = areas:sortPos(pos1, pos2) - else - minetest.chat_send_player(name, 'You need to select an area first') - return - end - - if not areas:player_exists(ownername) then - minetest.chat_send_player(name, 'The player "'..ownername..'" does not exist') - return - end + if not found then + minetest.chat_send_player(name, "Incorrect usage, see /help set_owner") + return + end - minetest.log("action", "add_owner invoked, Owner = "..ownername.. - " AreaName = "..areaname.." ParentID = "..pid.. - " StartPos = "..pos1.x..","..pos1.y..","..pos1.z.. - " EndPos = " ..pos2.x..","..pos2.y..","..pos2.z) + local pos1, pos2 = {}, {} + if areas:getPos1(name) and areas:getPos2(name) then + pos1 = areas:getPos1(name) + pos2 = areas:getPos2(name) + pos1, pos2 = areas:sortPos(pos1, pos2) + else + minetest.chat_send_player(name, 'You need to select an area first') + return + end - --Look to see if this new area is inside an area owned by the player using this function - pid = tonumber(pid) - if (not areas:isAreaOwner(pid, name)) or - (not areas:isSubarea(pos1, pos2, pid)) then - minetest.chat_send_player(name, "You can't protect that area") - return - end + if not areas:player_exists(ownername) then + minetest.chat_send_player(name, 'The player "' + ..ownername..'" does not exist') + return + end - areas:add(ownername, areaname, pos1, pos2, pid) - areas:save() - - minetest.chat_send_player(ownername, "A concession has been granted to you! Type /list_areas to show your concessions.") - minetest.chat_send_player(name, "You granted "..ownername.." a concession successfully!") - else - minetest.chat_send_player(name, 'Invalid usage, see /help add_owner') + minetest.log("action", "add_owner invoked, Owner = "..ownername.. + " AreaName = "..areaname.." ParentID = "..pid.. + " StartPos = "..pos1.x..","..pos1.y..","..pos1.z.. + " EndPos = " ..pos2.x..","..pos2.y..","..pos2.z) + + -- Check if this new area is inside an area owned by the player + pid = tonumber(pid) + if (not areas:isAreaOwner(pid, name)) or + (not areas:isSubarea(pos1, pos2, pid)) then + minetest.chat_send_player(name, + "You can't protect that area") + return end + + areas:add(ownername, areaname, pos1, pos2, pid) + areas:save() + + minetest.chat_send_player(ownername, + "You have been gtanted control over an area." + .." Type /list_areas to show your areas.") + minetest.chat_send_player(name, "Area protected.") end}) @@ -146,19 +146,20 @@ minetest.register_chatcommand("rename_area", { local found, _, id, newName = param:find("^(%d+)%s(.+)$") if not found then - minetest.chat_send_player(name, "Invalid usage, see /help rename_area") + minetest.chat_send_player(name, + "Invalid usage, see /help rename_area") return end index = areas:getIndexById(tonumber(id)) if not index then - minetest.chat_send_player(name, "That area doesn't exist") + minetest.chat_send_player(name, "That area doesn't exist.") return end if not areas:isAreaOwner(id, name) then - minetest.chat_send_player(name, "You don't own that area") + minetest.chat_send_player(name, "You don't own that area.") return end @@ -169,14 +170,23 @@ end}) minetest.register_chatcommand("list_owners", { params = "", - description = "list the players that can edit the area you are in", + description = "List the owners of your position", privs = {}, func = function(name, param) - local owners = areas:getNodeOwners(vector.round(minetest.get_player_by_name(name):getpos())) + local player = minetest.get_player_by_name(name) + if not player then + minetest.chat_send_player(name, + "Unable to find your position.") + return + end + local pos = vector.round(player:getpos()) + local owners = areas:getNodeOwners(pos) if #owners > 0 then - minetest.chat_send_player(name, "Owners: "..table.concat(owners, ", ")) + minetest.chat_send_player(name, + "Owners: "..table.concat(owners, ", ")) else - minetest.chat_send_player(name, "Your position is unowned") + minetest.chat_send_player(name, + "Your position is unowned.") end end}) @@ -186,38 +196,42 @@ minetest.register_chatcommand("find_areas", { description = "Find areas using a Lua regular expression", privs = {}, func = function(name, param) - if param and param ~= "" then - local found = false - for _, area in pairs(areas.areas) do - if areas:isAreaOwner(area.id, name) and - areas:toString(area):find(param) then - minetest.chat_send_player(name, areas:toString(area)) - found = true - end - end - if not found then - minetest.chat_send_player(name, "No matches found") + if param == "" then + minetest.chat_send_player(name, + "A regular expression is required.") + return + end + local found = false + for _, area in pairs(areas.areas) do + if areas:isAreaOwner(area.id, name) and + areas:toString(area):find(param) then + minetest.chat_send_player(name, areas:toString(area)) + found = true end - else - minetest.chat_send_player(name, "Regular expression required") + end + if not found then + minetest.chat_send_player(name, "No matches found") end end}) minetest.register_chatcommand("list_areas", { params = "", - description = "list the areas you own, or all areas if you have privileges", + description = "List your areas, or all areas if you are an admin.", privs = {}, func = function(name, param) admin = minetest.check_player_privs(name, {areas=true}) if admin then - minetest.chat_send_player(name, "Showing all owner entries.") + minetest.chat_send_player(name, + "Showing all areas.") else - minetest.chat_send_player(name, "Showing your owner entries (You can only modify these).") + minetest.chat_send_player(name, + "Showing your areas.") end for _, area in pairs(areas.areas) do if admin or area.owner == name then - minetest.chat_send_player(name, areas:toString(area)) + minetest.chat_send_player(name, + areas:toString(area)) end end end}) @@ -230,8 +244,9 @@ minetest.register_chatcommand("recursive_remove_areas", { func = function(name, param) local id = tonumber(param) if not id then - minetest.chat_send_player(name, 'Invalid usage, see /help recursive_remove_areas') - minetest.chat_send_player(name, 'Use /list_areas to see entries') + minetest.chat_send_player(name, + "Invalid usage, see" + .." /help recursive_remove_areas") return end @@ -240,10 +255,13 @@ minetest.register_chatcommand("recursive_remove_areas", { areas:sort() areas:save() else - minetest.chat_send_player(name, "Area "..id.." does not exist or is not owned by you") + minetest.chat_send_player(name, "Area "..id + .." does not exist or is" + .." not owned by you.") return end - minetest.chat_send_player(name, 'Removed area '..id..'and sub areas') + minetest.chat_send_player(name, "Removed area "..id + .." and it's sub areas.") end}) @@ -254,8 +272,8 @@ minetest.register_chatcommand("remove_area", { func = function(name, param) local id = tonumber(param) if not id then - minetest.chat_send_player(name, 'Invalid usage, see /help remove_area') - minetest.chat_send_player(name, 'Use /list_areas to see entries') + minetest.chat_send_player(name, + "Invalid usage, see /help remove_area") return end @@ -264,7 +282,9 @@ minetest.register_chatcommand("remove_area", { areas:sort() areas:save() else - minetest.chat_send_player(name, "Area "..id.." does not exist or is not owned by you") + minetest.chat_send_player(name, "Area "..id + .." does not exist or" + .." is not owned by you") return end minetest.chat_send_player(name, 'Removed area '..id) @@ -272,31 +292,38 @@ end}) minetest.register_chatcommand("change_owner", { - params = "<id> <newplayer>", - description = "change the owner of an area using its id", + params = "<id> <NewOwner>", + description = "Change the owner of an area using its id", privs = {}, func = function(name, param) - local found, _, id, new_owner = param:find('^(%d+)%s+([^%s]+)$') + local found, _, id, new_owner = + param:find('^(%d+)%s+([^%s]+)$') if not found then - minetest.chat_send_player(name, 'Invalid usage, see /help change_area_owner') - minetest.chat_send_player(name, 'Use /list_areas to see entries') + minetest.chat_send_player(name, + "Invalid usage," + .." see /help change_area_owner") return end if not areas:player_exists(new_owner) then - minetest.chat_send_player(name, 'The player "'..new_owner..'" does not exist') + minetest.chat_send_player(name, 'The player "' + ..new_owner..'" does not exist') return end id = tonumber(id) - if areas:isAreaOwner(id, name) then - areas.areas[areas:getIndexById(id)].owner = new_owner - areas:save() - minetest.chat_send_player(name, 'Owner changed succesfully') - minetest.chat_send_player(new_owner, name..'" has granted you a concession!') - else - minetest.chat_send_player(new_owner, "Area "..id.." does not exist or is not owned by you") + if not areas:isAreaOwner(id, name) then + minetest.chat_send_player(name, + "Area "..id.." does not exist" + .." or is not owned by you.") + return end + local index = areas:getImdexById(id) + areas.areas[index].owner = new_owner + areas:save() + minetest.chat_send_player(name, 'Owner changed.') + minetest.chat_send_player(new_owner, + name..'" has given you control over an area.') end}) |