FiveM типы денег: наличные, банк и чёрные деньги на ESX, QBCore и QBox
Как деньги работают на FiveM: ESX счёта (money, bank, black_money), QBCore наличные, банк и крипто, ox_inventory наличные как предмет, и причины строк для вашего логов.
У игроков есть больше чем один тип денег: наличные в их кармане, банковский счёт, и на многих серверах баланс грязных денег. Каждый фреймворк называет и обрабатывает их по-разному, и ox_inventory добавляет третий способ. Эта статья показывает названия счётов, функции чтобы добавлять и удалять деньги, как ox_inventory обращается с наличными, и почему строка причины важна.
ESX счёта
ESX имеет три стандартных счёта:
| Счёт | Значение |
|---|---|
money |
Наличные |
bank |
Банковский баланс |
black_money |
Грязные деньги, используются для нелегальных работ |
На сервере, с объектом игрока:
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) и removeAccountMoney берут имя счёта сначала. Для наличных только, есть ярлыки:
xPlayer.addMoney(100, 'sold-item')
xPlayer.removeMoney(100, 'bought-item')
local cash = xPlayer.getMoney()removeAccountMoney не проверяет баланс для вас. Проверьте сначала, или счёт может стать отрицательным на некоторых версиях:
if xPlayer.getAccount('money').money >= price then
xPlayer.removeAccountMoney('money', price, 'shop')
endЕсли объект игрока nil, смотрите ESX xPlayer is nil.
QBCore деньги
QBCore держит свои деньги в PlayerData.money, с cash, bank и 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) и Player.Functions.RemoveMoney(type, amount, reason) берут тип сначала. RemoveMoney возвращает false когда игрок не имеет достаточно, поэтому используйте результат:
if Player.Functions.RemoveMoney('cash', price, 'shop-purchase') then
Player.Functions.AddItem('burger', 1)
else
TriggerClientEvent('QBCore:Notify', source, 'Not enough cash', 'error')
endНет встроенного счёта чёрных денег в QBCore. Серверы которые его нужны обычно используют предмет (помеченные счета) или пользовательский тип добавленный в Config.Money, и следующая секция охватывает опцию предмета. Если QBCore nil в вашем скрипте, смотрите исправление GetCoreObject.
QBox
QBox основан на QBCore, поэтому те же вызовы Player.Functions.AddMoney и RemoveMoney работают на объекте игрока, и типы денег те же. QBox также имеет exports на qbx_core, поэтому проверьте exports вашей версии qbx_core для функций денег перед тем как вы их используете в новом коде. Форма та же: тип, сумма и причина.
ox_inventory: наличные как предмет
С ox_inventory, наличные могут быть предметом вместо числа. Стандартный предмет называется money, и грязные деньги это black_money. Оба находятся в 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)На ESX сервере с ox_inventory, счёта money и black_money показаны как предметы в инвентаре, и xPlayer.addAccountMoney('money', ...) оканчивается в эти предметы. Используйте один способ только. Если один скрипт добавляет наличные с функцией ESX и другой с AddItem, протестируйте что два согласны на вашей установке перед тем как вы его отправите. Банк не является предметом и остаётся числом.
Внимание: наличные как предмет имеют вес и могут быть выброшены, украдены или хранены в stash. Это намеренно, но это меняет как грабежи и магазин скрипты ведут себя. Смотрите stashes в ox_inventory.
Строка причины
reason это последний аргумент функций денег. Он не изменяет сумму. Он передаётся вместе с изменением так что фреймворк, или скрипт логирования, может записать почему деньги переместились.
Player.Functions.AddMoney('cash', 250, 'taxi-job-payout')
xPlayer.addAccountMoney('bank', 250, 'taxi-job-payout')Используйте короткий, постоянный текст который называет скрипт и действие. Когда баланс игрока выглядит неправильным, поиск taxi-job-payout в логах находит строку в секунды. Если вы также отправляете логи в Discord, смотрите Discord webhook логи. Для стороны баланса экономики, смотрите балансировка FiveM экономики.
Правила для безопасного кода денег
- Изменяйте деньги на сервере только. Никогда не принимайте сумму отправленную клиентом.
- Проверьте баланс перед тем как удалить, и используйте возвращаемое значение на QBCore.
- Передавайте причину каждый раз.
- Выберите один источник денег на счёт, так что наличные не хранятся дважды, один раз как число и один раз как предмет.
Контрольный список
| Симптом | Решение |
|---|---|
| Какие ESX счёта существуют | money, bank, black_money |
| Какие типы QBCore существуют | cash, bank, crypto |
| Баланс становится отрицательным на ESX | Проверьте getAccount(name).money перед removeAccountMoney |
| QBCore remove падает | RemoveMoney вернул false; игрок не имеет достаточно |
| Нет чёрных денег на QBCore | Используйте предмет, или добавьте пользовательский тип в конфиг |
| Наличные это предмет | ox_inventory: AddItem(source, 'money', amount) |
| Логи не имеют контекста | Передавайте строку причины на каждое добавление и удаление |
Короткие ответы
Какие типы денег в ESX?
ESX имеет счёта названные money (наличные), bank и black_money. Вы их изменяете с xPlayer.addAccountMoney, removeAccountMoney и читаете их с getAccount.
Какие типы денег в QBCore?
QBCore хранит cash, bank и crypto в PlayerData.money. Вы их изменяете с Player.Functions.AddMoney и RemoveMoney, передавая тип как первый аргумент.
Зачем нужен аргумент reason?
Это короткий текст который QBCore и последние версии ESX прикрепляют к изменению денег, так что ваши логи показывают почему это произошло. Всегда передавайте ясный, такой как 'burger-shop'.
Скрипты без этой проблемы
Pawn Shop AppЛомбард между игроками прямо в lb-phone.Смотреть скрипт →
Drug Dealer AppУличная торговля в виде приложения lb-phone: зоны, NPC-покупатели, уровни и вызовы полиции.Смотреть скрипт →
Shop CreatorМагазин меньше чем за минуту — владельцы, сотрудники, сейфы и ограбления в комплекте.Смотреть скрипт →