4 privs = {"interact", "shout", "skycraft"},
17 privs = {"creative", "fly", "fast"},
22 privs = {"kick", "ban", "noclip", "settime", "give", "teleport", "bring", "protection_bypass", "worldedit"},
27 privs = {"server", "privs"},
42 function skycraft.get_rank(name)
43 local player = minetest.get_player_by_name(name)
44 if not player then return end
45 local rank = player:get_meta():get_string("rank")
46 if rank == "" then rank = "player" end
47 return skycraft.ranks[rank]
50 function skycraft.get_player_name(name, brackets)
51 local rank = skycraft.get_rank(name)
52 local rank_tag = minetest.colorize(rank.color, rank.tag)
56 return rank_tag .. brackets[1] .. name .. brackets[2]
59 function skycraft.update_nametag(player)
60 player:set_nametag_attributes({color = skycraft.get_rank(player:get_player_name()).color})
63 minetest.register_on_leaveplayer(function(player)
64 minetest.chat_send_all(skycraft.get_player_name(player:get_player_name()) .. " left the Server")
65 skycraft.update_nametag(player)
68 minetest.register_on_chat_message(function(name, message)
69 minetest.chat_send_all(skycraft.get_player_name(name, {"<", ">"}) .. " " .. message)
73 minetest.register_chatcommand("rank", {
74 params = "<player> <rank>",
75 description = "Set a player's rank (owner|admin|dev|mod|creative|mvp|vip|player)",
76 privs = {privs = true},
77 func = function(name, param)
78 local target = param:split(" ")[1] or ""
79 local target_ref = minetest.get_player_by_name(name)
80 local rank = param:split(" ")[2] or ""
81 local rank_ref = skycraft.ranks[rank]
83 return false, "Invalid Rank '" .. rank .. "'."
84 elseif not target_ref then
85 return false, "Player '" .. target .. "' is not online."
88 for k, v in pairs(skycraft.ranks) do
89 for _, priv in pairs(v.privs or {}) do
96 target_ref:get_meta():set_string("rank", rank)
97 minetest.set_player_privs(target, privs)
98 skycraft.update_nametag(target_ref)
99 return true, "The rank of '" .. target .. "' has been updated to '" .. rank .. "'."