2712 lines
118 KiB
Lua
2712 lines
118 KiB
Lua
-- Variables
|
|
|
|
local QBCore = exports['qb-core']:GetCoreObject()
|
|
local Drops = {}
|
|
local Trunks = {}
|
|
local Gloveboxes = {}
|
|
local Stashes = {}
|
|
local ShopItems = {}
|
|
|
|
-- Functions
|
|
|
|
---Loads the inventory for the player with the citizenid that is provided
|
|
|
|
local function LoadInventory(source, citizenid)
|
|
local inventory = MySQL.prepare.await('SELECT inventory FROM players WHERE citizenid = ?', { citizenid })
|
|
local loadedInventory = {}
|
|
local missingItems = {}
|
|
|
|
if not inventory then return loadedInventory end
|
|
|
|
inventory = json.decode(inventory)
|
|
if table.type(inventory) == "empty" then return loadedInventory end
|
|
|
|
for _, item in pairs(inventory) do
|
|
if item then
|
|
local itemInfo = QBCore.Shared.Items[item.name:lower()]
|
|
if itemInfo then
|
|
loadedInventory[item.slot] = {
|
|
name = itemInfo['name'],
|
|
amount = item.amount,
|
|
info = item.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 = item.slot,
|
|
combinable = itemInfo['combinable'],
|
|
created = item.created,
|
|
}
|
|
else
|
|
missingItems[#missingItems + 1] = item.name:lower()
|
|
end
|
|
end
|
|
end
|
|
|
|
if #missingItems > 0 then
|
|
print(("The following items were removed for player %s as they no longer exist"):format(GetPlayerName(source)))
|
|
QBCore.Debug(missingItems)
|
|
end
|
|
|
|
return loadedInventory
|
|
end
|
|
|
|
exports("LoadInventory", LoadInventory)
|
|
|
|
---Saves the inventory for the player with the provided source or PlayerData is they're offline
|
|
|
|
local function SaveInventory(source, offline)
|
|
local PlayerData
|
|
if not offline then
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
|
|
if not Player then return end
|
|
|
|
PlayerData = Player.PlayerData
|
|
else
|
|
PlayerData = source -- for offline users, the playerdata gets sent over the source variable
|
|
end
|
|
|
|
local items = PlayerData.items
|
|
local ItemsJson = {}
|
|
if items and table.type(items) ~= "empty" 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,
|
|
created = item.created
|
|
}
|
|
end
|
|
end
|
|
MySQL.prepare('UPDATE players SET inventory = ? WHERE citizenid = ?', { json.encode(ItemsJson), PlayerData.citizenid })
|
|
else
|
|
MySQL.prepare('UPDATE players SET inventory = ? WHERE citizenid = ?', { '[]', PlayerData.citizenid })
|
|
end
|
|
end
|
|
|
|
exports("SaveInventory", SaveInventory)
|
|
|
|
---Gets the totalweight of the items provided
|
|
|
|
local function GetTotalWeight(items)
|
|
local weight = 0
|
|
if not items then return 0 end
|
|
for _, item in pairs(items) do
|
|
weight += item.weight * item.amount
|
|
end
|
|
return tonumber(weight)
|
|
end
|
|
|
|
exports("GetTotalWeight", GetTotalWeight)
|
|
|
|
---Gets the slots that the provided item is in
|
|
|
|
local function GetSlotsByItem(items, itemName)
|
|
local slotsFound = {}
|
|
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
|
|
|
|
exports("GetSlotsByItem", GetSlotsByItem)
|
|
|
|
---Get the first slot where the item is located
|
|
|
|
local function GetFirstSlotByItem(items, itemName)
|
|
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
|
|
end
|
|
|
|
exports("GetFirstSlotByItem", GetFirstSlotByItem)
|
|
|
|
---Add an item to the inventory of the player
|
|
|
|
local function AddItem(source, item, amount, slot, info, created)
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
|
|
if not Player then return false end
|
|
|
|
local totalWeight = GetTotalWeight(Player.PlayerData.items)
|
|
local itemInfo = QBCore.Shared.Items[item:lower()]
|
|
local time = os.time()
|
|
if not created then
|
|
itemInfo['created'] = time
|
|
else
|
|
itemInfo['created'] = created
|
|
end
|
|
if not itemInfo and not Player.Offline then
|
|
QBCore.Functions.Notify(source, "Ting findes ikke", 'error')
|
|
return false
|
|
end
|
|
|
|
amount = tonumber(amount) or 1
|
|
slot = tonumber(slot) or GetFirstSlotByItem(Player.PlayerData.items, item)
|
|
info = info or {}
|
|
itemInfo['created'] = created or time
|
|
info.quality = info.quality or 100
|
|
|
|
if itemInfo['type'] == 'weapon' then
|
|
info.serie = info.serie or 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))
|
|
info.quality = info.quality or 100
|
|
end
|
|
if (totalWeight + (itemInfo['weight'] * amount)) <= Config.MaxInventoryWeight then
|
|
if (slot and Player.PlayerData.items[slot]) and (Player.PlayerData.items[slot].name:lower() == item:lower()) and (itemInfo['type'] == 'item' and not itemInfo['unique']) then
|
|
if Player.PlayerData.items[slot].info.quality == info.quality then
|
|
Player.PlayerData.items[slot].amount = Player.PlayerData.items[slot].amount + amount
|
|
Player.Functions.SetPlayerData("items", Player.PlayerData.items)
|
|
if Player.Offline then return true end
|
|
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'AddItem', 'green', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** got item: [slot:' .. slot .. '], itemname: ' .. Player.PlayerData.items[slot].name .. ', added amount: ' .. amount .. ', new total amount: ' .. Player.PlayerData.items[slot].amount)
|
|
return true
|
|
else
|
|
for i = 1, Config.MaxInventorySlots, 1 do
|
|
if Player.PlayerData.items[i] == nil then
|
|
Player.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'], created = itemInfo['created'] }
|
|
Player.Functions.SetPlayerData("items", Player.PlayerData.items)
|
|
if Player.Offline then return true end
|
|
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'AddItem', 'green', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** got item: [slot:' .. i .. '], itemname: ' .. Player.PlayerData.items[i].name .. ', added amount: ' .. amount .. ', new total amount: ' .. Player.PlayerData.items[i].amount)
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
elseif not itemInfo['unique'] and slot or slot and Player.PlayerData.items[slot] == nil then
|
|
Player.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'], created = itemInfo['created'] }
|
|
Player.Functions.SetPlayerData("items", Player.PlayerData.items)
|
|
|
|
if Player.Offline then return true end
|
|
|
|
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'AddItem', 'green', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** got item: [slot:' .. slot .. '], itemname: ' .. Player.PlayerData.items[slot].name .. ', added amount: ' .. amount .. ', new total amount: ' .. Player.PlayerData.items[slot].amount)
|
|
|
|
return true
|
|
elseif itemInfo['unique'] or (not slot or slot == nil) or itemInfo['type'] == 'weapon' then
|
|
for i = 1, Config.MaxInventorySlots, 1 do
|
|
if Player.PlayerData.items[i] == nil then
|
|
Player.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'], created = itemInfo['created'] }
|
|
Player.Functions.SetPlayerData("items", Player.PlayerData.items)
|
|
|
|
if Player.Offline then return true end
|
|
|
|
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'AddItem', 'green', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** got item: [slot:' .. i .. '], itemname: ' .. Player.PlayerData.items[i].name .. ', added amount: ' .. amount .. ', new total amount: ' .. Player.PlayerData.items[i].amount)
|
|
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
elseif not Player.Offline then
|
|
QBCore.Functions.Notify(source, "Inventar er fyldt", 'error')
|
|
end
|
|
return false
|
|
end
|
|
|
|
exports("AddItem", AddItem)
|
|
|
|
---Remove an item from the inventory of the player
|
|
|
|
local function RemoveItem(source, item, amount, slot)
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
|
|
if not Player then return false end
|
|
|
|
amount = tonumber(amount) or 1
|
|
slot = tonumber(slot)
|
|
|
|
if slot then
|
|
if Player.PlayerData.items[slot].amount > amount then
|
|
Player.PlayerData.items[slot].amount = Player.PlayerData.items[slot].amount - amount
|
|
Player.Functions.SetPlayerData("items", Player.PlayerData.items)
|
|
|
|
if not Player.Offline then
|
|
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** lost item: [slot:' .. slot .. '], itemname: ' .. Player.PlayerData.items[slot].name .. ', removed amount: ' .. amount .. ', new total amount: ' .. Player.PlayerData.items[slot].amount)
|
|
end
|
|
|
|
return true
|
|
elseif Player.PlayerData.items[slot].amount == amount then
|
|
Player.PlayerData.items[slot] = nil
|
|
Player.Functions.SetPlayerData("items", Player.PlayerData.items)
|
|
|
|
if Player.Offline then return true end
|
|
|
|
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** lost item: [slot:' .. slot .. '], itemname: ' .. item .. ', removed amount: ' .. amount .. ', item removed')
|
|
|
|
return true
|
|
end
|
|
else
|
|
local slots = GetSlotsByItem(Player.PlayerData.items, item)
|
|
local amountToRemove = amount
|
|
|
|
if not slots then return false end
|
|
|
|
for _, _slot in pairs(slots) do
|
|
if Player.PlayerData.items[_slot].amount > amountToRemove then
|
|
Player.PlayerData.items[_slot].amount = Player.PlayerData.items[_slot].amount - amountToRemove
|
|
Player.Functions.SetPlayerData("items", Player.PlayerData.items)
|
|
|
|
if not Player.Offline then
|
|
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** lost item: [slot:' .. _slot .. '], itemname: ' .. Player.PlayerData.items[_slot].name .. ', removed amount: ' .. amount .. ', new total amount: ' .. Player.PlayerData.items[_slot].amount)
|
|
end
|
|
|
|
return true
|
|
elseif Player.PlayerData.items[_slot].amount == amountToRemove then
|
|
Player.PlayerData.items[_slot] = nil
|
|
Player.Functions.SetPlayerData("items", Player.PlayerData.items)
|
|
|
|
if Player.Offline then return true end
|
|
|
|
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** lost item: [slot:' .. _slot .. '], itemname: ' .. item .. ', removed amount: ' .. amount .. ', item removed')
|
|
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
exports("RemoveItem", RemoveItem)
|
|
|
|
---Get the item with the slot
|
|
|
|
local function GetItemBySlot(source, slot)
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
slot = tonumber(slot)
|
|
return Player.PlayerData.items[slot]
|
|
end
|
|
|
|
exports("GetItemBySlot", GetItemBySlot)
|
|
|
|
---Get the item from the inventory of the player with the provided source by the name of the item
|
|
|
|
local function GetItemByName(source, item)
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
item = tostring(item):lower()
|
|
local slot = GetFirstSlotByItem(Player.PlayerData.items, item)
|
|
return Player.PlayerData.items[slot]
|
|
end
|
|
|
|
exports("GetItemByName", GetItemByName)
|
|
|
|
---Get the item from the inventory of the player with the provided source by the name of the item in an array for all slots that the item is in
|
|
|
|
local function GetItemsByName(source, item)
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
item = tostring(item):lower()
|
|
local items = {}
|
|
local slots = GetSlotsByItem(Player.PlayerData.items, item)
|
|
for _, slot in pairs(slots) do
|
|
if slot then
|
|
items[#items+1] = Player.PlayerData.items[slot]
|
|
end
|
|
end
|
|
return items
|
|
end
|
|
|
|
exports("GetItemsByName", GetItemsByName)
|
|
|
|
|
|
local function ClearInventory(source, filterItems)
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
local savedItemData = {}
|
|
|
|
if filterItems then
|
|
local filterItemsType = type(filterItems)
|
|
if filterItemsType == "string" then
|
|
local item = GetItemByName(source, filterItems)
|
|
|
|
if item then
|
|
savedItemData[item.slot] = item
|
|
end
|
|
elseif filterItemsType == "table" and table.type(filterItems) == "array" then
|
|
for i = 1, #filterItems do
|
|
local item = GetItemByName(source, filterItems[i])
|
|
|
|
if item then
|
|
savedItemData[item.slot] = item
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Player.Functions.SetPlayerData("items", savedItemData)
|
|
|
|
if Player.Offline then return end
|
|
|
|
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'ClearInventory', 'red', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** inventory cleared')
|
|
end
|
|
|
|
exports("ClearInventory", ClearInventory)
|
|
|
|
---Sets the items playerdata to the provided items param
|
|
|
|
local function SetInventory(source, items)
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
|
|
Player.Functions.SetPlayerData("items", items)
|
|
|
|
if Player.Offline then return end
|
|
|
|
TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'SetInventory', 'blue', '**' .. GetPlayerName(source) .. ' (citizenid: ' .. Player.PlayerData.citizenid .. ' | id: ' .. source .. ')** items set: ' .. json.encode(items))
|
|
end
|
|
|
|
exports("SetInventory", SetInventory)
|
|
|
|
---Set the data of a specific item
|
|
|
|
local function SetItemData(source, itemName, key, val)
|
|
if not itemName or not key then return false end
|
|
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
|
|
if not Player then return end
|
|
|
|
local item = GetItemByName(source, itemName)
|
|
|
|
if not item then return false end
|
|
|
|
item[key] = val
|
|
Player.PlayerData.items[item.slot] = item
|
|
Player.Functions.SetPlayerData("items", Player.PlayerData.items)
|
|
|
|
return true
|
|
end
|
|
|
|
exports("SetItemData", SetItemData)
|
|
|
|
---Checks if you have an item or not
|
|
local function HasItem(source, items, amount)
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
if not Player then return false end
|
|
local isTable = type(items) == 'table'
|
|
local isArray = isTable and table.type(items) == 'array' or false
|
|
local totalItems = #items
|
|
local count = 0
|
|
local kvIndex = 2
|
|
if isTable and not isArray then
|
|
totalItems = 0
|
|
for _ in pairs(items) do totalItems += 1 end
|
|
kvIndex = 1
|
|
end
|
|
if isTable then
|
|
for k, v in pairs(items) do
|
|
local itemKV = {k, v}
|
|
local item = GetItemByName(source, itemKV[kvIndex])
|
|
if item and ((amount and item.amount >= amount) or (not isArray and item.amount >= v) or (not amount and isArray)) then
|
|
count += 1
|
|
end
|
|
end
|
|
if count == totalItems then
|
|
return true
|
|
end
|
|
else -- Single item as string
|
|
local item = GetItemByName(source, items)
|
|
if item and (not amount or (item and amount and item.amount >= amount)) then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
exports("HasItem", HasItem)
|
|
|
|
---Create a usable item with a callback on use
|
|
---@param itemName string The name of the item to make usable
|
|
---@param data any
|
|
local function CreateUsableItem(itemName, data)
|
|
QBCore.Functions.CreateUseableItem(itemName, data)
|
|
end
|
|
|
|
exports("CreateUsableItem", CreateUsableItem)
|
|
|
|
---Get the usable item data for the specified item
|
|
---@param itemName string The item to get the data for
|
|
---@return any usable_item
|
|
local function GetUsableItem(itemName)
|
|
return QBCore.Functions.CanUseItem(itemName)
|
|
end
|
|
|
|
exports("GetUsableItem", GetUsableItem)
|
|
|
|
---Use an item from the QBCore.UsableItems table if a callback is present
|
|
---@param itemName string The name of the item to use
|
|
---@param ... any Arguments for the callback, this will be sent to the callback and can be used to get certain values
|
|
local function UseItem(itemName, ...)
|
|
local itemData = GetUsableItem(itemName)
|
|
local callback = type(itemData) == 'table' and (rawget(itemData, '__cfx_functionReference') and itemData or itemData.cb or itemData.callback) or type(itemData) == 'function' and itemData
|
|
if not callback then return end
|
|
callback(...)
|
|
end
|
|
|
|
exports("UseItem", UseItem)
|
|
|
|
local function recipeContains(recipe, fromItem)
|
|
for _, v in pairs(recipe.accept) do
|
|
if v == fromItem.name then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
|
|
local function hasCraftItems(source, CostItems, amount)
|
|
for k, v in pairs(CostItems) do
|
|
local item = GetItemByName(source, k)
|
|
|
|
if not item then return false end
|
|
|
|
if item.amount < (v * amount) then return false end
|
|
end
|
|
return true
|
|
end
|
|
|
|
local function IsVehicleOwned(plate)
|
|
local result = MySQL.scalar.await('SELECT 1 from player_vehicles WHERE plate = ?', {plate})
|
|
return result
|
|
end
|
|
|
|
-- Shop Items
|
|
local function SetupShopItems(shopItems)
|
|
local items = {}
|
|
if shopItems and next(shopItems) then
|
|
for _, item in pairs(shopItems) do
|
|
local itemInfo = QBCore.Shared.Items[item.name:lower()]
|
|
if itemInfo then
|
|
items[item.slot] = {
|
|
name = itemInfo["name"],
|
|
amount = tonumber(item.amount),
|
|
info = item.info or "",
|
|
label = itemInfo["label"],
|
|
description = itemInfo["description"] or "",
|
|
weight = itemInfo["weight"],
|
|
type = itemInfo["type"],
|
|
unique = itemInfo["unique"],
|
|
useable = itemInfo["useable"],
|
|
price = item.price,
|
|
image = itemInfo["image"],
|
|
slot = item.slot,
|
|
}
|
|
end
|
|
end
|
|
end
|
|
return items
|
|
end
|
|
|
|
-- Stash Items
|
|
local function GetStashItems(stashId)
|
|
local items = {}
|
|
local result = MySQL.scalar.await('SELECT items FROM stashitems WHERE stash = ?', {stashId})
|
|
if not result then return items end
|
|
|
|
local stashItems = json.decode(result)
|
|
if not stashItems then return items end
|
|
|
|
for _, item in pairs(stashItems) do
|
|
local itemInfo = QBCore.Shared.Items[item.name:lower()]
|
|
if itemInfo then
|
|
items[item.slot] = {
|
|
name = itemInfo["name"],
|
|
amount = tonumber(item.amount),
|
|
info = item.info or "",
|
|
label = itemInfo["label"],
|
|
description = itemInfo["description"] or "",
|
|
weight = itemInfo["weight"],
|
|
type = itemInfo["type"],
|
|
unique = itemInfo["unique"],
|
|
useable = itemInfo["useable"],
|
|
image = itemInfo["image"],
|
|
created = item.created,
|
|
slot = item.slot,
|
|
}
|
|
end
|
|
end
|
|
return items
|
|
end
|
|
|
|
local function SaveStashItems(stashId, items)
|
|
if Stashes[stashId].label == "Stash-None" or not items then return end
|
|
|
|
for _, item in pairs(items) do
|
|
item.description = nil
|
|
end
|
|
|
|
MySQL.insert('INSERT INTO stashitems (stash, items) VALUES (:stash, :items) ON DUPLICATE KEY UPDATE items = :items', {
|
|
['stash'] = stashId,
|
|
['items'] = json.encode(items)
|
|
})
|
|
|
|
Stashes[stashId].isOpen = false
|
|
end
|
|
|
|
local function AddToStash(stashId, slot, otherslot, itemName, amount, info, created)
|
|
amount = tonumber(amount) or 1
|
|
local ItemData = QBCore.Shared.Items[itemName]
|
|
if not ItemData.unique then
|
|
if Stashes[stashId].items[slot] and Stashes[stashId].items[slot].name == itemName then
|
|
Stashes[stashId].items[slot].amount = Stashes[stashId].items[slot].amount + amount
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[itemName:lower()]
|
|
Stashes[stashId].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"],
|
|
created = created,
|
|
slot = slot,
|
|
}
|
|
end
|
|
else
|
|
if Stashes[stashId].items[slot] and Stashes[stashId].items[slot].name == itemName then
|
|
local itemInfo = QBCore.Shared.Items[itemName:lower()]
|
|
Stashes[stashId].items[otherslot] = {
|
|
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"],
|
|
created = created,
|
|
slot = otherslot,
|
|
}
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[itemName:lower()]
|
|
Stashes[stashId].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"],
|
|
created = created,
|
|
slot = slot,
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
local function RemoveFromStash(stashId, slot, itemName, amount)
|
|
amount = tonumber(amount) or 1
|
|
if Stashes[stashId].items[slot] and Stashes[stashId].items[slot].name == itemName then
|
|
if Stashes[stashId].items[slot].amount > amount then
|
|
Stashes[stashId].items[slot].amount = Stashes[stashId].items[slot].amount - amount
|
|
else
|
|
Stashes[stashId].items[slot] = nil
|
|
end
|
|
else
|
|
Stashes[stashId].items[slot] = nil
|
|
if Stashes[stashId].items == nil then
|
|
Stashes[stashId].items[slot] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Trunk items
|
|
local function GetOwnedVehicleItems(plate)
|
|
local items = {}
|
|
local result = MySQL.scalar.await('SELECT items FROM trunkitems WHERE plate = ?', {plate})
|
|
if not result then return items end
|
|
|
|
local trunkItems = json.decode(result)
|
|
if not trunkItems then return items end
|
|
|
|
for _, item in pairs(trunkItems) do
|
|
local itemInfo = QBCore.Shared.Items[item.name:lower()]
|
|
if itemInfo then
|
|
items[item.slot] = {
|
|
name = itemInfo["name"],
|
|
amount = tonumber(item.amount),
|
|
info = item.info or "",
|
|
label = itemInfo["label"],
|
|
description = itemInfo["description"] or "",
|
|
weight = itemInfo["weight"],
|
|
type = itemInfo["type"],
|
|
unique = itemInfo["unique"],
|
|
useable = itemInfo["useable"],
|
|
image = itemInfo["image"],
|
|
created = item.created,
|
|
slot = item.slot,
|
|
}
|
|
end
|
|
end
|
|
return items
|
|
end
|
|
|
|
local function SaveOwnedVehicleItems(plate, items)
|
|
if Trunks[plate].label == "Trunk-None" or not items then return end
|
|
|
|
for _, item in pairs(items) do
|
|
item.description = nil
|
|
end
|
|
|
|
MySQL.insert('INSERT INTO trunkitems (plate, items) VALUES (:plate, :items) ON DUPLICATE KEY UPDATE items = :items', {
|
|
['plate'] = plate,
|
|
['items'] = json.encode(items)
|
|
})
|
|
|
|
Trunks[plate].isOpen = false
|
|
end
|
|
|
|
local function AddToTrunk(plate, slot, otherslot, itemName, amount, info, created)
|
|
amount = tonumber(amount) or 1
|
|
local ItemData = QBCore.Shared.Items[itemName]
|
|
|
|
if not ItemData.unique then
|
|
if Trunks[plate].items[slot] and Trunks[plate].items[slot].name == itemName then
|
|
Trunks[plate].items[slot].amount = Trunks[plate].items[slot].amount + amount
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[itemName:lower()]
|
|
Trunks[plate].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"],
|
|
created = created,
|
|
slot = slot,
|
|
}
|
|
end
|
|
else
|
|
if Trunks[plate].items[slot] and Trunks[plate].items[slot].name == itemName then
|
|
local itemInfo = QBCore.Shared.Items[itemName:lower()]
|
|
Trunks[plate].items[otherslot] = {
|
|
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"],
|
|
created = created,
|
|
slot = otherslot,
|
|
}
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[itemName:lower()]
|
|
Trunks[plate].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"],
|
|
created = created,
|
|
slot = slot,
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
local function RemoveFromTrunk(plate, slot, itemName, amount)
|
|
amount = tonumber(amount) or 1
|
|
if Trunks[plate].items[slot] and Trunks[plate].items[slot].name == itemName then
|
|
if Trunks[plate].items[slot].amount > amount then
|
|
Trunks[plate].items[slot].amount = Trunks[plate].items[slot].amount - amount
|
|
else
|
|
Trunks[plate].items[slot] = nil
|
|
end
|
|
else
|
|
Trunks[plate].items[slot] = nil
|
|
if Trunks[plate].items == nil then
|
|
Trunks[plate].items[slot] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-- Glovebox items
|
|
local function GetOwnedVehicleGloveboxItems(plate)
|
|
local items = {}
|
|
local result = MySQL.scalar.await('SELECT items FROM gloveboxitems WHERE plate = ?', {plate})
|
|
if not result then return items end
|
|
|
|
local gloveboxItems = json.decode(result)
|
|
if not gloveboxItems then return items end
|
|
|
|
for _, item in pairs(gloveboxItems) do
|
|
local itemInfo = QBCore.Shared.Items[item.name:lower()]
|
|
if itemInfo then
|
|
items[item.slot] = {
|
|
name = itemInfo["name"],
|
|
amount = tonumber(item.amount),
|
|
info = item.info or "",
|
|
label = itemInfo["label"],
|
|
description = itemInfo["description"] or "",
|
|
weight = itemInfo["weight"],
|
|
type = itemInfo["type"],
|
|
unique = itemInfo["unique"],
|
|
useable = itemInfo["useable"],
|
|
image = itemInfo["image"],
|
|
created = item.created,
|
|
slot = item.slot,
|
|
}
|
|
end
|
|
end
|
|
return items
|
|
end
|
|
|
|
local function SaveOwnedGloveboxItems(plate, items)
|
|
if Gloveboxes[plate].label == "Glovebox-None" or not items then return end
|
|
|
|
for _, item in pairs(items) do
|
|
item.description = nil
|
|
end
|
|
|
|
MySQL.insert('INSERT INTO gloveboxitems (plate, items) VALUES (:plate, :items) ON DUPLICATE KEY UPDATE items = :items', {
|
|
['plate'] = plate,
|
|
['items'] = json.encode(items)
|
|
})
|
|
|
|
Gloveboxes[plate].isOpen = false
|
|
end
|
|
|
|
local function AddToGlovebox(plate, slot, otherslot, itemName, amount, info, created)
|
|
amount = tonumber(amount) or 1
|
|
local ItemData = QBCore.Shared.Items[itemName]
|
|
|
|
if not ItemData.unique then
|
|
if Gloveboxes[plate].items[slot] and Gloveboxes[plate].items[slot].name == itemName then
|
|
Gloveboxes[plate].items[slot].amount = Gloveboxes[plate].items[slot].amount + amount
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[itemName:lower()]
|
|
Gloveboxes[plate].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"],
|
|
created = created,
|
|
slot = slot,
|
|
}
|
|
end
|
|
else
|
|
if Gloveboxes[plate].items[slot] and Gloveboxes[plate].items[slot].name == itemName then
|
|
local itemInfo = QBCore.Shared.Items[itemName:lower()]
|
|
Gloveboxes[plate].items[otherslot] = {
|
|
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"],
|
|
created = created,
|
|
slot = otherslot,
|
|
}
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[itemName:lower()]
|
|
Gloveboxes[plate].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"],
|
|
created = created,
|
|
slot = slot,
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
local function RemoveFromGlovebox(plate, slot, itemName, amount)
|
|
amount = tonumber(amount) or 1
|
|
if Gloveboxes[plate].items[slot] and Gloveboxes[plate].items[slot].name == itemName then
|
|
if Gloveboxes[plate].items[slot].amount > amount then
|
|
Gloveboxes[plate].items[slot].amount = Gloveboxes[plate].items[slot].amount - amount
|
|
else
|
|
Gloveboxes[plate].items[slot] = nil
|
|
end
|
|
else
|
|
Gloveboxes[plate].items[slot] = nil
|
|
if Gloveboxes[plate].items == nil then
|
|
Gloveboxes[plate].items[slot] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
---Add an item to a drop
|
|
---@param dropId integer The id of the drop
|
|
---@param slot number The slot of the drop inventory to add the item to
|
|
---@param itemName string Name of the item to add
|
|
---@param amount? number The amount of the item to add
|
|
---@param info? table Extra info to add to the item
|
|
local function AddToDrop(dropId, slot, itemName, amount, info, created)
|
|
amount = tonumber(amount) or 1
|
|
Drops[dropId].createdTime = os.time()
|
|
if Drops[dropId].items[slot] and Drops[dropId].items[slot].name == itemName then
|
|
Drops[dropId].items[slot].amount = Drops[dropId].items[slot].amount + amount
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[itemName:lower()]
|
|
Drops[dropId].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"],
|
|
created = created,
|
|
slot = slot,
|
|
id = dropId,
|
|
}
|
|
end
|
|
end
|
|
|
|
local function RemoveFromDrop(dropId, slot, itemName, amount)
|
|
amount = tonumber(amount) or 1
|
|
Drops[dropId].createdTime = os.time()
|
|
if Drops[dropId].items[slot] and Drops[dropId].items[slot].name == itemName then
|
|
if Drops[dropId].items[slot].amount > amount then
|
|
Drops[dropId].items[slot].amount = Drops[dropId].items[slot].amount - amount
|
|
else
|
|
Drops[dropId].items[slot] = nil
|
|
end
|
|
else
|
|
Drops[dropId].items[slot] = nil
|
|
if Drops[dropId].items == nil then
|
|
Drops[dropId].items[slot] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
local function CreateDropId()
|
|
if Drops then
|
|
local id = math.random(10000, 99999)
|
|
local dropid = id
|
|
while Drops[dropid] do
|
|
id = math.random(10000, 99999)
|
|
dropid = id
|
|
end
|
|
return dropid
|
|
else
|
|
local id = math.random(10000, 99999)
|
|
local dropid = id
|
|
return dropid
|
|
end
|
|
end
|
|
|
|
local function CreateNewDrop(source, fromSlot, toSlot, itemAmount, created)
|
|
itemAmount = tonumber(itemAmount) or 1
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
local itemData = GetItemBySlot(source, fromSlot)
|
|
|
|
if not itemData then return end
|
|
|
|
local coords = GetEntityCoords(GetPlayerPed(source))
|
|
if RemoveItem(source, itemData.name, itemAmount, itemData.slot) then
|
|
TriggerClientEvent("inventory:client:CheckWeapon", source, itemData.name)
|
|
local itemInfo = QBCore.Shared.Items[itemData.name:lower()]
|
|
local dropId = CreateDropId()
|
|
Drops[dropId] = {}
|
|
Drops[dropId].coords = coords
|
|
Drops[dropId].createdTime = os.time()
|
|
|
|
Drops[dropId].items = {}
|
|
|
|
Drops[dropId].items[toSlot] = {
|
|
name = itemInfo["name"],
|
|
amount = itemAmount,
|
|
info = itemData.info or "",
|
|
label = itemInfo["label"],
|
|
description = itemInfo["description"] or "",
|
|
weight = itemInfo["weight"],
|
|
type = itemInfo["type"],
|
|
unique = itemInfo["unique"],
|
|
useable = itemInfo["useable"],
|
|
image = itemInfo["image"],
|
|
created = created,
|
|
slot = toSlot,
|
|
id = dropId,
|
|
}
|
|
TriggerEvent("qb-log:server:CreateLog", "drop", "New Item Drop", "red", "**".. GetPlayerName(source) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..source.."*) dropped new item; name: **"..itemData.name.."**, amount: **" .. itemAmount .. "**")
|
|
TriggerClientEvent("inventory:client:DropItemAnim", source)
|
|
TriggerClientEvent("inventory:client:AddDropItem", -1, dropId, source, coords)
|
|
if itemData.name:lower() == "radio" then
|
|
TriggerClientEvent('Radio.Set', source, false)
|
|
end
|
|
else
|
|
TriggerClientEvent("QBCore:Notify", source, "Du har ikke den ting", "error")
|
|
return
|
|
end
|
|
end
|
|
|
|
local function OpenInventory(name, id, other, origin)
|
|
local src = origin
|
|
local ply = Player(src)
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if ply.state.inv_busy then
|
|
return QBCore.Functions.Notify(src, Lang:t("notify.noaccess"), 'error')
|
|
end
|
|
if name and id then
|
|
local secondInv = {}
|
|
if name == "stash" then
|
|
if Stashes[id] then
|
|
if Stashes[id].isOpen then
|
|
local Target = QBCore.Functions.GetPlayer(Stashes[id].isOpen)
|
|
if Target then
|
|
TriggerClientEvent('inventory:client:CheckOpenState', Stashes[id].isOpen, name, id, Stashes[id].label)
|
|
else
|
|
Stashes[id].isOpen = false
|
|
end
|
|
end
|
|
end
|
|
local maxweight = 1000000
|
|
local slots = 50
|
|
if other then
|
|
maxweight = other.maxweight or 1000000
|
|
slots = other.slots or 50
|
|
end
|
|
secondInv.name = "stash-"..id
|
|
secondInv.label = "Stash-"..id
|
|
secondInv.maxweight = maxweight
|
|
secondInv.inventory = {}
|
|
secondInv.slots = slots
|
|
if Stashes[id] and Stashes[id].isOpen then
|
|
secondInv.name = "none-inv"
|
|
secondInv.label = "Stash-None"
|
|
secondInv.maxweight = 1000000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = 0
|
|
else
|
|
local stashItems = GetStashItems(id)
|
|
if next(stashItems) then
|
|
secondInv.inventory = stashItems
|
|
Stashes[id] = {}
|
|
Stashes[id].items = stashItems
|
|
Stashes[id].isOpen = src
|
|
Stashes[id].label = secondInv.label
|
|
else
|
|
Stashes[id] = {}
|
|
Stashes[id].items = {}
|
|
Stashes[id].isOpen = src
|
|
Stashes[id].label = secondInv.label
|
|
end
|
|
end
|
|
elseif name == "trunk" then
|
|
if Trunks[id] then
|
|
if Trunks[id].isOpen then
|
|
local Target = QBCore.Functions.GetPlayer(Trunks[id].isOpen)
|
|
if Target then
|
|
TriggerClientEvent('inventory:client:CheckOpenState', Trunks[id].isOpen, name, id, Trunks[id].label)
|
|
else
|
|
Trunks[id].isOpen = false
|
|
end
|
|
end
|
|
end
|
|
secondInv.name = "trunk-"..id
|
|
secondInv.label = "Trunk-"..id
|
|
secondInv.maxweight = other.maxweight or 60000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = other.slots or 50
|
|
if (Trunks[id] and Trunks[id].isOpen) or (QBCore.Shared.SplitStr(id, "PLZI")[2] and (Player.PlayerData.job.name ~= "police" or Player.PlayerData.job.type ~= "leo")) then
|
|
secondInv.name = "none-inv"
|
|
secondInv.label = "Trunk-None"
|
|
secondInv.maxweight = other.maxweight or 60000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = 0
|
|
else
|
|
if id then
|
|
local ownedItems = GetOwnedVehicleItems(id)
|
|
if IsVehicleOwned(id) and next(ownedItems) then
|
|
secondInv.inventory = ownedItems
|
|
Trunks[id] = {}
|
|
Trunks[id].items = ownedItems
|
|
Trunks[id].isOpen = src
|
|
Trunks[id].label = secondInv.label
|
|
elseif Trunks[id] and not Trunks[id].isOpen then
|
|
secondInv.inventory = Trunks[id].items
|
|
Trunks[id].isOpen = src
|
|
Trunks[id].label = secondInv.label
|
|
else
|
|
Trunks[id] = {}
|
|
Trunks[id].items = {}
|
|
Trunks[id].isOpen = src
|
|
Trunks[id].label = secondInv.label
|
|
end
|
|
end
|
|
end
|
|
elseif name == "glovebox" then
|
|
if Gloveboxes[id] then
|
|
if Gloveboxes[id].isOpen then
|
|
local Target = QBCore.Functions.GetPlayer(Gloveboxes[id].isOpen)
|
|
if Target then
|
|
TriggerClientEvent('inventory:client:CheckOpenState', Gloveboxes[id].isOpen, name, id, Gloveboxes[id].label)
|
|
else
|
|
Gloveboxes[id].isOpen = false
|
|
end
|
|
end
|
|
end
|
|
secondInv.name = "glovebox-"..id
|
|
secondInv.label = "Glovebox-"..id
|
|
secondInv.maxweight = 10000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = 5
|
|
if Gloveboxes[id] and Gloveboxes[id].isOpen then
|
|
secondInv.name = "none-inv"
|
|
secondInv.label = "Glovebox-None"
|
|
secondInv.maxweight = 10000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = 0
|
|
else
|
|
local ownedItems = GetOwnedVehicleGloveboxItems(id)
|
|
if Gloveboxes[id] and not Gloveboxes[id].isOpen then
|
|
secondInv.inventory = Gloveboxes[id].items
|
|
Gloveboxes[id].isOpen = src
|
|
Gloveboxes[id].label = secondInv.label
|
|
elseif IsVehicleOwned(id) and next(ownedItems) then
|
|
secondInv.inventory = ownedItems
|
|
Gloveboxes[id] = {}
|
|
Gloveboxes[id].items = ownedItems
|
|
Gloveboxes[id].isOpen = src
|
|
Gloveboxes[id].label = secondInv.label
|
|
else
|
|
Gloveboxes[id] = {}
|
|
Gloveboxes[id].items = {}
|
|
Gloveboxes[id].isOpen = src
|
|
Gloveboxes[id].label = secondInv.label
|
|
end
|
|
end
|
|
elseif name == "shop" then
|
|
secondInv.name = "itemshop-"..id
|
|
secondInv.label = other.label
|
|
secondInv.maxweight = 900000
|
|
secondInv.inventory = SetupShopItems(other.items)
|
|
ShopItems[id] = {}
|
|
ShopItems[id].items = other.items
|
|
secondInv.slots = #other.items
|
|
elseif name == "traphouse" then
|
|
secondInv.name = "traphouse-"..id
|
|
secondInv.label = other.label
|
|
secondInv.maxweight = 900000
|
|
secondInv.inventory = other.items
|
|
secondInv.slots = other.slots
|
|
elseif name == "crafting" then
|
|
secondInv.name = "crafting"
|
|
secondInv.label = other.label
|
|
secondInv.maxweight = 900000
|
|
secondInv.inventory = other.items
|
|
secondInv.slots = #other.items
|
|
elseif name == "attachment_crafting" then
|
|
secondInv.name = "attachment_crafting"
|
|
secondInv.label = other.label
|
|
secondInv.maxweight = 900000
|
|
secondInv.inventory = other.items
|
|
secondInv.slots = #other.items
|
|
elseif name == "otherplayer" then
|
|
local OtherPlayer = QBCore.Functions.GetPlayer(tonumber(id))
|
|
if OtherPlayer then
|
|
secondInv.name = "otherplayer-"..id
|
|
secondInv.label = "Player-"..id
|
|
secondInv.maxweight = Config.MaxInventoryWeight
|
|
secondInv.inventory = OtherPlayer.PlayerData.items
|
|
if (Player.PlayerData.job.name == "police" or Player.PlayerData.job.type == "leo") and Player.PlayerData.job.onduty then
|
|
secondInv.slots = Config.MaxInventorySlots
|
|
else
|
|
secondInv.slots = Config.MaxInventorySlots - 1
|
|
end
|
|
Wait(250)
|
|
end
|
|
else
|
|
if Drops[id] then
|
|
if Drops[id].isOpen then
|
|
local Target = QBCore.Functions.GetPlayer(Drops[id].isOpen)
|
|
if Target then
|
|
TriggerClientEvent('inventory:client:CheckOpenState', Drops[id].isOpen, name, id, Drops[id].label)
|
|
else
|
|
Drops[id].isOpen = false
|
|
end
|
|
end
|
|
end
|
|
if Drops[id] and not Drops[id].isOpen then
|
|
secondInv.coords = Drops[id].coords
|
|
secondInv.name = id
|
|
secondInv.label = "Dropped-"..tostring(id)
|
|
secondInv.maxweight = 100000
|
|
secondInv.inventory = Drops[id].items
|
|
secondInv.slots = 30
|
|
Drops[id].isOpen = src
|
|
Drops[id].label = secondInv.label
|
|
Drops[id].createdTime = os.time()
|
|
else
|
|
secondInv.name = "none-inv"
|
|
secondInv.label = "Dropped-None"
|
|
secondInv.maxweight = 100000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = 0
|
|
end
|
|
end
|
|
TriggerClientEvent("ps-inventory:client:closeinv", id)
|
|
TriggerClientEvent("inventory:client:OpenInventory", src, {}, Player.PlayerData.items, secondInv)
|
|
else
|
|
TriggerClientEvent("inventory:client:OpenInventory", src, {}, Player.PlayerData.items)
|
|
end
|
|
end
|
|
exports('OpenInventory',OpenInventory)
|
|
|
|
-- Events
|
|
|
|
AddEventHandler('QBCore:Server:PlayerLoaded', function(Player)
|
|
QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, "AddItem", function(item, amount, slot, info)
|
|
return AddItem(Player.PlayerData.source, item, amount, slot, info)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, "RemoveItem", function(item, amount, slot)
|
|
return RemoveItem(Player.PlayerData.source, item, amount, slot)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, "GetItemBySlot", function(slot)
|
|
return GetItemBySlot(Player.PlayerData.source, slot)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, "GetItemByName", function(item)
|
|
return GetItemByName(Player.PlayerData.source, item)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, "GetItemsByName", function(item)
|
|
return GetItemsByName(Player.PlayerData.source, item)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, "ClearInventory", function(filterItems)
|
|
ClearInventory(Player.PlayerData.source, filterItems)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, "SetInventory", function(items)
|
|
SetInventory(Player.PlayerData.source, items)
|
|
end)
|
|
end)
|
|
|
|
AddEventHandler('onResourceStart', function(resourceName)
|
|
if resourceName ~= GetCurrentResourceName() then return end
|
|
local Players = QBCore.Functions.GetQBPlayers()
|
|
for k in pairs(Players) do
|
|
QBCore.Functions.AddPlayerMethod(k, "AddItem", function(item, amount, slot, info)
|
|
return AddItem(k, item, amount, slot, info)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(k, "RemoveItem", function(item, amount, slot)
|
|
return RemoveItem(k, item, amount, slot)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(k, "GetItemBySlot", function(slot)
|
|
return GetItemBySlot(k, slot)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(k, "GetItemByName", function(item)
|
|
return GetItemByName(k, item)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(k, "GetItemsByName", function(item)
|
|
return GetItemsByName(k, item)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(k, "ClearInventory", function(filterItems)
|
|
ClearInventory(k, filterItems)
|
|
end)
|
|
|
|
QBCore.Functions.AddPlayerMethod(k, "SetInventory", function(items)
|
|
SetInventory(k, items)
|
|
end)
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('QBCore:Server:UpdateObject', function()
|
|
if source ~= '' then return end -- Safety check if the event was not called from the server.
|
|
QBCore = exports['qb-core']:GetCoreObject()
|
|
end)
|
|
|
|
function addTrunkItems(plate, items)
|
|
Trunks[plate] = {}
|
|
Trunks[plate].items = items
|
|
end
|
|
|
|
exports('addTrunkItems',addTrunkItems)
|
|
|
|
function addGloveboxItems(plate, items)
|
|
Gloveboxes[plate] = {}
|
|
Gloveboxes[plate].items = items
|
|
end
|
|
|
|
exports('addGloveboxItems',addGloveboxItems)
|
|
|
|
RegisterNetEvent('inventory:server:combineItem', function(item, fromItem, toItem)
|
|
local src = source
|
|
|
|
-- Check that inputs are not nil
|
|
-- Most commonly when abusing this exploit, this values are left as
|
|
if fromItem == nil then return end
|
|
if toItem == nil then return end
|
|
|
|
-- Check that they have the items
|
|
fromItem = GetItemByName(src, fromItem)
|
|
toItem = GetItemByName(src, toItem)
|
|
|
|
if fromItem == nil then return end
|
|
if toItem == nil then return end
|
|
|
|
-- Check the recipe is valid
|
|
local recipe = QBCore.Shared.Items[toItem.name].combinable
|
|
|
|
if recipe and recipe.reward ~= item then return end
|
|
if not recipeContains(recipe, fromItem) then return end
|
|
|
|
TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[item], 'add')
|
|
AddItem(src, item, 1)
|
|
RemoveItem(src, fromItem.name, 1)
|
|
RemoveItem(src, toItem.name, 1)
|
|
end)
|
|
|
|
RegisterNetEvent('inventory:server:CraftItems', function(itemName, itemCosts, amount, toSlot, points)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
|
|
amount = tonumber(amount)
|
|
|
|
if not itemName or not itemCosts then return end
|
|
|
|
for k, v in pairs(itemCosts) do
|
|
RemoveItem(src, k, (v*amount))
|
|
end
|
|
AddItem(src, itemName, amount, toSlot)
|
|
Player.Functions.SetMetaData("craftingrep", Player.PlayerData.metadata["craftingrep"] + (points * amount))
|
|
TriggerClientEvent("inventory:client:UpdatePlayerInventory", src, false)
|
|
end)
|
|
|
|
RegisterNetEvent('inventory:server:CraftAttachment', function(itemName, itemCosts, amount, toSlot, points)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
|
|
amount = tonumber(amount)
|
|
|
|
if not itemName or not itemCosts then return end
|
|
|
|
for k, v in pairs(itemCosts) do
|
|
RemoveItem(src, k, (v*amount))
|
|
end
|
|
AddItem(src, itemName, amount, toSlot)
|
|
Player.Functions.SetMetaData("attachmentcraftingrep", Player.PlayerData.metadata["attachmentcraftingrep"] + (points * amount))
|
|
TriggerClientEvent("inventory:client:UpdatePlayerInventory", src, false)
|
|
end)
|
|
|
|
RegisterNetEvent('inventory:server:SetIsOpenState', function(IsOpen, type, id)
|
|
if IsOpen then return end
|
|
|
|
if type == "stash" then
|
|
Stashes[id].isOpen = false
|
|
elseif type == "trunk" then
|
|
Trunks[id].isOpen = false
|
|
elseif type == "glovebox" then
|
|
Gloveboxes[id].isOpen = false
|
|
elseif type == "drop" then
|
|
Drops[id].isOpen = false
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('inventory:server:OpenInventory', function(name, id, other)
|
|
local src = source
|
|
local ply = Player(src)
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if ply.state.inv_busy then
|
|
return QBCore.Functions.Notify(src, Lang:t("notify.noaccess"), 'error')
|
|
end
|
|
if name and id then
|
|
local secondInv = {}
|
|
if name == "stash" then
|
|
if Stashes[id] then
|
|
if Stashes[id].isOpen then
|
|
local Target = QBCore.Functions.GetPlayer(Stashes[id].isOpen)
|
|
if Target then
|
|
TriggerClientEvent('inventory:client:CheckOpenState', Stashes[id].isOpen, name, id, Stashes[id].label)
|
|
else
|
|
Stashes[id].isOpen = false
|
|
end
|
|
end
|
|
end
|
|
local maxweight = 1000000
|
|
local slots = 50
|
|
if other then
|
|
maxweight = other.maxweight or 1000000
|
|
slots = other.slots or 50
|
|
end
|
|
secondInv.name = "stash-"..id
|
|
secondInv.label = "Stash-"..id
|
|
secondInv.maxweight = maxweight
|
|
secondInv.inventory = {}
|
|
secondInv.slots = slots
|
|
if Stashes[id] and Stashes[id].isOpen then
|
|
secondInv.name = "none-inv"
|
|
secondInv.label = "Stash-None"
|
|
secondInv.maxweight = 1000000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = 0
|
|
else
|
|
local stashItems = GetStashItems(id)
|
|
if next(stashItems) then
|
|
secondInv.inventory = stashItems
|
|
Stashes[id] = {}
|
|
Stashes[id].items = stashItems
|
|
Stashes[id].isOpen = src
|
|
Stashes[id].label = secondInv.label
|
|
else
|
|
Stashes[id] = {}
|
|
Stashes[id].items = {}
|
|
Stashes[id].isOpen = src
|
|
Stashes[id].label = secondInv.label
|
|
end
|
|
end
|
|
elseif name == "trunk" then
|
|
if Trunks[id] then
|
|
if Trunks[id].isOpen then
|
|
local Target = QBCore.Functions.GetPlayer(Trunks[id].isOpen)
|
|
if Target then
|
|
TriggerClientEvent('inventory:client:CheckOpenState', Trunks[id].isOpen, name, id, Trunks[id].label)
|
|
else
|
|
Trunks[id].isOpen = false
|
|
end
|
|
end
|
|
end
|
|
secondInv.name = "trunk-"..id
|
|
secondInv.label = "Trunk-"..id
|
|
secondInv.maxweight = other.maxweight or 60000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = other.slots or 50
|
|
if (Trunks[id] and Trunks[id].isOpen) or (QBCore.Shared.SplitStr(id, "PLZI")[2] and (Player.PlayerData.job.name ~= "police" or Player.PlayerData.job.type ~= "leo")) then
|
|
secondInv.name = "none-inv"
|
|
secondInv.label = "Trunk-None"
|
|
secondInv.maxweight = other.maxweight or 60000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = 0
|
|
else
|
|
if id then
|
|
local ownedItems = GetOwnedVehicleItems(id)
|
|
if IsVehicleOwned(id) and next(ownedItems) then
|
|
secondInv.inventory = ownedItems
|
|
Trunks[id] = {}
|
|
Trunks[id].items = ownedItems
|
|
Trunks[id].isOpen = src
|
|
Trunks[id].label = secondInv.label
|
|
elseif Trunks[id] and not Trunks[id].isOpen then
|
|
secondInv.inventory = Trunks[id].items
|
|
Trunks[id].isOpen = src
|
|
Trunks[id].label = secondInv.label
|
|
else
|
|
Trunks[id] = {}
|
|
Trunks[id].items = {}
|
|
Trunks[id].isOpen = src
|
|
Trunks[id].label = secondInv.label
|
|
end
|
|
end
|
|
end
|
|
elseif name == "glovebox" then
|
|
if Gloveboxes[id] then
|
|
if Gloveboxes[id].isOpen then
|
|
local Target = QBCore.Functions.GetPlayer(Gloveboxes[id].isOpen)
|
|
if Target then
|
|
TriggerClientEvent('inventory:client:CheckOpenState', Gloveboxes[id].isOpen, name, id, Gloveboxes[id].label)
|
|
else
|
|
Gloveboxes[id].isOpen = false
|
|
end
|
|
end
|
|
end
|
|
secondInv.name = "glovebox-"..id
|
|
secondInv.label = "Glovebox-"..id
|
|
secondInv.maxweight = 10000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = 5
|
|
if Gloveboxes[id] and Gloveboxes[id].isOpen then
|
|
secondInv.name = "none-inv"
|
|
secondInv.label = "Glovebox-None"
|
|
secondInv.maxweight = 10000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = 0
|
|
else
|
|
local ownedItems = GetOwnedVehicleGloveboxItems(id)
|
|
if Gloveboxes[id] and not Gloveboxes[id].isOpen then
|
|
secondInv.inventory = Gloveboxes[id].items
|
|
Gloveboxes[id].isOpen = src
|
|
Gloveboxes[id].label = secondInv.label
|
|
elseif IsVehicleOwned(id) and next(ownedItems) then
|
|
secondInv.inventory = ownedItems
|
|
Gloveboxes[id] = {}
|
|
Gloveboxes[id].items = ownedItems
|
|
Gloveboxes[id].isOpen = src
|
|
Gloveboxes[id].label = secondInv.label
|
|
else
|
|
Gloveboxes[id] = {}
|
|
Gloveboxes[id].items = {}
|
|
Gloveboxes[id].isOpen = src
|
|
Gloveboxes[id].label = secondInv.label
|
|
end
|
|
end
|
|
elseif name == "shop" then
|
|
secondInv.name = "itemshop-"..id
|
|
secondInv.label = other.label
|
|
secondInv.maxweight = 900000
|
|
secondInv.inventory = SetupShopItems(other.items)
|
|
ShopItems[id] = {}
|
|
ShopItems[id].items = other.items
|
|
secondInv.slots = #other.items
|
|
elseif name == "traphouse" then
|
|
secondInv.name = "traphouse-"..id
|
|
secondInv.label = other.label
|
|
secondInv.maxweight = 900000
|
|
secondInv.inventory = other.items
|
|
secondInv.slots = other.slots
|
|
elseif name == "crafting" then
|
|
secondInv.name = "crafting"
|
|
secondInv.label = other.label
|
|
secondInv.maxweight = 900000
|
|
secondInv.inventory = other.items
|
|
secondInv.slots = #other.items
|
|
elseif name == "attachment_crafting" then
|
|
secondInv.name = "attachment_crafting"
|
|
secondInv.label = other.label
|
|
secondInv.maxweight = 900000
|
|
secondInv.inventory = other.items
|
|
secondInv.slots = #other.items
|
|
elseif name == "otherplayer" then
|
|
local OtherPlayer = QBCore.Functions.GetPlayer(tonumber(id))
|
|
if OtherPlayer then
|
|
secondInv.name = "otherplayer-"..id
|
|
secondInv.label = "Player-"..id
|
|
secondInv.maxweight = Config.MaxInventoryWeight
|
|
secondInv.inventory = OtherPlayer.PlayerData.items
|
|
if (Player.PlayerData.job.name == "police" or Player.PlayerData.job.type == "leo") and Player.PlayerData.job.onduty then
|
|
secondInv.slots = Config.MaxInventorySlots
|
|
else
|
|
secondInv.slots = Config.MaxInventorySlots - 1
|
|
end
|
|
Wait(250)
|
|
end
|
|
else
|
|
if Drops[id] then
|
|
if Drops[id].isOpen then
|
|
local Target = QBCore.Functions.GetPlayer(Drops[id].isOpen)
|
|
if Target then
|
|
TriggerClientEvent('inventory:client:CheckOpenState', Drops[id].isOpen, name, id, Drops[id].label)
|
|
else
|
|
Drops[id].isOpen = false
|
|
end
|
|
end
|
|
end
|
|
if Drops[id] and not Drops[id].isOpen then
|
|
secondInv.coords = Drops[id].coords
|
|
secondInv.name = id
|
|
secondInv.label = "Dropped-"..tostring(id)
|
|
secondInv.maxweight = 100000
|
|
secondInv.inventory = Drops[id].items
|
|
secondInv.slots = 30
|
|
Drops[id].isOpen = src
|
|
Drops[id].label = secondInv.label
|
|
Drops[id].createdTime = os.time()
|
|
else
|
|
secondInv.name = "none-inv"
|
|
secondInv.label = "Dropped-None"
|
|
secondInv.maxweight = 100000
|
|
secondInv.inventory = {}
|
|
secondInv.slots = 0
|
|
end
|
|
end
|
|
TriggerClientEvent("ps-inventory:client:closeinv", id)
|
|
TriggerClientEvent("inventory:client:OpenInventory", src, {}, Player.PlayerData.items, secondInv)
|
|
else
|
|
TriggerClientEvent("inventory:client:OpenInventory", src, {}, Player.PlayerData.items)
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('inventory:server:SaveInventory', function(type, id)
|
|
if type == "trunk" then
|
|
if IsVehicleOwned(id) then
|
|
SaveOwnedVehicleItems(id, Trunks[id].items)
|
|
else
|
|
Trunks[id].isOpen = false
|
|
end
|
|
elseif type == "glovebox" then
|
|
if (IsVehicleOwned(id)) then
|
|
SaveOwnedGloveboxItems(id, Gloveboxes[id].items)
|
|
else
|
|
Gloveboxes[id].isOpen = false
|
|
end
|
|
elseif type == "stash" then
|
|
SaveStashItems(id, Stashes[id].items)
|
|
elseif type == "drop" then
|
|
if Drops[id] then
|
|
Drops[id].isOpen = false
|
|
if Drops[id].items == nil or next(Drops[id].items) == nil then
|
|
Drops[id] = nil
|
|
TriggerClientEvent("inventory:client:RemoveDropItem", -1, id)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('inventory:server:UseItemSlot', function(slot)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
local itemData = Player.Functions.GetItemBySlot(slot)
|
|
if itemData then
|
|
local itemInfo = QBCore.Shared.Items[itemData.name]
|
|
if itemData.type == "weapon" then
|
|
if itemData.info.quality then
|
|
if itemData.info.quality > 0 then
|
|
TriggerClientEvent("inventory:client:UseWeapon", src, itemData, true)
|
|
else
|
|
TriggerClientEvent("inventory:client:UseWeapon", src, itemData, false)
|
|
end
|
|
else
|
|
TriggerClientEvent("inventory:client:UseWeapon", src, itemData, true)
|
|
end
|
|
TriggerClientEvent('inventory:client:ItemBox', src, itemInfo, "use")
|
|
elseif itemData.useable then
|
|
if itemData.info.quality then
|
|
if itemData.info.quality > 0 then
|
|
UseItem(itemData.name, src, itemData)
|
|
TriggerClientEvent('inventory:client:ItemBox', src, itemInfo, "use")
|
|
else
|
|
if itemInfo['delete'] and RemoveItem(src,itemData.name,1,slot) then
|
|
TriggerClientEvent('inventory:client:ItemBox',src, itemInfo, "remove")
|
|
else
|
|
TriggerClientEvent("QBCore:Notify", src, "Du kan ikke bruge denne ting!", "error")
|
|
end
|
|
end
|
|
else
|
|
UseItem(itemData.name, src, itemData)
|
|
TriggerClientEvent('inventory:client:ItemBox', src, itemInfo, "use")
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('inventory:server:UseItem', function(inventory, item)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if inventory == "player" or inventory == "hotbar" then
|
|
local itemData = Player.Functions.GetItemBySlot(item.slot)
|
|
if itemData then
|
|
local itemInfo = QBCore.Shared.Items[itemData.name]
|
|
if itemData.type ~= "weapon" then
|
|
if itemData.info.quality then
|
|
if itemData.info.quality <= 0 then
|
|
if itemInfo['delete'] and RemoveItem(src,itemData.name,1,item.slot) then
|
|
TriggerClientEvent("QBCore:Notify", src, "Du kan ikke bruge denne ting!", "error")
|
|
TriggerClientEvent('inventory:client:ItemBox',src, itemInfo, "remove")
|
|
return
|
|
else
|
|
TriggerClientEvent("QBCore:Notify", src, "Du kan ikke bruge denne ting!", "error")
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end
|
|
UseItem(itemData.name, src, itemData)
|
|
TriggerClientEvent('inventory:client:ItemBox', src, itemInfo, "use")
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('inventory:server:SetInventoryData', function(fromInventory, toInventory, fromSlot, toSlot, fromAmount, toAmount)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
fromSlot = tonumber(fromSlot)
|
|
toSlot = tonumber(toSlot)
|
|
|
|
if (fromInventory == "player" or fromInventory == "hotbar") and (QBCore.Shared.SplitStr(toInventory, "-")[1] == "itemshop" or toInventory == "crafting") then
|
|
return
|
|
end
|
|
|
|
if fromInventory == "player" or fromInventory == "hotbar" then
|
|
local fromItemData = GetItemBySlot(src, fromSlot)
|
|
fromAmount = tonumber(fromAmount) or fromItemData.amount
|
|
if fromItemData and fromItemData.amount >= fromAmount then
|
|
if toInventory == "player" or toInventory == "hotbar" then
|
|
local toItemData = GetItemBySlot(src, toSlot)
|
|
RemoveItem(src, fromItemData.name, fromAmount, fromSlot)
|
|
TriggerClientEvent("inventory:client:CheckWeapon", src, fromItemData.name)
|
|
if toItemData ~= nil then
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
RemoveItem(src, toItemData.name, toAmount, toSlot)
|
|
AddItem(src, toItemData.name, toAmount, fromSlot, toItemData.info)
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount.. "**")
|
|
end
|
|
end
|
|
AddItem(src, fromItemData.name, fromAmount, toSlot, fromItemData.info, fromItemData["created"])
|
|
elseif QBCore.Shared.SplitStr(toInventory, "-")[1] == "otherplayer" then
|
|
local playerId = tonumber(QBCore.Shared.SplitStr(toInventory, "-")[2])
|
|
local OtherPlayer = QBCore.Functions.GetPlayer(playerId)
|
|
local toItemData = OtherPlayer.PlayerData.items[toSlot]
|
|
local itemDataTest = OtherPlayer.Functions.GetItemBySlot(toSlot)
|
|
RemoveItem(src, fromItemData.name, fromAmount, fromSlot)
|
|
TriggerClientEvent("inventory:client:CheckWeapon", src, fromItemData.name)
|
|
if toItemData ~= nil then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if itemDataTest.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
OtherPlayer.Functions.RemoveItem(itemInfo["name"], toAmount, fromSlot)
|
|
Player.Functions.AddItem(toItemData.name, toAmount, fromSlot, toItemData.info)
|
|
TriggerEvent("qb-log:server:CreateLog", "robbing", "Swapped Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount.. "** with player: **".. GetPlayerName(OtherPlayer.PlayerData.source) .. "** (citizenid: *"..OtherPlayer.PlayerData.citizenid.."* | id: *"..OtherPlayer.PlayerData.source.."*)")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount.. "** with player: **".. GetPlayerName(OtherPlayer.PlayerData.source) .. "** (citizenid: *"..OtherPlayer.PlayerData.citizenid.."* | id: *"..OtherPlayer.PlayerData.source.."*)")
|
|
end
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
TriggerEvent("qb-log:server:CreateLog", "robbing", "Dropped Item", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) dropped new item; name: **"..itemInfo["name"].."**, amount: **" .. fromAmount .. "** to player: **".. GetPlayerName(OtherPlayer.PlayerData.source) .. "** (citizenid: *"..OtherPlayer.PlayerData.citizenid.."* | id: *"..OtherPlayer.PlayerData.source.."*)")
|
|
end
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
AddItem(playerId, itemInfo["name"], fromAmount, toSlot, fromItemData.info, itemInfo["created"])
|
|
elseif QBCore.Shared.SplitStr(toInventory, "-")[1] == "trunk" then
|
|
local plate = QBCore.Shared.SplitStr(toInventory, "-")[2]
|
|
local toItemData = Trunks[plate].items[toSlot]
|
|
RemoveItem(src, fromItemData.name, fromAmount, fromSlot)
|
|
TriggerClientEvent("inventory:client:CheckWeapon", src, fromItemData.name)
|
|
if toItemData ~= nil then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
RemoveFromTrunk(plate, fromSlot, itemInfo["name"], toAmount)
|
|
Player.Functions.AddItem(toItemData.name, toAmount, fromSlot, toItemData.info)
|
|
TriggerEvent("qb-log:server:CreateLog", "trunk", "Swapped Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount .. "** - plate: *" .. plate .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount.. "** - plate: *" .. plate .. "*")
|
|
end
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
TriggerEvent("qb-log:server:CreateLog", "trunk", "Dropped Item", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) dropped new item; name: **"..itemInfo["name"].."**, amount: **" .. fromAmount .. "** - plate: *" .. plate .. "*")
|
|
end
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
AddToTrunk(plate, toSlot, fromSlot, itemInfo["name"], fromAmount, fromItemData.info, itemInfo["created"])
|
|
elseif QBCore.Shared.SplitStr(toInventory, "-")[1] == "glovebox" then
|
|
local plate = QBCore.Shared.SplitStr(toInventory, "-")[2]
|
|
local toItemData = Gloveboxes[plate].items[toSlot]
|
|
RemoveItem(src, fromItemData.name, fromAmount, fromSlot)
|
|
TriggerClientEvent("inventory:client:CheckWeapon", src, fromItemData.name)
|
|
if toItemData ~= nil then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
RemoveFromGlovebox(plate, fromSlot, itemInfo["name"], toAmount)
|
|
Player.Functions.AddItem(toItemData.name, toAmount, fromSlot, toItemData.info)
|
|
TriggerEvent("qb-log:server:CreateLog", "glovebox", "Swapped Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount .. "** - plate: *" .. plate .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount.. "** - plate: *" .. plate .. "*")
|
|
end
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
TriggerEvent("qb-log:server:CreateLog", "glovebox", "Dropped Item", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) dropped new item; name: **"..itemInfo["name"].."**, amount: **" .. fromAmount .. "** - plate: *" .. plate .. "*")
|
|
end
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
AddToGlovebox(plate, toSlot, fromSlot, itemInfo["name"], fromAmount, fromItemData.info, itemInfo["created"])
|
|
elseif QBCore.Shared.SplitStr(toInventory, "-")[1] == "stash" then
|
|
local stashId = QBCore.Shared.SplitStr(toInventory, "-")[2]
|
|
local toItemData = Stashes[stashId].items[toSlot]
|
|
RemoveItem(src, fromItemData.name, fromAmount, fromSlot)
|
|
TriggerClientEvent("inventory:client:CheckWeapon", src, fromItemData.name)
|
|
if toItemData ~= nil then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
--RemoveFromStash(stashId, fromSlot, itemInfo["name"], toAmount)
|
|
RemoveFromStash(stashId, toSlot, itemInfo["name"], toAmount)
|
|
Player.Functions.AddItem(toItemData.name, toAmount, fromSlot, toItemData.info)
|
|
TriggerEvent("qb-log:server:CreateLog", "stash", "Swapped Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount .. "** - stash: *" .. stashId .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount.. "** - stash: *" .. stashId .. "*")
|
|
end
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
TriggerEvent("qb-log:server:CreateLog", "stash", "Dropped Item", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) dropped new item; name: **"..itemInfo["name"].."**, amount: **" .. fromAmount .. "** - stash: *" .. stashId .. "*")
|
|
end
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
AddToStash(stashId, toSlot, fromSlot, itemInfo["name"], fromAmount, fromItemData.info, itemInfo["created"])
|
|
elseif QBCore.Shared.SplitStr(toInventory, "-")[1] == "traphouse" then
|
|
-- Traphouse
|
|
local traphouseId = QBCore.Shared.SplitStr(toInventory, "_")[2]
|
|
local toItemData = exports['qb-traphouse']:GetInventoryData(traphouseId, toSlot)
|
|
local IsItemValid = exports['qb-traphouse']:CanItemBeSaled(fromItemData.name:lower())
|
|
if IsItemValid then
|
|
RemoveItem(src, fromItemData.name, fromAmount, fromSlot)
|
|
TriggerClientEvent("inventory:client:CheckWeapon", src, fromItemData.name)
|
|
if toItemData ~= nil then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
exports['qb-traphouse']:RemoveHouseItem(traphouseId, fromSlot, itemInfo["name"], toAmount)
|
|
Player.Functions.AddItem(toItemData.name, toAmount, fromSlot, toItemData.info)
|
|
TriggerEvent("qb-log:server:CreateLog", "traphouse", "Swapped Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount .. "** - traphouse: *" .. traphouseId .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount.. "** - traphouse: *" .. traphouseId .. "*")
|
|
end
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
TriggerEvent("qb-log:server:CreateLog", "traphouse", "Dropped Item", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) dropped new item; name: **"..itemInfo["name"].."**, amount: **" .. fromAmount .. "** - traphouse: *" .. traphouseId .. "*")
|
|
end
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
exports['qb-traphouse']:AddHouseItem(traphouseId, toSlot, itemInfo["name"], fromAmount, fromItemData.info, src)
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, "Du kan ikke sælge denne ting..", 'error')
|
|
end
|
|
else
|
|
-- drop
|
|
toInventory = tonumber(toInventory)
|
|
if toInventory == nil or toInventory == 0 then
|
|
CreateNewDrop(src, fromSlot, toSlot, fromAmount)
|
|
else
|
|
local toItemData = Drops[toInventory].items[toSlot]
|
|
RemoveItem(src, fromItemData.name, fromAmount, fromSlot)
|
|
TriggerClientEvent("inventory:client:CheckWeapon", src, fromItemData.name)
|
|
if toItemData ~= nil then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
Player.Functions.AddItem(toItemData.name, toAmount, fromSlot, toItemData.info)
|
|
RemoveFromDrop(toInventory, fromSlot, itemInfo["name"], toAmount)
|
|
TriggerEvent("qb-log:server:CreateLog", "drop", "Swapped Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount .. "** - dropid: *" .. toInventory .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount.. "** - dropid: *" .. toInventory .. "*")
|
|
end
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
TriggerEvent("qb-log:server:CreateLog", "drop", "Dropped Item", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) dropped new item; name: **"..itemInfo["name"].."**, amount: **" .. fromAmount .. "** - dropid: *" .. toInventory .. "*")
|
|
end
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
AddToDrop(toInventory, toSlot, itemInfo["name"], fromAmount, fromItemData.info, itemInfo["created"])
|
|
if itemInfo["name"] == "radio" then
|
|
TriggerClientEvent('Radio.Set', src, false)
|
|
end
|
|
end
|
|
end
|
|
else
|
|
TriggerClientEvent("QBCore:Notify", src, "Du har ikke denne ting!", "error")
|
|
end
|
|
elseif QBCore.Shared.SplitStr(fromInventory, "-")[1] == "otherplayer" then
|
|
local playerId = tonumber(QBCore.Shared.SplitStr(fromInventory, "-")[2])
|
|
local OtherPlayer = QBCore.Functions.GetPlayer(playerId)
|
|
local fromItemData = OtherPlayer.PlayerData.items[fromSlot]
|
|
fromAmount = tonumber(fromAmount) or fromItemData.amount
|
|
if fromItemData and fromItemData.amount >= fromAmount then
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
if toInventory == "player" or toInventory == "hotbar" then
|
|
local toItemData = GetItemBySlot(src, toSlot)
|
|
RemoveItem(playerId, itemInfo["name"], fromAmount, fromSlot)
|
|
TriggerClientEvent("inventory:client:CheckWeapon", OtherPlayer.PlayerData.source, fromItemData.name)
|
|
if toItemData ~= nil then
|
|
itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
Player.Functions.RemoveItem(toItemData.name, toAmount, toSlot)
|
|
OtherPlayer.Functions.AddItem(itemInfo["name"], toAmount, fromSlot, toItemData.info)
|
|
TriggerEvent("qb-log:server:CreateLog", "robbing", "Swapped Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** from player: **".. GetPlayerName(OtherPlayer.PlayerData.source) .. "** (citizenid: *"..OtherPlayer.PlayerData.citizenid.."* | *"..OtherPlayer.PlayerData.source.."*)")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount.. "** with player: **".. GetPlayerName(OtherPlayer.PlayerData.source) .. "** (citizenid: *"..OtherPlayer.PlayerData.citizenid.."* | id: *"..OtherPlayer.PlayerData.source.."*)")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "robbing", "Retrieved Item", "green", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) took item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount .. "** from player: **".. GetPlayerName(OtherPlayer.PlayerData.source) .. "** (citizenid: *"..OtherPlayer.PlayerData.citizenid.."* | *"..OtherPlayer.PlayerData.source.."*)")
|
|
end
|
|
AddItem(src, fromItemData.name, fromAmount, toSlot, fromItemData.info, fromItemData["created"])
|
|
else
|
|
local toItemData = OtherPlayer.PlayerData.items[toSlot]
|
|
local itemDataTest = OtherPlayer.Functions.GetItemBySlot(toSlot)
|
|
RemoveItem(playerId, itemInfo["name"], fromAmount, fromSlot)
|
|
if toItemData ~= nil then
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if itemDataTest.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
OtherPlayer.Functions.RemoveItem(itemInfo["name"], toAmount, toSlot)
|
|
OtherPlayer.Functions.AddItem(itemInfo["name"], toAmount, fromSlot, toItemData.info)
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** with name: **" .. fromItemData.name .. "**, amount: **" .. fromAmount.. "** with player: **".. GetPlayerName(OtherPlayer.PlayerData.source) .. "** (citizenid: *"..OtherPlayer.PlayerData.citizenid.."* | id: *"..OtherPlayer.PlayerData.source.."*)")
|
|
end
|
|
end
|
|
itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
AddItem(playerId, itemInfo["name"], fromAmount, toSlot, fromItemData.info, itemInfo["created"])
|
|
end
|
|
else
|
|
QBCore.Functions.Notify(src, "Ting findes ikke!", "error")
|
|
end
|
|
elseif QBCore.Shared.SplitStr(fromInventory, "-")[1] == "trunk" then
|
|
local plate = QBCore.Shared.SplitStr(fromInventory, "-")[2]
|
|
local fromItemData = Trunks[plate].items[fromSlot]
|
|
fromAmount = tonumber(fromAmount) or fromItemData.amount
|
|
if fromItemData and fromItemData.amount >= fromAmount then
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
if toInventory == "player" or toInventory == "hotbar" then
|
|
local toItemData = GetItemBySlot(src, toSlot)
|
|
RemoveFromTrunk(plate, fromSlot, itemInfo["name"], fromAmount)
|
|
if toItemData ~= nil then
|
|
itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
Player.Functions.RemoveItem(toItemData.name, toAmount, toSlot)
|
|
AddToTrunk(plate, fromSlot, toSlot, itemInfo["name"], toAmount, toItemData.info, itemInfo["created"])
|
|
TriggerEvent("qb-log:server:CreateLog", "trunk", "Swapped Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** plate: *" .. plate .. "*")
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "trunk", "Stacked Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) stacked item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** from plate: *" .. plate .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with name: **" .. itemInfo["name"] .. "**, amount: **" .. toAmount.. "** plate: *" .. plate .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "trunk", "Received Item", "green", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) received item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount.. "** plate: *" .. plate .. "*")
|
|
end
|
|
AddItem(src, fromItemData.name, fromAmount, toSlot, fromItemData.info, fromItemData["created"])
|
|
else
|
|
local toItemData = Trunks[plate].items[toSlot]
|
|
RemoveFromTrunk(plate, fromSlot, itemInfo["name"], fromAmount)
|
|
if toItemData ~= nil then
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
RemoveFromTrunk(plate, toSlot, itemInfo["name"], toAmount)
|
|
AddToTrunk(plate, fromSlot, toSlot, itemInfo["name"], toAmount, toItemData.info, itemInfo["created"])
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with name: **" .. itemInfo["name"] .. "**, amount: **" .. toAmount.. "** plate: *" .. plate .. "*")
|
|
end
|
|
end
|
|
itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
AddToTrunk(plate, toSlot, fromSlot, itemInfo["name"], fromAmount, fromItemData.info, itemInfo["created"])
|
|
end
|
|
else
|
|
QBCore.Functions.Notify(src, Lang:t("notify.itemexist"), "error")
|
|
end
|
|
elseif QBCore.Shared.SplitStr(fromInventory, "-")[1] == "glovebox" then
|
|
local plate = QBCore.Shared.SplitStr(fromInventory, "-")[2]
|
|
local fromItemData = Gloveboxes[plate].items[fromSlot]
|
|
fromAmount = tonumber(fromAmount) or fromItemData.amount
|
|
if fromItemData and fromItemData.amount >= fromAmount then
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
if toInventory == "player" or toInventory == "hotbar" then
|
|
local toItemData = GetItemBySlot(src, toSlot)
|
|
RemoveFromGlovebox(plate, fromSlot, itemInfo["name"], fromAmount)
|
|
if toItemData ~= nil then
|
|
itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
Player.Functions.RemoveItem(toItemData.name, toAmount, toSlot)
|
|
AddToGlovebox(plate, fromSlot, toSlot, itemInfo["name"], toAmount, toItemData.info, itemInfo["created"])
|
|
TriggerEvent("qb-log:server:CreateLog", "glovebox", "Swapped", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src..")* swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; name: **"..itemInfo["name"].."**, amount: **" .. toAmount .. "** plate: *" .. plate .. "*")
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "glovebox", "Stacked Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) stacked item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** from plate: *" .. plate .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with name: **" .. itemInfo["name"] .. "**, amount: **" .. toAmount.. "** plate: *" .. plate .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "glovebox", "Received Item", "green", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) received item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount.. "** plate: *" .. plate .. "*")
|
|
end
|
|
AddItem(src, fromItemData.name, fromAmount, toSlot, fromItemData.info, fromItemData["created"])
|
|
else
|
|
local toItemData = Gloveboxes[plate].items[toSlot]
|
|
RemoveFromGlovebox(plate, fromSlot, itemInfo["name"], fromAmount)
|
|
if toItemData ~= nil then
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
RemoveFromGlovebox(plate, toSlot, itemInfo["name"], toAmount)
|
|
AddToGlovebox(plate, fromSlot, toSlot, itemInfo["name"], toAmount, toItemData.info, itemInfo["created"])
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with name: **" .. itemInfo["name"] .. "**, amount: **" .. toAmount.. "** plate: *" .. plate .. "*")
|
|
end
|
|
end
|
|
itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
AddToGlovebox(plate, toSlot, fromSlot, itemInfo["name"], fromAmount, fromItemData.info, itemInfo["created"])
|
|
end
|
|
else
|
|
QBCore.Functions.Notify(src, Lang:t("notify.itemexist"), "error")
|
|
end
|
|
elseif QBCore.Shared.SplitStr(fromInventory, "-")[1] == "stash" then
|
|
local stashId = QBCore.Shared.SplitStr(fromInventory, "-")[2]
|
|
local fromItemData = Stashes[stashId].items[fromSlot]
|
|
fromAmount = tonumber(fromAmount) or fromItemData.amount
|
|
if fromItemData and fromItemData.amount >= fromAmount then
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
if toInventory == "player" or toInventory == "hotbar" then
|
|
local toItemData = GetItemBySlot(src, toSlot)
|
|
RemoveFromStash(stashId, fromSlot, itemInfo["name"], fromAmount)
|
|
if toItemData ~= nil then
|
|
itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
Player.Functions.RemoveItem(toItemData.name, toAmount, toSlot)
|
|
AddToStash(stashId, fromSlot, toSlot, itemInfo["name"], toAmount, toItemData.info, itemInfo["created"])
|
|
TriggerEvent("qb-log:server:CreateLog", "stash", "Swapped Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount .. "** stash: *" .. stashId .. "*")
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "stash", "Stacked Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) stacked item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** from stash: *" .. stashId .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount .. "** stash: *" .. stashId .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "stash", "Received Item", "green", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) received item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount.. "** stash: *" .. stashId .. "*")
|
|
end
|
|
SaveStashItems(stashId, Stashes[stashId].items)
|
|
AddItem(src, fromItemData.name, fromAmount, toSlot, fromItemData.info, fromItemData["created"])
|
|
else
|
|
local toItemData = Stashes[stashId].items[toSlot]
|
|
RemoveFromStash(stashId, fromSlot, itemInfo["name"], fromAmount)
|
|
if toItemData ~= nil then
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
RemoveFromStash(stashId, toSlot, itemInfo["name"], toAmount)
|
|
AddToStash(stashId, fromSlot, toSlot, itemInfo["name"], toAmount, toItemData.info, itemInfo["created"])
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount .. "** stash: *" .. stashId .. "*")
|
|
end
|
|
end
|
|
itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
AddToStash(stashId, toSlot, fromSlot, itemInfo["name"], fromAmount, fromItemData.info, itemInfo["created"])
|
|
end
|
|
else
|
|
QBCore.Functions.Notify(src, Lang:t("notify.itemexist"), "error")
|
|
end
|
|
elseif QBCore.Shared.SplitStr(fromInventory, "-")[1] == "traphouse" then
|
|
local traphouseId = QBCore.Shared.SplitStr(fromInventory, "_")[2]
|
|
local fromItemData = exports['qb-traphouse']:GetInventoryData(traphouseId, fromSlot)
|
|
fromAmount = tonumber(fromAmount) or fromItemData.amount
|
|
if fromItemData and fromItemData.amount >= fromAmount then
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
if toInventory == "player" or toInventory == "hotbar" then
|
|
local toItemData = GetItemBySlot(src, toSlot)
|
|
exports['qb-traphouse']:RemoveHouseItem(traphouseId, fromSlot, itemInfo["name"], fromAmount)
|
|
if toItemData ~= nil then
|
|
itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
Player.Functions.RemoveItem(toItemData.name, toAmount, toSlot)
|
|
exports['qb-traphouse']:AddHouseItem(traphouseId, fromSlot, itemInfo["name"], toAmount, toItemData.info, src)
|
|
TriggerEvent("qb-log:server:CreateLog", "stash", "Swapped Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount .. "** stash: *" .. traphouseId .. "*")
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "stash", "Stacked Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) stacked item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** from stash: *" .. traphouseId .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount .. "** stash: *" .. traphouseId .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "stash", "Received Item", "green", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) received item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount.. "** stash: *" .. traphouseId .. "*")
|
|
end
|
|
AddItem(src, fromItemData.name, fromAmount, toSlot, fromItemData.info, fromItemData["created"])
|
|
else
|
|
local toItemData = exports['qb-traphouse']:GetInventoryData(traphouseId, toSlot)
|
|
exports['qb-traphouse']:RemoveHouseItem(traphouseId, fromSlot, itemInfo["name"], fromAmount)
|
|
if toItemData ~= nil then
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
exports['qb-traphouse']:RemoveHouseItem(traphouseId, toSlot, itemInfo["name"], toAmount)
|
|
exports['qb-traphouse']:AddHouseItem(traphouseId, fromSlot, itemInfo["name"], toAmount, toItemData.info, src)
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount .. "** stash: *" .. traphouseId .. "*")
|
|
end
|
|
end
|
|
itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
exports['qb-traphouse']:AddHouseItem(traphouseId, toSlot, itemInfo["name"], fromAmount, fromItemData.info, src)
|
|
end
|
|
else
|
|
QBCore.Functions.Notify(src, "Ting findes ikke??", "error")
|
|
end
|
|
elseif QBCore.Shared.SplitStr(fromInventory, "-")[1] == "itemshop" then
|
|
local shopType = QBCore.Shared.SplitStr(fromInventory, "-")[2]
|
|
local itemData = ShopItems[shopType].items[fromSlot]
|
|
local itemInfo = QBCore.Shared.Items[itemData.name:lower()]
|
|
local bankBalance = Player.PlayerData.money["bank"]
|
|
local price = tonumber((itemData.price*fromAmount))
|
|
|
|
if QBCore.Shared.SplitStr(shopType, "_")[1] == "Dealer" then
|
|
if QBCore.Shared.SplitStr(itemData.name, "_")[1] == "weapon" then
|
|
price = tonumber(itemData.price)
|
|
if Player.Functions.RemoveMoney("cash", price, "dealer-item-bought") then
|
|
itemData.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))
|
|
itemData.info.quality = 100
|
|
AddItem(src, itemData.name, 1, toSlot, itemData.info)
|
|
TriggerClientEvent('qb-drugs:client:updateDealerItems', src, itemData, 1)
|
|
QBCore.Functions.Notify(src, itemInfo["label"] .. " købt!", "success")
|
|
TriggerEvent("qb-log:server:CreateLog", "dealers", "Dealer item bought", "green", "**"..GetPlayerName(src) .. "** bought a " .. itemInfo["label"] .. " for $"..price)
|
|
else
|
|
QBCore.Functions.Notify(src, "Du har ikke nok penge..", "error")
|
|
end
|
|
else
|
|
if Player.Functions.RemoveMoney("cash", price, "dealer-item-bought") then
|
|
AddItem(src, itemData.name, fromAmount, toSlot, itemData.info)
|
|
TriggerClientEvent('qb-drugs:client:updateDealerItems', src, itemData, fromAmount)
|
|
QBCore.Functions.Notify(src, itemInfo["label"] .. " købt!", "success")
|
|
TriggerEvent("qb-log:server:CreateLog", "dealers", "Dealer item bought", "green", "**"..GetPlayerName(src) .. "** bought a " .. itemInfo["label"] .. " for $"..price)
|
|
else
|
|
QBCore.Functions.Notify(src, "Du har ikke nok penge..", "error")
|
|
end
|
|
end
|
|
elseif QBCore.Shared.SplitStr(shopType, "_")[1] == "Itemshop" then
|
|
if Player.Functions.RemoveMoney("cash", price, "itemshop-bought-item") then
|
|
if QBCore.Shared.SplitStr(itemData.name, "_")[1] == "weapon" then
|
|
itemData.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))
|
|
itemData.info.quality = 100
|
|
end
|
|
local serial = itemData.info.serie
|
|
local imageurl = ("https://cfx-nui-ps-inventory/html/images/%s.png"):format(itemData.name)
|
|
local notes = "Purchased at Ammunation"
|
|
local owner = Player.PlayerData.charinfo.firstname .. " " .. Player.PlayerData.charinfo.lastname
|
|
local weapClass = 1
|
|
local weapModel = QBCore.Shared.Items[itemData.name].label
|
|
AddItem(src, itemData.name, fromAmount, toSlot, itemData.info)
|
|
TriggerClientEvent('qb-shops:client:UpdateShop', src, QBCore.Shared.SplitStr(shopType, "_")[2], itemData, fromAmount)
|
|
QBCore.Functions.Notify(src, itemInfo["label"] .. " købt!", "success")
|
|
exports['ps-mdt']:CreateWeaponInfo(serial, imageurl, notes, owner, weapClass, weapModel)
|
|
TriggerEvent("qb-log:server:CreateLog", "shops", "Shop item bought", "green", "**"..GetPlayerName(src) .. "** bought a " .. itemInfo["label"] .. " for $"..price)
|
|
elseif bankBalance >= price then
|
|
Player.Functions.RemoveMoney("bank", price, "itemshop-bought-item")
|
|
if QBCore.Shared.SplitStr(itemData.name, "_")[1] == "weapon" then
|
|
itemData.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))
|
|
itemData.info.quality = 100
|
|
end
|
|
local serial = itemData.info.serie
|
|
local imageurl = ("https://cfx-nui-ps-inventory/html/images/%s.png"):format(itemData.name)
|
|
local notes = "Purchased at Ammunation"
|
|
local owner = Player.PlayerData.charinfo.firstname .. " " .. Player.PlayerData.charinfo.lastname
|
|
local weapClass = 1
|
|
local weapModel = QBCore.Shared.Items[itemData.name].label
|
|
AddItem(src, itemData.name, fromAmount, toSlot, itemData.info)
|
|
TriggerClientEvent('qb-shops:client:UpdateShop', src, QBCore.Shared.SplitStr(shopType, "_")[2], itemData, fromAmount)
|
|
QBCore.Functions.Notify(src, itemInfo["label"] .. " købt!", "success")
|
|
exports['ps-mdt']:CreateWeaponInfo(serial, imageurl, notes, owner, weapClass, weapModel)
|
|
TriggerEvent("qb-log:server:CreateLog", "shops", "Shop item bought", "green", "**"..GetPlayerName(src) .. "** bought a " .. itemInfo["label"] .. " for $"..price)
|
|
else
|
|
QBCore.Functions.Notify(src, "Du har ikke nok penge..", "error")
|
|
end
|
|
else
|
|
if Player.Functions.RemoveMoney("cash", price, "unkown-itemshop-bought-item") then
|
|
AddItem(src, itemData.name, fromAmount, toSlot, itemData.info)
|
|
QBCore.Functions.Notify(src, itemInfo["label"] .. " købt!", "success")
|
|
TriggerEvent("qb-log:server:CreateLog", "shops", "Shop item bought", "green", "**"..GetPlayerName(src) .. "** bought a " .. itemInfo["label"] .. " for $"..price)
|
|
elseif bankBalance >= price then
|
|
Player.Functions.RemoveMoney("bank", price, "unkown-itemshop-bought-item")
|
|
AddItem(src, itemData.name, fromAmount, toSlot, itemData.info)
|
|
QBCore.Functions.Notify(src, itemInfo["label"] .. " købt!", "success")
|
|
TriggerEvent("qb-log:server:CreateLog", "shops", "Shop item bought", "green", "**"..GetPlayerName(src) .. "** bought a " .. itemInfo["label"] .. " for $"..price)
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, "Du har ikke nok penge..", "error")
|
|
end
|
|
end
|
|
elseif fromInventory == "crafting" then
|
|
local itemData = Config.CraftingItems[fromSlot]
|
|
if hasCraftItems(src, itemData.costs, fromAmount) then
|
|
TriggerClientEvent("inventory:client:CraftItems", src, itemData.name, itemData.costs, fromAmount, toSlot, itemData.points)
|
|
else
|
|
TriggerClientEvent("inventory:client:UpdatePlayerInventory", src, true)
|
|
TriggerClientEvent('QBCore:Notify', src, "Du har ikke de rigtige ting..", "error")
|
|
end
|
|
elseif fromInventory == "attachment_crafting" then
|
|
local itemData = Config.AttachmentCrafting[fromSlot]
|
|
if hasCraftItems(src, itemData.costs, fromAmount) then
|
|
TriggerClientEvent("inventory:client:CraftAttachment", src, itemData.name, itemData.costs, fromAmount, toSlot, itemData.points)
|
|
else
|
|
TriggerClientEvent("inventory:client:UpdatePlayerInventory", src, true)
|
|
TriggerClientEvent('QBCore:Notify', src, "Du har ikke de rigtige ting..", "error")
|
|
end
|
|
else
|
|
-- drop
|
|
fromInventory = tonumber(fromInventory)
|
|
local fromItemData = Drops[fromInventory].items[fromSlot]
|
|
fromAmount = tonumber(fromAmount) or fromItemData.amount
|
|
if fromItemData and fromItemData.amount >= fromAmount then
|
|
local itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
if toInventory == "player" or toInventory == "hotbar" then
|
|
local toItemData = GetItemBySlot(src, toSlot)
|
|
RemoveFromDrop(fromInventory, fromSlot, itemInfo["name"], fromAmount)
|
|
if toItemData ~= nil then
|
|
toAmount = tonumber(toAmount) and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
Player.Functions.RemoveItem(toItemData.name, toAmount, toSlot)
|
|
AddToDrop(fromInventory, toSlot, itemInfo["name"], toAmount, toItemData.info, itemInfo["created"])
|
|
if itemInfo["name"] == "radio" then
|
|
TriggerClientEvent('Radio.Set', src, false)
|
|
end
|
|
TriggerEvent("qb-log:server:CreateLog", "drop", "Swapped Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount .. "** - dropid: *" .. fromInventory .. "*")
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "drop", "Stacked Item", "orange", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) stacked item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** - from dropid: *" .. fromInventory .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount .. "** - dropid: *" .. fromInventory .. "*")
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "drop", "Received Item", "green", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) received item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount.. "** - dropid: *" .. fromInventory .. "*")
|
|
end
|
|
AddItem(src, fromItemData.name, fromAmount, toSlot, fromItemData.info, fromItemData["created"])
|
|
else
|
|
toInventory = tonumber(toInventory)
|
|
local toItemData = Drops[toInventory].items[toSlot]
|
|
RemoveFromDrop(fromInventory, fromSlot, itemInfo["name"], fromAmount)
|
|
if toItemData ~= nil then
|
|
local toAmount = tonumber(toAmount) ~= nil and tonumber(toAmount) or toItemData.amount
|
|
if toItemData.amount >= toAmount then
|
|
if toItemData.name ~= fromItemData.name then
|
|
local itemInfo = QBCore.Shared.Items[toItemData.name:lower()]
|
|
RemoveFromDrop(toInventory, toSlot, itemInfo["name"], toAmount)
|
|
AddToDrop(fromInventory, fromSlot, itemInfo["name"], toAmount, toItemData.info, itemInfo["created"])
|
|
if itemInfo["name"] == "radio" then
|
|
TriggerClientEvent('Radio.Set', src, false)
|
|
end
|
|
end
|
|
else
|
|
TriggerEvent("qb-log:server:CreateLog", "anticheat", "Dupe log", "red", "**".. GetPlayerName(src) .. "** (citizenid: *"..Player.PlayerData.citizenid.."* | id: *"..src.."*) swapped item; name: **"..toItemData.name.."**, amount: **" .. toAmount .. "** with item; name: **"..fromItemData.name.."**, amount: **" .. fromAmount .. "** - dropid: *" .. fromInventory .. "*")
|
|
end
|
|
end
|
|
itemInfo = QBCore.Shared.Items[fromItemData.name:lower()]
|
|
AddToDrop(toInventory, toSlot, itemInfo["name"], fromAmount, fromItemData.info, itemInfo["created"])
|
|
if itemInfo["name"] == "radio" then
|
|
TriggerClientEvent('Radio.Set', src, false)
|
|
end
|
|
end
|
|
else
|
|
QBCore.Functions.Notify(src, "Ting findes ikke??", "error")
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('ps-inventory:server:SaveStashItems', function(stashId, items)
|
|
MySQL.Async.insert('INSERT INTO stashitems (stash, items) VALUES (:stash, :items) ON DUPLICATE KEY UPDATE items = :items', {
|
|
['stash'] = stashId,
|
|
['items'] = json.encode(items)
|
|
})
|
|
end)
|
|
|
|
RegisterServerEvent("inventory:server:GiveItem", function(target, name, amount, slot)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
target = tonumber(target)
|
|
local OtherPlayer = QBCore.Functions.GetPlayer(target)
|
|
local dist = #(GetEntityCoords(GetPlayerPed(src))-GetEntityCoords(GetPlayerPed(target)))
|
|
if Player == OtherPlayer then return QBCore.Functions.Notify(src, "Du kan ikke give dig selv ting?") end
|
|
if dist > 2 then return QBCore.Functions.Notify(src, "Du er for langt væk!") end
|
|
local item = GetItemBySlot(src, slot)
|
|
if not item then QBCore.Functions.Notify(src, "Tingen du prøvede at give væk findes ikke!"); return end
|
|
if item.name ~= name then QBCore.Functions.Notify(src, "Forkert ting, prøv igen!"); return end
|
|
|
|
if amount <= item.amount then
|
|
if amount == 0 then
|
|
amount = item.amount
|
|
end
|
|
if RemoveItem(src, item.name, amount, item.slot) then
|
|
if AddItem(target, item.name, amount, false, item.info, item.created) then
|
|
TriggerClientEvent('inventory:client:ItemBox',target, QBCore.Shared.Items[item.name], "add")
|
|
QBCore.Functions.Notify(target, "Du fik "..amount..' '..item.label.." fra "..Player.PlayerData.charinfo.firstname.." "..Player.PlayerData.charinfo.lastname)
|
|
TriggerClientEvent("inventory:client:UpdatePlayerInventory", target, true)
|
|
TriggerClientEvent('inventory:client:ItemBox',src, QBCore.Shared.Items[item.name], "remove")
|
|
QBCore.Functions.Notify(src, "Du gav " .. OtherPlayer.PlayerData.charinfo.firstname.." "..OtherPlayer.PlayerData.charinfo.lastname.. " " .. amount .. " " .. item.label .."!")
|
|
TriggerClientEvent("inventory:client:UpdatePlayerInventory", src, true)
|
|
TriggerClientEvent('ps-inventory:client:giveAnim', src)
|
|
TriggerClientEvent('ps-inventory:client:giveAnim', target)
|
|
else
|
|
AddItem(src, item.name, amount, item.slot, item.info, item.created)
|
|
QBCore.Functions.Notify(src, "Personens inventar er fyldt!", "error")
|
|
QBCore.Functions.Notify(target, "Personens inventar er fyldt!", "error")
|
|
TriggerClientEvent("inventory:client:UpdatePlayerInventory", src, false)
|
|
TriggerClientEvent("inventory:client:UpdatePlayerInventory", target, false)
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, "Du har ikke nok ting", "error")
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, "Du har ikke nok ting at overfører")
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('inventory:server:snowball', function(action)
|
|
if action == "add" then
|
|
AddItem(source, "weapon_snowball")
|
|
elseif action == "remove" then
|
|
RemoveItem(source, "weapon_snowball")
|
|
end
|
|
end)
|
|
|
|
-- callback
|
|
|
|
QBCore.Functions.CreateCallback('ps-inventory:server:GetStashItems', function(source, cb, stashId)
|
|
cb(GetStashItems(stashId))
|
|
end)
|
|
|
|
QBCore.Functions.CreateCallback('inventory:server:GetCurrentDrops', function(_, cb)
|
|
cb(Drops)
|
|
end)
|
|
|
|
QBCore.Functions.CreateCallback('QBCore:HasItem', function(source, cb, items, amount)
|
|
print("^3QBCore:HasItem is deprecated, please use QBCore.Functions.HasItem, it can be used on both server- and client-side and uses the same arguments.^0")
|
|
local retval = false
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
if not Player then return cb(false) end
|
|
local isTable = type(items) == 'table'
|
|
local isArray = isTable and table.type(items) == 'array' or false
|
|
local totalItems = #items
|
|
local count = 0
|
|
local kvIndex = 2
|
|
if isTable and not isArray then
|
|
totalItems = 0
|
|
for _ in pairs(items) do totalItems += 1 end
|
|
kvIndex = 1
|
|
end
|
|
if isTable then
|
|
for k, v in pairs(items) do
|
|
local itemKV = {k, v}
|
|
local item = GetItemByName(source, itemKV[kvIndex])
|
|
if item and ((amount and item.amount >= amount) or (not amount and not isArray and item.amount >= v) or (not amount and isArray)) then
|
|
count += 1
|
|
end
|
|
end
|
|
if count == totalItems then
|
|
retval = true
|
|
end
|
|
else -- Single item as string
|
|
local item = GetItemByName(source, items)
|
|
if item and not amount or (item and amount and item.amount >= amount) then
|
|
retval = true
|
|
end
|
|
end
|
|
cb(retval)
|
|
end)
|
|
|
|
-- command
|
|
|
|
QBCore.Commands.Add("resetinv", "Nulstil inventar (Admin)", {{name="type", help="stash/trunk/glovebox"},{name="id/nummerplade", help="ID på stash eller nummerplade"}}, true, function(source, args)
|
|
local invType = args[1]:lower()
|
|
table.remove(args, 1)
|
|
local invId = table.concat(args, " ")
|
|
if invType and invId then
|
|
if invType == "trunk" then
|
|
if Trunks[invId] then
|
|
Trunks[invId].isOpen = false
|
|
end
|
|
elseif invType == "glovebox" then
|
|
if Gloveboxes[invId] then
|
|
Gloveboxes[invId].isOpen = false
|
|
end
|
|
elseif invType == "stash" then
|
|
if Stashes[invId] then
|
|
Stashes[invId].isOpen = false
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', source, "Ikke gyldig type..", "error")
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', source, "Du har ikke fyldt alt ud..", "error")
|
|
end
|
|
end, "admin")
|
|
|
|
QBCore.Commands.Add("rob", "Røv spiller", {}, false, function(source, args)
|
|
TriggerClientEvent("police:client:RobPlayer", source)
|
|
end)
|
|
|
|
QBCore.Commands.Add("giveitem", "Giv ting (Admin Only)", {{name="id", help="Spiller ID"},{name="genstand", help="Objekt-navnet på genstanden (Ikke label)"}, {name="mængde", help="Antal du vil give"}}, false, function(source, args)
|
|
local id = tonumber(args[1])
|
|
local Player = QBCore.Functions.GetPlayer(id)
|
|
local amount = tonumber(args[3]) or 1
|
|
local itemData = QBCore.Shared.Items[tostring(args[2]):lower()]
|
|
if Player then
|
|
if itemData then
|
|
-- check iteminfo
|
|
local info = {}
|
|
if itemData["name"] == "id_card" then
|
|
info.citizenid = Player.PlayerData.citizenid
|
|
info.firstname = Player.PlayerData.charinfo.firstname
|
|
info.lastname = Player.PlayerData.charinfo.lastname
|
|
info.birthdate = Player.PlayerData.charinfo.birthdate
|
|
info.gender = Player.PlayerData.charinfo.gender
|
|
info.nationality = Player.PlayerData.charinfo.nationality
|
|
elseif itemData["name"] == "driver_license" then
|
|
info.firstname = Player.PlayerData.charinfo.firstname
|
|
info.lastname = Player.PlayerData.charinfo.lastname
|
|
info.birthdate = Player.PlayerData.charinfo.birthdate
|
|
info.type = "B Kørekort"
|
|
elseif itemData["type"] == "weapon" then
|
|
amount = 1
|
|
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))
|
|
info.quality = 100
|
|
elseif itemData["name"] == "harness" then
|
|
info.uses = 20
|
|
elseif itemData["name"] == "markedbills" then
|
|
info.worth = math.random(5000, 10000)
|
|
elseif itemData["name"] == "labkey" then
|
|
info.lab = exports["qb-methlab"]:GenerateRandomLab()
|
|
elseif itemData["name"] == "printerdocument" then
|
|
info.url = "https://cdn.discordapp.com/attachments/870094209783308299/870104331142189126/Logo_-_Display_Picture_-_Stylized_-_Red.png"
|
|
elseif QBCore.Shared.Items[itemData["name"]]["decay"] and QBCore.Shared.Items[itemData["name"]]["decay"] > 0 then
|
|
info.quality = 100
|
|
end
|
|
|
|
if AddItem(id, itemData["name"], amount, false, info) then
|
|
QBCore.Functions.Notify(source, "Du hav " ..Player.PlayerData.charinfo.firstname.." "..Player.PlayerData.charinfo.lastname.." "..amount.." "..itemData["name"].. "", "success")
|
|
else
|
|
QBCore.Functions.Notify(source, "Du kan ikke give ting!", "error")
|
|
end
|
|
else
|
|
QBCore.Functions.Notify(source, "Dette item findes ikke", "error")
|
|
end
|
|
else
|
|
QBCore.Functions.Notify(source, "Spilleren er offline", "error")
|
|
end
|
|
end, "admin")
|
|
|
|
QBCore.Commands.Add("randomitems", "Giv tilfældige ting (God)", {}, false, function(source, _)
|
|
local filteredItems = {}
|
|
for k, v in pairs(QBCore.Shared.Items) do
|
|
if QBCore.Shared.Items[k]["type"] ~= "weapon" then
|
|
filteredItems[#filteredItems+1] = v
|
|
end
|
|
end
|
|
for _ = 1, 10, 1 do
|
|
local randitem = filteredItems[math.random(1, #filteredItems)]
|
|
local amount = math.random(1, 10)
|
|
if randitem["unique"] then
|
|
amount = 1
|
|
end
|
|
if AddItem(source, randitem["name"], amount) then
|
|
TriggerClientEvent('inventory:client:ItemBox', source, QBCore.Shared.Items[randitem["name"]], 'add')
|
|
Wait(500)
|
|
end
|
|
end
|
|
end, "god")
|
|
|
|
QBCore.Commands.Add('clearinv', 'Nulstil spillers inventar (Admin)', { { name = 'id', help = 'Spillerens ID' } }, false, function(source, args)
|
|
local playerId = args[1] ~= '' and tonumber(args[1]) or source
|
|
local Player = QBCore.Functions.GetPlayer(playerId)
|
|
if Player then
|
|
ClearInventory(playerId)
|
|
else
|
|
QBCore.Functions.Notify(source, "Spilleren er ikke online", 'error')
|
|
end
|
|
end, 'admin')
|
|
|
|
-- item
|
|
|
|
-- QBCore.Functions.CreateUseableItem("snowball", function(source, item)
|
|
-- local Player = QBCore.Functions.GetPlayer(source)
|
|
-- local itemData = Player.Functions.GetItemBySlot(item.slot) -- --- DID THIS GET PUT ELSEWHERE?? IDK
|
|
-- if Player.Functions.GetItemBySlot(item.slot) then
|
|
-- TriggerClientEvent("inventory:client:UseSnowball", source, itemData.amount)
|
|
-- end
|
|
-- end)
|
|
|
|
CreateUsableItem("driver_license", function(source, item)
|
|
local playerPed = GetPlayerPed(source)
|
|
local playerCoords = GetEntityCoords(playerPed)
|
|
local players = QBCore.Functions.GetPlayers()
|
|
for _, v in pairs(players) do
|
|
local targetPed = GetPlayerPed(v)
|
|
local dist = #(playerCoords - GetEntityCoords(targetPed))
|
|
if dist < 3.0 then
|
|
TriggerClientEvent('chat:addMessage', v, {
|
|
template = '<div class="chat-message advert"><div class="chat-message-body"><strong>{0}:</strong><br><br> <strong>Fornavn:</strong> {1} <br><strong>Efternavn:</strong> {2} <br><strong>Fødselsdato:</strong> {3} <br><strong>Type:</strong> {4}</div></div>',
|
|
args = {
|
|
"Kørekort",
|
|
item.info.firstname,
|
|
item.info.lastname,
|
|
item.info.birthdate,
|
|
item.info.type
|
|
}
|
|
}
|
|
)
|
|
end
|
|
end
|
|
end)
|
|
|
|
CreateUsableItem("id_card", function(source, item)
|
|
local playerPed = GetPlayerPed(source)
|
|
local playerCoords = GetEntityCoords(playerPed)
|
|
local players = QBCore.Functions.GetPlayers()
|
|
for _, v in pairs(players) do
|
|
local targetPed = GetPlayerPed(v)
|
|
local dist = #(playerCoords - GetEntityCoords(targetPed))
|
|
if dist < 3.0 then
|
|
local gender = "Mand"
|
|
if item.info.gender == 1 then
|
|
gender = "Kvinde"
|
|
end
|
|
TriggerClientEvent('chat:addMessage', v, {
|
|
template = '<div class="chat-message advert"><div class="chat-message-body"><strong>{0}:</strong><br><br> <strong>Borger ID:</strong> {1} <br><strong>Fornavn:</strong> {2} <br><strong>Efternavn:</strong> {3} <br><strong>Fødselsdato:</strong> {4} <br><strong>Køn:</strong> {5} <br><strong>Nationalitet:</strong> {6}</div></div>',
|
|
args = {
|
|
"ID Kort",
|
|
item.info.citizenid,
|
|
item.info.firstname,
|
|
item.info.lastname,
|
|
item.info.birthdate,
|
|
gender,
|
|
item.info.nationality
|
|
}
|
|
}
|
|
)
|
|
end
|
|
end
|
|
end)
|
|
|
|
|
|
CreateThread(function()
|
|
while true do
|
|
for k, v in pairs(Drops) do
|
|
if v and (v.createdTime + Config.CleanupDropTime < os.time()) and not Drops[k].isOpen then
|
|
Drops[k] = nil
|
|
TriggerClientEvent("inventory:client:RemoveDropItem", -1, k)
|
|
end
|
|
end
|
|
Wait(60 * 1000)
|
|
end
|
|
end)
|
|
|
|
-- Decay System
|
|
|
|
local TimeAllowed = 60 * 60 * 24 * 1 -- Maths for 1 day dont touch its very important and could break everything
|
|
function ConvertQuality(item)
|
|
local StartDate = item.created
|
|
local DecayRate = QBCore.Shared.Items[item.name:lower()]["decay"] ~= nil and QBCore.Shared.Items[item.name:lower()]["decay"] or 0.0
|
|
if DecayRate == nil then
|
|
DecayRate = 0
|
|
end
|
|
local TimeExtra = math.ceil((TimeAllowed * DecayRate))
|
|
local percentDone = 100 - math.ceil((((os.time() - StartDate) / TimeExtra) * 100))
|
|
if DecayRate == 0 then
|
|
percentDone = 100
|
|
end
|
|
if percentDone < 0 then
|
|
percentDone = 0
|
|
end
|
|
return percentDone
|
|
end
|
|
|
|
QBCore.Functions.CreateCallback('inventory:server:ConvertQuality', function(source, cb, inventory, other)
|
|
local src = source
|
|
local data = {}
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
for _, item in pairs(inventory) do
|
|
if item.created then
|
|
if QBCore.Shared.Items[item.name:lower()]["decay"] ~= nil or QBCore.Shared.Items[item.name:lower()]["decay"] ~= 0 then
|
|
if item.info then
|
|
if type(item.info) == "string" then
|
|
item.info = {}
|
|
end
|
|
if item.info.quality == nil then
|
|
item.info.quality = 100
|
|
end
|
|
else
|
|
local info = {quality = 100}
|
|
item.info = info
|
|
end
|
|
local quality = ConvertQuality(item)
|
|
if item.info.quality then
|
|
if quality < item.info.quality then
|
|
item.info.quality = quality
|
|
end
|
|
else
|
|
item.info = {quality = quality}
|
|
end
|
|
else
|
|
if item.info then
|
|
item.info.quality = 100
|
|
else
|
|
local info = {quality = 100}
|
|
item.info = info
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if other then
|
|
local inventoryType = QBCore.Shared.SplitStr(other.name, "-")[1]
|
|
local uniqueId = QBCore.Shared.SplitStr(other.name, "-")[2]
|
|
if inventoryType == "trunk" then
|
|
for _, item in pairs(other.inventory) do
|
|
if item.created then
|
|
if QBCore.Shared.Items[item.name:lower()]["decay"] ~= nil or QBCore.Shared.Items[item.name:lower()]["decay"] ~= 0 then
|
|
if item.info then
|
|
if item.info.quality == nil then
|
|
item.info.quality = 100
|
|
end
|
|
else
|
|
local info = {quality = 100}
|
|
item.info = info
|
|
end
|
|
local quality = ConvertQuality(item)
|
|
if item.info.quality then
|
|
if quality < item.info.quality then
|
|
item.info.quality = quality
|
|
end
|
|
else
|
|
item.info = {quality = quality}
|
|
end
|
|
else
|
|
if item.info then
|
|
item.info.quality = 100
|
|
else
|
|
local info = {quality = 100}
|
|
item.info = info
|
|
end
|
|
end
|
|
end
|
|
end
|
|
Trunks[uniqueId].items = other.inventory
|
|
TriggerClientEvent("inventory:client:UpdateOtherInventory", Player.PlayerData.source, other.inventory, false)
|
|
elseif inventoryType == "glovebox" then
|
|
for _, item in pairs(other.inventory) do
|
|
if item.created then
|
|
if QBCore.Shared.Items[item.name:lower()]["decay"] ~= nil or QBCore.Shared.Items[item.name:lower()]["decay"] ~= 0 then
|
|
if item.info then
|
|
if item.info.quality == nil then
|
|
item.info.quality = 100
|
|
end
|
|
else
|
|
local info = {quality = 100}
|
|
item.info = info
|
|
end
|
|
local quality = ConvertQuality(item)
|
|
if item.info.quality then
|
|
if quality < item.info.quality then
|
|
item.info.quality = quality
|
|
end
|
|
else
|
|
item.info = {quality = quality}
|
|
end
|
|
else
|
|
if item.info then
|
|
item.info.quality = 100
|
|
else
|
|
local info = {quality = 100}
|
|
item.info = info
|
|
end
|
|
end
|
|
end
|
|
end
|
|
Gloveboxes[uniqueId].items = other.inventory
|
|
TriggerClientEvent("inventory:client:UpdateOtherInventory", Player.PlayerData.source, other.inventory, false)
|
|
elseif inventoryType == "stash" then
|
|
for _, item in pairs(other.inventory) do
|
|
if item.created then
|
|
if QBCore.Shared.Items[item.name:lower()]["decay"] ~= nil or QBCore.Shared.Items[item.name:lower()]["decay"] ~= 0 then
|
|
if item.info then
|
|
if type(item.info) == "string" then
|
|
item.info = {}
|
|
end
|
|
if item.info.quality == nil then
|
|
item.info.quality = 100
|
|
end
|
|
else
|
|
local info = {quality = 100}
|
|
item.info = info
|
|
end
|
|
local quality = ConvertQuality(item)
|
|
if item.info.quality then
|
|
if quality < item.info.quality then
|
|
item.info.quality = quality
|
|
end
|
|
else
|
|
item.info = {quality = quality}
|
|
end
|
|
else
|
|
if item.info then
|
|
item.info.quality = 100
|
|
else
|
|
local info = {quality = 100}
|
|
item.info = info
|
|
end
|
|
end
|
|
end
|
|
end
|
|
Stashes[uniqueId].items = other.inventory
|
|
TriggerClientEvent("inventory:client:UpdateOtherInventory", Player.PlayerData.source, other.inventory, false)
|
|
end
|
|
end
|
|
Player.Functions.SetInventory(inventory)
|
|
TriggerClientEvent("inventory:client:UpdatePlayerInventory", Player.PlayerData.source, false)
|
|
data.inventory = inventory
|
|
data.other = other
|
|
cb(data)
|
|
end)
|
|
|
|
-- Warning Messages
|
|
|
|
RegisterNetEvent('inventory:server:addTrunkItems', function()
|
|
print('inventory:server:addTrunkItems has been deprecated please use exports[\'ps-inventory\']:addTrunkItems(plate, items)')
|
|
end)
|
|
RegisterNetEvent('inventory:server:addGloveboxItems', function()
|
|
print('inventory:server:addGloveboxItems has been deprecated please use exports[\'ps-inventory\']:addGloveboxItems(plate, items)')
|
|
end)
|