система ордер, которая будет выбивать двери челику открывать, меру будет запрос присылатся что такой то коп просит ордер на чела и причина
-- ordres.lua
ORDERS = {}
-- Создаём новый ордер
function CreateOrder(cop, target, reason)
local order = {}
order.cop = cop -- Коп, который запрашивает ордер
order.target = target -- Игрок, на которого выдан ордер
order.reason = reason -- Причина
order.timestamp = os.time() -- Время создания ордера
table.insert(ORDERS, order)
return order
end
-- Получаем все ордера
function GetOrders()
return ORDERS
end
-- ordersystem.lua
util.AddNetworkString("OrderRequest")
-- Команда для копа, чтобы запросить ордер
hook.Add("PlayerSay", "RequestOrder", function(ply, text)
if string.sub(text, 1, 6) == "!order" then
-- Проверяем, является ли игрок копом
if not ply:IsCP() then
ply:ChatPrint("Вы должны быть копом, чтобы запросить ордер!")
return ""
end
local targetName = string.sub(text, 8)
local target = player.GetByName(targetName)
if not target then
ply:ChatPrint("Игрок не найден!")
return ""
end
-- Запрос причины
ply:ChatPrint("Введите причину для ордера: ")
local reason = "" -- Это будет заглушка, в реальной системе нужно будет добавить ввод
-- Создаём ордер
local order = CreateOrder(ply, target, reason)
-- Отправляем запрос ордера
net.Start("OrderRequest")
net.WriteEntity(ply)
net.WriteEntity(target)
net.WriteString(reason)
net.Broadcast()
ply:ChatPrint("Запрос на ордер отправлен!")
return ""
end
end)
-- Отправка уведомлений другим игрокам
net.Receive("OrderRequest", function()
local cop = net.ReadEntity()
local target = net.ReadEntity()
local reason = net.ReadString()
-- Уведомляем других копов о запросе
for _, ply in ipairs(player.GetAll()) do
if ply:IsCP() then
ply:ChatPrint("Коп " .. cop:Nick() .. " запросил ордер на " .. target:Nick() .. ". Причина: " .. reason)
end
end
end)
-- Открытие двери по ордеру
hook.Add("PlayerUse", "OpenDoorWithOrder", function(ply, ent)
if ent:IsDoor() then
for _, order in ipairs(ORDERS) do
if order.target == ply then
-- Если ордер на игрока существует, открываем дверь
if ply:IsCP() then
ent:Fire("unlock")
ent:Fire("open")
ply:ChatPrint("Дверь открыта по ордеру!")
return true
end
end
end
end
end)
-- Удаляем ордеры, которые старше определённого времени (например, 10 минут)
timer.Create("ClearOldOrders", 60, 0, function()
local currentTime = os.time()
for i = #ORDERS, 1, -1 do
if currentTime - ORDERS[i].timestamp > 600 then -- 600 секунд = 10 минут
table.remove(ORDERS, i)
end
end
end)