diff options
author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2020-06-05 09:57:04 +0200 |
---|---|---|
committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2020-06-05 09:57:04 +0200 |
commit | a35cf885066b717d17a143a5ef01658616ed2331 (patch) | |
tree | 5ed5a7c9d3bc98016725de1d9029331a5a5e9349 /ranks.lua | |
download | skycraft-a35cf885066b717d17a143a5ef01658616ed2331.tar.xz |
Initial Commit
Diffstat (limited to 'ranks.lua')
-rwxr-xr-x | ranks.lua | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/ranks.lua b/ranks.lua new file mode 100755 index 0000000..ac1382e --- /dev/null +++ b/ranks.lua @@ -0,0 +1,102 @@ + +skycraft.ranks = { + player = { + privs = {"interact", "shout", "skycraft"}, + color = "#FFFFFF", + tag = "", + }, + vip = { + color = "#4FFF00", + tag = "[VIP]", + }, + mvp = { + color = "#00B6B3", + tag = "[MVP]", + }, + creative = { + privs = {"creative", "fly", "fast"}, + color = "#FF9C00", + tag = "[CREATIVE]", + }, + mod = { + privs = {"kick", "ban", "noclip", "settime", "give", "teleport", "bring", "protection_bypass", "worldedit"}, + color = "#006BFF", + tag = "[MOD]", + }, + dev = { + privs = {"server", "privs"}, + color = "#9D00FF", + tag = "[DEV]", + }, + admin = { + color = "#FF001C", + tag = "[ADMIN]", + }, + owner = { + color = "#D90059", + tag = "[OWNER]", + }, +} + + +function skycraft.get_rank(name) + local player = minetest.get_player_by_name(name) + if not player then return end + local rank = player:get_meta():get_string("rank") + if rank == "" then rank = "player" end + return skycraft.ranks[rank] +end + +function skycraft.get_player_name(name, brackets) + local rank = skycraft.get_rank(name) + local rank_tag = minetest.colorize(rank.color, rank.tag) + if not brackets then + brackets = {"",""} + end + return rank_tag .. brackets[1] .. name .. brackets[2] +end + +function skycraft.update_nametag(player) + player:set_nametag_attributes({color = skycraft.get_rank(player:get_player_name()).color}) +end + +minetest.register_on_leaveplayer(function(player) + minetest.chat_send_all(skycraft.get_player_name(player:get_player_name()) .. " left the Server") + skycraft.update_nametag(player) +end) + +minetest.register_on_chat_message(function(name, message) + minetest.chat_send_all(skycraft.get_player_name(name, {"<", ">"}) .. " " .. message) + return true +end) + +minetest.register_chatcommand("rank", { + params = "<player> <rank>", + description = "Set a player's rank (owner|admin|dev|mod|creative|mvp|vip|player)", + privs = {privs = true}, + func = function(name, param) + local target = param:split(" ")[1] or "" + local target_ref = minetest.get_player_by_name(name) + local rank = param:split(" ")[2] or "" + local rank_ref = skycraft.ranks[rank] + if not rank_ref then + return false, "Invalid Rank '" .. rank .. "'." + elseif not target_ref then + return false, "Player '" .. target .. "' is not online." + else + local privs = {} + for k, v in pairs(skycraft.ranks) do + for _, priv in pairs(v.privs or {}) do + privs[priv] = true + end + if k == rank then + break + end + end + target_ref:get_meta():set_string("rank", rank) + minetest.set_player_privs(target, privs) + skycraft.update_nametag(target_ref) + return true, "The rank of '" .. target .. "' has been updated to '" .. rank .. "'." + end + end, +}) |