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) |