diff --git a/curse.lua b/curse.lua new file mode 100644 index 0000000..6c6ee27 --- /dev/null +++ b/curse.lua @@ -0,0 +1,25 @@ + local bad_words = { +"fuck", +"faggot", +"asshole", +"arsehole", +"dick", +"cunt", +"wtf", +"retard", +"bitch", +"shit", +"bastard", +"nigger", +"nigga" +} +minetest.register_on_chat_message(function(name, message) + if not message then return end + local msg = message:lower() + for _, word in pairs(bad_words) do + if msg:find(word) then + minetest.kick_player(name, "( ** WATCH YOUR LANGUAGE ** )") + return + end + end + end) diff --git a/description.txt b/description.txt new file mode 100644 index 0000000..310ccf6 --- /dev/null +++ b/description.txt @@ -0,0 +1 @@ +Admin tools for servers including Admin picks, curse protection, chat commands and more. diff --git a/extras.lua b/extras.lua new file mode 100644 index 0000000..f894aa8 --- /dev/null +++ b/extras.lua @@ -0,0 +1,24 @@ +minetest.register_privilege("myadmin_extras", "Need to use the extras") + +minetest.register_chatcommand("setbar", { + params = "", + description = "Sets the size of your hotbar. 1 - 16", + privs = {myadmin_extras=true}, + func = function(name, param) + if param == "" then + minetest.chat_send_player(name, "Use a number from 1 - 16") + return + end + if type(tonumber(param)) ~= "number" then + minetest.chat_send_player(name, "This is not a number.") + return + end + if tonumber(param) < 1 or tonumber(param) > 16 then + minetest.chat_send_player(name, "The number of slots must be between 1 and 16.") + return + end + local player = minetest.get_player_by_name(name) + player:hud_set_hotbar_itemcount(tonumber(param)) + player:hud_set_hotbar_image("") + end, +}) diff --git a/init.lua b/init.lua index 54a45a2..7fbdb1c 100644 --- a/init.lua +++ b/init.lua @@ -2,3 +2,5 @@ dofile(minetest.get_modpath("myadmin").."/tools.lua") dofile(minetest.get_modpath("myadmin").."/spawn.lua") dofile(minetest.get_modpath("myadmin").."/chat.lua") dofile(minetest.get_modpath("myadmin").."/privs.lua") +dofile(minetest.get_modpath("myadmin").."/curse.lua") +dofile(minetest.get_modpath("myadmin").."/extras.lua") diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..af8686d --- /dev/null +++ b/mod.conf @@ -0,0 +1 @@ +name = myadmin diff --git a/npip.lua b/npip.lua new file mode 100755 index 0000000..eb65e82 --- /dev/null +++ b/npip.lua @@ -0,0 +1,116 @@ +-- Created by Krock to stop mass-account-creators +-- License: WTFPL + +ipnames = {} +ipnames.data = {} +ipnames.tmp_data = {} +ipnames.changes = false +ipnames.save_interval = 120 +ipnames.save_time = 0 +ipnames.file = minetest.get_worldpath().."/ipnames.txt" + +ipnames.name_per_ip_limit = minetest.setting_get("max_names_per_ip") or 5 + +-- Get accounts self: +minetest.register_chatcommand("whois", { + description = "Gets all players who have the same IP as the specified player", + privs = {kick = true}, + func = function(name, param) + if not ipnames.data[param] then + minetest.chat_send_player(name, "The player \"" .. param .. "\" did not join yet.") + return + end + + local ip = ipnames.data[param] + local names = ""; + for k, v in pairs(ipnames.data) do + if v == ip then + if names ~= "" then + names = names .. ", " .. k + else + names = names .. " " .. k + end + end + end + minetest.chat_send_player(name, "Players for IP address " .. ip .. ": " .. names) + end, +}) + +-- Get IP if player tries to join, ban if there are too much names per IP: +minetest.register_on_prejoinplayer(function(name, ip) + -- Only stop new accounts: + ipnames.tmp_data[name] = ip + if not ipnames.data[name] then + local count = 1 + local names = "" + for k, v in pairs(ipnames.data) do + if v == ip then + count = count + 1 + names = names .. k .. ", " + end + end + + if count <= ipnames.name_per_ip_limit and count > 1 then + minetest.log("action", name .. " now has " .. count .. " accounts. Other accounts: " .. names) + end + + if count > ipnames.name_per_ip_limit then + ipnames.tmp_data[name] = nil + if tostring(ip) ~= "127.0.0.1" then + return ("\nYou exceeded the limit of accounts (" .. ipnames.name_per_ip_limit .. + ").\nYou already have the following accounts:\n" .. names) + end + end + end +end) + +-- Save IP if player joined: +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + ipnames.data[name] = ipnames.tmp_data[name] + ipnames.tmp_data[name] = nil + ipnames.changes = true +end) + +function ipnames.load_data() + local file = io.open(ipnames.file, "r") + if not file then + return + end + for line in file:lines() do + if line ~= "" then + local data = line:split("|") + if #data >= 2 then + ipnames.data[data[1]] = data[2] + end + end + end + io.close(file) +end + +function ipnames.save_data() + if not ipnames.changes then + return + end + ipnames.changes = false + local file = io.open(ipnames.file, "w") + for i, v in pairs(ipnames.data) do + if v ~= nil then + file:write(i .. "|" .. v .. "\n") + end + end + io.close(file) +end + +minetest.register_globalstep(function(t) + ipnames.save_time = ipnames.save_time + t + if ipnames.save_time < ipnames.save_interval then + return + end + ipnames.save_time = 0 + ipnames.save_data() +end) + +minetest.register_on_shutdown(function() ipnames.save_data() end) + +minetest.after(3, function() ipnames.load_data() end) diff --git a/privs.lua b/privs.lua index 9b36733..3d24c41 100644 --- a/privs.lua +++ b/privs.lua @@ -3,7 +3,7 @@ minetest.register_privilege("myadmin_levels", "Lets person set level of privlege minetest.register_privilege("myadmin_levels_super", "Lets person set level of privlege people have plus the super level") minetest.register_chatcommand("myadmin_commands", { - privs = {privs = true}, + privs = {myadmin_levels = true}, func = function(name, param) minetest.chat_send_player(name,"Available commands - /admin, /mod, /helper, /norm, /punish, /unpunish, silence, /ghost") return true diff --git a/tools.lua b/tools.lua index 6dcdea9..ad6d7cf 100644 --- a/tools.lua +++ b/tools.lua @@ -19,6 +19,8 @@ minetest.register_tool("myadmin:ultimate_tool", { snappy={times={[1]=0, [2]=0, [3]=0}, uses=0, maxlevel=3}, } }, + on_drop = function(itemstack, dropper, pos) + end }) minetest.register_tool("myadmin:ultimate_tool_drop", { description = "Ultimate Tool With Drops", @@ -37,12 +39,28 @@ minetest.register_tool("myadmin:ultimate_tool_drop", { snappy={times={[1]=0, [2]=0, [3]=0}, uses=0, maxlevel=3}, } }, + on_drop = function(itemstack, dropper, pos) + end }) + minetest.register_on_punchnode(function(pos, node, puncher) + local n = node if puncher:get_wielded_item():get_name() == "myadmin:ultimate_tool" - and minetest.get_node(pos).name ~= "air" then + and minetest.get_node(pos).name ~= "air" + and minetest.get_player_privs(puncher:get_player_name()).myadmin_levels_super == true then minetest.remove_node(pos) end + + if puncher:get_wielded_item():get_name() == "myadmin:ultimate_tool" + or puncher:get_wielded_item():get_name() == "myadmin:ultimate_tool_drop" + and minetest.get_node(pos).name ~= "air" then + if minetest.get_player_privs(puncher:get_player_name()).myadmin_levels_super ~= true then + minetest.chat_send_player(puncher:get_player_name(), "You don't have the priv for this tool") + puncher:set_wielded_item("default:stick") + minetest.set_node(pos,{name = node.name}) + return + end + end end)