Загрузка данных
-- RanksChat_kdm1eHvH.lua
-- Чат-команды для управления рангами (без цветных префиксов в чате)
-- ============================================================
-- Команды (ConCommands)
-- ============================================================
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, "Твой ранг: " .. 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, " " .. 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 = 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 = 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] Чат-команды загружены")