119 lines
3.0 KiB
Lua
119 lines
3.0 KiB
Lua
|
local playerData = exports['cfx.re/playerData.v1alpha1']
|
||
|
|
||
|
local validMoneyTypes = {
|
||
|
bank = true,
|
||
|
cash = true,
|
||
|
}
|
||
|
|
||
|
local function getMoneyForId(playerId, moneyType)
|
||
|
return GetResourceKvpInt(('money:%s:%s'):format(playerId, moneyType)) / 100.0
|
||
|
end
|
||
|
|
||
|
local function setMoneyForId(playerId, moneyType, money)
|
||
|
local s = playerData:getPlayerById(playerId)
|
||
|
|
||
|
TriggerEvent('money:updated', {
|
||
|
dbId = playerId,
|
||
|
source = s,
|
||
|
moneyType = moneyType,
|
||
|
money = money
|
||
|
})
|
||
|
|
||
|
return SetResourceKvpInt(('money:%s:%s'):format(playerId, moneyType), math.tointeger(money * 100.0))
|
||
|
end
|
||
|
|
||
|
local function addMoneyForId(playerId, moneyType, amount)
|
||
|
local curMoney = getMoneyForId(playerId, moneyType)
|
||
|
curMoney += amount
|
||
|
|
||
|
if curMoney >= 0 then
|
||
|
setMoneyForId(playerId, moneyType, curMoney)
|
||
|
return true, curMoney
|
||
|
end
|
||
|
|
||
|
return false, 0
|
||
|
end
|
||
|
|
||
|
exports('addMoney', function(playerIdx, moneyType, amount)
|
||
|
amount = tonumber(amount)
|
||
|
|
||
|
if amount <= 0 or amount > (1 << 30) then
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
if not validMoneyTypes[moneyType] then
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
local playerId = playerData:getPlayerId(playerIdx)
|
||
|
local success, money = addMoneyForId(playerId, moneyType, amount)
|
||
|
|
||
|
if success then
|
||
|
Player(playerIdx).state['money_' .. moneyType] = money
|
||
|
end
|
||
|
|
||
|
return true
|
||
|
end)
|
||
|
|
||
|
exports('removeMoney', function(playerIdx, moneyType, amount)
|
||
|
amount = tonumber(amount)
|
||
|
|
||
|
if amount <= 0 or amount > (1 << 30) then
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
if not validMoneyTypes[moneyType] then
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
local playerId = playerData:getPlayerId(playerIdx)
|
||
|
local success, money = addMoneyForId(playerId, moneyType, -amount)
|
||
|
|
||
|
if success then
|
||
|
Player(playerIdx).state['money_' .. moneyType] = money
|
||
|
end
|
||
|
|
||
|
return success
|
||
|
end)
|
||
|
|
||
|
exports('getMoney', function(playerIdx, moneyType)
|
||
|
local playerId = playerData:getPlayerId(playerIdx)
|
||
|
return getMoneyForId(playerId, moneyType)
|
||
|
end)
|
||
|
|
||
|
-- player display bits
|
||
|
AddEventHandler('money:updated', function(data)
|
||
|
if data.source then
|
||
|
TriggerClientEvent('money:displayUpdate', data.source, data.moneyType, data.money)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('money:requestDisplay')
|
||
|
|
||
|
AddEventHandler('money:requestDisplay', function()
|
||
|
local source = source
|
||
|
local playerId = playerData:getPlayerId(source)
|
||
|
|
||
|
for type, _ in pairs(validMoneyTypes) do
|
||
|
local amount = getMoneyForId(playerId, type)
|
||
|
TriggerClientEvent('money:displayUpdate', source, type, amount)
|
||
|
|
||
|
Player(source).state['money_' .. type] = amount
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterCommand('earn', function(source, args)
|
||
|
local type = args[1]
|
||
|
local amount = tonumber(args[2])
|
||
|
|
||
|
exports['money']:addMoney(source, type, amount)
|
||
|
end, true)
|
||
|
|
||
|
RegisterCommand('spend', function(source, args)
|
||
|
local type = args[1]
|
||
|
local amount = tonumber(args[2])
|
||
|
|
||
|
if not exports['money']:removeMoney(source, type, amount) then
|
||
|
print('you are broke??')
|
||
|
end
|
||
|
end, true)
|