Дизайн системы наркотиков FiveM: сбор, обработка и безопасная продажа

Как спроектировать систему наркотиков FiveM: сбор и обработка с проверками предметов на сервере, ограничения скорости, безопасная продажа NPC, оповещения полиции и балансировка выплат.

Симптом: игроки имеют тысячи наркотиков за минуты, продают тот же предмет одному и тому же NPC вечно, или зарабатывают в десять раз больше, чем платит работа, без никакого оповещения полиции.

Система наркотиков имеет три этапа: сбор, обработка и продажа. Все три следуют одному и тому же правилу: клиент просит, сервер проверяет и решает. Эта статья показывает проверки и вопросы баланса, которые имеют значение.

Три этапа

Этап Что происходит Что сервер должен проверить
Сбор Игрок собирает растение, добывает ресурс Местоположение, кулдаун, ограничение скорости
Обработка Сырые предметы становятся готовым продуктом Игрок имеет предметы, находится на месте обработки
Продажа Продукт превращается в деньги или грязные деньги Предмет, покупатель, цена, кулдаун

Каждый этап потребляет или создает предметы, поэтому безопасный дизайн использует серверные функции вашего инвентаря. Сторона создания предметов находится в adding items to ox_inventory.

Проверки предметов на сервере

Никогда не доверяйте клиенту, который говорит "У меня есть 10 этого". Спросите инвентарь на сервере, удалите входы, затем добавьте выходы, в одном месте:

lua
-- server
RegisterNetEvent('drugs:process', function()
    local src = source
    if not isNearProcessor(src) then return end   -- distance check on the server

    local count = exports.ox_inventory:GetItemCount(src, 'weed_leaf')
    if count < 3 then return end

    if exports.ox_inventory:RemoveItem(src, 'weed_leaf', 3) then
        exports.ox_inventory:AddItem(src, 'weed_bag', 1)
    end
end)

Удалите первым, добавьте вторым, и только добавьте, когда удаление удалось. Если вы добавите сначала, игрок, который спамит событие, может сохранить выход и потерять ничего. Проверьте canCarryItem перед добавлением, если игроки могут быть полными.

Ограничения скорости

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

lua
local lastAction = {}

local function rateLimited(src, key, ms)
    local now = GetGameTimer()
    lastAction[src] = lastAction[src] or {}
    if lastAction[src][key] and now - lastAction[src][key] < ms then
        return true
    end
    lastAction[src][key] = now
    return false
end

Установите задержку немного ниже того, что занимает реальное действие, чтобы честные игроки никогда не блокировались. Помните очистить lastAction[src] на playerDropped, поэтому таблица не растет вечно. Сбор должен быть также ограничен местоположением: растение, которое существует в одном поле, не должно быть собираемым откуда-либо.

Безопасная продажа NPC

Продажа пешеходам — наиболее злоупотребляемая часть, потому что клиент выбирает педа. Добавьте опцию с вашей библиотекой целевого ориентирования на клиенте, например на всех пешеходов:

lua
-- client (ox_target)
exports.ox_target:addGlobalPed({
    {
        label = 'Offer drugs',
        icon = 'fa-solid fa-cannabis',
        distance = 2.0,
        canInteract = function(entity)
            return not IsPedAPlayer(entity) and not IsEntityDead(entity)
        end,
        onSelect = function(data)
            TriggerServerEvent('drugs:sell', 'weed_bag')
        end,
    },
})

Основы целевого ориентирования находятся в adding ox_target zones. Обратите внимание, что клиент отправляет только имя предмета. Все остальное решается на сервере:

lua
RegisterNetEvent('drugs:sell', function(item)
    local src = source
    local price = Config.Prices[item]
    if not price then return end                      -- only allowed items
    if rateLimited(src, 'sell', 4000) then return end -- cooldown between deals

    if exports.ox_inventory:RemoveItem(src, item, 1) then
        local payout = math.random(price.min, price.max)
        exports.ox_inventory:AddItem(src, 'black_money', payout)
    end
end)

