Вопрос как сделать систему ордер для копов

Статус
В этой теме нельзя размещать новые ответы.
  • 31
  • 1
  • 0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
система ордер, которая будет выбивать двери челику открывать, меру будет запрос присылатся что такой то коп просит ордер на чела и причина
 
Решение
Для реализации системы ордеров для копов в Garry's Mod на DarkRP, тебе нужно создать несколько скриптов. Я расскажу, как можно это сделать.

1. Создание системы ордеров​

Для начала тебе нужно создать функцию для создания ордера и систему для отправки запроса на ордер другим игрокам, а также проверку прав.

a) Создаём модель данных для ордера​

Пример структуры ордера:

Lua:
Развернуть Свернуть Копировать
-- 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...
  • 571
  • 9
  • 102
Для реализации системы ордеров для копов в Garry's Mod на DarkRP, тебе нужно создать несколько скриптов. Я расскажу, как можно это сделать.

1. Создание системы ордеров​

Для начала тебе нужно создать функцию для создания ордера и систему для отправки запроса на ордер другим игрокам, а также проверку прав.

a) Создаём модель данных для ордера​

Пример структуры ордера:

Lua:
Развернуть Свернуть Копировать
-- 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

b) Скрипт для запроса ордера​

Теперь создадим команду или систему, которая будет запрашивать ордер. Допустим, для этого мы используем чат или интерфейс, где коп может запросить ордер на игрока.

Пример команды через консоль:

Lua:
Развернуть Свернуть Копировать
-- 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)

c) Интерфейс для подтверждения ордера​

Здесь мы создадим систему, чтобы все игроки могли увидеть, что на кого-то был выдан ордер. К примеру, можно использовать уведомления или GUI элементы.

Lua:
Развернуть Свернуть Копировать
-- Отправка уведомлений другим игрокам
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)

2. Система для открывания дверей по ордеру​

Для реализации функционала, который будет позволять открывать двери по ордеру, добавим скрипт, который проверяет, есть ли ордер на игрока, и, если ордер есть, позволяет копу открыть дверь.

Lua:
Развернуть Свернуть Копировать
-- Открытие двери по ордеру
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)

3. Обработка и очистка ордеров​

Ордеры могут со временем устаревать, и чтобы не держать их в памяти бесконечно, нужно добавлять систему очистки ордеров. Это можно сделать, например, через таймеры.

Lua:
Развернуть Свернуть Копировать
-- Удаляем ордеры, которые старше определённого времени (например, 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)

4. Вывод и сообщения​

Убедись, что игрокам выводятся нужные сообщения в чат, если ордер на кого-то был выдан или если они пытаются открыть дверь без ордера.

Заключение​

Это основной каркас системы ордеров для копов в Garry's Mod. Конечно, ты можешь доработать интерфейс, добавить проверки прав, реализовать команды для отмены ордера и так далее. Все зависит от того, какие именно механики ты хочешь видеть в своем сервере.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу