mirror of
https://github.com/jimathy/jim_bridge.git
synced 2026-08-17 05:56:02 +01:00
Upload beta 1.2
This commit is contained in:
271
shared/stashcontrol.lua
Normal file
271
shared/stashcontrol.lua
Normal file
@@ -0,0 +1,271 @@
|
||||
if isServer() then
|
||||
createCallback(getScript()..':server:GetStashItems', function(source, stashName) local stash = getStash(stashName) return stash end)
|
||||
end
|
||||
|
||||
local stashCache ={}
|
||||
function GetStashTimeout(stashName, stop)
|
||||
if stop then stashCache = {} return end
|
||||
local stash = stashCache[stashName]
|
||||
if not stash then
|
||||
stashCache[stashName] = { items = {}, timeout = 0 }
|
||||
stash = stashCache[stashName]
|
||||
end
|
||||
if #stash.items > 0 then return true end
|
||||
if stash.timeout <= 0 then
|
||||
stash.items = triggerCallback(getScript()..':server:GetStashItems', stashName)
|
||||
stash.timeout = 10000
|
||||
CreateThread(function()
|
||||
while stash.timeout > 0 do stash.timeout -= 1000 Wait(1000) end
|
||||
stashCache[stashName] = nil
|
||||
end)
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function checkHasItem(stashes, itemTable)
|
||||
if not stashes then return hasItem(itemTable), nil end
|
||||
if type(stashes) == "table" then
|
||||
local succeses = 0
|
||||
local itemCount = 0
|
||||
for _, item in pairs(itemTable) do itemCount += 1 end
|
||||
for _, name in pairs(stashes) do
|
||||
GetStashTimeout(name)
|
||||
for item, amount in pairs(itemTable) do
|
||||
debugPrint("^6Bridge^7: ^2Checking"..(name and " ^7'^6"..name.."^7'" or "").." ^2ingredients^7 - ^6"..item.."^7")
|
||||
if stashhasItem(stashCache[name].items, item, amount) then
|
||||
succeses += 1
|
||||
if succeses == itemCount then return true, name end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
debugPrint("^6Bridge^7: ^2Checking"..(stashes and " ^7'^6"..stashes.."^7'" or "").." ^2ingredients^7 - ^6"..k.."^7")
|
||||
GetStashTimeout(stashes)
|
||||
return stashhasItem(stashCache[stashes].items, itemTable), stashes
|
||||
end
|
||||
|
||||
return false, nil
|
||||
end
|
||||
|
||||
|
||||
-- Stash Items
|
||||
function openStash(data)
|
||||
if (data.job or data.gang) and not jobCheck(data.job or data.gang) then return end
|
||||
if isStarted(OXInv) then
|
||||
exports[OXInv]:openInventory('stash', data.stash)
|
||||
elseif isStarted(CodeMInv) then
|
||||
exports[CodeMInv]:OpenStash(data.stash, StashWeight, 100)
|
||||
elseif isStarted(QBInv) then
|
||||
if QBInvNew then
|
||||
TriggerServerEvent(getScript()..':server:OpenStashQB', { stashName = data.stash, label = data.label, maxweight = data.maxWeight or 600000, slots = data.slots or 40 })
|
||||
else
|
||||
TriggerEvent("inventory:client:SetCurrentStash", data.stash)
|
||||
TriggerServerEvent("inventory:server:OpenInventory", "stash", data.stash, data.stashOptions)
|
||||
end
|
||||
else
|
||||
TriggerEvent("inventory:client:SetCurrentStash", data.stash)
|
||||
TriggerServerEvent("inventory:server:OpenInventory", "stash", data.stash, data.stashOptions)
|
||||
end
|
||||
lookEnt(data.coords)
|
||||
end
|
||||
|
||||
RegisterNetEvent(getScript()..':server:OpenStashQB', function(data)
|
||||
exports[QBInv]:OpenInventory(source, data.stashName, data)
|
||||
end)
|
||||
|
||||
function getStash(stashName) local stashResource = ""
|
||||
if type(stashName) ~= "string" then return print("Stash name was not a string %s(%s)", stashName, type(stashName)) end
|
||||
local stashItems, items = {}, {}
|
||||
if isStarted(OXInv) then stashResource = OXInv
|
||||
stashItems = exports[OXInv]:Inventory(stashName).items
|
||||
|
||||
elseif isStarted(QSInv) then stashResource = QSInv
|
||||
stashItems = exports[QSInv]:GetStashItems(stashName)
|
||||
|
||||
elseif isStarted(CoreInv) then stashResource = CoreInv
|
||||
stashItems = exports[CoreInv]:getInventory(stashName)
|
||||
|
||||
elseif isStarted(CodeMInv) then stashResource = CodeMInv
|
||||
stashItems = exports[CodeMInv]:GetInventoryItems('Stash', stashName)
|
||||
|
||||
elseif isStarted(OrigenInv) then stashResource = OrigenInv
|
||||
stashItems = exports[OrigenInv]:GetStashItems(stashName)
|
||||
|
||||
elseif isStarted(PSInv) then stashResource = PSInv
|
||||
local result = MySQL.scalar.await('SELECT items FROM stashitems WHERE stash = ?', { stashName })
|
||||
if result then stashItems = json.decode(result) end
|
||||
elseif isStarted(QBInv) then stashResource = QBInv
|
||||
local result = MySQL.scalar.await("SELECT items FROM "..(QBInvNew and "inventories" or "stashitem").." WHERE identifier = ?", { stashName })
|
||||
if result then stashItems = json.decode(result) end
|
||||
end
|
||||
|
||||
debugPrint("^6Bridge^7: ^2Retrieving ^3Stash^2 with ^7"..stashResource)
|
||||
if stashItems then
|
||||
for _, item in pairs(stashItems) do
|
||||
local itemInfo = Items[item.name:lower()]
|
||||
if itemInfo then
|
||||
local indexNum = #items+1 -- Added to help recreate missing slot numbers
|
||||
items[(item.slot and item.slot) or indexNum] = {
|
||||
name = itemInfo.name or nil,
|
||||
amount = tonumber(item.amount) or tonumber(item.count),
|
||||
info = item.info or "",
|
||||
label = itemInfo.label or nil,
|
||||
description = itemInfo.description or "",
|
||||
weight = itemInfo.weight or nil,
|
||||
type = itemInfo.type or nil,
|
||||
unique = itemInfo.unique or nil,
|
||||
useable = itemInfo.useable or nil,
|
||||
image = itemInfo.image or nil,
|
||||
slot = (item.slot and item.slot) or indexNum,
|
||||
metadata = (item.metadata and item.metadata) or nil,
|
||||
}
|
||||
end
|
||||
end
|
||||
debugPrint("^6Bridge^7: ^3GetStashItems^7: ^2Stash information for ^7'^6"..stashName.."^7' ^2retrieved^7")
|
||||
end
|
||||
return items
|
||||
end
|
||||
|
||||
function stashRemoveItem(stashItems, stashName, items) local amount = amount and amount or 1
|
||||
-- print("stashItems: "..json.encode(stashItems, { indent = true}))
|
||||
-- print("stashName: "..json.encode(stashName, { indent = true}))
|
||||
-- print("items: "..json.encode(items, { indent = true}))
|
||||
if isStarted(OXInv) then
|
||||
for k, v in pairs(items) do
|
||||
debugPrint("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..OXInv, k, v)
|
||||
if type(stashName) == "table" then
|
||||
for _, name in pairs(stashName) do
|
||||
local success = exports[OXInv]:RemoveItem(name, k, v)
|
||||
if success then
|
||||
debugPrint("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..OXInv, k, v)
|
||||
break
|
||||
end
|
||||
end
|
||||
else
|
||||
exports[OXInv]:RemoveItem(stashName, k, v)
|
||||
end
|
||||
end
|
||||
|
||||
elseif isStarted(QSInv) then
|
||||
for k, v in pairs(items) do
|
||||
for l in pairs(stashItems) do
|
||||
if stashItems[l].name == k then
|
||||
if (stashItems[l].amount - v) <= 0 then
|
||||
debugPrint("^6Bridge^7: ^2None of this item left in stash ^3Stash^7", k, v)
|
||||
stashItems[l] = nil
|
||||
else
|
||||
debugPrint("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..QBInv, k, v)
|
||||
exports[QSInv]:RemoveItemIntoStash(stashName, k, v, l)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
elseif isStarted(CoreInv) then
|
||||
for k, v in pairs(items) do
|
||||
exports[CoreInv]:removeItemExact(stashName, k, v)
|
||||
debugPrint("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..CoreInv, k, v)
|
||||
end
|
||||
|
||||
elseif isStarted(CodeMInv) then
|
||||
for k, v in pairs(items) do
|
||||
for l in pairs(stashItems) do
|
||||
if stashItems[l].name == k then
|
||||
if (stashItems[l].amount - v) <= 0 then
|
||||
debugPrint("^6Bridge^7: ^2None of this item left in stash ^3Stash^7", k, v)
|
||||
stashItems[l] = nil
|
||||
else
|
||||
debugPrint("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..CodeMInv, k, v)
|
||||
stashItems[l].amount -= v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
debugPrint("^6Bridge^7: ^3saveStash^7: ^2Saving ^3QB^2 stash ^7'^6"..stashName.."^7'")
|
||||
|
||||
elseif isStarted(OrigenInv) then
|
||||
for k, v in pairs(items) do
|
||||
exports[OrigenInv]:RemoveFromStash(stashName, k, v)
|
||||
debugPrint("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..OrigenInv, k, v)
|
||||
end
|
||||
|
||||
elseif isStarted(PSInv) then
|
||||
for k, v in pairs(items) do
|
||||
for l in pairs(stashItems) do
|
||||
if stashItems[l].name == k then
|
||||
if (stashItems[l].amount - v) <= 0 then
|
||||
debugPrint("^6Bridge^7: ^2None of this item left in stash ^3Stash^7", k, v)
|
||||
stashItems[l] = nil
|
||||
else
|
||||
debugPrint("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..QBInv, k, v)
|
||||
stashItems[l].amount -= v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
debugPrint("^6Bridge^7: ^3saveStash^7: ^2Saving ^3QB^2 stash ^7'^6"..stashName.."^7'")
|
||||
MySQL.Async.insert('INSERT INTO stashitems (stash, items) VALUES (:stash, :items) ON DUPLICATE KEY UPDATE items = :items', { ['stash'] = stashName, ['items'] = json.encode(stashItems) })
|
||||
elseif isStarted(QBInv) then
|
||||
if QBInvNew then
|
||||
for k, v in pairs(items) do
|
||||
exports[QBInv]:RemoveItem(stashName[1], k, v, false, 'crafting')
|
||||
debugPrint("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..QBInv, k, v)
|
||||
end
|
||||
debugPrint("^6Bridge^7: ^3saveStash^7: ^2Saving ^3QB^2 stash ^7'^6"..stashName[1].."^7'")
|
||||
MySQL.Async.insert('INSERT INTO inventories (identifier, items) VALUES (:stash, :items) ON DUPLICATE KEY UPDATE items = :items', { ['stash'] = stashName[1], ['items'] = json.encode(stashItems) })
|
||||
else
|
||||
for k, v in pairs(items) do
|
||||
for l in pairs(stashItems) do
|
||||
if stashItems[l].name == k then
|
||||
if (stashItems[l].amount - v) <= 0 then
|
||||
if Config.System.Debug then
|
||||
print("^6Bridge^7: ^2None of this item left in stash ^3Stash^7", k, v)
|
||||
end
|
||||
stashItems[l] = nil
|
||||
else
|
||||
if Config.System.Debug then
|
||||
print("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..QBInv, k, v)
|
||||
end
|
||||
stashItems[l].amount -= v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
debugPrint("^6Bridge^7: ^3saveStash^7: ^2Saving ^3QB^2 stash ^7'^6"..stashName.."^7'")
|
||||
MySQL.Async.insert('INSERT INTO stashitems (stash, items) VALUES (:stash, :items) ON DUPLICATE KEY UPDATE items = :items', { ['stash'] = stashName, ['items'] = json.encode(stashItems) })
|
||||
end
|
||||
else
|
||||
print("^4ERROR^7: ^2No Inventory detected ^7- ^2Check ^3exports^1.^2lua^7")
|
||||
end
|
||||
end
|
||||
RegisterNetEvent(getScript()..":server:stashRemoveItem", stashRemoveItem)
|
||||
|
||||
function stashhasItem(stashItems, items, amount)
|
||||
local invs = {OXInv, QSInv, CoreInv, CodeMInv, OrigenInv, QBInv, PSInv}
|
||||
local foundInv = ""
|
||||
for _, inv in ipairs(invs) do
|
||||
if isStarted(inv) then
|
||||
foundInv = inv:gsub("%-", "^7-^6"):gsub("%_", "^7_^6")
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if type(items) ~= "table" then items = { [items] = amount and amount or 1, } end
|
||||
local hasTable = {}
|
||||
for item, amount in pairs(items) do
|
||||
local count = 0
|
||||
for _, itemData in pairs(stashItems) do
|
||||
if itemData and (itemData.name == item) then
|
||||
count += (itemData.amount or 1)
|
||||
end
|
||||
end
|
||||
|
||||
local debugMsg = string.format("^6Bridge^7: ^3stashHasItem^7[^6%s^7]: %s '%s' ^3%d^7/^3%d^7", foundInv, (count >= amount and "^5FOUND^7" or "^1NOT FOUND^7"), item, count, amount)
|
||||
debugPrint(debugMsg)
|
||||
|
||||
hasTable[item] = { hasItem = (count >= amount), count = count }
|
||||
end
|
||||
for k, v in pairs(hasTable) do if v.hasItem == false then return false, hasTable end end
|
||||
return true, hasTable
|
||||
end
|
||||
Reference in New Issue
Block a user