Rewrite to use mod_storage

master
zmv7 2022-08-14 09:00:07 +00:00 committed by GitHub
parent 8c509ff842
commit 1a81f1a556
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 83 additions and 60 deletions

View File

@ -2,3 +2,5 @@
Chat+nametags ranks mod, custom rank text and color Chat+nametags ranks mod, custom rank text and color
* `/getrank [player]` - check your rank or rank of any player * `/getrank [player]` - check your rank or rank of any player
* `/setrank <player> <rank> <color>` - privs: `ranks` - set rank for 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
View File

@ -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_privilege("ranks","Allow manage ranks")
core.register_on_chat_message(function(name,message) core.register_on_chat_message(function(name,message)
local player = core.get_player_by_name(name) local rank,color = ranks.get_rank(name)
if not player then return end
local pmeta = player:get_meta() if rank and color and core.check_player_privs(name, {shout = true}) then
if not pmeta then return end if core.get_modpath("irc") then
local rank = pmeta:get_string("rank") irc.say("<"..name.."> "..core.strip_colors(message))
--if not rank or rank == "" then rank = "[Player] " end end
local color = pmeta:get_string("rankcolor") core.log("action","CHAT: "..core.format_chat_message(name,core.strip_colors(message)))
--if not color or color == "" then color = "#BBB" end core.chat_send_all(core.format_chat_message(core.colorize(color,rank).." "..name,message))
if rank and rank ~= "" and core.check_player_privs(name, {shout = true}) then return true
if core.get_modpath("irc") then end
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
end) end)
core.register_chatcommand("getrank", { core.register_chatcommand("getrank", {
description="Get rank of player or you", description="Get rank of player or you",
params="[player]", params="[player]",
func = function(name,param) func = function(name,param)
local player
if not param or param == "" then if not param or param == "" then
player = core.get_player_by_name(name) param = name
else end
player = core.get_player_by_name(param) 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
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}) end})
core.register_chatcommand("setrank", { core.register_chatcommand("setrank", {
privs={ranks=true}, privs={ranks=true},
@ -42,43 +49,56 @@ core.register_chatcommand("setrank", {
params="<player> <rank> <color>", params="<player> <rank> <color>",
func = function(name,param) func = function(name,param)
local pname, rank, color = param:match("(%S+)%s+(%S+)%s+(.+)") 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) local player = core.get_player_by_name(pname)
if not player then return false,"Invalid player" end if player then
local pmeta = player:get_meta() player:set_nametag_attributes({text = core.colorize(color,"["..rank.."] ")..pname})
if not pmeta then return end end
pmeta:set_string("rank","["..rank.."] ") return true,"Rank of "..pname.." now set to "..core.colorize(color,"["..rank.."]")
pmeta:set_string("rankcolor",color) end})
player:set_nametag_attributes({text = core.colorize(color,"["..rank.."] ")..pname})
return true,"Rank of "..pname..' now set to '..core.colorize(color,rank) 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}) end})
core.register_on_joinplayer(function(player) core.register_on_joinplayer(function(player)
local name = player:get_player_name() local name = player:get_player_name()
local pmeta = player:get_meta() if not name then return end
if not pmeta then return end local rank,color = ranks.get_rank(name)
local rank = pmeta:get_string("rank") if rank and color then
--if not rank or rank == "" then rank = "[Player] " end player:set_nametag_attributes({text = core.colorize(color,rank).." "..name})
local color = pmeta:get_string("rankcolor") end
--if not color or color == "" then color = "#BBB" end
player:set_nametag_attributes({text = core.colorize(color,rank)..name})
end) end)
core.register_chatcommand("players", { core.register_chatcommand("players", {
description = "List all players currently online.", description = "List all players currently online with their ranks",
func = function(name, _) func = function(name, param)
local onlineCount = #(core.get_connected_players()) local list = core.get_connected_players()
local listString = onlineCount.." Online: " local out = ""
local iterated=1 for _,player in ipairs(list) do
for _,player in ipairs(core.get_connected_players()) do local name = player:get_player_name()
local ntag = player:get_nametag_attributes(player).text if name then
listString=listString..ntag local rank,color = ranks.get_rank(name)
if iterated < onlineCount then if rank and color then
listString=listString..", " out = out..core.colorize(color,rank).." "..name.." "
end else
iterated=iterated+1 out = out..name.." "
end end
core.chat_send_player(name, listString) end
end end
}) return true, #list.." Online: "..out
end})

View File

@ -1,2 +1,3 @@
name = ranks name = ranks
optional_depends = irc author = Zemtzov7
optional_depends = irc