Typy pieniędzy w FiveM: gotówka, bank i czarna kasa na ESX, QBCore i QBox

Jak działają pieniądze w FiveM: konta ESX (money, bank, black_money), cash, bank i crypto w QBCore, cash ox_inventory jako przedmiot i stringi powodów dla Twoich dzienników.

Gracze mają więcej niż jeden rodzaj pieniędzy: gotówkę w kieszeni, konto bankowe i na wielu serwerach saldo brudnych pieniędzy. Każdy framework je inaczej nazywa i obsługuje, a ox_inventory dodaje trzeci sposób. Ten artykuł pokazuje nazwy kont, funkcje do dodawania i usuwania pieniędzy, jak ox_inventory traktuje gotówkę i dlaczego string powodu ma znaczenie.

Konta ESX

ESX ma trzy standardowe konta:

Konto Znaczenie
money Gotówka
bank Saldo bankowe
black_money Brudne pieniądze, używane do niskich prac

Na serwerze, z obiektem gracza:

lua
ESX = exports['es_extended']:getSharedObject()
local xPlayer = ESX.GetPlayerFromId(source)

-- read
local cash = xPlayer.getAccount('money').money
local bank = xPlayer.getAccount('bank').money
local black = xPlayer.getAccount('black_money').money

-- add / remove
xPlayer.addAccountMoney('bank', 500, 'job-payout')
xPlayer.removeAccountMoney('black_money', 200, 'drug-purchase')

xPlayer.addAccountMoney(account, amount, reason) i removeAccountMoney biorą nazwę konta pierwszą. Tylko dla gotówki, istnieją skróty:

lua
xPlayer.addMoney(100, 'sold-item')
xPlayer.removeMoney(100, 'bought-item')
local cash = xPlayer.getMoney()

removeAccountMoney nie sprawdza dla Ciebie salda. Sprawdź najpierw, lub konto może stać się ujemne na niektórych wersjach:

lua
if xPlayer.getAccount('money').money >= price then
    xPlayer.removeAccountMoney('money', price, 'shop')
end

Jeśli obiekt gracza jest nil, zobacz ESX xPlayer is nil.

Pieniądze QBCore

QBCore przechowuje swoje pieniądze w PlayerData.money, z cash, bank i crypto:

lua
local QBCore = exports['qb-core']:GetCoreObject()
local Player = QBCore.Functions.GetPlayer(source)

-- read
local cash = Player.PlayerData.money.cash
local bank = Player.PlayerData.money.bank

-- add / remove
Player.Functions.AddMoney('bank', 500, 'job-payout')
Player.Functions.RemoveMoney('cash', 50, 'shop-purchase')

Player.Functions.AddMoney(type, amount, reason) i Player.Functions.RemoveMoney(type, amount, reason) biorą typ pierwszy. RemoveMoney zwraca false gdy gracz nie ma dość, więc używaj wyniku:

lua
if Player.Functions.RemoveMoney('cash', price, 'shop-purchase') then
    Player.Functions.AddItem('burger', 1)
else
    TriggerClientEvent('QBCore:Notify', source, 'Not enough cash', 'error')
end

Nie ma wbudowanego konta brudnych pieniędzy w QBCore. Serwery, które go potrzebują, zwykle używają przedmiotu (zaznaczone rachunki) lub własnego typu dodanego do Config.Money, a następna sekcja obejmuje opcję przedmiotu. Jeśli QBCore jest nil w Twoim skrypcie, zobacz the GetCoreObject fix.

QBox

QBox jest oparty na QBCore, więc te same wywołania Player.Functions.AddMoney i RemoveMoney działają na obiekcie gracza, a typy pieniędzy są takie same. QBox ma również exports na qbx_core, więc sprawdzaj exports Twojej wersji qbx_core dla funkcji pieniędzy zanim ich użyjesz w nowym kodzie. Kształt jest taki sam: typ, kwota i powód.

ox_inventory: gotówka jako przedmiot

Z ox_inventory, gotówka może być przedmiotem zamiast numeru. Standardowy przedmiot jest nazwany money, a brudne pieniądze to black_money. Oba znajdują się w ox_inventory/data/items.lua.

lua
-- give cash as an item
exports.ox_inventory:AddItem(source, 'money', 500)

