Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added new functionality: money as an item. #1133

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 83 additions & 12 deletions server/player.lua
Original file line number Diff line number Diff line change
Expand Up @@ -262,12 +262,24 @@ function QBCore.Player.CreatePlayer(PlayerData, Offline)
end

function self.Functions.AddMoney(moneytype, amount, reason)
source = self.PlayerData.source
reason = reason or 'unknown'
moneytype = moneytype:lower()
amount = tonumber(amount)
if amount < 0 then return end
if not self.PlayerData.money[moneytype] then return false end
self.PlayerData.money[moneytype] = self.PlayerData.money[moneytype] + amount
if moneytype == 'cash' then
local item = exports['qb-inventory']:GetItemByName(source,'cash')
if exports['qb-inventory']:HasItem(source,'cash') then
local slots = exports['qb-inventory']:GetSlotsByItem(self.PlayerData.items,'cash')
exports['qb-inventory']:AddItem(source,'cash',amount,slots[1])
else
exports['qb-inventory']:AddItem(source,'cash',amount)
end
self.PlayerData.money[moneytype] = self.PlayerData.money[moneytype] + amount
else
self.PlayerData.money[moneytype] = self.PlayerData.money[moneytype] + amount
end

if not self.Offline then
self.Functions.UpdatePlayerData()
Expand All @@ -277,27 +289,48 @@ function QBCore.Player.CreatePlayer(PlayerData, Offline)
TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'AddMoney', 'lightgreen', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') added, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype] .. ' reason: ' .. reason)
end
TriggerClientEvent('hud:client:OnMoneyChange', self.PlayerData.source, moneytype, amount, false)
TriggerClientEvent('QBCore:Client:OnMoneyChange', self.PlayerData.source, moneytype, amount, 'add', reason)
TriggerEvent('QBCore:Server:OnMoneyChange', self.PlayerData.source, moneytype, amount, 'add', reason)
TriggerClientEvent('QBCore:Client:OnMoneyChange', self.PlayerData.source, moneytype, amount, "add", reason)
TriggerEvent('QBCore:Server:OnMoneyChange', self.PlayerData.source, moneytype, amount, "add", reason)
end

return true
end

function self.Functions.RemoveMoney(moneytype, amount, reason)
function self.Functions.RemoveMoney(moneytype, amount, reason)
source = self.PlayerData.source
reason = reason or 'unknown'
moneytype = moneytype:lower()
amount = tonumber(amount)
if amount < 0 then return end
if not self.PlayerData.money[moneytype] then return false end
for _, mtype in pairs(QBCore.Config.Money.DontAllowMinus) do
if mtype == moneytype then
if mtype == moneytype and moneytype == not 'cash' then
if (self.PlayerData.money[moneytype] - amount) < 0 then
return false
end
end
end
self.PlayerData.money[moneytype] = self.PlayerData.money[moneytype] - amount
if moneytype == 'cash' then
local item = exports['qb-inventory']:GetItemByName(source,'cash')
if exports['qb-inventory']:HasItem(source,'cash') then
local totalmoney = self.Functions.GetMoney('cash')
if totalmoney >= amount then
local slots = exports['qb-inventory']:GetSlotsByItem(self.PlayerData.items,'cash')
for k,v in pairs(slots) do
local toRemove = math.min(exports['qb-inventory']:GetItemBySlot(source,slots[k]).amount,amount)
exports['qb-inventory']:RemoveItem(source,'cash',toRemove,slots[k])
amount = amount - toRemove
end
self.PlayerData.money[moneytype] = self.PlayerData.money[moneytype] - amount
else
return false
end
else
return false
end
else
self.PlayerData.money[moneytype] = self.PlayerData.money[moneytype] - amount
end

if not self.Offline then
self.Functions.UpdatePlayerData()
Expand All @@ -310,39 +343,77 @@ function QBCore.Player.CreatePlayer(PlayerData, Offline)
if moneytype == 'bank' then
TriggerClientEvent('qb-phone:client:RemoveBankMoney', self.PlayerData.source, amount)
end
TriggerClientEvent('QBCore:Client:OnMoneyChange', self.PlayerData.source, moneytype, amount, 'remove', reason)
TriggerEvent('QBCore:Server:OnMoneyChange', self.PlayerData.source, moneytype, amount, 'remove', reason)
TriggerClientEvent('QBCore:Client:OnMoneyChange', self.PlayerData.source, moneytype, amount, "remove", reason)
TriggerEvent('QBCore:Server:OnMoneyChange', self.PlayerData.source, moneytype, amount, "remove", reason)
end

return true
end

function self.Functions.SetMoney(moneytype, amount, reason)
source = self.PlayerData.source
reason = reason or 'unknown'
moneytype = moneytype:lower()
amount = tonumber(amount)
if amount < 0 then return false end
if not self.PlayerData.money[moneytype] then return false end
local difference = amount - self.PlayerData.money[moneytype]
self.PlayerData.money[moneytype] = amount
local difference = 0
if moneytype == 'cash' then
if exports['qb-inventory']:HasItem(source,'cash') then
local item = exports['qb-inventory']:GetItemByName(source,'cash')
local slot = exports['qb-inventory']:GetItemBySlot(self.PlayerData.items,item)
exports['qb-inventory']:RemoveItem(source,'cash',item.amount,slot)
exports['qb-inventory']:AddItem(source,'cash',amount,slot)
difference = amount - item.amount
else
exports['qb-inventory']:AddItem(source,'cash',amount)
difference = amount
end
else
difference = amount - self.PlayerData.money[moneytype]
self.PlayerData.money[moneytype] = amount
end



if not self.Offline then
self.Functions.UpdatePlayerData()
TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'SetMoney', 'green', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') set, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype] .. ' reason: ' .. reason)
TriggerClientEvent('hud:client:OnMoneyChange', self.PlayerData.source, moneytype, math.abs(difference), difference < 0)
TriggerClientEvent('QBCore:Client:OnMoneyChange', self.PlayerData.source, moneytype, amount, 'set', reason)
TriggerEvent('QBCore:Server:OnMoneyChange', self.PlayerData.source, moneytype, amount, 'set', reason)
TriggerClientEvent('QBCore:Client:OnMoneyChange', self.PlayerData.source, moneytype, amount, "set", reason)
TriggerEvent('QBCore:Server:OnMoneyChange', self.PlayerData.source, moneytype, amount, "set", reason)
end

return true
end

function self.Functions.GetMoney(moneytype)
source = self.PlayerData.source
if not moneytype then return false end
moneytype = moneytype:lower()
return self.PlayerData.money[moneytype]
if moneytype == 'cash' then
if exports['qb-inventory']:HasItem(source,'cash') then
local slots = exports['qb-inventory']:GetSlotsByItem(self.PlayerData.items,'cash')
local totalmoney = 0
for k,v in pairs(slots) do
totalmoney = totalmoney + exports['qb-inventory']:GetItemBySlot(source,slots[k]).amount
end
local item = exports['qb-inventory']:GetItemByName(source,'cash')
return totalmoney
else
return 0
end
else
return self.PlayerData.money[moneytype]
end
end

AddEventHandler('QBCore:Server:PlayerLoaded', function(Player)
Player.Functions.SetMoney('cash', Player.PlayerData.money.cash, 'Load Cash')
end)


function self.Functions.Save()
if self.Offline then
QBCore.Player.SaveOffline(self.PlayerData)
Expand Down
Loading