From eeb2bb597cab8d9735086a354548dd0b3e63c23a Mon Sep 17 00:00:00 2001 From: Outsider <87246847+outsider31000@users.noreply.github.com> Date: Sun, 15 Oct 2023 02:05:37 +0100 Subject: [PATCH] fix: drop items added extra security for weapons and items too --- client/services/PickupsService.lua | 7 ++- server/controllers/inventoryController.lua | 3 +- server/services/inventoryService.lua | 64 +++++++++++++++------- 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/client/services/PickupsService.lua b/client/services/PickupsService.lua index 832b07e7..34ac9cb5 100644 --- a/client/services/PickupsService.lua +++ b/client/services/PickupsService.lua @@ -53,8 +53,11 @@ PickupsService.createPickup = function(name, amount, metadata, weaponId, id) position = position, id = id, } - - TriggerServerEvent("vorpinventory:sharePickupServer", data) + if weaponId == 1 then + TriggerServerEvent("vorpinventory:sharePickupServerItem", data) + else + TriggerServerEvent("vorpinventory:sharePickupServerWeapon", data) + end PlaySoundFrontend("show_info", "Study_Sounds", true, 0) end diff --git a/server/controllers/inventoryController.lua b/server/controllers/inventoryController.lua index 1334d8f6..4ec2c9cf 100644 --- a/server/controllers/inventoryController.lua +++ b/server/controllers/inventoryController.lua @@ -11,7 +11,8 @@ RegisterServerEvent("vorpinventory:serverDropPartMoney", InventoryService.DropPa RegisterServerEvent("vorpinventory:serverDropGold", InventoryService.DropGold) RegisterServerEvent("vorpinventory:serverDropAllGold", InventoryService.DropAllGold) RegisterServerEvent("vorpinventory:serverDropWeapon", InventoryService.DropWeapon) -RegisterServerEvent("vorpinventory:sharePickupServer", InventoryService.sharePickupServer) +RegisterServerEvent("vorpinventory:sharePickupServerItem", InventoryService.sharePickupServerItem) +RegisterServerEvent("vorpinventory:sharePickupServerWeapon", InventoryService.sharePickupServerWeapon) RegisterServerEvent("vorpinventory:shareMoneyPickupServer", InventoryService.shareMoneyPickupServer) RegisterServerEvent("vorpinventory:shareGoldPickupServer", InventoryService.shareGoldPickupServer) RegisterServerEvent("vorpinventory:onPickup", InventoryService.onPickup) diff --git a/server/services/inventoryService.lua b/server/services/inventoryService.lua index 17296ea2..7357a7f1 100644 --- a/server/services/inventoryService.lua +++ b/server/services/inventoryService.lua @@ -290,9 +290,13 @@ function InventoryService.subItem(target, invId, itemId, amount) else DBService.SetItemAmount(item:getOwner(), itemId, item:getCount()) end + + return true end end end + + return false end function InventoryService.addItem(target, invId, name, amount, metadata, cb) @@ -388,7 +392,9 @@ function InventoryService.subWeapon(target, weaponId) id = weaponId, } DBService.updateAsync(query, params, function(r) end) + return true end + return false end function InventoryService.onPickup(data) @@ -557,21 +563,7 @@ local function generateUniqueID() return tostring(time) .. tostring(randomNum) end -function InventoryService.sharePickupServer(data) - local _source = source - local Character = Core.getUser(_source).getUsedCharacter - local sourceInventory = UsersInventories.default[Character.identifier] - local item = sourceInventory[data.id] - local weapon = UsersWeapons.default[data.weaponId] - - if not weapon and data.weaponId > 1 then - return - end - - if not item and data.weaponId == 1 then - return - end - +local function shareData(data) local uid = generateUniqueID() ItemUids[uid] = uid @@ -589,6 +581,40 @@ function InventoryService.sharePickupServer(data) TriggerClientEvent("vorpInventory:sharePickupClient", -1, data, 1) end +function InventoryService.sharePickupServerWeapon(data) + local _source = source + local weapon = UsersWeapons.default[data.weaponId] + + if not weapon and data.weaponId > 1 then + return + end + + local result = InventoryService.subWeapon(_source, data.weaponId) + if not result then + return + end + UsersWeapons.default[data.weaponId]:setDropped(1) + shareData(data) +end + +function InventoryService.sharePickupServerItem(data) + local _source = source + local Character = Core.getUser(_source).getUsedCharacter + local sourceInventory = UsersInventories.default[Character.identifier] + local item = sourceInventory[data.id] + + if not item and data.weaponId == 1 then + return + end + + local result = InventoryService.subItem(_source, "default", data.id, data.amount) + + if not result then + return + end + shareData(data) +end + function InventoryService.shareMoneyPickupServer(obj, amount, position) local _source = source local Character = Core.getUser(_source).getUsedCharacter @@ -642,7 +668,7 @@ function InventoryService.DropWeapon(weaponId) local wepName = UsersWeapons.default[weaponId]:getName() local title = T.drop local description = "**Weapon** `" .. - UsersWeapons.default[weaponId]:getName() .. "`" .. "\n **Playername** `" .. charname .. "`\n" + UsersWeapons.default[weaponId]:getName() .. "`" .. "\n **Playername** `" .. charname .. "`\n" Core.AddWebhook(title, Config.webhook, description, color, _source, logo, footerlogo, avatar) if not Config.DeleteOnlyDontDrop then TriggerClientEvent("vorpInventory:createPickup", _source, wepName, 1, {}, weaponId) @@ -660,7 +686,7 @@ function InventoryService.DropItem(itemName, itemId, amount, metadata) InventoryService.subItem(_source, "default", itemId, amount) local title = T.drop local description = "**Amount** `" .. - amount .. "`\n **Item** `" .. itemName .. "`" .. "\n **Playername** `" .. charname .. "`\n" + amount .. "`\n **Item** `" .. itemName .. "`" .. "\n **Playername** `" .. charname .. "`\n" Core.AddWebhook(title, Config.webhook, description, color, _source, logo, footerlogo, avatar) if not Config.DeleteOnlyDontDrop then @@ -690,7 +716,7 @@ function InventoryService.GiveWeapon(weaponId, target) end local title = T.drop local description = "**Amount** `" .. - 1 .. "`\n **Weapon id** `" .. weaponId .. "`" .. "\n **Playername** `" .. charname .. "`\n" + 1 .. "`\n **Weapon id** `" .. weaponId .. "`" .. "\n **Playername** `" .. charname .. "`\n" Core.AddWebhook(title, Config.webhook, description, color, _source, logo, footerlogo, avatar) TriggerClientEvent("vorp_inventory:transactionCompleted", _source) @@ -730,7 +756,7 @@ function InventoryService.giveWeapon2(player, weaponId, target) Core.NotifyRightTip(_source, T.cantweapons, 2000) if Config.Debug then Log.print(sourceCharacter.firstname .. - " " .. sourceCharacter.lastname .. " ^1Can't carry more weapons^7") + " " .. sourceCharacter.lastname .. " ^1Can't carry more weapons^7") end return end