From 15d0d98937e22ffe16b476431cfb2e78a5d77e9e Mon Sep 17 00:00:00 2001 From: Coder12a <38924418+Coder12a@users.noreply.github.com> Date: Sat, 14 Sep 2019 14:50:43 -0500 Subject: [PATCH] Code: clean up part 0 --- chatcommands.lua | 376 ++++++++++++---------------------------- claim_events.lua | 47 +---- databases.lua | 13 +- diplomacy_events.lua | 15 -- eventcallbacks.lua | 30 ---- factions.lua | 46 ++--- hud.lua | 3 - init.lua | 2 - invite_events.lua | 4 - nodes.lua | 10 -- player_events.lua | 49 ++---- power_events.lua | 27 +-- protection_override.lua | 5 - rank_events.lua | 30 ---- settingtypes.txt | 2 + 15 files changed, 167 insertions(+), 492 deletions(-) diff --git a/chatcommands.lua b/chatcommands.lua index 94c4ce6..c8f4fbd 100644 --- a/chatcommands.lua +++ b/chatcommands.lua @@ -1,9 +1,4 @@ -local send_error = function(player, message) - minetest.chat_send_player(player, message) -end - factions_chat = {} - factions.commands = {} factions.register_command = function(cmd_name, cmd) @@ -25,7 +20,7 @@ factions.register_command = function(cmd_name, cmd) end local bool, missing_privs = minetest.check_player_privs(player, tmp) if not bool then - send_error(player, "Unauthorized.") + minetest.chat_send_player(player, "Unauthorized.") return false end end @@ -39,7 +34,7 @@ factions.register_command = function(cmd_name, cmd) } if not self.ignore_param_limit then if #argv < #(self.format) then - send_error(player, "Not enough parameters.") + minetest.chat_send_player(player, "Not enough parameters.") return false end else @@ -54,14 +49,13 @@ factions.register_command = function(cmd_name, cmd) end end end - for i in ipairs(self.format) do local argtype = self.format[i] local arg = argv[i] if argtype == "faction" then local fac = factions.get_faction(arg) if not fac then - send_error(player, "Specified faction "..arg.." does not exist") + minetest.chat_send_player(player, "Specified faction " .. arg .. " does not exist") return false else table.insert(args.factions, fac) @@ -71,7 +65,7 @@ factions.register_command = function(cmd_name, cmd) if data then table.insert(args.players, arg) else - send_error(player, "Player does not exist.") + minetest.chat_send_player(player, "Player does not exist.") return false end elseif argtype == "string" then @@ -85,7 +79,6 @@ factions.register_command = function(cmd_name, cmd) table.insert(args.other, argv[i]) end end - -- checks permissions local player_faction, facname = factions.get_player_faction(player) if self.infaction and not player_faction then @@ -97,7 +90,7 @@ factions.register_command = function(cmd_name, cmd) for i in ipairs(self.faction_permissions) do local perm = self.faction_permissions[i] if not self.or_perm and not factions.has_permission(facname, player, perm) then - send_error(player, "You do not have the faction permission " .. perm) + minetest.chat_send_player(player, "You do not have the faction permission " .. perm) return false elseif self.or_perm and factions.has_permission(facname, player, perm) then one_p = true @@ -106,10 +99,9 @@ factions.register_command = function(cmd_name, cmd) end end if self.or_perm and one_p == false then - send_error(player, "You do not have any of faction permissions required.") + minetest.chat_send_player(player, "You do not have any of faction permissions required.") return false end - -- get some more data local pos = minetest.get_player_by_name(player):get_pos() local parcelpos = factions.get_parcel_pos(pos) @@ -127,7 +119,6 @@ end local init_commands init_commands = function() - if factions_config.faction_user_priv == true then minetest.register_privilege("faction_user", { @@ -136,20 +127,16 @@ init_commands = function() } ) end - - minetest.register_privilege("faction_admin", { description = "this user is allowed to create or delete factions", give_to_singleplayer = true, } ) - local def_privs = {interact = true} if factions_config.faction_user_priv == true then def_privs.faction_user = true end - minetest.register_chatcommand("f", { params = " parameters", @@ -158,7 +145,6 @@ init_commands = function() func = factions_chat.cmdhandler, } ) - minetest.register_chatcommand("faction", { params = " parameters", @@ -168,14 +154,10 @@ init_commands = function() } ) end - - ------------------------------------------- -- R E G I S T E R E D C O M M A N D S | ------------------------------------------- - local def_global_privileges = nil - if factions_config.faction_user_priv == true then minetest.register_on_newplayer(function(player) local name = player:get_player_name() @@ -186,7 +168,6 @@ if factions_config.faction_user_priv == true then ) def_global_privileges = {"faction_user"} end - factions.register_command("name", { faction_permissions = {"name"}, format = {"string"}, @@ -199,12 +180,11 @@ factions.register_command("name", { factions.set_name(faction.name, factionname) return true else - send_error(player, "Faction cannot be renamed.") + minetest.chat_send_player(player, "Faction cannot be renamed.") return false end end }) - factions.register_command ("claim", { faction_permissions = {"claim"}, description = "Claim the plot of land you're on.", @@ -224,12 +204,10 @@ factions.register_command ("claim", { elseif arg_one == "s" or arg_one == "square" then if arg_two then local r = tonumber(arg_two) - if not r then - send_error(player, "Only use numbers in the second cmd parameter [0-9].") + minetest.chat_send_player(player, "Only use numbers in the second cmd parameter [0-9].") return end - factions.claim_square(player, faction, r) else factions.claim_square(player, faction, 3) @@ -237,12 +215,10 @@ factions.register_command ("claim", { elseif arg_one == "c" or arg_one == "circle" then if arg_two then local r = tonumber(arg_two) - if not r then - send_error(player, "Only use numbers in the second cmd parameter [0-9].") + minetest.chat_send_player(player, "Only use numbers in the second cmd parameter [0-9].") return end - factions.claim_circle(player, faction, r) else factions.claim_circle(player, faction, 3) @@ -260,7 +236,6 @@ factions.register_command ("claim", { end end }) - factions.register_command("unclaim", { faction_permissions = {"claim"}, description = "Unclaim the plot of land you're on.", @@ -280,12 +255,10 @@ factions.register_command("unclaim", { elseif arg_one == "s" or arg_one == "square" then if arg_two then local r = tonumber(arg_two) - if not r then - send_error(player, "Only use numbers in the second cmd parameter [0-9].") + minetest.chat_send_player(player, "Only use numbers in the second cmd parameter [0-9].") return end - factions.unclaim_square(player, faction, r) else factions.unclaim_square(player, faction, 3) @@ -293,12 +266,10 @@ factions.register_command("unclaim", { elseif arg_one == "c" or arg_one == "circle" then if arg_two then local r = tonumber(arg_two) - if not r then - send_error(player, "Only use numbers in the second cmd parameter [0-9].") + minetest.chat_send_player(player, "Only use numbers in the second cmd parameter [0-9].") return end - factions.unclaim_circle(player, faction, r) else factions.unclaim_circle(player, faction, 3) @@ -316,7 +287,6 @@ factions.register_command("unclaim", { end end }) - --list all known factions factions.register_command("list", { description = "List all registered factions.", @@ -326,7 +296,6 @@ factions.register_command("list", { on_success = function(player, faction, pos, parcelpos, args) local list = factions.factions.to_array() local tosend = "Existing factions:" - for i, v in ipairs(list) do if i ~= #list then tosend = tosend .. " " .. v .. "," @@ -334,12 +303,10 @@ factions.register_command("list", { tosend = tosend .. " " .. v end end - minetest.chat_send_player(player, tosend, false) return true end }) - --show factions mod version factions.register_command("version", { description = "Displays mod version.", @@ -349,7 +316,6 @@ factions.register_command("version", { minetest.chat_send_player(player, "factions: version 0.8.8", false) end }) - --show description of faction factions.register_command("info", { format = {"faction"}, @@ -364,7 +330,6 @@ factions.register_command("info", { return true end }) - factions.register_command("leave", { description = "Leave your faction", description_arg = ":", @@ -374,7 +339,6 @@ factions.register_command("leave", { return true end }) - factions.register_command("kick", { faction_permissions = {"kick"}, format = {"player"}, @@ -383,24 +347,20 @@ factions.register_command("kick", { global_privileges = def_global_privileges, on_success = function(player, faction, pos, parcelpos, args) local name = args.players[1] - local victim_faction, facname = factions.get_player_faction(name) - local kicker_faction, kicker_facname = factions.get_player_faction(player) - if victim_faction and kicker_facname == facname and name ~= victim_faction.leader then -- can't kick da king factions.remove_player(facname, name) return true elseif not victim_faction or kicker_facname ~= facname then - send_error(player, name .. " is not in your faction") + minetest.chat_send_player(player, name .. " is not in your faction") return false else - send_error(player, name .. " cannot be kicked from your faction") + minetest.chat_send_player(player, name .. " cannot be kicked from your faction") return false end end }) - --create new faction factions.register_command("create", { format = {"string"}, @@ -410,12 +370,10 @@ factions.register_command("create", { global_privileges = def_global_privileges, on_success = function(player, faction, pos, parcelpos, args) if faction then - send_error(player, "You are already in a faction") + minetest.chat_send_player(player, "You are already in a faction") return false end - local factionname = args.strings[1] - if factions.can_create_faction(factionname) then local new_faction = factions.new_faction(factionname) factions.add_player(factionname, player, new_faction.default_leader_rank) @@ -423,12 +381,11 @@ factions.register_command("create", { factions.start_diplomacy(factionname, new_faction) return true else - send_error(player, "Faction cannot be created.") + minetest.chat_send_player(player, "Faction cannot be created.") return false end end }) - factions.register_command("join", { format = {"faction"}, description = "Join a faction", @@ -437,26 +394,22 @@ factions.register_command("join", { global_privileges = def_global_privileges, on_success = function(player, faction, pos, parcelpos, args) if faction ~= nil or faction then - send_error(player, "You need to leave your current faction in order to join this one.") + minetest.chat_send_player(player, "You need to leave your current faction in order to join this one.") return false end - local new_faction = args.factions[1] - if new_faction and factions.can_join(new_faction.name, player) then factions.add_player(new_faction.name, player) elseif new_faction then - send_error(player, "You cannot join this faction") + minetest.chat_send_player(player, "You cannot join this faction") return false else - send_error(player, "Enter the right faction name.") + minetest.chat_send_player(player, "Enter the right faction name.") return false end - return true end }) - factions.register_command("disband", { faction_permissions = {"disband"}, description = "Disband your faction", @@ -467,7 +420,6 @@ factions.register_command("disband", { return true end }) - factions.register_command("flag", { faction_permissions = {"flags"}, description = "Manage the faction's flags.", @@ -476,15 +428,14 @@ factions.register_command("flag", { format = {"string"}, ignore_param_limit = true, on_success = function(player, faction, pos, parcelpos, args) - --"Make your faction invite-only." - --"Allow any player to join your " - --faction:toggle_join_free(false) local flag_name = args.strings[1] local bool = args.strings[2] if (flag_name == "help" or flag_name == "flags") or not bool then + local msg = "" for i, k in pairs(factions.flags) do - minetest.chat_send_player(player, k..": ".. factions.flags_desc[i] .. "\n") + msg = msg .. i ..": ".. k .. "\n" end + minetest.chat_send_player(player, msg) return true end if flag_name and bool then @@ -494,7 +445,7 @@ factions.register_command("flag", { elseif bool == "no" then yes = false else - send_error(player, "Set the flags only to yes or no.") + minetest.chat_send_player(player, "Set the flags only to yes or no.") return false end if flag_name == "open" then @@ -503,13 +454,12 @@ factions.register_command("flag", { elseif flag_name == "tax_kick" then elseif flag_name == "animals" then else - send_error(player, flag_name.." is not an flag.") + minetest.chat_send_player(player, flag_name.." is not an flag.") end end return true end }) - factions.register_command("desc", { format = {"string"}, faction_permissions = {"description"}, @@ -522,7 +472,6 @@ factions.register_command("desc", { return true end }) - factions.register_command("invite", { format = {"player"}, faction_permissions = {"invite"}, @@ -532,7 +481,7 @@ factions.register_command("invite", { on_success = function(player, faction, pos, parcelpos, args) if args.players and args.players[1] then if player == args.players[1] then - send_error(player, "You can not invite yourself.") + minetest.chat_send_player(player, "You can not invite yourself.") return end factions.invite_player(faction.name, args.players[1]) @@ -541,7 +490,6 @@ factions.register_command("invite", { return true end }) - factions.register_command("invites", { description = "List invited players.", description_arg = ":", @@ -550,17 +498,19 @@ factions.register_command("invites", { on_success = function(player, faction, pos, parcelpos, args) minetest.chat_send_player(player, "Invited players:") local foundplayer = false + local msg = "" for p, _ in pairs(faction.invited_players) do - minetest.chat_send_player(player, p) + msg = msg .. p .. "\n" foundplayer = true end if not foundplayer then minetest.chat_send_player(player, "None:") + return false end + minetest.chat_send_player(player, msg) return true end }) - factions.register_command("uninvite", { format = {"player"}, faction_permissions = {"invite"}, @@ -573,7 +523,6 @@ factions.register_command("uninvite", { return true end }) - factions.register_command("delete", { global_privileges = {"faction_admin"}, format = {"faction"}, @@ -585,33 +534,33 @@ factions.register_command("delete", { return true end }) - factions.register_command("ranks", { description = "List ranks within your faction", description_arg = ":", global_privileges = def_global_privileges, - on_success = function(player, faction, pos, parcelpos, args) - for rank, permissions in pairs(faction.ranks) do - minetest.chat_send_player(player, rank .. ": " .. table.concat(permissions, " ")) - end + on_success = function(player, faction, pos, parcelpos, args) + local msg = "" + for rank, permissions in pairs(faction.ranks) do + msg = msg .. rank .. ": " .. table.concat(permissions, " ") .. "\n" + end + minetest.chat_send_player(player, msg) return true end }) - factions.register_command("rank_privileges", { description = "List available rank privileges", description_arg = ":", global_privileges = def_global_privileges, infaction = false, - on_success = function(player, faction, pos, parcelpos, args) - minetest.chat_send_player(player, "Privileges available:\n") + on_success = function(player, faction, pos, parcelpos, args) + local msg = "Privileges available:\n" for i, k in pairs(factions.permissions) do - minetest.chat_send_player(player, k .. ": " .. factions.permissions_desc[i] .. "\n") - end + msg = msg .. i .. ": " .. k .. "\n" + end + minetest.chat_send_player(player, msg) return true end }) - factions.register_command("motd", { format = {"string"}, faction_permissions = {"motd"}, @@ -628,7 +577,6 @@ factions.register_command("motd", { return true end }) - if factions_config.faction_diplomacy == true then factions.register_command("send_alliance", { description = "Send an alliance request to another faction", @@ -639,43 +587,36 @@ if factions_config.faction_diplomacy == true then on_success = function(player, faction, pos, parcelpos, args) local target_name = args.strings[1] local target_faction = factions.factions.get(target_name) - if target_faction then if not target_faction.request_inbox[faction.name] then if faction.allies[target_name] then - send_error(player, "You are already allys.") + minetest.chat_send_player(player, "You are already allys.") return false end - if faction.enemies[target_name] then - send_error(player, "You need to be neutral in-order to send an alliance request.") + minetest.chat_send_player(player, "You need to be neutral in-order to send an alliance request.") return false end - if target_name == faction.name then - send_error(player, "You can not send an alliance to your own faction") + minetest.chat_send_player(player, "You can not send an alliance to your own faction") return false end - if faction.request_inbox[target_name] then - send_error(player, "Faction " .. target_name .. "has already sent a request to you.") + minetest.chat_send_player(player, "Faction " .. target_name .. "has already sent a request to you.") return false end - target_faction.request_inbox[faction.name] = "alliance" factions.broadcast(target_faction.name, "An alliance request from faction " .. faction.name .. " has been sent to you.") factions.broadcast(faction.name, "An alliance request was sent to faction " .. target_name) - factions.factions.set(target_name, target_faction) else - send_error(player, "You have already sent a request.") + minetest.chat_send_player(player, "You have already sent a request.") end else - send_error(player, target_name .. " is not a name of a faction") + minetest.chat_send_player(player, target_name .. " is not a name of a faction") end end }) - factions.register_command("send_neutral", { description = "Send neutral to another faction", description_arg = " :", @@ -685,43 +626,36 @@ if factions_config.faction_diplomacy == true then on_success = function(player, faction, pos, parcelpos, args) local target_name = args.strings[1] local target_faction = factions.factions.get(target_name) - if target_faction then if not target_faction.request_inbox[faction.name] then if faction.allies[target_name] then - send_error(player, "You are already allys.") + minetest.chat_send_player(player, "You are already allys.") return false end - if faction.neutral[target_name] then - send_error(player, "You are already neutral with this faction") + minetest.chat_send_player(player, "You are already neutral with this faction") return false end - if target_name == faction.name then - send_error(player, "You can not send a neutral request to your own faction") + minetest.chat_send_player(player, "You can not send a neutral request to your own faction") return false end - if faction.request_inbox[target_name] then - send_error(player, "Faction " .. target_name .. "has already sent a request to you.") + minetest.chat_send_player(player, "Faction " .. target_name .. "has already sent a request to you.") return false end - target_faction.request_inbox[faction.name] = "neutral" factions.broadcast(target_faction.name, "A neutral request from faction " .. faction.name .. " has been sent to you.") factions.broadcast(faction.name, "A neutral request was sent to faction " .. target_name) - factions.factions.set(target_name, target_faction) else - send_error(player, "You have already sent a request.") + minetest.chat_send_player(player, "You have already sent a request.") end else - send_error(player, target_name .. " is not a name of a faction") + minetest.chat_send_player(player, target_name .. " is not a name of a faction") end end }) - factions.register_command("accept", { description = "accept an request from another faction", description_arg = " :", @@ -731,18 +665,15 @@ if factions_config.faction_diplomacy == true then on_success = function(player, faction, pos, parcelpos, args) local target_name = args.strings[1] local target_faction = factions.factions.get(target_name) - if not target_faction then - send_error(player, target_name .. " Is not a faction.") + minetest.chat_send_player(player, target_name .. " Is not a faction.") return false end - if faction.request_inbox[target_name] then if target_name == faction.name then - send_error(player, "You can not accept an request from own faction") + minetest.chat_send_player(player, "You can not accept an request from own faction") return false end - if faction.request_inbox[target_name] == "alliance" then factions.new_alliance(faction.name, target_name) factions.new_alliance(target_name, faction.name) @@ -752,17 +683,13 @@ if factions_config.faction_diplomacy == true then factions.new_neutral(target_name, faction.name) end end - faction.request_inbox[target_name] = nil - factions.factions.set(faction.name, faction) - else - send_error(player, "No request was sent to you.") + minetest.chat_send_player(player, "No request was sent to you.") end end }) - factions.register_command("refuse", { description = "refuse an request from another faction", description_arg = " :", @@ -772,29 +699,24 @@ if factions_config.faction_diplomacy == true then on_success = function(player, faction, pos, parcelpos, args) local target_name = args.strings[1] local target_faction = factions.factions.get(target_name) - if not target_faction then - send_error(player, target_name .. " Is not a faction.") + minetest.chat_send_player(player, target_name .. " Is not a faction.") return false end - if faction.request_inbox[target_name] then if target_name == faction.name then - send_error(player, "You can not refuse an request from your own faction") + minetest.chat_send_player(player, "You can not refuse an request from your own faction") return false end - faction.request_inbox[target_name] = nil factions.broadcast(target_name, "Faction " .. faction.name .. " refuse to be your ally.") factions.broadcast(faction.name, "Refused an request from faction " .. target_name) factions.factions.set(faction.name, faction) - else - send_error(player, "No request was sent to you.") + minetest.chat_send_player(player, "No request was sent to you.") end end }) - factions.register_command("declare_war", { description = "Declare war on a faction", description_arg = " :", @@ -804,37 +726,30 @@ if factions_config.faction_diplomacy == true then on_success = function(player, faction, pos, parcelpos, args) local target_name = args.strings[1] local target_faction = factions.factions.get(target_name) - if not target_faction then - send_error(player, target_name .. " Is not a faction.") + minetest.chat_send_player(player, target_name .. " Is not a faction.") return false end - if not faction.enemies[target_name] then if target_name == faction.name then - send_error(player, "You can not declare war on your own faction") + minetest.chat_send_player(player, "You can not declare war on your own faction") return false end - if faction.allies[target_name] then factions.end_alliance(faction.name, target_name) factions.end_alliance(target_name, faction.name) end - if faction.neutral[target_name] then factions.end_neutral(faction.name, target_name) factions.end_neutral(target_name, faction.name) end - factions.new_enemy(faction.name, target_name) factions.new_enemy(target_name, faction.name) - else - send_error(player, "You are already at war.") + minetest.chat_send_player(player, "You are already at war.") end end }) - factions.register_command("break", { description = "Break an alliance.", description_arg = " :", @@ -844,29 +759,24 @@ if factions_config.faction_diplomacy == true then on_success = function(player, faction, pos, parcelpos, args) local target_name = args.strings[1] local target_faction = factions.factions.get(target_name) - if not target_faction then - send_error(player, target_name .. " Is not a faction.") + minetest.chat_send_player(player, target_name .. " Is not a faction.") return false end - if faction.allies[target_name] then if target_name == faction.name then - send_error(player, "You can not break an alliance from your own faction") + minetest.chat_send_player(player, "You can not break an alliance from your own faction") return false end - factions.end_alliance(faction.name, target_name) factions.end_alliance(target_name, faction.name) factions.new_neutral(faction.name, target_name) factions.new_neutral(target_name, faction.name) - else - send_error(player, "You where not allies to begin with.") + minetest.chat_send_player(player, "You where not allies to begin with.") end end }) - factions.register_command("inbox", { description = "Check your diplomacy request inbox.", description_arg = ":", @@ -874,80 +784,79 @@ if factions_config.faction_diplomacy == true then faction_permissions = {"diplomacy"}, on_success = function(player, faction, pos, parcelpos, args) local empty = true - + local msg = "Inbox:\n" for i, k in pairs(faction.request_inbox) do if k == "alliance" then - minetest.chat_send_player(player, "Alliance request from faction " .. i .. "\n") - else + msg = msg .. "Alliance request from faction " .. i .. "\n" + else if k == "neutral" then - minetest.chat_send_player(player, "neutral request from faction " .. i .. "\n") + msg = msg .. "neutral request from faction " .. i .. "\n" end end - empty = false end - if empty then minetest.chat_send_player(player, "none:") + else + minetest.chat_send_player(player, msg) end end }) - factions.register_command("allies", { description = "Shows the factions that are allied to you.", description_arg = ":", global_privileges = def_global_privileges, on_success = function(player, faction, pos, parcelpos, args) local empty = true - + local msg = "" for i, k in pairs(faction.allies) do - minetest.chat_send_player(player, i .. "\n") + msg = msg .. i .. "\n" empty = false end - if empty then minetest.chat_send_player(player, "none:") + else + minetest.chat_send_player(player, msg) end end }) - factions.register_command("neutral", { description = "Shows the factions that are neutral with you.", description_arg = ":", global_privileges = def_global_privileges, on_success = function(player, faction, pos, parcelpos, args) local empty = true - + local msg = "" for i, k in pairs(faction.neutral) do - minetest.chat_send_player(player, i .. "\n") + msg = msg .. i .. "\n" empty = false end - if empty then minetest.chat_send_player(player, "none:") + else + minetest.chat_send_player(player, msg) end end }) - factions.register_command("enemies", { description = "Shows enemies of your faction", description_arg = ":", global_privileges = def_global_privileges, on_success = function(player, faction, pos, parcelpos, args) local empty = true - + local msg = "" for i, k in pairs(faction.enemies) do - minetest.chat_send_player(player, i .. "\n") + msg = msg .. i .. "\n" empty = false end - if empty then minetest.chat_send_player(player, "none:") + else + minetest.chat_send_player(player, msg) end end }) end - factions.register_command("who", { description = "List players in a faction, and their ranks.", description_arg = " (none | ):", @@ -957,7 +866,6 @@ factions.register_command("who", { ignore_param_limit = true, on_success = function(player, faction, pos, parcelpos, args) local str = args.strings[1] - if str then local f = factions.get_faction(str) if not f or not f.players then @@ -983,13 +891,10 @@ factions.register_command("who", { return true end end - return true end }) - local parcel_size_center = factions_config.parcel_size / 2 - factions.register_command("show_parcel", { description = "Shows parcel for six seconds.", description_arg = ":", @@ -998,21 +903,17 @@ factions.register_command("show_parcel", { ignore_param_limit = true, on_success = function(player, faction, pos, parcelpos, args) local parcel_faction = factions.get_parcel_faction(parcelpos) - if not parcel_faction then - send_error(player, "There is no claim here") + minetest.chat_send_player(player, "There is no claim here") return false end - local psc = parcel_size_center local fps = factions_config.parcel_size - local ppos = {x = (math.floor(pos.x / fps) * fps) + psc, y = (math.floor(pos.y / fps) * fps) + psc, z = (math.floor(pos.z / fps) * fps) + psc} minetest.add_entity(ppos, "factions:display") return true end }) - factions.register_command("new_rank", { description = "Add a new rank.", description_arg = " :", @@ -1024,7 +925,7 @@ factions.register_command("new_rank", { if args.strings[1] then local rank = args.strings[1] if faction.ranks[rank] then - send_error(player, "Rank already exists") + minetest.chat_send_player(player, "Rank already exists") return false end local success = false @@ -1047,20 +948,19 @@ factions.register_command("new_rank", { end if not success then if args.strings[failindex] then - send_error(player, "Permission " .. args.strings[failindex] .. " is invalid.") + minetest.chat_send_player(player, "Permission " .. args.strings[failindex] .. " is invalid.") else - send_error(player, "No permission was given.") + minetest.chat_send_player(player, "No permission was given.") end return false end factions.add_rank(faction.name, rank, args.other) return true end - send_error(player, "No rank was given.") + minetest.chat_send_player(player, "No rank was given.") return false end }) - factions.register_command("replace_privs", { description = "Deletes current permissions and replaces them with the ones given.", description_arg = " :", @@ -1072,7 +972,7 @@ factions.register_command("replace_privs", { if args.strings[1] then local rank = args.strings[1] if not faction.ranks[rank] then - send_error(player, "Rank does not exist") + minetest.chat_send_player(player, "Rank does not exist") return false end local success = false @@ -1095,20 +995,19 @@ factions.register_command("replace_privs", { end if not success then if args.strings[failindex] then - send_error(player, "Permission " .. args.strings[failindex] .. " is invalid.") + minetest.chat_send_player(player, "Permission " .. args.strings[failindex] .. " is invalid.") else - send_error(player, "No permission was given.") + minetest.chat_send_player(player, "No permission was given.") end return false end factions.replace_privs(faction.name, rank, args.other) return true end - send_error(player, "No rank was given.") + minetest.chat_send_player(player, "No rank was given.") return false end }) - factions.register_command("remove_privs", { description = "Remove permissions from a rank.", description_arg = " :", @@ -1120,7 +1019,7 @@ factions.register_command("remove_privs", { if args.strings[1] then local rank = args.strings[1] if not faction.ranks[rank] then - send_error(player, "Rank does not exist") + minetest.chat_send_player(player, "Rank does not exist") return false end local success = false @@ -1143,20 +1042,19 @@ factions.register_command("remove_privs", { end if not success then if args.strings[failindex] then - send_error(player, "Permission " .. args.strings[failindex] .. " is invalid.") + minetest.chat_send_player(player, "Permission " .. args.strings[failindex] .. " is invalid.") else - send_error(player, "No permission was given.") + minetest.chat_send_player(player, "No permission was given.") end return false end factions.remove_privs(faction.name, rank, args.other) return true end - send_error(player, "No rank was given.") + minetest.chat_send_player(player, "No rank was given.") return false end }) - factions.register_command("add_privs", { description = "add permissions to a rank.", description_arg = " :", @@ -1168,7 +1066,7 @@ factions.register_command("add_privs", { if args.strings[1] then local rank = args.strings[1] if not faction.ranks[rank] then - send_error(player, "Rank does not exist") + minetest.chat_send_player(player, "Rank does not exist") return false end local success = false @@ -1191,20 +1089,19 @@ factions.register_command("add_privs", { end if not success then if args.strings[failindex] then - send_error(player, "Permission " .. args.strings[failindex] .. " is invalid.") + minetest.chat_send_player(player, "Permission " .. args.strings[failindex] .. " is invalid.") else - send_error(player, "No permission was given.") + minetest.chat_send_player(player, "No permission was given.") end return false end factions.add_privs(faction.name, rank, args.other) return true end - send_error(player, "No rank was given.") + minetest.chat_send_player(player, "No rank was given.") return false end }) - factions.register_command("set_rank_name", { description = "Change the name of given rank.", description_arg = " :", @@ -1215,18 +1112,17 @@ factions.register_command("set_rank_name", { local rank = args.strings[1] local newrank = args.strings[2] if not faction.ranks[rank] then - send_error(player, "The rank does not exist.") + minetest.chat_send_player(player, "The rank does not exist.") return false end if faction.ranks[newrank] then - send_error(player, "This rank name was already taken.") + minetest.chat_send_player(player, "This rank name was already taken.") return false end factions.set_rank_name(faction.name, rank, newrank) return true end }) - factions.register_command("del_rank", { description = "Replace and delete a rank.", description_arg = " :", @@ -1237,14 +1133,13 @@ factions.register_command("del_rank", { local rank = args.strings[1] local newrank = args.strings[2] if not faction.ranks[rank] or not faction.ranks[newrank] then - send_error(player, "One of the specified ranks does not exist.") + minetest.chat_send_player(player, "One of the specified ranks does not exist.") return false end factions.delete_rank(faction.name, rank, newrank) return true end }) - factions.register_command("set_def_rank", { description = "Change the default rank given to new players and also replace rankless players in this faction", description_arg = " :", @@ -1254,14 +1149,13 @@ factions.register_command("set_def_rank", { on_success = function(player, faction, pos, parcelpos, args) local rank = args.strings[1] if not faction.ranks[rank] then - send_error(player, "This rank does not exist.") + minetest.chat_send_player(player, "This rank does not exist.") return false end factions.set_def_rank(faction.name, rank) return true end }) - factions.register_command("reset_ranks", { description = "Reset's all of the factions rankings back to the default ones.", description_arg = ":", @@ -1273,7 +1167,6 @@ factions.register_command("reset_ranks", { return true end }) - factions.register_command("sethome", { description = "Set the faction's spawn", description_arg = ":", @@ -1284,7 +1177,6 @@ factions.register_command("sethome", { return true end }) - factions.register_command("unsethome", { description = "Set the faction's spawn to zero", description_arg = ":", @@ -1295,7 +1187,6 @@ factions.register_command("unsethome", { return true end }) - if factions_config.spawn_teleport == true then factions.register_command("home", { description = "Teleport to the faction's spawn", @@ -1310,7 +1201,6 @@ if factions_config.spawn_teleport == true then end }) end - factions.register_command("where", { description = "See whose parcel you stand on.", description_arg = ":", @@ -1323,7 +1213,6 @@ factions.register_command("where", { return true end }) - factions.register_command("help", { description = "Shows help for commands.", description_arg = ":", @@ -1334,7 +1223,6 @@ factions.register_command("help", { return true end }) - factions.register_command("gethome", { description = "Shows your faction's spawn", description_arg = ":", @@ -1350,7 +1238,6 @@ factions.register_command("gethome", { end end }) - factions.register_command("promote", { description = "Promotes a player to a rank", description_arg = " :", @@ -1361,32 +1248,28 @@ factions.register_command("promote", { local rank = args.strings[1] if faction.ranks[rank] then local name = args.players[1] - local player_faction, facname = factions.get_player_faction(name) - local promoter_faction, promoter_facname = factions.get_player_faction(player) - if player_faction and promoter_facname == facname and player ~= name then factions.promote(faction.name, name, rank) minetest.chat_send_player(player, "Promoted " .. name .. " to " .. rank .. "!") return true elseif not player_faction or promoter_facname ~= facname then - send_error(player, name .. " is not in your faction") + minetest.chat_send_player(player, name .. " is not in your faction") return false elseif player == name then - send_error(player, "You can not promote yourself!") + minetest.chat_send_player(player, "You can not promote yourself!") return false else - send_error(player, name .. " cannot be promoted from your faction") + minetest.chat_send_player(player, name .. " cannot be promoted from your faction") return false end else - send_error(player, "The specified rank does not exist.") + minetest.chat_send_player(player, "The specified rank does not exist.") return false end end }) - factions.register_command("power", { description = "Display your faction's power", description_arg = ":", @@ -1408,7 +1291,6 @@ factions.register_command("power", { return true end }) - factions.register_command("free", { description = "Forcefully frees a parcel", description_arg = ":", @@ -1417,7 +1299,7 @@ factions.register_command("free", { on_success = function(player, faction, pos, parcelpos, args) local parcel_faction = factions.get_parcel_faction(parcelpos) if not parcel_faction then - send_error(player, "No claim at this position") + minetest.chat_send_player(player, "No claim at this position") return false else factions.unclaim_parcel(parcel_faction.name, parcelpos) @@ -1425,7 +1307,6 @@ factions.register_command("free", { end end }) - factions.register_command("chat", { description = "Send a message to your faction's members", description_arg = " :", @@ -1437,7 +1318,6 @@ factions.register_command("chat", { factions.broadcast(faction.name, msg, player) end }) - factions.register_command("force_update", { description = "Forces an update tick.", description_arg = ":", @@ -1447,7 +1327,6 @@ factions.register_command("force_update", { factions.faction_tick() end }) - factions.register_command("player", { description = "Get which faction a player is in", description_arg = " :", @@ -1462,7 +1341,7 @@ factions.register_command("player", { end local faction1, facname = factions.get_player_faction(playername) if not faction1 then - send_error(player, "Player " .. playername .. " does not belong to any faction") + minetest.chat_send_player(player, "Player " .. playername .. " does not belong to any faction") return false else minetest.chat_send_player(player, "player " .. playername .. " belongs to faction " .. faction1.name) @@ -1470,7 +1349,6 @@ factions.register_command("player", { end end }) - factions.register_command("set_leader", { description = "Set a player as a faction's leader", description_arg = " :", @@ -1481,16 +1359,14 @@ factions.register_command("set_leader", { local playername = args.players[1] local playerfaction, facname = factions.get_player_faction(playername) local targetfaction = args.factions[1] - if facname ~= targetfaction.name then - send_error(player, "Player " .. playername .. " is not in faction " .. targetfaction.name .. ".") + minetest.chat_send_player(player, "Player " .. playername .. " is not in faction " .. targetfaction.name .. ".") return false end factions.set_leader(targetfaction.name, playername) return true end }) - factions.register_command("set_admin", { description = "Make a faction an admin faction", description_arg = " :", @@ -1503,15 +1379,11 @@ factions.register_command("set_admin", { else minetest.chat_send_player(player,"faction " .. args.factions[1].name .. " is already an admin ") end - args.factions[1].is_admin = true - factions.factions.set(args.factions[1].name, args.factions[1]) - return true end }) - factions.register_command("remove_admin", { description = "Make a faction not an admin faction", description_arg = " :", @@ -1525,13 +1397,10 @@ factions.register_command("remove_admin", { minetest.chat_send_player(player,"faction " .. args.factions[1].name .. " is not an admin faction to begin with.") end args.factions[1].is_admin = false - factions.factions.set(args.factions[1].name, args.factions[1]) - return true end }) - factions.register_command("reset_power", { description = "Reset a faction's power", description_arg = " :", @@ -1540,14 +1409,10 @@ factions.register_command("reset_power", { format = {"faction"}, on_success = function(player, faction, pos, parcelpos, args) args.factions[1].power = 0 - factions.factions.set(args.factions[1].name, args.factions[1]) - return true end }) - - factions.register_command("obliterate", { description = "Remove all factions", description_arg = ":", @@ -1560,7 +1425,6 @@ factions.register_command("obliterate", { return true end }) - factions.register_command("get_factions_spawn", { description = "Get a faction's spawn", description_arg = " :", @@ -1573,12 +1437,11 @@ factions.register_command("get_factions_spawn", { minetest.chat_send_player(player, spawn.x .. "," .. spawn.y .. "," .. spawn.z) return true else - send_error(player, "Faction has no spawn set.") + minetest.chat_send_player(player, "Faction has no spawn set.") return false end end }) - factions.register_command("stats", { description = "Get stats of a faction", description_arg = " :", @@ -1603,7 +1466,6 @@ factions.register_command("stats", { return true end }) - factions.register_command("seen", { description = "Check the last time a faction had a member logged in", description_arg = " :", @@ -1622,7 +1484,6 @@ factions.register_command("seen", { return true end }) - ------------------------------------------------------------------------------- -- name: cmdhandler(playername, parameter) -- @@ -1647,7 +1508,7 @@ factions_chat.cmdhandler = function (playername,parameter) end local cmd = factions.commands[params[1]] if not cmd then - send_error(playername, "Unknown command.") + minetest.chat_send_player(playername, "Unknown command.") return false end local argv = {} @@ -1665,11 +1526,9 @@ function table_Contains(t, v) end return false end - local premade_help = "" local premade_help_admin = "" local a_z = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"} - function factions.create_help_text() for l, j in pairs(a_z) do for k, v in pairs(factions.commands) do @@ -1684,11 +1543,9 @@ function factions.create_help_text() end end end - minetest.register_on_mods_loaded(function() factions.create_help_text() end) - ------------------------------------------------------------------------------- -- name: show_help(playername, parameter) -- @@ -1699,17 +1556,14 @@ end) --! @param playername name ------------------------------------------------------------------------------- function factions_chat.show_help(playername) - local MSG = function(text) - minetest.chat_send_player(playername, text, false) - end - MSG("factions mod") - MSG("Usage:") + local msg = "factions mod\nUsage:\n" local has, missing = minetest.check_player_privs(playername, {faction_admin = true}) if has then - MSG(premade_help_admin) + msg = msg .. premade_help_admin else - MSG(premade_help) + msg = msg .. premade_help end + minetest.chat_send_player(playername, msg, false) end init_commands() diff --git a/claim_events.lua b/claim_events.lua index 363530e..85c847f 100644 --- a/claim_events.lua +++ b/claim_events.lua @@ -2,16 +2,12 @@ --! @return whether this faction can claim a parcelpos function factions.can_claim_parcel(name, parcelpos) local fn = factions.parcels.get(parcelpos) - if fn == nil then return true end - local faction = factions.factions.get(name) - if fn then local fac = factions.factions.get(fn.faction) - if fac.power < 0. and faction.power >= factions_config.power_per_parcel and not faction.allies[fn] and not faction.neutral[fn] then return true else @@ -20,15 +16,12 @@ function factions.can_claim_parcel(name, parcelpos) elseif faction.power < factions_config.power_per_parcel then return false end - return true end - --! @brief claim a parcel, update power and update global parcels table function factions.claim_parcel(name, parcelpos) -- check if claiming over other faction's territory local otherfac = factions.parcels.get(parcelpos) - if otherfac then local otherfac_name = otherfac.faction factions.unclaim_parcel(otherfac_name, parcelpos) @@ -37,29 +30,20 @@ function factions.claim_parcel(name, parcelpos) local data = factions.create_parcel_table() data.faction = name factions.parcels.set(parcelpos, data) - local faction = factions.factions.get(name) - faction.land[parcelpos] = true - factions.factions.set(name, faction) - factions.decrease_power(name, factions_config.power_per_parcel) factions.increase_usedpower(name, factions_config.power_per_parcel) factions.on_claim_parcel(name, parcelpos) factions.parcelless_check(name) end - --! @brief claim a parcel, update power and update global parcels table function factions.unclaim_parcel(name, parcelpos) factions.remove_key(factions.parcels, parcelpos, nil, "faction", true) - local faction = factions.factions.get(name) - faction.land[parcelpos] = nil - factions.factions.set(name, faction) - factions.increase_power(name, factions_config.power_per_parcel) factions.decrease_usedpower(name, factions_config.power_per_parcel) factions.on_unclaim_parcel(name, parcelpos) @@ -68,7 +52,6 @@ end function factions.parcelless_check(name) local faction = factions.factions.get(name) - if faction.land then local count = 0 for index, value in pairs(faction.land) do @@ -165,15 +148,11 @@ local parcel_size = factions_config.parcel_size function factions.claim_square(player, faction, r) local rplayer = minetest.get_player_by_name(player) local pos = vector.round(rplayer:get_pos()) - pos.x = math.floor(pos.x / parcel_size) * parcel_size pos.z = math.floor(pos.z / parcel_size) * parcel_size - pos.x = pos.x - (parcel_size * (r - math.floor(r / 2))) pos.z = pos.z - (parcel_size * (r - math.floor(r / 2))) - local timer = 0 - for i = 1, r do for l = 1, r do local p = {x = pos.x + (parcel_size * l), y = pos.y, z = pos.z + (parcel_size * i)} @@ -183,9 +162,7 @@ function factions.claim_square(player, faction, r) end end end - local auto_list = {} - local function _claim_auto(player, faction) if auto_list[player] then local rplayer = minetest.get_player_by_name(player) @@ -194,7 +171,6 @@ local function _claim_auto(player, faction) minetest.after(0.1, _claim_auto, player, faction) end end - function factions.claim_auto(player, faction) if auto_list[player] then auto_list[player] = nil @@ -205,7 +181,6 @@ function factions.claim_auto(player, faction) _claim_auto(player, faction) end end - local function _claim_fill(player, faction, pos) if claim_helper(player, faction, factions.get_parcel_pos(pos), true) then local pos1 = {x = pos.x - parcel_size, y = pos.y, z = pos.z} @@ -218,7 +193,6 @@ local function _claim_fill(player, faction, pos) minetest.after(math.random(0, 11) / 10, _claim_fill, player, faction, pos4) end end - function factions.claim_fill(player, faction) local rplayer = minetest.get_player_by_name(player) local pos = vector.round(rplayer:get_pos()) @@ -262,16 +236,13 @@ end function factions.claim_all(player, faction) local rplayer = minetest.get_player_by_name(player) local pos = vector.round(rplayer:get_pos()) - pos.x = math.floor(pos.x / parcel_size) * parcel_size pos.z = math.floor(pos.z / parcel_size) * parcel_size - _claim_all(player, faction, pos) end function factions.claim_help(player, func) local text = "All params for /f claim: , " - if func == "o" or func == "one" then text = "/f claim o\n/f claim one\n Claim one parcel." elseif func == "a" or func == "auto" then @@ -287,22 +258,17 @@ function factions.claim_help(player, func) elseif func == "all" then text = "/f claim all\nClaim all faction land." end - minetest.chat_send_player(player, text) end function factions.unclaim_square(player, faction, r) local rplayer = minetest.get_player_by_name(player) local pos = vector.round(rplayer:get_pos()) - pos.x = math.floor(pos.x / parcel_size) * parcel_size pos.z = math.floor(pos.z / parcel_size) * parcel_size - pos.x = pos.x - (parcel_size * (r - math.floor(r / 2))) pos.z = pos.z - (parcel_size * (r - math.floor(r / 2))) - local timer = 0 - for i = 1, r do for l = 1, r do local p = {x = pos.x + (parcel_size * l), y = pos.y, z = pos.z + (parcel_size * i)} @@ -349,10 +315,8 @@ end function factions.unclaim_fill(player, faction) local rplayer = minetest.get_player_by_name(player) local pos = vector.round(rplayer:get_pos()) - pos.x = math.floor(pos.x / parcel_size) * parcel_size pos.z = math.floor(pos.z / parcel_size) * parcel_size - _unclaim_fill(player, faction, pos) end @@ -361,10 +325,8 @@ local parcel_size_center = parcel_size / 2 function factions.unclaim_circle(player, faction, r) local rplayer = minetest.get_player_by_name(player) local pos = vector.round(rplayer:get_pos()) - pos.x = (math.floor(pos.x / parcel_size) * parcel_size) + parcel_size_center pos.z = (math.floor(pos.z / parcel_size) * parcel_size) + parcel_size_center - for i = 1, 360 do local angle = i * math.pi / 180 local rpos = {x = pos.x + r * math.cos(angle), y = pos.y, z = pos.z + r * math.sin(angle)} @@ -383,16 +345,13 @@ end function factions.unclaim_all(player, faction) local rplayer = minetest.get_player_by_name(player) local pos = vector.round(rplayer:get_pos()) - pos.x = math.floor(pos.x / parcel_size) * parcel_size pos.z = math.floor(pos.z / parcel_size) * parcel_size - _unclaim_all(player, faction, pos) end function factions.unclaim_help(player, func) local text = "All params for /f unclaim: , " - if func == "o" or func == "one" then text = "/f unclaim o\n/f unclaim one\n Unclaim one parcel." elseif func == "a" or func == "auto" then @@ -408,11 +367,9 @@ function factions.unclaim_help(player, func) elseif func == "all" then text = "/f unclaim all\nUnclaim all faction land." end - minetest.chat_send_player(player, text) end minetest.register_on_leaveplayer(function(player) - auto_list[player:get_player_name()] = nil - end -) + auto_list[player:get_player_name()] = nil +end) diff --git a/databases.lua b/databases.lua index 4846106..ca235d8 100644 --- a/databases.lua +++ b/databases.lua @@ -38,7 +38,7 @@ function factions.create_faction_table() --! @brief maximum power of a faction maxpower = factions_config.maxpower, --! @brief power currently in use - usedpower = 0., + usedpower = 0, --! @brief list of player names players = {}, --! @brief table of ranks/permissions @@ -119,29 +119,23 @@ function factions.remove_key(db, db_name, db_data, key, write) if not db_data then db_data = db.get(db_name) end - db_data[key] = nil - if factions.db_is_empty(db_data) then db.remove(db_name) return nil end - if write then db.set(db_name, db_data) end - return db_data end -- faction data check on load local function update_data(db, db_name, db_data, empty_table, write) local needs_update = false - if not db_data then db_data = db.get(db_name) end - for k, v in pairs(empty_table) do if db_data[k] == nil then db_data[k] = v @@ -149,11 +143,9 @@ local function update_data(db, db_name, db_data, empty_table, write) minetest.log("Adding property " .. k .. " to " .. db_name .. " file.") end end - if write and needs_update then db.set(db_name, db_data) end - return db_data end @@ -162,17 +154,14 @@ minetest.register_on_mods_loaded(function() for k, v in factions.factions.iterate() do update_data(factions.factions, k, nil, factions.create_faction_table(), true) end - minetest.log("Checking parcel files.") for k, v in factions.parcels.iterate() do update_data(factions.parcels, k, nil, factions.create_parcel_table(), true) end - minetest.log("Checking player files.") for k, v in factions.players.iterate() do update_data(factions.players, k, nil, factions.create_player_table(), true) end - minetest.log("Checking ip files.") for k, v in factions.player_ips.iterate() do update_data(factions.player_ips, k, nil, factions.create_ip_table(), true) diff --git a/diplomacy_events.lua b/diplomacy_events.lua index c720745..d6cf45d 100644 --- a/diplomacy_events.lua +++ b/diplomacy_events.lua @@ -15,7 +15,6 @@ end function factions.new_alliance(name, faction) local bfaction = factions.factions.get(name) - bfaction.allies[faction] = true factions.on_new_alliance(name, faction) if bfaction.enemies[faction] then @@ -24,24 +23,19 @@ function factions.new_alliance(name, faction) if bfaction.neutral[faction] then factions.end_neutral(name, faction) end - factions.factions.set(name, bfaction) end function factions.end_alliance(name, faction) local bfaction = factions.factions.get(name) - bfaction.allies[faction] = nil factions.on_end_alliance(name, faction) - factions.factions.set(name, bfaction) end function factions.new_neutral(name, faction) local bfaction = factions.factions.get(name) - bfaction.neutral[faction] = true - factions.on_new_neutral(name, faction) if bfaction.allies[faction] then factions.end_alliance(name, faction) @@ -49,41 +43,32 @@ function factions.new_neutral(name, faction) if bfaction.enemies[faction] then factions.end_enemy(name, faction) end - factions.factions.set(name, bfaction) end function factions.end_neutral(name, faction) local bfaction = factions.factions.get(name) - bfaction.neutral[faction] = nil factions.on_end_neutral(name, faction) - factions.factions.set(name, bfaction) end function factions.new_enemy(name, faction) local bfaction = factions.factions.get(name) - bfaction.enemies[faction] = true factions.on_new_enemy(name, faction) - if bfaction.allies[faction] then factions.end_alliance(name, faction) end - if bfaction.neutral[faction] then factions.end_neutral(name, faction) end - factions.factions.set(name, bfaction) end function factions.end_enemy(name, faction) local bfaction = factions.factions.get(name) - bfaction.enemies[faction] = nil factions.on_end_enemy(name, faction) - factions.factions.set(name, bfaction) end \ No newline at end of file diff --git a/eventcallbacks.lua b/eventcallbacks.lua index f41e843..b7b029b 100644 --- a/eventcallbacks.lua +++ b/eventcallbacks.lua @@ -1,36 +1,27 @@ function factions.on_create(name) --! @brief called when the faction is added to the global faction list minetest.chat_send_all("Faction " .. name .. " has been created.") end - function factions.on_set_name(name, oldname) minetest.chat_send_all("Faction " .. oldname .. " has been changed its name to ".. name ..".") end - function factions.on_no_parcel(name) local faction = factions.factions.get(name) - local now = os.time() - faction.no_parcel local l = factions_config.maximum_parcelless_faction_time - factions.broadcast(name, "This faction will disband in " .. l - now .. " seconds, because it has no parcels.") end - function factions.on_player_leave(name, player) factions.broadcast(name, player .. " has left this faction") end - function factions.on_player_join(name, player) factions.broadcast(name, player .. " has joined this faction") end - function factions.on_claim_parcel(name, pos) factions.broadcast(name, "Parcel (" .. pos .. ") has been claimed.") end - function factions.on_unclaim_parcel(name, pos) factions.broadcast(name, "Parcel ("..pos..") has been unclaimed.") end - function factions.on_disband(name, reason) local msg = "Faction " .. name .. " has been disbanded." if reason then @@ -38,22 +29,18 @@ function factions.on_disband(name, reason) end minetest.chat_send_all(msg) end - function factions.on_new_leader(name) local faction = factions.factions.get(name) factions.broadcast(name, faction.leader .. " is now the leader of this faction") end - function factions.on_change_description(name) local faction = factions.factions.get(name) factions.broadcast(name, "Faction description has been modified to: " .. faction.description) end - function factions.on_player_invited(name, player) local faction = factions.factions.get(name) minetest.chat_send_player(player, "You have been invited to faction " .. faction.name) end - function factions.on_toggle_join_free(name, player) local faction = factions.factions.get(name) if faction.join_free then @@ -62,75 +49,58 @@ function factions.on_toggle_join_free(name, player) factions.broadcast(name, "This faction is no longer invite-free.") end end - function factions.on_new_alliance(name, faction) factions.broadcast(name, "This faction is now allied with " .. faction) end - function factions.on_end_alliance(name, faction) factions.broadcast(name, "This faction is no longer allied with " .. faction .. "!") end - function factions.on_new_neutral(name, faction) factions.broadcast(name, "This faction is now neutral with ".. faction) end - function factions.on_end_neutral(name, faction) factions.broadcast(name, "This faction is no longer neutral with " .. faction .. "!") end - function factions.on_new_enemy(name, faction) factions.broadcast(name, "This faction is now at war with " .. faction) end - function factions.on_end_enemy(name, faction) factions.broadcast(name, "This faction is no longer at war with " .. faction .. "!") end - function factions.on_set_spawn(name) local faction = factions.factions.get(name) factions.broadcast(name, "The faction spawn has been set to (" .. util.coords3D_string(faction.spawn) .. ").") end - function factions.on_add_rank(name, rank) local faction = factions.factions.get(name) factions.broadcast(name, "The rank " .. rank .. " has been created with privileges: " .. table.concat(faction.ranks[rank], ", ")) end - function factions.on_replace_privs(name, rank) local faction = factions.factions.get(name) factions.broadcast(name, "The privileges in rank " .. rank .. " have been delete and changed to: " .. table.concat(faction.ranks[rank], ", ")) end - function factions.on_remove_privs(name, rank, privs) factions.broadcast(name, "The privileges in rank " .. rank .. " have been revoked: " .. table.concat(privs, ", ")) end - function factions.on_add_privs(name, rank, privs) factions.broadcast(name, "The privileges in rank " .. rank .. " have been added: " .. table.concat(privs, ", ")) end - function factions.on_set_rank_name(name, rank,newrank) factions.broadcast(name, "The name of rank " .. rank .. " has been changed to " .. newrank) end - function factions.on_delete_rank(name, rank, newrank) factions.broadcast(name, "The rank " .. rank .. " has been deleted and replaced by " .. newrank) end - function factions.on_set_def_rank(name, rank) factions.broadcast(name, "The default rank given to new players has been changed to " .. rank) end - function factions.on_reset_ranks(name) factions.broadcast(name, "All of the faction's ranks have been reset to the default ones.") end - function factions.on_promote(name, member) local faction = factions.factions.get(name) minetest.chat_send_player(member, "You have been promoted to " .. faction.players[member]) end - function factions.on_revoke_invite(name, player) minetest.chat_send_player(player, "You are no longer invited to faction " .. name) end diff --git a/factions.lua b/factions.lua index 30256f5..570eac8 100644 --- a/factions.lua +++ b/factions.lua @@ -45,31 +45,40 @@ starting_ranks = {["leader"] = {"build", "door", "container", "name", "descripti -- ranks: create, edit, and delete ranks -- promote: set a player's rank -- diplomacy: be able to control the faction's diplomacy - -factions.permissions = {"build", "pain_build", "door", "container", "name", "description", "motd", "invite", "kick" - , "spawn", "with_draw", "territory", "claim", "access", "disband", "flags", "ranks", "promote"} -factions.permissions_desc = {"dig and place nodes", "dig and place nodes but take damage doing so", "open/close or dig faction doors", "be able to use containers like chest", "set the faction's name" - , "Set the faction description", "set the faction's message of the day", "(un)invite players to join the faction", "kick players off the faction", "set player titles", "set the faction's spawn" - , "withdraw money from the faction's bank", "claim or unclaim territory", "(un)claim parcels of land", "manage access to territory and parcels of land to players or factions" - , "disband the faction", "manage faction's flags", "create, edit, and delete ranks", "set a player's rank"} - +factions.permissions = {} +factions.permissions["build"] = "dig and place nodes" +factions.permissions["pain_build"] = "dig and place nodes but take damage doing so" +factions.permissions["door"] = "open, close, or dig faction doors" +factions.permissions["container"] = "be able to interact with containers on claimed parcels" +factions.permissions["name"] = "set the faction's name" +factions.permissions["description"] = "Set the faction description" +factions.permissions["motd"] = "set the faction's message of the day" +factions.permissions["invite"] = "(un)invite players to join the faction" +factions.permissions["kick"] = "kick players off the faction" +factions.permissions["spawn"] = "set the faction's spawn" +factions.permissions["with_draw"] = "withdraw money from the faction's bank" +factions.permissions["territory"] = "claim or unclaim territory" +factions.permissions["claim"] = "(un)claim parcels of land" +factions.permissions["access"] = "manage access to territory and parcels of land to players or factions" +factions.permissions["disband"] = "disband the faction" +factions.permissions["flags"] = "manage the faction's flags" +factions.permissions["ranks"] = "create, edit, or delete ranks" +factions.permissions["promote"] = "set a player's rank" -- open: can the faction be joined without an invite? -- monsters: can monsters spawn on your land? -- tax_kick: will players be kicked for not paying tax? -- animals: can animals spawn on your land? -factions.flags = {"open", "monsters", "tax_kick", "animals"} -factions.flags_desc = {"can the faction be joined without an invite?", "can monsters spawn on your land?(unused)", "will players be kicked for not paying tax?(unused)", "can animals spawn on your land?(unused)"} - +factions.flags = {} +factions.flags["open"] = "can the faction be joined without an invite?" +factions.flags["monsters"] = "can monsters spawn on your land?(unused)" +factions.flags["tax_kick"] = "will players be kicked for not paying tax?(unused)" +factions.flags["animals"] = "can animals spawn on your land?(unused)" if factions_config.faction_diplomacy == true then - table.insert(factions.permissions, "diplomacy") - - table.insert(factions.permissions_desc, "be able to control the faction's diplomacy") - + factions.permissions["diplomacy"] = "be able to control the faction's diplomacy" local lt = starting_ranks["leader"] table.insert(lt, "diplomacy") starting_ranks["leader"] = lt end - --! @brief create a new empty faction function factions.new_faction(name) local faction = factions.create_faction_table() @@ -327,7 +336,6 @@ end --! @return boolean indicating permissions. Players not in faction always receive false function factions.has_permission(name, player, permission) local faction = factions.factions.get(name) - local p = faction.players[player] if not p then return false @@ -346,20 +354,16 @@ end function factions.set_description(name, new) local faction = factions.factions.get(name) - faction.description = new factions.on_change_description(name) - factions.factions.set(name, faction) end --! @brief set faction openness function factions.toggle_join_free(name, bool) local faction = factions.factions.get(name) - faction.join_free = bool factions.on_toggle_join_free(name) - factions.factions.set(name, faction) end diff --git a/hud.lua b/hud.lua index 567b71f..0a18a37 100644 --- a/hud.lua +++ b/hud.lua @@ -4,7 +4,6 @@ function createHudfactionLand(player) if player then local name = player:get_player_name() local id_name = name .. "factionLand" - if not hud_ids[id_name] then hud_ids[id_name] = player:hud_add({ hud_elem_type = "text", @@ -23,7 +22,6 @@ function createHudFactionName(player, factionname) if player and factionname then local name = player:get_player_name() local id_name = name .. "factionName" - if not hud_ids[id_name] then hud_ids[id_name] = player:hud_add({ hud_elem_type = "text", @@ -43,7 +41,6 @@ function createHudPower(player, faction) if player and faction then local name = player:get_player_name() local id_name = name .. "powerWatch" - if not hud_ids[id_name] then hud_ids[id_name] = player:hud_add({ hud_elem_type = "text", diff --git a/init.lua b/init.lua index 79cdb39..cb8bc7a 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,5 @@ --!path of mod factions_modpath = minetest.get_modpath("factions") - dofile (factions_modpath .. "/config.lua") dofile (factions_modpath .. "/storagedb.lua") dofile (factions_modpath .. "/databases.lua") @@ -16,6 +15,5 @@ dofile (factions_modpath .. "/claim_events.lua") dofile (factions_modpath .. "/factions.lua") dofile (factions_modpath .. "/chatcommands.lua") dofile (factions_modpath .. "/nodes.lua") - minetest.after(1, hudUpdateClaimInfo) minetest.after(factions_config.tick_time, factionUpdate) diff --git a/invite_events.lua b/invite_events.lua index 94b5d0b..e6f9d88 100644 --- a/invite_events.lua +++ b/invite_events.lua @@ -1,19 +1,15 @@ --! @brief places player in invite list function factions.invite_player(name, player) local faction = factions.factions.get(name) - faction.invited_players[player] = true factions.on_player_invited(name, player) - factions.factions.set(name, faction) end --! @brief removes player from invite list (can no longer join via /f join) function factions.revoke_invite(name, player) local faction = factions.factions.get(name) - faction.invited_players[player] = nil factions.on_revoke_invite(name, player) - factions.factions.set(name, faction) end diff --git a/nodes.lua b/nodes.lua index f0ed8f9..addb16e 100644 --- a/nodes.lua +++ b/nodes.lua @@ -17,7 +17,6 @@ minetest.register_on_mods_loaded(function() if minetest.registered_nodes["default:chest"] then local dc = minetest.registered_nodes["default:chest"] local def_on_rightclick = dc.on_rightclick - local after_place_node = function(pos, placer) local parcel_faction = factions.get_faction_at(pos) if parcel_faction then @@ -28,14 +27,12 @@ minetest.register_on_mods_loaded(function() name .. ")") end end - local can_dig = function(pos, player) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() return inv:is_empty("main") and factions.can_use_node(pos, player:get_player_name(), "container") end - local allow_metadata_inventory_move local def_allow_metadata_inventory_move = dc.allow_metadata_inventory_move if def_allow_metadata_inventory_move then @@ -55,7 +52,6 @@ minetest.register_on_mods_loaded(function() return count end end - local allow_metadata_inventory_put local def_allow_metadata_inventory_put = dc.allow_metadata_inventory_put if def_allow_metadata_inventory_put then @@ -73,7 +69,6 @@ minetest.register_on_mods_loaded(function() return stack:get_count() end end - local allow_metadata_inventory_take local def_allow_metadata_inventory_take = dc.allow_metadata_inventory_take if def_allow_metadata_inventory_take then @@ -91,14 +86,12 @@ minetest.register_on_mods_loaded(function() return stack:get_count() end end - local on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) if not factions.can_use_node(pos, clicker:get_player_name(), "container") and not minetest.check_player_privs(clicker, "protection_bypass") then return itemstack end return def_on_rightclick(pos, node, clicker, itemstack, pointed_thing) end - minetest.override_item("default:chest", {after_place_node = after_place_node, can_dig = can_dig, allow_metadata_inventory_move = allow_metadata_inventory_move, @@ -123,11 +116,8 @@ minetest.register_on_mods_loaded(function() -- Edit default doors and trapdoors to make them require the door permission. local doors = {} - local all_items = {} - local item_count = 1 - local old_i = 0 for i, l in ipairs(door_items) do diff --git a/player_events.lua b/player_events.lua index 2453aca..2aa12f6 100644 --- a/player_events.lua +++ b/player_events.lua @@ -5,7 +5,6 @@ minetest.register_on_prejoinplayer(function(name, ip) data.ip = ip factions.player_ips.set(name, data) end) - minetest.register_on_joinplayer(function(player) local name = player:get_player_name() minetest.after(5, createHudfactionLand, player) @@ -14,15 +13,11 @@ minetest.register_on_joinplayer(function(player) if factions.onlineplayers[facname] == nil then factions.onlineplayers[facname] = {} end - factions.onlineplayers[facname][name] = true faction.last_logon = os.time() - factions.factions.set(facname, faction) - minetest.after(5, createHudFactionName, player, facname) minetest.after(5, createHudPower, player, faction) - if faction.no_parcel ~= -1 then local now = os.time() - faction.no_parcel local l = factions_config.maximum_parcelless_faction_time @@ -37,38 +32,30 @@ minetest.register_on_joinplayer(function(player) minetest.chat_send_player(name, faction.message_of_the_day) end end - -end -) - +end) minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - local faction, facname = factions.get_player_faction(name) - local id_name1 = name .. "factionLand" - - if hud_ids[id_name1] then - hud_ids[id_name1] = nil - end - - if faction then - faction.last_logon = os.time() - factions.factions.set(facname, faction) - factions.onlineplayers[facname][name] = nil - - hud_ids[name .. "factionName"] = nil - hud_ids[name .. "powerWatch"] = nil - else - factions.remove_key(factions.player_ips, name, nil, "ip", true) - end - - on_death[name] = nil + local name = player:get_player_name() + local faction, facname = factions.get_player_faction(name) + local id_name1 = name .. "factionLand" + if hud_ids[id_name1] then + hud_ids[id_name1] = nil end -) + if faction then + faction.last_logon = os.time() + factions.factions.set(facname, faction) + factions.onlineplayers[facname][name] = nil + + hud_ids[name .. "factionName"] = nil + hud_ids[name .. "powerWatch"] = nil + else + factions.remove_key(factions.player_ips, name, nil, "ip", true) + end + on_death[name] = nil +end) minetest.register_on_respawnplayer(function(player) local name = player:get_player_name() local faction, facname = factions.get_player_faction(name) - if not faction then return false else diff --git a/power_events.lua b/power_events.lua index d1c0aec..e6db2db 100644 --- a/power_events.lua +++ b/power_events.lua @@ -1,81 +1,62 @@ function factions.increase_power(name, power) local faction = factions.factions.get(name) - faction.power = faction.power + power - if faction.power > faction.maxpower - faction.usedpower then faction.power = faction.maxpower - faction.usedpower end - for i in pairs(factions.onlineplayers[name]) do updateHudPower(minetest.get_player_by_name(i), faction) end - factions.factions.set(name, faction) end function factions.decrease_power(name, power) local faction = factions.factions.get(name) - faction.power = faction.power - power - for i in pairs(factions.onlineplayers[name]) do updateHudPower(minetest.get_player_by_name(i), faction) end - factions.factions.set(name, faction) end function factions.increase_maxpower(name, power) local faction = factions.factions.get(name) - faction.maxpower = faction.maxpower + power - for i in pairs(factions.onlineplayers[name]) do updateHudPower(minetest.get_player_by_name(i), faction) end - factions.factions.set(name, faction) end function factions.decrease_maxpower(name, power) local faction = factions.factions.get(name) - faction.maxpower = faction.maxpower - power - - if faction.maxpower < 0. then -- should not happen - faction.maxpower = 0. + if faction.maxpower < 0 then -- should not happen + faction.maxpower = 0 end - for i in pairs(factions.onlineplayers[name]) do updateHudPower(minetest.get_player_by_name(i), faction) end - factions.factions.set(name, faction) end function factions.increase_usedpower(name, power) local faction = factions.factions.get(name) - faction.usedpower = faction.usedpower + power - for i in pairs(factions.onlineplayers[name]) do updateHudPower(minetest.get_player_by_name(i), faction) end - factions.factions.set(name, faction) end function factions.decrease_usedpower(name, power) local faction = factions.factions.get(name) - faction.usedpower = faction.usedpower - power - if faction.usedpower < 0. then - faction.usedpower = 0. + if faction.usedpower < 0 then + faction.usedpower = 0 end for i in pairs(factions.onlineplayers[name]) do updateHudPower(minetest.get_player_by_name(i), faction) end - factions.factions.set(name, faction) end diff --git a/protection_override.lua b/protection_override.lua index 8ae54e1..0877689 100644 --- a/protection_override.lua +++ b/protection_override.lua @@ -4,22 +4,17 @@ minetest.is_protected = function(pos, player) if minetest.check_player_privs(player, "protection_bypass") then return default_is_protected(pos, player) end - local y = pos.y - if factions_config.protection_depth_height_limit and (pos.y < factions_config.protection_max_depth or pos.y > factions_config.protection_max_height) then return default_is_protected(pos, player) end - local parcelpos = factions.get_parcel_pos(pos) local parcel_faction, parcel_fac_name = factions.get_parcel_faction(parcelpos) local player_faction local player_fac_name - if player then player_faction, player_fac_name = factions.get_player_faction(player) end - -- no faction if not parcel_faction then return default_is_protected(pos, player) diff --git a/rank_events.lua b/rank_events.lua index e404b59..ef59f65 100644 --- a/rank_events.lua +++ b/rank_events.lua @@ -3,10 +3,8 @@ --! @param rank a list with the permissions of the new rank function factions.add_rank(name, rank, perms) local faction = factions.factions.get(name) - faction.ranks[rank] = perms factions.on_add_rank(name, rank) - factions.factions.set(name, faction) end @@ -15,108 +13,85 @@ end --! @param add or remove permissions to the rank function factions.replace_privs(name, rank, perms) local faction = factions.factions.get(name) - faction.ranks[rank] = perms factions.on_replace_privs(name, rank) - factions.factions.set(name, faction) end function factions.remove_privs(name, rank, perms) local faction = factions.factions.get(name) - local revoked = false local p = faction.ranks[rank] - for index, perm in pairs(p) do if table_Contains(perms, perm) then revoked = true table.remove(p, index) end end - faction.ranks[rank] = p - if revoked then factions.on_remove_privs(name, rank, perms) else factions.broadcast(name, "No privilege was revoked from rank " .. rank .. ".") end - factions.factions.set(name, faction) end function factions.add_privs(name, rank, perms) local faction = factions.factions.get(name) - local added = false local p = faction.ranks[rank] - for index, perm in pairs(perms) do if not table_Contains(p, perm) then added = true table.insert(p, perm) end end - faction.ranks[rank] = p - if added then factions.on_add_privs(name, rank, perms) else factions.broadcast(name, "The rank " .. rank .. " already has these privileges.") end - factions.factions.set(name, faction) end function factions.set_rank_name(name, oldrank, newrank) local faction = factions.factions.get(name) - local copyrank = faction.ranks[oldrank] - faction.ranks[newrank] = copyrank faction.ranks[oldrank] = nil - for player, r in pairs(faction.players) do if r == oldrank then faction.players[player] = newrank end end - if oldrank == faction.default_leader_rank then faction.default_leader_rank = newrank factions.broadcast(name, "The default leader rank has been set to " .. newrank) end - if oldrank == faction.default_rank then faction.default_rank = newrank factions.broadcast(name, "The default rank given to new players is set to " .. newrank) end - factions.on_set_rank_name(name, oldrank, newrank) - factions.factions.set(name, faction) end function factions.set_def_rank(name, rank) local faction = factions.factions.get(name) - for player, r in pairs(faction.players) do if r == rank or r == nil or not faction.ranks[r] then faction.players[player] = rank end end - faction.default_rank = rank factions.on_set_def_rank(name, rank) - factions.factions.set(name, faction) end function factions.reset_ranks(name) local faction = factions.factions.get(name) - faction.ranks = starting_ranks faction.default_rank = "member" faction.default_leader_rank_rank = "leader" @@ -128,7 +103,6 @@ function factions.reset_ranks(name) end end factions.on_reset_ranks(name) - factions.factions.set(name, faction) end @@ -137,7 +111,6 @@ end --! @param newrank the rank given to players who were previously "rank" function factions.delete_rank(name, rank, newrank) local faction = factions.factions.get(name) - for player, r in pairs(faction.players) do if r == rank then faction.players[player] = newrank @@ -153,16 +126,13 @@ function factions.delete_rank(name, rank, newrank) faction.default_rank = newrank factions.broadcast(name, "The default rank given to new players is set to "..newrank) end - factions.factions.set(name, faction) end --! @brief set a player's rank function factions.promote(name, member, rank) local faction = factions.factions.get(name) - faction.players[member] = rank factions.on_promote(name, member) - factions.factions.set(name, faction) end diff --git a/settingtypes.txt b/settingtypes.txt index 369e23a..2d74866 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -47,6 +47,8 @@ factions.protection_depth_height_limit (Enable protection depth height limit) bo factions.spawn_teleport (Enable spawn teleport) bool false # Enable or disabled the need for faction_user priv factions.faction_user_priv (Enable faction user priv) bool false +# Enable or disabled Store player ips to prevent players from gaining more max power from alts +factions.store_ip bool true [StringSettings] # Set the way that the parcel protection works (2d, 3d).