FiveM Geldtypen: Bargeld, Bank und schwarzes Geld auf ESX, QBCore und QBox

Wie Geld auf FiveM funktioniert: ESX-Konten (money, bank, black_money), QBCore cash, bank und crypto, ox_inventory Bargeld als Element, und der Grund Strings für deine Logs.

Spieler haben mehr als eine Art von Geld: das Bargeld in ihrer Tasche, das Bankkonto und auf vielen Servern ein Gutschrift von schmutzigem Geld. Jedes Framework benennt und behandelt sie unterschiedlich, und ox_inventory fügt einen dritten Weg hinzu. Dieser Artikel zeigt die Kontonamen, die Funktionen zum Hinzufügen und Entfernen von Geld, wie ox_inventory Bargeld behandelt, und warum die Grund-Zeichenkette wichtig ist.

ESX-Konten

ESX hat drei Standard-Konten:

Konto Bedeutung
money Bargeld
bank Bankguthaben
black_money Schmutziges Geld, verwendet für illegale Jobs

Auf dem Server, mit dem Spieler-Objekt:

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) und removeAccountMoney nehmen den Kontonamen zuerst. Nur für Bargeld gibt es Verknüpfungen:

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

removeAccountMoney überprüft nicht das Guthaben für dich. Überprüfe zuerst, oder das Konto kann auf einigen Versionen negativ werden:

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

Wenn das Spieler-Objekt nil ist, siehe ESX xPlayer ist nil.

QBCore Geld

QBCore behält sein Geld in PlayerData.money, mit cash, bank und 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) und Player.Functions.RemoveMoney(type, amount, reason) nehmen den Typ zuerst. RemoveMoney gibt false zurück, wenn der Spieler nicht genug hat, daher nutze das Ergebnis:

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

Es gibt kein eingebautes schwarzes Geld-Konto in QBCore. Server, die eines brauchen, nutzen normalerweise ein Element (markierte Scheine) oder einen benutzerdefinierten Typ, der zu Config.Money hinzugefügt wird, und der nächste Abschnitt behandelt die Element-Option. Wenn QBCore in deinem Skript nil ist, siehe die GetCoreObject-Behebung.

QBox

QBox basiert auf QBCore, daher funktionieren die gleichen Player.Functions.AddMoney und RemoveMoney Aufrufe auf dem Spieler-Objekt, und die Geldtypen sind gleich. QBox hat auch Exporte auf qbx_core, daher überprüfe die Exporte deiner qbx_core-Version für die Geldfunktionen, bevor du sie in neuem Code verwendest. Die Form ist gleich: ein Typ, ein Betrag und ein Grund.

ox_inventory: Bargeld als Element

Mit ox_inventory kann Bargeld ein Element statt einer Zahl sein. Das Standard-Element ist money genannt, und schmutziges Geld ist black_money. Beide sind 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)

Auf einem ESX-Server mit ox_inventory werden die money und black_money Konten als Elemente in dem Inventar angezeigt, und xPlayer.addAccountMoney('money', ...) landet in diesen Elementen. Nutze nur eine Methode. Wenn ein Skript Bargeld mit der ESX-Funktion hinzufügt und ein anderes mit AddItem, teste, dass die beiden auf deiner Einrichtung übereinstimmen, bevor du es versendest. Die Bank ist kein Element und bleibt eine Zahl.

Achtung: Bargeld als Element hat Gewicht und kann fallen gelassen, gestohlen oder in einem Versteck gespeichert werden. Dies ist beabsichtigt, aber es ändert, wie Raub- und Shop-Skripte sich verhalten. Siehe Verstecke in ox_inventory.

Die Grund-Zeichenkette

reason ist das letzte Argument der Geldfunktionen. Es ändert nicht den Betrag. Es wird zusammen mit der Änderung weitergeleitet, damit das Framework oder ein Logging-Skript aufzeichnen kann, warum sich das Geld bewegte.

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

Nutze einen kurzen, konsistenten Text, der das Skript und die Aktion nennt. Wenn die Bilanz eines Spielers falsch aussieht, findet eine Suche nach taxi-job-payout in den Logs die Zeile in Sekunden. Wenn du auch Logs an Discord sendest, siehe Discord Webhook Logs. Für die Bilanz-Seite der Wirtschaft, siehe Balanciere eine FiveM-Wirtschaft.

Regeln für sicheren Geld-Code

  • Ändere Geld nur auf dem Server. Akzeptiere niemals einen Betrag, der vom Client gesendet wird.
  • Überprüfe das Guthaben, bevor du entfernst, und nutze den Rückgabewert auf QBCore.
  • Übergebe jedes Mal einen Grund.
  • Wähle eine Geldquelle pro Konto, daher wird Bargeld nicht zweimal gespeichert, einmal als Zahl und einmal als Element.

Checkliste

Symptom Behebung
Welche ESX-Konten existieren money, bank, black_money
Welche QBCore-Typen existieren cash, bank, crypto
Bilanz wird negativ auf ESX Überprüfe getAccount(name).money vor removeAccountMoney
QBCore Entfernung schlägt fehl RemoveMoney gab false zurück; der Spieler hat nicht genug
Kein schwarzes Geld auf QBCore Nutze ein Element oder füge einen benutzerdefinierten Typ zur Config hinzu
Bargeld ist ein Element ox_inventory: AddItem(source, 'money', amount)
Logs haben keinen Kontext Übergebe eine Grund-Zeichenkette bei jedem Hinzufügen und Entfernen

Kurze Antworten

Was sind die Geldtypen in ESX?

ESX hat Konten namens money (Bargeld), bank und black_money. Du änderst sie mit xPlayer.addAccountMoney, removeAccountMoney und liest sie mit getAccount.

Was sind die Geldtypen in QBCore?

QBCore speichert cash, bank und crypto in PlayerData.money. Du änderst sie mit Player.Functions.AddMoney und RemoveMoney, wobei du den Typ als erstes Argument übergibst.

Wozu ist das Grund-Argument?

Es ist ein kurzer Text, den QBCore und neuere ESX-Versionen mit der Geldänderung verbinden, damit deine Logs zeigen, warum es passiert ist. Übergebe immer einen klaren, wie 'burger-shop'.

Scripts ohne dieses Problem

Pawn Shop AppEin Pfandmarkt zwischen Spielern, direkt in lb-phone.Script ansehen →Drug Dealer AppStraßenverkauf als lb-phone-App: Zonen, NPC-Käufer, Level und Polizeialarme.Script ansehen →Shop CreatorBau einen Shop in unter einer Minute — Besitzer, Angestellte, Tresore und Überfälle inklusive.Script ansehen →

Weiterlesen