Projekt systemu narkotyków FiveM: zbieranie, przetwarzanie i sprzedaż bezpiecznie
Jak zaprojektować system narkotyków FiveM: zbieranie i przetwarzanie ze sprawdzeniami przedmiotów po stronie serwera, limity szybkości, sprzedaż NPCom bezpiecznie, alerty policji i zbalansowane wypłaty.
Objaw: gracze mają tysiące narkotyków w minuty, sprzedają ten sam przedmiot temu samemu NPC na zawsze, lub zarabiają dziesięć razy więcej niż praca bez żadnego alertu policji.
System narkotyków ma trzy etapy: zbieranie, przetwarzanie i sprzedaż. Wszystkie trzy podążają za tą samą regułą: klient pyta, serwer sprawdzić i decyduje. Ten artykuł pokazuje czeki i pytania dotyczące równowagi, które mają znaczenie.
Trzy etapy
| Etap | Co się dzieje | Co serwer musi sprawdzić |
|---|---|---|
| Zbieranie | Gracz zbiera roślinę, kopie zasób | Lokalizacja, cooldown, limit szybkości |
| Przetwarzanie | Surowe przedmioty stają się gotowym produktem | Gracz ma przedmioty, jest w miejscu przetwarzania |
| Sprzedaż | Produkt zmienia się w pieniądze lub brudne pieniądze | Przedmiot, nabywca, cena, cooldown |
Każdy etap zużywa lub tworzy przedmioty, więc bezpieczny projekt używa funkcji serwera twojego ekwipunku. Strona tworzenia przedmiotu znajduje się w adding items to ox_inventory.
Sprawdzenia przedmiotów po stronie serwera
Nigdy nie ufaj klientowi, który mówi « Mam 10 tego ». Zapytaj ekwipunek na serwerze, usuń wejścia, a następnie dodaj wyjścia, w jednym miejscu:
-- 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)Usuń najpierw, dodaj drugie, i dodaj tylko, gdy usunięcie się powiodło. Jeśli dodasz pierwszą, gracz, który spamuje zdarzenie, może zatrzymać wyjście i nie stracić nic. Sprawdzić canCarryItem przed dodaniem, jeśli gracze mogą być pełni.
Limity szybkości
Nawet legalne zdarzenie może być nadużywane przez spalenie go z pętli. Daj każdemu działaniu minimalne opóźnienie na gracza, przechowywane na serwerze:
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
endUstaw opóźnienie nieco poniżej tego, co faktyczne działanie zajmuje, aby uczciwi gracze nigdy nie byli blokowani. Pamiętaj, aby wyczyścić lastAction[src] na playerDropped, więc tabela nie rośnie wiecznie. Zbieranie powinno być również ograniczone lokalizacją: roślina, która istnieje w jednym polu, nie musi być możliwa do zerwania skąd kolwiek.
Sprzedaż NPCom bezpiecznie
Sprzedaż pieszym to najbardziej nadużywana część, ponieważ klient wybiera peda. Dodaj opcję ze swoją biblioteką celowania na kliencie, na przykład na wszystkich pieszych:
-- 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,
},
})Podstawy targetowania znajdują się w adding ox_target zones. Zwróć uwagę, że klient wysyła tylko nazwę przedmiotu. Wszystko inne decyduje się na serwerze:
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)Cena pochodzi z konfiguracji serwera, nigdy z klienta. Nazwę przedmiotu należy sprawdzić na liście dozwolonych, ponieważ klient może wysłać każdą nazwę. Dodaj losową szansę, że NPC odmawia lub ci doniesie. Jeśli sprzedaż potrzebuje gracza w strefie lub tylko w nocy, sprawdzić to również na serwerze. Nazwa przedmiotu black_money zależy od twojej konfiguracji; patrz money types.
Alerty policji
Ryzyko to to, co sprawia, że narkotyki są interesujące. Alarmuj policję na szansę, z serwera, z lokalizacją transakcji:
- Procent szansy na każdą sprzedaż (na przykład mała szansa, że NPC wzywa policję).
- Większa szansa, gdy mniej transakcji zostało dokonanych w spokojnym obszarze, lub gdy wiele transakcji dzieje się w tym samym miejscu.
- Wymagane minimum funkcjonariuszy na służbie do sprzedaży i przetwarzania, liczonego na serwerze, jak w setting up a police job.
Jeśli używasz aplikacji telefonicznej do transakcji, zamówienia i punkty spotkania powinny być wciąż tworzone i sprawdzane na serwerze.
Drug Dealer AppUliczna sprzedaż jako aplikacja lb-phone: strefy, kupcy NPC, poziomy i alerty dla policji.od 18,15 €Zobacz skrypt →
Balancowanie wypłat
Balans w liczbach, a nie w uczuciach:
- Czas jednej pełnej pętli (zbieranie, przetwarzanie, sprzedaż) i policz ile minut to zajmuje.
- Oblicz pieniądze na godzinę: payout razy pętle na godzinę.
- Porównaj z kontrolą najlepszej legalne pracy. Narkotyki mogą płacić więcej, ze względu na ryzyko, ale współczynnik dwa lub trzy to wystarczająco.
- Dodaj tarcie: czas przetwarzania, waga przedmiotu, ograniczona liczba sprzedaży na NPC, cooldown na lokalizację.
Następnie obserwuj pieniądze w bazie danych po tygodniu i dostosuj. Metoda znajduje się w balancing your server economy.
Lista kontrolna
| Objaw | Naprawa |
|---|---|
| Nieskończone przedmioty | Sprawdzić lokalizację, usunąć wejścia najpierw i limit szybkości na serwerze |
| Klient ustawia cenę | Pobierz ceny tylko z konfiguracji serwera |
| Sprzedaje każdy przedmiot jako narkotyki | Sprawdzić nazwę przedmiotu na liście dozwolonych |
| Ten sam NPC kupuje na zawsze | Dodaj cooldown na gracza i na peda lub lokalizację |
| Narkotyki płacą zbyt wiele | Porównaj pieniądze na godzinę z normalną pracą |
| Brak reakcji policji | Alarmuj na szansę, z serwera |
Szybkie odpowiedzi
Dlaczego gracze dostają nieograniczone narkotyki?
Zdarzenie zbierania lub przetwarzania uruchamia się na serwerze bez sprawdzania lokalizacji, czasu lub limitów, więc zmodyfikowany klient może go wypalić w pętli. Dodaj czeki i limit szybkości na serwerze.
Jak pozwolić graczom sprzedawać narkotyki NPCom?
Dodaj opcję celowania do pieszych na kliencie, a następnie pozwól serwerowi sprawdzić przedmiot, dystans, cooldown i cenę, zanim zapłaci. Klient tylko pyta.
Jak zbalansuję wypłaty narkotyków?
Oblicz pieniądze na godzinę, które gracz może zarobić i porównaj z normalną pracą. Narkotyki mogą płacić więcej ze względu na ryzyko, ale nie tyle, że nikt nie robi nic innego.
Skrypty bez tego problemu
Drug Dealer AppUliczna sprzedaż jako aplikacja lb-phone: strefy, kupcy NPC, poziomy i alerty dla policji.Zobacz skrypt →
Item Creator V2Twórz używalne przedmioty z animacjami, propami, efektami i nie tylko — bez pisania kodu.Zobacz skrypt →
Pawn Shop AppLombard między graczami wewnątrz lb-phone.Zobacz skrypt →