Tipi di denaro FiveM: contanti, banca e denaro sporco su ESX, QBCore e QBox

Come funziona il denaro su FiveM: account ESX (money, bank, black_money), contanti QBCore, banca e cripto, denaro ox_inventory come elemento, e stringhe di motivo per i tuoi log.

I giocatori hanno più di un tipo di denaro: il contante in tasca, il conto bancario, e su molti server un saldo di denaro sporco. Ogni framework li nomina e li gestisce diversamente, e ox_inventory aggiunge un terzo modo. Questo articolo mostra i nomi dell'account, le funzioni per aggiungere e rimuovere denaro, come ox_inventory tratta il contante, e perché la stringa di motivo è importante.

Account ESX

ESX ha tre account standard:

Account Significato
money Contanti
bank Saldo bancario
black_money Denaro sporco, utilizzato per lavori illegali

Sul server, con l'oggetto giocatore:

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) e removeAccountMoney prendono il nome dell'account per primo. Solo per i contanti, ci sono scorciatoie:

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

removeAccountMoney non controlla il saldo per te. Controlla prima, o l'account può diventare negativo in alcune versioni:

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

Se l'oggetto giocatore è nil, vedi ESX xPlayer è nil.

Denaro QBCore

QBCore mantiene il suo denaro in PlayerData.money, con cash, bank e 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) e Player.Functions.RemoveMoney(type, amount, reason) prendono il tipo per primo. RemoveMoney restituisce false quando il giocatore non ha abbastanza, quindi usa il risultato:

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

Non c'è un account di denaro sporco integrato in QBCore. I server che ne hanno bisogno di solito usano un elemento (banconote marcate) o un tipo personalizzato aggiunto a Config.Money, e la prossima sezione copre l'opzione elemento. Se QBCore è nil nel tuo script, vedi la correzione GetCoreObject.

QBox

QBox è basato su QBCore, quindi le stesse chiamate Player.Functions.AddMoney e RemoveMoney funzionano sull'oggetto giocatore, e i tipi di denaro sono gli stessi. QBox ha anche esportazioni su qbx_core, quindi controlla le esportazioni della tua versione qbx_core per le funzioni di denaro prima di usarle in nuovo codice. La forma è la stessa: un tipo, un importo e un motivo.

ox_inventory: denaro come elemento

Con ox_inventory, il denaro può essere un elemento invece di un numero. L'elemento standard è chiamato money, e il denaro sporco è black_money. Entrambi sono in 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)

Su un server ESX con ox_inventory, gli account money e black_money vengono mostrati come elementi nell'inventario, e xPlayer.addAccountMoney('money', ...) finisce in quegli elementi. Usa un solo modo. Se uno script aggiunge denaro con la funzione ESX e un altro con AddItem, testa che i due siano d'accordo sulla tua configurazione prima di spedirlo. La banca non è un elemento e rimane un numero.

Attenzione: il denaro come elemento ha peso e può essere lasciato cadere, rubato o conservato in un nascondiglio. È intenzionale, ma cambia come si comportano gli script di rapina e negozio. Vedi nascondigli in ox_inventory.

La stringa di motivo

reason è l'ultimo argomento delle funzioni di denaro. Non cambia l'importo. Viene passato insieme al cambio in modo che il framework, o uno script di logging, possa registrare perché il denaro si è mosso.

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

Usa un testo breve e coerente che nomina lo script e l'azione. Quando il saldo di un giocatore sembra sbagliato, una ricerca di taxi-job-payout nei log trova la riga in secondi. Se invii anche log su Discord, vedi log webhook Discord. Per il lato equilibrio dell'economia, vedi bilanciamento di un'economia FiveM.

Regole per il codice di denaro sicuro

  • Cambia il denaro solo sul server. Non accettare mai un importo inviato dal client.
  • Controlla il saldo prima di rimuovere, e usa il valore di ritorno su QBCore.
  • Passa un motivo ogni volta.
  • Scegli una sola fonte di denaro per account, in modo che il denaro non sia memorizzato due volte, una volta come numero e una volta come elemento.

Elenco di controllo

Sintomo Soluzione
Quali account ESX esistono money, bank, black_money
Quali tipi QBCore esistono cash, bank, crypto
Il saldo diventa negativo su ESX Controlla getAccount(name).money prima di removeAccountMoney
La rimozione QBCore fallisce RemoveMoney ha restituito false; il giocatore non ha abbastanza
Nessun denaro sporco su QBCore Usa un elemento, o aggiungi un tipo personalizzato alla configurazione
Il denaro è un elemento ox_inventory: AddItem(source, 'money', amount)
I log non hanno contesto Passa una stringa di motivo su ogni aggiunta e rimozione

Risposte rapide

Quali sono i tipi di denaro in ESX?

ESX ha account denominati money (contanti), bank e black_money. Li cambi con xPlayer.addAccountMoney, removeAccountMoney e li leggi con getAccount.

Quali sono i tipi di denaro in QBCore?

QBCore memorizza cash, bank e crypto in PlayerData.money. Li cambi con Player.Functions.AddMoney e RemoveMoney, passando il tipo come primo argomento.

A cosa serve l'argomento reason?

È un breve testo che QBCore e le versioni recenti di ESX allacciano al cambio di denaro, quindi i tuoi log mostrano perché è accaduto. Passa sempre uno chiaro, come 'burger-shop'.

Script senza questo problema

Pawn Shop AppUn banco dei pegni tra giocatori dentro lb-phone.Vedi script →Drug Dealer AppSpaccio di strada come app per lb-phone: zone, acquirenti NPC, livelli e allerte alla polizia.Vedi script →Shop CreatorCrea un negozio in meno di un minuto — proprietari, dipendenti, casseforti e rapine inclusi.Vedi script →

Continua a leggere