local ranks = {} local rlist = core.get_mod_storage() function ranks.get_rank(name) if not name then return end local rank,color = rlist:get_string(name):match("(%S+)%s(%S+)") return rank,color end function ranks.set_rank(name,rank,color) if not (name and rank and color) then return end rlist:set_string(name,"["..rank.."] "..color) end function ranks.del_rank(name) if not name then return end rlist:set_string(name,"") end core.register_privilege("ranks","Allow manage ranks") core.register_on_chat_message(function(name,message) local rank,color = ranks.get_rank(name) if rank and color and core.check_player_privs(name, {shout = true}) then if core.get_modpath("irc") then irc.say("<"..name.."> "..core.strip_colors(message)) end core.log("action","CHAT: "..core.format_chat_message(name,core.strip_colors(message))) core.chat_send_all(core.format_chat_message(core.colorize(color,rank).." "..name,message)) return true end end) core.register_chatcommand("getrank", { description="Get rank of player or you", params="[player]", func = function(name,param) if not param or param == "" then param = name end local rank,color = ranks.get_rank(param) if rank and color then return true, param.."'s rank is "..core.colorize(color,rank).." (color: "..color..")" else return false, "Specified player doesn't have any rank" end end}) core.register_chatcommand("setrank", { privs={ranks=true}, description="Set rank of player", params=" ", func = function(name,param) local pname, rank, color = param:match("(%S+)%s+(%S+)%s+(.+)") if not (pname and rank and color) then return false, "Invalid parameters" end ranks.set_rank(pname,rank,color) local player = core.get_player_by_name(pname) if player then player:set_nametag_attributes({text = core.colorize(color,"["..rank.."] ")..pname}) end return true,"Rank of "..pname.." now set to "..core.colorize(color,"["..rank.."]") end}) core.register_chatcommand("delrank", { privs={ranks=true}, description="Delete rank of player or of you", params="", func = function(name,param) if not param or param == "" then param = name end ranks.del_rank(param) local player = core.get_player_by_name(param) if player then player:set_nametag_attributes({text = param}) end return true,"Rank of "..param.." deleted" end}) core.register_on_joinplayer(function(player) local name = player:get_player_name() if not name then return end local rank,color = ranks.get_rank(name) if rank and color then player:set_nametag_attributes({text = core.colorize(color,rank).." "..name}) end end) core.register_chatcommand("players", { description = "List all players currently online with their ranks", func = function(name, param) local list = core.get_connected_players() local out = "" for _,player in ipairs(list) do local name = player:get_player_name() if name then local rank,color = ranks.get_rank(name) if rank and color then out = out..core.colorize(color,rank).." "..name.." " else out = out..name.." " end end end return true, #list.." Online: "..out end})