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:
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:
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:
if xPlayer.getAccount('money').money >= price then
xPlayer.removeAccountMoney('money', price, 'shop')
endJeś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:
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:
if Player.Functions.RemoveMoney('cash', price, 'shop-purchase') then
Player.Functions.AddItem('burger', 1)
else
TriggerClientEvent('QBCore:Notify', source, 'Not enough cash', 'error')
endNie 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.
-- 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.
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 →