4 privs = {interact = true, shout = true, home = true, tp = true},
10 privs = {fly = true, fast = true},
16 privs = {creative = true, worldedit = true, areas = true},
22 privs = {kick = true, noclip = true, settime = true, give = true, teleport = true},
28 privs = {ban = true, bring = true, invhack = true, vanish = true, protection_bypass = true},
34 privs = {server = true, privs = true},
40 if not elidragon.savedata.ranks then
41 local file = io.open(minetest.get_worldpath() .. "/ranks.json", "r")
42 local jsondata = file:read()
43 elidragon.savedata.ranks = minetest.parse_json(jsondata)
46 function elidragon.get_rank(name)
47 return elidragon.get_rank_by_name(elidragon.savedata.ranks[name] or "player")
50 function elidragon.get_rank_by_name(rankname)
51 for _, rank in pairs(elidragon.ranks) do
52 if rank.name == rankname then
58 function elidragon.get_player_name(name, color, brackets)
59 local rank = elidragon.get_rank(name)
60 local rank_tag = rank.tag
62 rank_tag = minetest.colorize(rank.color, rank_tag)
67 return rank_tag .. brackets[1] .. name .. brackets[2] .. " "
70 minetest.register_on_joinplayer(function(player)
71 local name = player:get_player_name()
72 minetest.chat_send_all(elidragon.get_player_name(name, true) .. "has joined the Server.")
73 if irc.connected and irc.config.send_join_part then
74 irc.say(elidragon.get_player_name(name) .. "has joined the Server.")
76 player:set_nametag_attributes({color = elidragon.get_rank(name).color})
79 minetest.register_on_leaveplayer(function(player)
80 local name = player:get_player_name()
81 minetest.chat_send_all(elidragon.get_player_name(name, true) .. "has left the Server.")
82 if irc.connected and irc.config.send_join_part then
83 irc.say(elidragon.get_player_name(name) .. "has left the Server.")
87 minetest.register_on_chat_message(function(name, message)
88 minetest.chat_send_all(elidragon.get_player_name(name, true, {"<", ">"}) .. message)
89 if irc.connected and irc.joined_players[name] then
90 irc.say(elidragon.get_player_name(name, false, {"<", ">"}) .. message)
95 minetest.register_chatcommand("rank", {
96 params = "<player> <rank>",
97 description = "Set a player's rank (admin|moderator|helper|builder|vip|player)",
98 privs = {privs = true},
99 func = function(name, param)
100 local target = param:split(' ')[1]
101 local player = minetest.get_player_by_name(name)
102 local rank = param:split(' ')[2]
103 if not elidragon.get_rank_by_name(rank) then
104 minetest.chat_send_player(name, "Invalid Rank: " .. rank)
107 for _, r in pairs(elidragon.ranks) do
108 for k, v in pairs(r.privs) do
111 if r.name == rank then
115 minetest.set_player_privs(target, privs)
117 player:set_nametag_attributes({color = rank.color})
119 minetest.chat_send_all(target .. " is now a " .. minetest.colorize(rank.color, rank.name))