Rewrite to use mod_storage
parent
8c509ff842
commit
1a81f1a556
|
@ -2,3 +2,5 @@
|
|||
Chat+nametags ranks mod, custom rank text and color
|
||||
* `/getrank [player]` - check your rank or rank of any player
|
||||
* `/setrank <player> <rank> <color>` - privs: `ranks` - set rank for any player
|
||||
* `/delrank [player]` - delete your rank or rank of any player
|
||||
* `/players` - view list of online players with their ranks
|
138
init.lua
138
init.lua
|
@ -1,40 +1,47 @@
|
|||
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 player = core.get_player_by_name(name)
|
||||
if not player then return end
|
||||
local pmeta = player:get_meta()
|
||||
if not pmeta then return end
|
||||
local rank = pmeta:get_string("rank")
|
||||
--if not rank or rank == "" then rank = "[Player] " end
|
||||
local color = pmeta:get_string("rankcolor")
|
||||
--if not color or color == "" then color = "#BBB" end
|
||||
if rank and rank ~= "" 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(rank..name,core.strip_colors(message)))
|
||||
core.chat_send_all(core.format_chat_message(core.colorize(color,rank)..name,message))
|
||||
return true
|
||||
end
|
||||
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)
|
||||
local player
|
||||
if not param or param == "" then
|
||||
player = core.get_player_by_name(name)
|
||||
else
|
||||
player = core.get_player_by_name(param)
|
||||
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
|
||||
if not player then return false,"Invalid player" end
|
||||
local pmeta = player:get_meta()
|
||||
if not pmeta then return end
|
||||
local rank = pmeta:get_string("rank")
|
||||
if not rank or rank == "" then rank = "Player" end
|
||||
local color = pmeta:get_string("rankcolor")
|
||||
if not color or color == "" then color = "#BBB" end
|
||||
return true,player:get_player_name().."'s rank is "..core.colorize(color,rank)..", color: "..color
|
||||
end})
|
||||
core.register_chatcommand("setrank", {
|
||||
privs={ranks=true},
|
||||
|
@ -42,43 +49,56 @@ core.register_chatcommand("setrank", {
|
|||
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 params" end
|
||||
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 not player then return false,"Invalid player" end
|
||||
local pmeta = player:get_meta()
|
||||
if not pmeta then return end
|
||||
pmeta:set_string("rank","["..rank.."] ")
|
||||
pmeta:set_string("rankcolor",color)
|
||||
player:set_nametag_attributes({text = core.colorize(color,"["..rank.."] ")..pname})
|
||||
return true,"Rank of "..pname..' now set to '..core.colorize(color,rank)
|
||||
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()
|
||||
local pmeta = player:get_meta()
|
||||
if not pmeta then return end
|
||||
local rank = pmeta:get_string("rank")
|
||||
--if not rank or rank == "" then rank = "[Player] " end
|
||||
local color = pmeta:get_string("rankcolor")
|
||||
--if not color or color == "" then color = "#BBB" end
|
||||
player:set_nametag_attributes({text = core.colorize(color,rank)..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.",
|
||||
func = function(name, _)
|
||||
local onlineCount = #(core.get_connected_players())
|
||||
local listString = onlineCount.." Online: "
|
||||
local iterated=1
|
||||
for _,player in ipairs(core.get_connected_players()) do
|
||||
local ntag = player:get_nametag_attributes(player).text
|
||||
listString=listString..ntag
|
||||
if iterated < onlineCount then
|
||||
listString=listString..", "
|
||||
end
|
||||
iterated=iterated+1
|
||||
end
|
||||
core.chat_send_player(name, listString)
|
||||
end
|
||||
})
|
||||
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})
|
||||
|
|
Loading…
Reference in New Issue