139 lines
4.2 KiB
Lua
139 lines
4.2 KiB
Lua
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
|
|
--[[ Uncomment this section if messages not sending to irc chan
|
|
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="<player> <rank> <color>",
|
|
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="<player>",
|
|
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})
|
|
|
|
local function say_func(name, param)
|
|
if not (name and param) then return end
|
|
local rank,color = ranks.get_rank(name)
|
|
if rank and color then
|
|
core.chat_send_all(core.format_chat_message(core.colorize(color,rank).." "..name, param))
|
|
else
|
|
core.chat_send_all(core.format_chat_message(name, param))
|
|
end
|
|
if core.get_modpath("irc") then
|
|
irc.say("<"..name.."> "..param)
|
|
end
|
|
end
|
|
|
|
local tabl = {
|
|
description = "Say message to global chat",
|
|
params = "<message>",
|
|
privs = {shout=true},
|
|
func = function(name, param)
|
|
say_func(name, param)
|
|
end}
|
|
|
|
|
|
--core.register_on_mods_loaded(function() -- uncomment it if "say" command being overrided by other mod
|
|
|
|
if core.chatcommands["say"] then
|
|
core.override_chatcommand("say",tabl)
|
|
else
|
|
core.register_chatcommand("say",tabl)
|
|
end
|
|
|
|
--end)
|