From da676647f26ebd839dd5f1ec4a08875093a78b6f Mon Sep 17 00:00:00 2001 From: BerkieBb <82737367+BerkieBb@users.noreply.github.com> Date: Fri, 18 Feb 2022 19:09:57 +0100 Subject: [PATCH] style(server/player): indentation --- server/player.lua | 417 ++++++++++++++++++++-------------------------- 1 file changed, 184 insertions(+), 233 deletions(-) diff --git a/server/player.lua b/server/player.lua index e4f1820..d425048 100644 --- a/server/player.lua +++ b/server/player.lua @@ -6,10 +6,9 @@ QBCore.Player = {} -- Will cause major issues! function QBCore.Player.Login(source, citizenid, newData) - local src = source - if src then + if source and source ~= '' then if citizenid then - local license = QBCore.Functions.GetIdentifier(src, 'license') + local license = QBCore.Functions.GetIdentifier(source, 'license') local PlayerData = MySQL.Sync.prepare('SELECT * FROM players where citizenid = ?', { citizenid }) if PlayerData and license == PlayerData.license then PlayerData.money = json.decode(PlayerData.money) @@ -22,13 +21,13 @@ function QBCore.Player.Login(source, citizenid, newData) else PlayerData.gang = {} end - QBCore.Player.CheckPlayerData(src, PlayerData) + QBCore.Player.CheckPlayerData(source, PlayerData) else - DropPlayer(src, 'You Have Been Kicked For Exploitation') - TriggerEvent('qb-log:server:CreateLog', 'anticheat', 'Anti-Cheat', 'white', GetPlayerName(src) .. ' Has Been Dropped For Character Joining Exploit', false) + DropPlayer(source, 'You Have Been Kicked For Exploitation') + TriggerEvent('qb-log:server:CreateLog', 'anticheat', 'Anti-Cheat', 'white', GetPlayerName(source) .. ' Has Been Dropped For Character Joining Exploit', false) end else - QBCore.Player.CheckPlayerData(src, newData) + QBCore.Player.CheckPlayerData(source, newData) end return true else @@ -38,12 +37,11 @@ function QBCore.Player.Login(source, citizenid, newData) end function QBCore.Player.CheckPlayerData(source, PlayerData) - local src = source PlayerData = PlayerData or {} - PlayerData.source = src + PlayerData.source = source PlayerData.citizenid = PlayerData.citizenid or QBCore.Player.CreateCitizenId() - PlayerData.license = PlayerData.license or QBCore.Functions.GetIdentifier(src, 'license') - PlayerData.name = GetPlayerName(src) + PlayerData.license = PlayerData.license or QBCore.Functions.GetIdentifier(source, 'license') + PlayerData.name = GetPlayerName(source) PlayerData.cid = PlayerData.cid or 1 PlayerData.money = PlayerData.money or {} for moneytype, startamount in pairs(QBCore.Config.Money.MoneyTypes) do @@ -57,8 +55,8 @@ function QBCore.Player.CheckPlayerData(source, PlayerData) PlayerData.charinfo.gender = PlayerData.charinfo.gender or 0 PlayerData.charinfo.backstory = PlayerData.charinfo.backstory or 'placeholder backstory' PlayerData.charinfo.nationality = PlayerData.charinfo.nationality or 'USA' - PlayerData.charinfo.phone = PlayerData.charinfo.phone ~= nil and PlayerData.charinfo.phone or '1' .. math.random(111111111, 999999999) - PlayerData.charinfo.account = PlayerData.charinfo.account ~= nil and PlayerData.charinfo.account or 'US0' .. math.random(1, 9) .. 'QBCore' .. math.random(1111, 9999) .. math.random(1111, 9999) .. math.random(11, 99) + PlayerData.charinfo.phone = PlayerData.charinfo.phone or ('1' .. math.random(111111111, 999999999)) + PlayerData.charinfo.account = PlayerData.charinfo.account or ('US0' .. math.random(1, 9) .. 'QBCore' .. math.random(1111, 9999) .. math.random(1111, 9999) .. math.random(11, 99)) -- Metadata PlayerData.metadata = PlayerData.metadata or {} PlayerData.metadata['hunger'] = PlayerData.metadata['hunger'] or 100 @@ -80,21 +78,11 @@ function QBCore.Player.CheckPlayerData(source, PlayerData) PlayerData.metadata['craftingrep'] = PlayerData.metadata['craftingrep'] or 0 PlayerData.metadata['attachmentcraftingrep'] = PlayerData.metadata['attachmentcraftingrep'] or 0 PlayerData.metadata['currentapartment'] = PlayerData.metadata['currentapartment'] or nil - if PlayerData.metadata['jobrep'] ~= nil then - PlayerData.metadata['jobrep'] = { - ['tow'] = PlayerData.metadata['jobrep']['tow'] or 0, - ['trucker'] = PlayerData.metadata['jobrep']['trucker'] or 0, - ['taxi'] = PlayerData.metadata['jobrep']['taxi'] or 0, - ['hotdog'] = PlayerData.metadata['jobrep']['hotdog'] or 0, - } - else - PlayerData.metadata['jobrep'] = { - ['tow'] = 0, - ['trucker'] = 0, - ['taxi'] = 0, - ['hotdog'] = 0, - } - end + PlayerData.metadata['jobrep'] = PlayerData.metadata['jobrep'] or {} + PlayerData.metadata['jobrep']['tow'] = PlayerData.metadata['jobrep']['tow'] or 0 + PlayerData.metadata['jobrep']['trucker'] = PlayerData.metadata['jobrep']['trucker'] or 0 + PlayerData.metadata['jobrep']['taxi'] = PlayerData.metadata['jobrep']['taxi'] or 0 + PlayerData.metadata['jobrep']['hotdog'] = PlayerData.metadata['jobrep']['hotdog'] or 0 PlayerData.metadata['callsign'] = PlayerData.metadata['callsign'] or 'NO CALLSIGN' PlayerData.metadata['fingerprint'] = PlayerData.metadata['fingerprint'] or QBCore.Player.CreateFingerId() PlayerData.metadata['walletid'] = PlayerData.metadata['walletid'] or QBCore.Player.CreateWalletId() @@ -140,7 +128,6 @@ function QBCore.Player.CheckPlayerData(source, PlayerData) PlayerData.gang.grade.level = PlayerData.gang.grade.level or 0 -- Other PlayerData.position = PlayerData.position or QBConfig.DefaultSpawn - PlayerData.LoggedIn = true PlayerData = QBCore.Player.LoadInventory(PlayerData) QBCore.Player.CreatePlayer(PlayerData) end @@ -148,11 +135,10 @@ end -- On player logout function QBCore.Player.Logout(source) - local src = source - TriggerClientEvent('QBCore:Client:OnPlayerUnload', src) - TriggerClientEvent('QBCore:Player:UpdatePlayerData', src) + TriggerClientEvent('QBCore:Client:OnPlayerUnload', source) + TriggerClientEvent('QBCore:Player:UpdatePlayerData', source) Wait(200) - QBCore.Players[src] = nil + QBCore.Players[source] = nil end -- Create a new character @@ -164,177 +150,152 @@ function QBCore.Player.CreatePlayer(PlayerData) self.Functions = {} self.PlayerData = PlayerData - self.Functions.UpdatePlayerData = function(dontUpdateChat) + function self.Functions.UpdatePlayerData(dontUpdateChat) TriggerClientEvent('QBCore:Player:SetPlayerData', self.PlayerData.source, self.PlayerData) if dontUpdateChat == nil then QBCore.Commands.Refresh(self.PlayerData.source) end end - self.Functions.SetJob = function(job, grade) - local job = job:lower() - local grade = tostring(grade) or '0' - - if QBCore.Shared.Jobs[job] then - self.PlayerData.job.name = job - self.PlayerData.job.label = QBCore.Shared.Jobs[job].label - self.PlayerData.job.onduty = QBCore.Shared.Jobs[job].defaultDuty - - if QBCore.Shared.Jobs[job].grades[grade] then - local jobgrade = QBCore.Shared.Jobs[job].grades[grade] - self.PlayerData.job.grade = {} - self.PlayerData.job.grade.name = jobgrade.name - self.PlayerData.job.grade.level = tonumber(grade) - self.PlayerData.job.payment = jobgrade.payment or 30 - self.PlayerData.job.isboss = jobgrade.isboss or false - else - self.PlayerData.job.grade = {} - self.PlayerData.job.grade.name = 'No Grades' - self.PlayerData.job.grade.level = 0 - self.PlayerData.job.payment = 30 - self.PlayerData.job.isboss = false - end - - self.Functions.UpdatePlayerData() - TriggerClientEvent('QBCore:Client:OnJobUpdate', self.PlayerData.source, self.PlayerData.job) - return true + function self.Functions.SetJob(job, grade) + job = job:lower() + grade = tostring(grade) or '0' + if not QBCore.Shared.Jobs[job] then return false end + self.PlayerData.job.name = job + self.PlayerData.job.label = QBCore.Shared.Jobs[job].label + self.PlayerData.job.onduty = QBCore.Shared.Jobs[job].defaultDuty + if QBCore.Shared.Jobs[job].grades[grade] then + local jobgrade = QBCore.Shared.Jobs[job].grades[grade] + self.PlayerData.job.grade = {} + self.PlayerData.job.grade.name = jobgrade.name + self.PlayerData.job.grade.level = tonumber(grade) + self.PlayerData.job.payment = jobgrade.payment or 30 + self.PlayerData.job.isboss = jobgrade.isboss or false + else + self.PlayerData.job.grade = {} + self.PlayerData.job.grade.name = 'No Grades' + self.PlayerData.job.grade.level = 0 + self.PlayerData.job.payment = 30 + self.PlayerData.job.isboss = false end - - return false + self.Functions.UpdatePlayerData() + TriggerClientEvent('QBCore:Client:OnJobUpdate', self.PlayerData.source, self.PlayerData.job) + return true end - self.Functions.SetGang = function(gang, grade) - local gang = gang:lower() - local grade = tostring(grade) or '0' - - if QBCore.Shared.Gangs[gang] then - self.PlayerData.gang.name = gang - self.PlayerData.gang.label = QBCore.Shared.Gangs[gang].label - if QBCore.Shared.Gangs[gang].grades[grade] then - local ganggrade = QBCore.Shared.Gangs[gang].grades[grade] - self.PlayerData.gang.grade = {} - self.PlayerData.gang.grade.name = ganggrade.name - self.PlayerData.gang.grade.level = tonumber(grade) - self.PlayerData.gang.isboss = ganggrade.isboss or false - else - self.PlayerData.gang.grade = {} - self.PlayerData.gang.grade.name = 'No Grades' - self.PlayerData.gang.grade.level = 0 - self.PlayerData.gang.isboss = false - end - - self.Functions.UpdatePlayerData() - TriggerClientEvent('QBCore:Client:OnGangUpdate', self.PlayerData.source, self.PlayerData.gang) - return true + function self.Functions.SetGang(gang, grade) + gang = gang:lower() + grade = tostring(grade) or '0' + if not QBCore.Shared.Gangs[gang] then return false end + self.PlayerData.gang.name = gang + self.PlayerData.gang.label = QBCore.Shared.Gangs[gang].label + if QBCore.Shared.Gangs[gang].grades[grade] then + local ganggrade = QBCore.Shared.Gangs[gang].grades[grade] + self.PlayerData.gang.grade = {} + self.PlayerData.gang.grade.name = ganggrade.name + self.PlayerData.gang.grade.level = tonumber(grade) + self.PlayerData.gang.isboss = ganggrade.isboss or false + else + self.PlayerData.gang.grade = {} + self.PlayerData.gang.grade.name = 'No Grades' + self.PlayerData.gang.grade.level = 0 + self.PlayerData.gang.isboss = false end - return false + self.Functions.UpdatePlayerData() + TriggerClientEvent('QBCore:Client:OnGangUpdate', self.PlayerData.source, self.PlayerData.gang) + return true end - self.Functions.SetJobDuty = function(onDuty) + function self.Functions.SetJobDuty(onDuty) self.PlayerData.job.onduty = onDuty self.Functions.UpdatePlayerData() end - self.Functions.SetMetaData = function(meta, val) - local meta = meta:lower() - if val ~= nil then - self.PlayerData.metadata[meta] = val - self.Functions.UpdatePlayerData() - end + function self.Functions.SetMetaData(meta, val) + meta = meta:lower() + if not meta then return end + self.PlayerData.metadata[meta] = val + self.Functions.UpdatePlayerData() end - self.Functions.AddJobReputation = function(amount) - local amount = tonumber(amount) + function self.Functions.AddJobReputation(amount) + amount = tonumber(amount) self.PlayerData.metadata['jobrep'][self.PlayerData.job.name] = self.PlayerData.metadata['jobrep'][self.PlayerData.job.name] + amount self.Functions.UpdatePlayerData() end - self.Functions.AddMoney = function(moneytype, amount, reason) + function self.Functions.AddMoney(moneytype, amount, reason) reason = reason or 'unknown' - local moneytype = moneytype:lower() - local amount = tonumber(amount) - if amount < 0 then - return + 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 + self.Functions.UpdatePlayerData() + if amount > 100000 then + 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], true) + else + 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]) end - if self.PlayerData.money[moneytype] then - self.PlayerData.money[moneytype] = self.PlayerData.money[moneytype] + amount - self.Functions.UpdatePlayerData() - if amount > 100000 then - 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], true) - else - 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]) - end - TriggerClientEvent('hud:client:OnMoneyChange', self.PlayerData.source, moneytype, amount, false) - return true - end - return false + TriggerClientEvent('hud:client:OnMoneyChange', self.PlayerData.source, moneytype, amount, false) + return true end - self.Functions.RemoveMoney = function(moneytype, amount, reason) + function self.Functions.RemoveMoney(moneytype, amount, reason) reason = reason or 'unknown' - local moneytype = moneytype:lower() - local amount = tonumber(amount) - if amount < 0 then - return - end - if self.PlayerData.money[moneytype] then - for _, mtype in pairs(QBCore.Config.Money.DontAllowMinus) do - if mtype == moneytype then - if self.PlayerData.money[moneytype] - amount < 0 then - return false - end + 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 (self.PlayerData.money[moneytype] - amount) < 0 then + return false end end - self.PlayerData.money[moneytype] = self.PlayerData.money[moneytype] - amount - self.Functions.UpdatePlayerData() - if amount > 100000 then - TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'RemoveMoney', 'red', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') removed, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype], true) - else - TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'RemoveMoney', 'red', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') removed, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype]) - end - TriggerClientEvent('hud:client:OnMoneyChange', self.PlayerData.source, moneytype, amount, true) - if moneytype == 'bank' then - TriggerClientEvent('qb-phone:client:RemoveBankMoney', self.PlayerData.source, amount) - end - return true end - return false + self.PlayerData.money[moneytype] = self.PlayerData.money[moneytype] - amount + self.Functions.UpdatePlayerData() + if amount > 100000 then + TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'RemoveMoney', 'red', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') removed, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype], true) + else + TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'RemoveMoney', 'red', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') removed, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype]) + end + TriggerClientEvent('hud:client:OnMoneyChange', self.PlayerData.source, moneytype, amount, true) + if moneytype == 'bank' then + TriggerClientEvent('qb-phone:client:RemoveBankMoney', self.PlayerData.source, amount) + end + return true end - self.Functions.SetMoney = function(moneytype, amount, reason) + function self.Functions.SetMoney(moneytype, amount, reason) reason = reason or 'unknown' - local moneytype = moneytype:lower() - local amount = tonumber(amount) - if amount < 0 then - return - end - if self.PlayerData.money[moneytype] then - self.PlayerData.money[moneytype] = amount - 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]) - return true - end - return false + moneytype = moneytype:lower() + amount = tonumber(amount) + if amount < 0 then return false end + if not self.PlayerData.money[moneytype] then return false end + self.PlayerData.money[moneytype] = amount + 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]) + return true end - self.Functions.GetMoney = function(moneytype) - if moneytype then - local moneytype = moneytype:lower() - return self.PlayerData.money[moneytype] - end - return false + function self.Functions.GetMoney(moneytype) + if not moneytype then return false end + moneytype = moneytype:lower() + return self.PlayerData.money[moneytype] end - self.Functions.AddItem = function(item, amount, slot, info) + function self.Functions.AddItem(item, amount, slot, info) local totalWeight = QBCore.Player.GetTotalWeight(self.PlayerData.items) local itemInfo = QBCore.Shared.Items[item:lower()] - if itemInfo == nil then + if not itemInfo then TriggerClientEvent('QBCore:Notify', self.PlayerData.source, Lang:t('error.item_not_exist'), 'error') return end - local amount = tonumber(amount) - local slot = tonumber(slot) or QBCore.Player.GetFirstSlotByItem(self.PlayerData.items, item) - if itemInfo['type'] == 'weapon' and info == nil then + amount = tonumber(amount) + slot = tonumber(slot) or QBCore.Player.GetFirstSlotByItem(self.PlayerData.items, item) + if itemInfo['type'] == 'weapon' and not info then info = { serie = tostring(QBCore.Shared.RandomInt(2) .. QBCore.Shared.RandomStr(3) .. QBCore.Shared.RandomInt(1) .. QBCore.Shared.RandomStr(2) .. QBCore.Shared.RandomInt(3) .. QBCore.Shared.RandomStr(4)), } @@ -345,12 +306,12 @@ function QBCore.Player.CreatePlayer(PlayerData) self.Functions.UpdatePlayerData() TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'AddItem', 'green', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** got item: [slot:' .. slot .. '], itemname: ' .. self.PlayerData.items[slot].name .. ', added amount: ' .. amount .. ', new total amount: ' .. self.PlayerData.items[slot].amount) return true - elseif (not itemInfo['unique'] and slot or slot and self.PlayerData.items[slot] == nil) then + elseif not itemInfo['unique'] and slot or slot and self.PlayerData.items[slot] == nil then self.PlayerData.items[slot] = { name = itemInfo['name'], amount = amount, info = info or '', label = itemInfo['label'], description = itemInfo['description'] or '', weight = itemInfo['weight'], type = itemInfo['type'], unique = itemInfo['unique'], useable = itemInfo['useable'], image = itemInfo['image'], shouldClose = itemInfo['shouldClose'], slot = slot, combinable = itemInfo['combinable'] } self.Functions.UpdatePlayerData() TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'AddItem', 'green', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** got item: [slot:' .. slot .. '], itemname: ' .. self.PlayerData.items[slot].name .. ', added amount: ' .. amount .. ', new total amount: ' .. self.PlayerData.items[slot].amount) return true - elseif (itemInfo['unique']) or (not slot or slot == nil) or (itemInfo['type'] == 'weapon') then + elseif itemInfo['unique'] or (not slot or slot == nil) or itemInfo['type'] == 'weapon' then for i = 1, QBConfig.Player.MaxInvSlots, 1 do if self.PlayerData.items[i] == nil then self.PlayerData.items[i] = { name = itemInfo['name'], amount = amount, info = info or '', label = itemInfo['label'], description = itemInfo['description'] or '', weight = itemInfo['weight'], type = itemInfo['type'], unique = itemInfo['unique'], useable = itemInfo['useable'], image = itemInfo['image'], shouldClose = itemInfo['shouldClose'], slot = i, combinable = itemInfo['combinable'] } @@ -366,9 +327,9 @@ function QBCore.Player.CreatePlayer(PlayerData) return false end - self.Functions.RemoveItem = function(item, amount, slot) - local amount = tonumber(amount) - local slot = tonumber(slot) + function self.Functions.RemoveItem(item, amount, slot) + amount = tonumber(amount) + slot = tonumber(slot) if slot then if self.PlayerData.items[slot].amount > amount then self.PlayerData.items[slot].amount = self.PlayerData.items[slot].amount - amount @@ -403,29 +364,26 @@ function QBCore.Player.CreatePlayer(PlayerData) return false end - self.Functions.SetInventory = function(items, dontUpdateChat) + function self.Functions.SetInventory(items, dontUpdateChat) self.PlayerData.items = items self.Functions.UpdatePlayerData(dontUpdateChat) TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'SetInventory', 'blue', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** items set: ' .. json.encode(items)) end - self.Functions.ClearInventory = function() + function self.Functions.ClearInventory() self.PlayerData.items = {} self.Functions.UpdatePlayerData() TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'ClearInventory', 'red', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** inventory cleared') end - self.Functions.GetItemByName = function(item) - local item = tostring(item):lower() + function self.Functions.GetItemByName(item) + item = tostring(item):lower() local slot = QBCore.Player.GetFirstSlotByItem(self.PlayerData.items, item) - if slot then - return self.PlayerData.items[slot] - end - return nil + return self.PlayerData.items[slot] end - self.Functions.GetItemsByName = function(item) - local item = tostring(item):lower() + function self.Functions.GetItemsByName(item) + item = tostring(item):lower() local items = {} local slots = QBCore.Player.GetSlotsByItem(self.PlayerData.items, item) for _, slot in pairs(slots) do @@ -436,12 +394,12 @@ function QBCore.Player.CreatePlayer(PlayerData) return items end - self.Functions.SetCreditCard = function(cardNumber) + function self.Functions.SetCreditCard(cardNumber) self.PlayerData.charinfo.card = cardNumber self.Functions.UpdatePlayerData() end - self.Functions.GetCardSlot = function(cardNumber, cardType) + function self.Functions.GetCardSlot(cardNumber, cardType) local item = tostring(cardType):lower() local slots = QBCore.Player.GetSlotsByItem(self.PlayerData.items, item) for _, slot in pairs(slots) do @@ -454,18 +412,19 @@ function QBCore.Player.CreatePlayer(PlayerData) return nil end - self.Functions.GetItemBySlot = function(slot) - local slot = tonumber(slot) - if self.PlayerData.items[slot] then - return self.PlayerData.items[slot] - end - return nil + function self.Functions.GetItemBySlot(slot) + slot = tonumber(slot) + return self.PlayerData.items[slot] end - self.Functions.Save = function() + function self.Functions.Save() QBCore.Player.Save(self.PlayerData.source) end + function self.Functions.Logout() + QBCore.Player.Logout(self.PlayerData.source) + end + QBCore.Players[self.PlayerData.source] = self QBCore.Player.Save(self.PlayerData.source) @@ -477,10 +436,9 @@ end -- Save player info to database (make sure citizenid is the primary key in your database) function QBCore.Player.Save(source) - local src = source - local ped = GetPlayerPed(src) + local ped = GetPlayerPed(source) local pcoords = GetEntityCoords(ped) - local PlayerData = QBCore.Players[src].PlayerData + local PlayerData = QBCore.Players[source].PlayerData if PlayerData then MySQL.Async.insert('INSERT INTO players (citizenid, cid, license, name, money, charinfo, job, gang, position, metadata) VALUES (:citizenid, :cid, :license, :name, :money, :charinfo, :job, :gang, :position, :metadata) ON DUPLICATE KEY UPDATE cid = :cid, name = :name, money = :money, charinfo = :charinfo, job = :job, gang = :gang, position = :position, metadata = :metadata', { citizenid = PlayerData.citizenid, @@ -494,7 +452,7 @@ function QBCore.Player.Save(source) position = json.encode(pcoords), metadata = json.encode(PlayerData.metadata) }) - QBCore.Player.SaveInventory(src) + QBCore.Player.SaveInventory(source) QBCore.ShowSuccess(GetCurrentResourceName(), PlayerData.name .. ' PLAYER SAVED!') else QBCore.ShowError(GetCurrentResourceName(), 'ERROR QBCORE.PLAYER.SAVE - PLAYERDATA IS EMPTY!') @@ -520,37 +478,35 @@ local playertables = { -- Add tables as needed } function QBCore.Player.DeleteCharacter(source, citizenid) - local src = source - local license = QBCore.Functions.GetIdentifier(src, 'license') + local license = QBCore.Functions.GetIdentifier(source, 'license') local result = MySQL.Sync.fetchScalar('SELECT license FROM players where citizenid = ?', { citizenid }) if license == result then local query = "DELETE FROM %s WHERE citizenid = ?" local tableCount = #playertables local queries = table.create(tableCount, 0) - for i=1, tableCount do + for i = 1, tableCount do local v = playertables[i] queries[i] = {query = query:format(v.table), values = { citizenid }} end MySQL.Async.transaction(queries, function(result) if result then - TriggerEvent('qb-log:server:CreateLog', 'joinleave', 'Character Deleted', 'red', '**' .. GetPlayerName(src) .. '** ' .. license .. ' deleted **' .. citizenid .. '**..') + TriggerEvent('qb-log:server:CreateLog', 'joinleave', 'Character Deleted', 'red', '**' .. GetPlayerName(source) .. '** ' .. license .. ' deleted **' .. citizenid .. '**..') end end) else - DropPlayer(src, 'You Have Been Kicked For Exploitation') - TriggerEvent('qb-log:server:CreateLog', 'anticheat', 'Anti-Cheat', 'white', GetPlayerName(src) .. ' Has Been Dropped For Character Deletion Exploit', false) + DropPlayer(source, 'You Have Been Kicked For Exploitation') + TriggerEvent('qb-log:server:CreateLog', 'anticheat', 'Anti-Cheat', 'white', GetPlayerName(source) .. ' Has Been Dropped For Character Deletion Exploit', false) end end -- Inventory -QBCore.Player.LoadInventory = function(PlayerData) +function QBCore.Player.LoadInventory(PlayerData) PlayerData.items = {} local inventory = MySQL.Sync.prepare('SELECT inventory FROM players WHERE citizenid = ?', { PlayerData.citizenid }) local missingItems = {} - if inventory then inventory = json.decode(inventory) if next(inventory) then @@ -588,28 +544,26 @@ QBCore.Player.LoadInventory = function(PlayerData) return PlayerData end -QBCore.Player.SaveInventory = function(source) - local src = source - if QBCore.Players[src] then - local PlayerData = QBCore.Players[src].PlayerData - local items = PlayerData.items - local ItemsJson = {} - if items and next(items) then - for slot, item in pairs(items) do - if items[slot] then - ItemsJson[#ItemsJson+1] = { - name = item.name, - amount = item.amount, - info = item.info, - type = item.type, - slot = slot, - } - end +function QBCore.Player.SaveInventory(source) + if not QBCore.Players[source] then return end + local PlayerData = QBCore.Players[source].PlayerData + local items = PlayerData.items + local ItemsJson = {} + if items and next(items) then + for slot, item in pairs(items) do + if items[slot] then + ItemsJson[#ItemsJson+1] = { + name = item.name, + amount = item.amount, + info = item.info, + type = item.type, + slot = slot, + } end - MySQL.Async.prepare('UPDATE players SET inventory = ? WHERE citizenid = ?', { json.encode(ItemsJson), PlayerData.citizenid }) - else - MySQL.Async.prepare('UPDATE players SET inventory = ? WHERE citizenid = ?', { '[]', PlayerData.citizenid }) end + MySQL.Async.prepare('UPDATE players SET inventory = ? WHERE citizenid = ?', { json.encode(ItemsJson), PlayerData.citizenid }) + else + MySQL.Async.prepare('UPDATE players SET inventory = ? WHERE citizenid = ?', { '[]', PlayerData.citizenid }) end end @@ -617,32 +571,29 @@ end function QBCore.Player.GetTotalWeight(items) local weight = 0 - if items then - for slot, item in pairs(items) do - weight = weight + (item.weight * item.amount) - end + if not items then return 0 end + for _, item in pairs(items) do + weight += item.weight * item.amount end return tonumber(weight) end function QBCore.Player.GetSlotsByItem(items, itemName) local slotsFound = {} - if items then - for slot, item in pairs(items) do - if item.name:lower() == itemName:lower() then - slotsFound[#slotsFound+1] = slot - end + if not items then return slotsFound end + for slot, item in pairs(items) do + if item.name:lower() == itemName:lower() then + slotsFound[#slotsFound+1] = slot end end return slotsFound end function QBCore.Player.GetFirstSlotByItem(items, itemName) - if items then - for slot, item in pairs(items) do - if item.name:lower() == itemName:lower() then - return tonumber(slot) - end + if not items then return nil end + for slot, item in pairs(items) do + if item.name:lower() == itemName:lower() then + return tonumber(slot) end end return nil @@ -703,4 +654,4 @@ function QBCore.Player.CreateSerialNumber() return SerialNumber end -PaycheckLoop() -- This just starts the paycheck system +PaycheckInterval() -- This starts the paycheck system