119 lines
		
	
	
		
			No EOL
		
	
	
		
			3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			No EOL
		
	
	
		
			3 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) | 