Цена приходит из конфига сервера, никогда не из клиента. Имя предмета должно быть проверено против разрешенного списка, потому что клиент может отправить любое имя. Добавьте случайный шанс, что NPC отказывает или доносит на вас. Если продажа требует игрока находиться в зоне или только ночью, проверьте это на сервере тоже. Имя предмета black_money зависит от вашей установки; смотрите money types.

Оповещения полиции

Риск — это то, что делает наркотики интересными. Оповещайте полицию случайно, с сервера, с местоположением сделки:

  • Процент шанса на каждую продажу (например, небольшой шанс, что NPC вызывает полицию).
  • Больший шанс, когда меньше сделок произошло в тихой зоне, или когда много сделок происходит в том же месте.
  • Требуемый минимум на скорое дежурные офицеры для продажи и обработки, считаемые на сервере, как в setting up a police job.

Если вы используете приложение телефона для сделок, заказы и встречные точки должны быть созданы и проверены на сервере.

Drug Dealer AppУличная торговля в виде приложения lb-phone: зоны, NPC-покупатели, уровни и вызовы полиции.от 18,15 €Открыть скрипт →

Балансировка выплат

Баланс в цифрах, а не в чувстве:

  1. Определите время одного полного цикла (сбор, обработка, продажа) и посчитайте, сколько минут это занимает.
  2. Вычислите деньги в час: выплата раз в час цикла.
  3. Сравните с лучшей законной выплатой работы вашей работы. Наркотики могут платить больше из-за риска, но фактор два или три достаточно.
  4. Добавьте трение: время обработки, вес предмета, ограниченное количество продаж за NPC, кулдаун на местоположение.

Затем посмотрите деньги в вашей базе данных после недели и отрегулируйте. Метод находится в balancing your server economy.

Контрольный список

Симптом Исправление
Бесконечные предметы Проверьте местоположение, удалите входы первым и ограничение скорости на сервере
Клиент устанавливает цену Берите цены из конфика сервера только
Продает любой предмет как наркотики Проверьте имя предмета против разрешенного списка
Тот же NPC покупает вечно Добавьте кулдаун за игрока и за педа или местоположение
Наркотики платят слишком много Сравните деньги в час с нормальной работой
Нет реакции полиции Оповещайте случайно, с сервера

Короткие ответы

Почему игроки получают неограниченные наркотики?

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

Как мне позволить игрокам продавать наркотики NPC?

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

Как мне сбалансировать выплаты наркотиков?

Рассчитайте деньги в час, которые игрок может заработать, и сравните с нормальной работой. Наркотики могут платить больше из-за риска, но не столько, чтобы никто ничего не делал.

Скрипты без этой проблемы

Drug Dealer AppУличная торговля в виде приложения lb-phone: зоны, NPC-покупатели, уровни и вызовы полиции.Смотреть скрипт →Item Creator V2Создавайте используемые предметы с анимациями, пропами, эффектами и не только — без кода.Смотреть скрипт →Pawn Shop AppЛомбард между игроками прямо в lb-phone.Смотреть скрипт →

Читайте также

FiveMБезопасностьСценарииFiveM магазин и банк грабёж скрипты: setup и разработка на сервереКак установить и дизайнировать магазин и банк грабежи на FiveM: количество полиции, server-side cooldowns, награды даны только сервером, оповещения полиции и проверки расстояния.1 октября 2026 г. · 3 мин чтенияЧитать →FiveMLuaESXСистема смерти и возрождения FiveM: последний стенд, возрождение и сумки состоянияКак работает система смерти FiveM: последний стенд в сравнении с мертвецом, таймер возрождения, возрождение от администратора или EMS, синхронизация мертвого состояния с сумками состояния и исправление боевого выхода.1 октября 2026 г. · 3 мин чтенияЧитать →FiveMСценарииБаза данныхFiveM жилая система и апартаменты: shells, instances, stashes и ключиКак работает жилая система в FiveM: оболочки и MLO интерьеры, инстансирование с routing buckets, storage для каждого дома, ключи и доступ, сохранение владения в базе данных.1 октября 2026 г. · 3 мин чтенияЧитать →