-- count it
local cash = exports.ox_inventory:Search(source, 'count', 'money')

-- take it
exports.ox_inventory:RemoveItem(source, 'money', 100)

-- dirty money
exports.ox_inventory:AddItem(source, 'black_money', 1000)

Na serwerze ESX z ox_inventory, konta money i black_money są pokazywane jako przedmioty w ekwipunku, a xPlayer.addAccountMoney('money', ...) kończy się w tych przedmiotach. Używaj tylko jednego sposobu. Jeśli jeden skrypt dodaje gotówkę za pomocą funkcji ESX, a inny za pomocą AddItem, test, że te dwa zgadzają się Twojej konfiguracji zanim ją dostarczsz. Bank nie jest przedmiotem i pozostaje liczbą.

Ostrzeżenie: gotówka jako przedmiot ma wagę i może być upuszczana, kradzona lub przechowywana w sejfie. To jest zamierzone, ale zmienia zachowanie skryptów rabunku i sklepu. Zobacz stashes in ox_inventory.

String powodu

reason to ostatni argument funkcji pieniędzy. Nie zmienia kwoty. Jest przekazywany wraz ze zmianą, aby framework lub skrypt rejestrujący mogły zanotować dlaczego pieniądze się poruszyły.

lua
Player.Functions.AddMoney('cash', 250, 'taxi-job-payout')
xPlayer.addAccountMoney('bank', 250, 'taxi-job-payout')

Używaj krótki, konsekwentny tekst, który wymieniaj skrypt i akcję. Gdy saldo gracza wygląda źle, wyszukiwanie taxi-job-payout w dziennikach znajduje linię w sekundach. Jeśli również wysyłasz dzienniki do Discord, zobacz Discord webhook logs. Po stronie bilansu gospodarki, zobacz balancing a FiveM economy.

Reguły dla bezpiecznego kodu pieniędzy

  • Zmieniaj pieniądze tylko na serwerze. Nigdy nie akceptuj kwoty wysłanej przez klienta.
  • Sprawdzaj saldo zanim usuniesz i używaj wartości zwracanej na QBCore.
  • Przekazuj powód za każdym razem.
  • Wybierz jedno źródło pieniędzy na konto, aby gotówka nie była przechowywana dwukrotnie, raz jako liczba i raz jako przedmiot.

Checklist

Objaw Rozwiązanie
Które konta ESX istnieją money, bank, black_money
Które typy QBCore istnieją cash, bank, crypto
Saldo przechodzi w ujemne na ESX Sprawdzaj getAccount(name).money zanim removeAccountMoney
Usuwanie QBCore nie powiedzie się RemoveMoney zwróciło false; gracz nie ma dość
Nie ma czarnej kasy na QBCore Używaj przedmiotu, lub dodaj niestandardowy typ do konfigu
Gotówka to przedmiot ox_inventory: AddItem(source, 'money', amount)
Dzienniki nie mają kontekstu Przekazuj string powodu przy każdym dodaniu i usunięciu

Szybkie odpowiedzi

Jakie są typy pieniędzy w ESX?

ESX ma konta nazwane money (gotówka), bank i black_money. Zmieniasz je za pomocą xPlayer.addAccountMoney, removeAccountMoney i czytasz za pomocą getAccount.

Jakie są typy pieniędzy w QBCore?

QBCore przechowuje cash, bank i crypto w PlayerData.money. Zmieniasz je za pomocą Player.Functions.AddMoney i RemoveMoney, przekazując typ jako pierwszy argument.

Do czego służy argument reason?

To krótki tekst, który QBCore i ostatnie wersje ESX dołączają do zmiany pieniędzy, więc Twoje dzienniki pokazują dlaczego to się stało. Zawsze podaj wyraźny, taki jak 'burger-shop'.

Skrypty bez tego problemu

Pawn Shop AppLombard między graczami wewnątrz lb-phone.Zobacz skrypt →Drug Dealer AppUliczna sprzedaż jako aplikacja lb-phone: strefy, kupcy NPC, poziomy i alerty dla policji.Zobacz skrypt →Shop CreatorZbuduj sklep w niecałą minutę — właściciele, pracownicy, sejfy i napady w zestawie.Zobacz skrypt →

Czytaj dalej