From e0f9358b22a059d3140aeb4b525b9c5787771fae Mon Sep 17 00:00:00 2001 From: ElPumpo Date: Sat, 29 Dec 2018 13:47:01 +0100 Subject: [PATCH] Only add weapon component once, check if player has weapon --- client/main.lua | 6 +++--- server/classes/player.lua | 31 +++++++++++++++++++++++++++++-- shared/functions.lua | 4 ++-- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/client/main.lua b/client/main.lua index 47d8bc09..77ccec35 100644 --- a/client/main.lua +++ b/client/main.lua @@ -107,7 +107,7 @@ AddEventHandler('esx:restoreLoadout', function() for j=1, #ESX.PlayerData.loadout[i].components, 1 do local weaponComponent = ESX.PlayerData.loadout[i].components[j] - local componentHash = ESX.GetWeaponComponentHash(weaponName, weaponComponent) + local componentHash = ESX.GetWeaponComponent(weaponName, weaponComponent).hash GiveWeaponComponentToPed(playerPed, weaponHash, componentHash) end @@ -192,7 +192,7 @@ RegisterNetEvent('esx:addWeaponComponent') AddEventHandler('esx:addWeaponComponent', function(weaponName, weaponComponent) local playerPed = PlayerPedId() local weaponHash = GetHashKey(weaponName) - local componentHash = ESX.GetWeaponComponentHash(weaponName, weaponComponent) + local componentHash = ESX.GetWeaponComponent(weaponName, weaponComponent).hash GiveWeaponComponentToPed(playerPed, weaponHash, componentHash) end) @@ -218,7 +218,7 @@ RegisterNetEvent('esx:removeWeaponComponent') AddEventHandler('esx:removeWeaponComponent', function(weaponName, weaponComponent) local playerPed = PlayerPedId() local weaponHash = GetHashKey(weaponName) - local componentHash = ESX.GetWeaponComponentHash(weaponName, weaponComponent) + local componentHash = ESX.GetWeaponComponent(weaponName, weaponComponent).hash RemoveWeaponComponentFromPed(playerPed, weaponHash, componentHash) end) diff --git a/server/classes/player.lua b/server/classes/player.lua index 76d35e24..32e4ac74 100644 --- a/server/classes/player.lua +++ b/server/classes/player.lua @@ -397,6 +397,11 @@ function CreateExtendedPlayer(player, accounts, inventory, job, loadout, name, l self.addWeaponComponent = function(weaponName, weaponComponent) local loadoutNum, weapon = self.getWeapon(weaponName) + + if self.hasWeaponComponent(weaponName, weaponComponent) then + return + end + table.insert(self.loadout[loadoutNum].components, weaponComponent) TriggerClientEvent('esx:addWeaponComponent', self.source, weaponName, weaponComponent) @@ -414,12 +419,18 @@ function CreateExtendedPlayer(player, accounts, inventory, job, loadout, name, l end end - TriggerClientEvent('esx:removeWeapon', self.source, weaponName, ammo) - TriggerClientEvent('esx:removeInventoryItem', self.source, {label = weaponLabel}, 1) + if weaponLabel then + TriggerClientEvent('esx:removeWeapon', self.source, weaponName, ammo) + TriggerClientEvent('esx:removeInventoryItem', self.source, {label = weaponLabel}, 1) + end end self.removeWeaponComponent = function(weaponName, weaponComponent) local loadoutNum, weapon = self.getWeapon(weaponName) + + if not weapon then + return + end for i=1, #self.loadout[loadoutNum].components, 1 do if self.loadout[loadoutNum].components.name == weaponComponent then @@ -431,6 +442,22 @@ function CreateExtendedPlayer(player, accounts, inventory, job, loadout, name, l TriggerClientEvent('esx:removeWeaponComponent', self.source, weaponName, weaponComponent) end + self.hasWeaponComponent = function(weaponName, weaponComponent) + local loadoutNum, weapon = self.getWeapon(weaponName) + + if not weapon then + return false + end + + for i=1, #weapon.components, 1 do + if weapon.components[i] == weaponComponent then + return true + end + end + + return false + end + self.hasWeapon = function(weaponName) for i=1, #self.loadout, 1 do if self.loadout[i].name == weaponName then diff --git a/shared/functions.lua b/shared/functions.lua index 268d1d67..ba6ab61b 100644 --- a/shared/functions.lua +++ b/shared/functions.lua @@ -33,7 +33,7 @@ ESX.GetWeaponLabel = function(weaponName) end end -ESX.GetWeaponComponentHash = function(weaponName, weaponComponent) +ESX.GetWeaponComponent = function(weaponName, weaponComponent) weaponName = string.upper(weaponName) local weapons = ESX.GetWeaponList() @@ -41,7 +41,7 @@ ESX.GetWeaponComponentHash = function(weaponName, weaponComponent) if weapons[i].name == weaponName then for j=1, #weapons[i].components, 1 do if weapons[i].components[j].name == weaponComponent then - return weapons[i].components[j].hash + return weapons[i].components[j] end end end