Загрузка данных
-- RanksChat_kdm1eHvH.lua
-- Чат-команды для управления рангами
-- ============================================================
-- Префиксы в чате
-- ============================================================
hook.Add("PlayerSay", "Ranks_kdm1eHvH_ChatPrefix", function(ply, text, team)
if not IsValid(ply) then return end
if string.sub(text, 1, 1) == "/" or string.sub(text, 1, 1) == "!" then return end
local rank = RANKS.GetRank(ply)
local rankData = RANKS.list[rank] or RANKS.list["user"]
local prefix = string.format("[%s] ", rankData.name)
local coloredPrefix = string.format("<color=%d,%d,%d>%s</color>",
rankData.color.r, rankData.color.g, rankData.color.b, prefix)
local coloredNick = string.format("<color=%d,%d,%d>%s</color>",
rankData.color.r, rankData.color.g, rankData.color.b, ply:Nick())
local msg = string.format("%s %s: %s", coloredPrefix, coloredNick, text)
for _, p in ipairs(player.GetAll()) do
if IsValid(p) then
p:PrintMessage(HUD_PRINTTALK, msg)
end
end
return ""
end)
-- ============================================================
-- Команды
-- ============================================================
concommand.Add("kdm1e_rank", function(ply)
if not IsValid(ply) then return end
local rank = RANKS.GetRank(ply)
local rankData = RANKS.list[rank] or RANKS.list["user"]
ply:PrintMessage(HUD_PRINTTALK, string.format("Твой ранг: %s", rankData.name))
end)
concommand.Add("kdm1e_ranks", function(ply)
if not IsValid(ply) then return end
ply:PrintMessage(HUD_PRINTTALK, "=== РАНГИ СЕРВЕРА ===")
for _, rank in ipairs(RANKS.order) do
local r = RANKS.list[rank]
ply:PrintMessage(HUD_PRINTTALK, string.format(" %s — %s", rank, r.name))
end
ply:PrintMessage(HUD_PRINTTALK, "=====================")
end)
concommand.Add("kdm1e_setrank", function(ply, cmd, args)
if IsValid(ply) then
if not RANKS.HasPerm(ply, "canSetRank") then
ply:PrintMessage(HUD_PRINTTALK, "У тебя нет прав выдавать ранги!")
return
end
end
if #args < 2 then
if IsValid(ply) then
ply:PrintMessage(HUD_PRINTTALK, "Использование: !setrank <ник> <ранг>")
else
print("Использование: kdm1e_setrank <ник> <ранг>")
end
return
end
local targetNick = args[1]
local newRank = string.lower(args[2])
if not RANKS.list[newRank] then
local msg = "Неизвестный ранг: " .. newRank
if IsValid(ply) then ply:PrintMessage(HUD_PRINTTALK, msg) else print(msg) end
return
end
local target = nil
for _, p in ipairs(player.GetAll()) do
if string.find(string.lower(p:Nick()), string.lower(targetNick), 1, true) then
target = p
break
end
end
if not IsValid(target) then
local msg = "Игрок не найден: " .. targetNick
if IsValid(ply) then ply:PrintMessage(HUD_PRINTTALK, msg) else print(msg) end
return
end
if IsValid(ply) and not RANKS.HasPerm(ply, "canEverything") then
if RANKS.GetLevel(newRank) >= RANKS.GetLevel(RANKS.GetRank(ply)) then
ply:PrintMessage(HUD_PRINTTALK, "Ты не можешь выдать ранг выше или равный своему!")
return
end
end
local assignedBy = IsValid(ply) and ply:Nick() or "Console"
RANKS.SetRank(target, newRank, assignedBy)
local successMsg = string.format("%s получил ранг %s (выдал: %s)",
target:Nick(), RANKS.list[newRank].name, assignedBy)
for _, p in ipairs(player.GetAll()) do
if IsValid(p) and RANKS.HasPerm(p, "canSetRank") then
p:PrintMessage(HUD_PRINTTALK, successMsg)
end
end
end)
concommand.Add("kdm1e_removerank", function(ply, cmd, args)
if IsValid(ply) and not RANKS.HasPerm(ply, "canSetRank") then
ply:PrintMessage(HUD_PRINTTALK, "У тебя нет прав снимать ранги!")
return
end
if #args < 1 then
if IsValid(ply) then ply:PrintMessage(HUD_PRINTTALK, "Использование: !removerank <ник>") end
return
end
local target = nil
for _, p in ipairs(player.GetAll()) do
if string.find(string.lower(p:Nick()), string.lower(args[1]), 1, true) then
target = p
break
end
end
if not IsValid(target) then
if IsValid(ply) then ply:PrintMessage(HUD_PRINTTALK, "Игрок не найден") end
return
end
local assignedBy = IsValid(ply) and ply:Nick() or "Console"
RANKS.SetRank(target, "user", assignedBy)
local msg = string.format("%s лишён ранга (снял: %s)", target:Nick(), assignedBy)
for _, p in ipairs(player.GetAll()) do
if IsValid(p) and RANKS.HasPerm(p, "canSetRank") then
p:PrintMessage(HUD_PRINTTALK, msg)
end
end
end)
hook.Add("PlayerSay", "Ranks_kdm1eHvH_Commands", function(ply, text, team)
if not IsValid(ply) then return end
local lower = string.lower(text)
if lower == "!rank" or lower == "/rank" then
ply:ConCommand("kdm1e_rank")
return ""
end
if lower == "!ranks" or lower == "/ranks" then
ply:ConCommand("kdm1e_ranks")
return ""
end
if string.StartWith(lower, "!setrank ") or string.StartWith(lower, "/setrank ") then
local args = string.Explode(" ", text)
table.remove(args, 1)
ply:ConCommand("kdm1e_setrank " .. table.concat(args, " "))
return ""
end
if string.StartWith(lower, "!removerank ") or string.StartWith(lower, "/removerank ") then
local args = string.Explode(" ", text)
table.remove(args, 1)
ply:ConCommand("kdm1e_removerank " .. table.concat(args, " "))
return ""
end
end)
print("[RanksChat] Чат-команды загружены")