mirror of
https://github.com/citizenfx/cfx-server-data.git
synced 2025-12-12 06:14:09 +01:00
gameplay: example money, money fountain, ped money drop and player ID systems
This commit is contained in:
119
resources/[gameplay]/[examples]/money/server.lua
Normal file
119
resources/[gameplay]/[examples]/money/server.lua
Normal file
@@ -0,0 +1,119 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user