mirror of
https://github.com/jimathy/jim_bridge.git
synced 2026-08-17 14:06:02 +01:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e9bbdd4ce0 | ||
|
|
f5a7ec9291 | ||
|
|
d80ea38a39 | ||
|
|
e64912622b | ||
|
|
04b25e2c06 | ||
|
|
51473bf0b8 | ||
|
|
921b973f81 | ||
|
|
42d08ccf4c | ||
|
|
68412d8006 |
@@ -1,6 +1,6 @@
|
||||
name "Jim_Bridge"
|
||||
author "Jimathy"
|
||||
version "2.0.08"
|
||||
version "2.0.10"
|
||||
description "Framework Bridge By Jimathy"
|
||||
fx_version "cerulean"
|
||||
rdr3_warning 'I acknowledge that this is a prerelease build of RedM, and I am aware my resources *will* become incompatible once RedM ships.'
|
||||
|
||||
@@ -50,7 +50,13 @@ function onPlayerLoaded(func, onStart)
|
||||
AddEventHandler('QBCore:Client:OnPlayerLoaded', tempFunc)
|
||||
elseif isStarted(ESXExport) then
|
||||
onPlayerFramework = ESXExport
|
||||
AddEventHandler('esx:playerLoaded', tempFunc)
|
||||
AddEventHandler('esx:playerLoaded', function()
|
||||
if waitForSharedLoad() then
|
||||
if isStarted(ESXExport) then Wait(11000) end
|
||||
tempFunc()
|
||||
end
|
||||
end
|
||||
)
|
||||
elseif isStarted(OXCoreExport) then
|
||||
onPlayerFramework = OXCoreExport
|
||||
AddEventHandler('ox:playerLoaded', tempFunc)
|
||||
@@ -103,7 +109,11 @@ function onResourceStart(func, thisScript)
|
||||
debugPrint("^6Bridge^7: ^2Registering ^3onResourceStart^7()")
|
||||
AddEventHandler('onResourceStart', function(resourceName)
|
||||
if getScript() == resourceName and (thisScript or true) then
|
||||
func()
|
||||
if waitForSharedLoad() then
|
||||
print("^6Bridge^7: ^2Shared Load Detected^7.")
|
||||
if isStarted(ESXExport) then Wait(10000) end
|
||||
func()
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
@@ -174,4 +184,26 @@ function waitForLogin()
|
||||
debugPrint("^6Bridge^7: ^2Player Login Detected^7.")
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function waitForSharedLoad()
|
||||
local timeout = 100000 -- 10 seconds in milliseconds
|
||||
local startTime = GetGameTimer()
|
||||
local loaded = true
|
||||
while ((not Jobs or not next(Jobs)) and (not Items or not next(Items)) and (not Vehicles or not next(Vehicles))) and (GetGameTimer() - startTime) < timeout do
|
||||
print((GetGameTimer() - startTime) < timeout)
|
||||
Wait(1000)
|
||||
debugPrint("Waiting for Jobs, Items, and Vehicles to be loaded")
|
||||
if Jobs and Items and Vehicles then
|
||||
print("^6Bridge^7: ^2Jobs, Items, and Vehicles Loaded^7.")
|
||||
loaded = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if not loaded then
|
||||
print("^4Error^7: ^2Timeout reached while waiting for shared load^7.")
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
@@ -240,24 +240,30 @@ elseif isStarted(QBExport) then
|
||||
elseif isStarted(ESXExport) then
|
||||
jobResource = ESXExport
|
||||
if isServer() then
|
||||
-- If server, create callback to get jobs
|
||||
createCallback(getScript()..":getESXJobs", function(source)
|
||||
return Jobs
|
||||
end)
|
||||
-- Populate jobs table with ESX.GetJobs()
|
||||
Jobs = ESX.GetJobs()
|
||||
--If retreived jobs is empty, wait for ESX to load
|
||||
while countTable(Jobs) == 0 do
|
||||
Jobs = ESX.GetJobs()
|
||||
Wait(100)
|
||||
end
|
||||
-- Organise into a table the script can use
|
||||
for k, v in pairs(Jobs) do
|
||||
local count = countTable(Jobs[k].grades) - 1
|
||||
Jobs[k].grades[tostring(count)].isBoss = true
|
||||
end
|
||||
-- ESX Default doesn't have gangs, so copy jobs to gangs
|
||||
Gangs = Jobs
|
||||
end
|
||||
-- If client side, trigger callback to get jobs
|
||||
if not isServer() then
|
||||
Jobs = triggerCallback(getScript()..":getESXJobs")
|
||||
Gangs = Jobs
|
||||
end
|
||||
CreateThread(function()
|
||||
if isServer() then
|
||||
createCallback(getScript()..":getJobs", function(source)
|
||||
return Jobs
|
||||
end)
|
||||
end
|
||||
if not isServer() then
|
||||
Jobs = triggerCallback(getScript()..":getJobs")
|
||||
Gangs = Jobs
|
||||
end
|
||||
end)
|
||||
|
||||
elseif isStarted(RSGExport) then
|
||||
jobResource = RSGExport
|
||||
@@ -272,7 +278,7 @@ end
|
||||
if jobResource == nil then
|
||||
print("^4ERROR^7: ^2No Vehicle info detected ^7- ^2Check ^3starter^1.^2lua^7")
|
||||
else
|
||||
while not Jobs do Wait(100) end
|
||||
while not Jobs do Wait(1000) end
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Jobs).." ^3Jobs^2 from ^7"..jobResource)
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Gangs).." ^3Gangs^2 from ^7"..jobResource)
|
||||
end
|
||||
@@ -353,8 +353,8 @@ function makeItem(data)
|
||||
Wait(200)
|
||||
end
|
||||
if isInventoryOpen() then
|
||||
print("^1Error^7: ^2Inventory is open, you tried to break things")
|
||||
crafted, crafting = false, false
|
||||
--print("^1Error^7: ^2Inventory is open, you tried to break things")
|
||||
crafted, crafting, CraftLock = false, false, false
|
||||
return
|
||||
end
|
||||
if crafted then
|
||||
@@ -368,8 +368,9 @@ function makeItem(data)
|
||||
PlaySoundFromEntity(s.soundId, s.audioName, PlayerPedId(), s.audioRef, true, 0)
|
||||
end
|
||||
if isInventoryOpen() then
|
||||
print("^1Error^7: ^2Inventory is open, you tried to break things")
|
||||
--print("^1Error^7: ^2Inventory is open, you tried to break things")
|
||||
crafted, crafting = false, false
|
||||
crafted, crafting, CraftLock = false, false, false
|
||||
return
|
||||
end
|
||||
if crafting and progressBar({
|
||||
@@ -462,7 +463,9 @@ RegisterNetEvent(getScript()..":Crafting:GetItem", function(ItemMake, craftable,
|
||||
stashItems = getStash(name)
|
||||
for k, v in pairs(craftable[ItemMake] or {}) do
|
||||
for _, b in pairs(stashItems or {}) do
|
||||
if k == b.name then itemRemove[k] = v end
|
||||
if k == b.name then
|
||||
itemRemove[k] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -470,7 +473,9 @@ RegisterNetEvent(getScript()..":Crafting:GetItem", function(ItemMake, craftable,
|
||||
stashItems = getStash(stashName)
|
||||
for k, v in pairs(craftable[ItemMake] or {}) do
|
||||
for _, b in pairs(stashItems or {}) do
|
||||
if k == b.name then itemRemove[k] = v end
|
||||
if k == b.name then
|
||||
itemRemove[k] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -262,7 +262,7 @@ end
|
||||
--- ```
|
||||
function countTable(tbl)
|
||||
local i = 0
|
||||
for _ in pairs(tbl) do i = i + 1 end
|
||||
for _ in pairs(tbl) do i += 1 end
|
||||
return i
|
||||
end
|
||||
|
||||
|
||||
@@ -99,7 +99,8 @@ function getPlayerInv(src)
|
||||
if src then
|
||||
grabInv = exports[QSInv]:GetInventory(src)
|
||||
else
|
||||
grabInv = exports[QSInv]:getUserInventory()
|
||||
--grabInv = exports[QSInv]:getUserInventory()
|
||||
grabInv = triggerCallback(getScript().."getServerInvData", GetPlayerServerId(PlayerId()))
|
||||
end
|
||||
|
||||
elseif isStarted(OrigenInv) then
|
||||
@@ -171,6 +172,10 @@ function getPlayerInv(src)
|
||||
return grabInv, foundInv
|
||||
end
|
||||
|
||||
createCallback(getScript()..":getServerInvData", function(source)
|
||||
local src = source
|
||||
return getPlayerInv(src)
|
||||
end)
|
||||
|
||||
function isInventoryOpen()
|
||||
if isStarted(OXInv) then
|
||||
|
||||
@@ -301,17 +301,17 @@ function ConsumeSuccess(itemName, type, data)
|
||||
|
||||
if isStarted(ESXExport) then
|
||||
if hunger then
|
||||
TriggerServerEvent(getScript()..":server:setNeed", "hunger", hunger * 10000)
|
||||
TriggerServerEvent(getScript()..":server:setNeed", "hunger", tonumber(hunger) * 10000)
|
||||
end
|
||||
if thirst then
|
||||
TriggerServerEvent(getScript()..":server:setNeed", "thirst", thirst * 10000)
|
||||
TriggerServerEvent(getScript()..":server:setNeed", "thirst", tonumber(thirst) * 10000)
|
||||
end
|
||||
else
|
||||
if hunger then
|
||||
TriggerServerEvent(getScript()..":server:setNeed", "hunger", Core.Functions.GetPlayerData().metadata["hunger"] + hunger)
|
||||
TriggerServerEvent(getScript()..":server:setNeed", "hunger", Core.Functions.GetPlayerData().metadata["hunger"] + tonumber(hunger))
|
||||
end
|
||||
if thirst then
|
||||
TriggerServerEvent(getScript()..":server:setNeed", "thirst", Core.Functions.GetPlayerData().metadata["thirst"] + thirst)
|
||||
TriggerServerEvent(getScript()..":server:setNeed", "thirst", Core.Functions.GetPlayerData().metadata["thirst"] + tonumber(thirst))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -325,7 +325,9 @@ function ConsumeSuccess(itemName, type, data)
|
||||
end
|
||||
end
|
||||
|
||||
getRandomReward(itemName)
|
||||
if Config.Reward then
|
||||
getRandomReward(itemName)
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------
|
||||
|
||||
@@ -48,7 +48,9 @@ function sellMenu(data)
|
||||
header = k,
|
||||
txt = "Amount of items: "..countTable(v.Items),
|
||||
onSelect = function()
|
||||
v.onBack = function() sellMenu(origData) end
|
||||
v.onBack = function()
|
||||
sellMenu(origData)
|
||||
end
|
||||
v.sellTable = data.sellTable[k]
|
||||
sellMenu(v)
|
||||
end,
|
||||
@@ -57,8 +59,8 @@ function sellMenu(data)
|
||||
end
|
||||
end
|
||||
openMenu(Menu, {
|
||||
header = data.sellTable.Header or "Amount of items: "..countTable(data.sellTable.Items),
|
||||
headertxt = data.sellTable.Header and "Amount of items: "..countTable(data.sellTable.Items) or "",
|
||||
header = data.sellTable.Header or "Amount of items: "..countTable(data.sellTable.Items or data.sellTable),
|
||||
headertxt = data.sellTable.Header and "Amount of items: "..countTable(data.sellTable.Items or data.sellTable),
|
||||
canClose = true,
|
||||
onBack = data.onBack,
|
||||
})
|
||||
@@ -105,12 +107,14 @@ function sellAnim(data)
|
||||
TriggerServerEvent(getScript().."Sellitems", data)
|
||||
lookEnt(data.ped)
|
||||
local dict = "mp_common"
|
||||
playAnim(dict, "givetake2_a", 0.3, 2)
|
||||
playAnim(dict, "givetake2_b", 0.3, 2, data.ped)
|
||||
playAnim(dict, "givetake2_a", 0.3, 48)
|
||||
playAnim(dict, "givetake2_b", 0.3, 48, data.ped)
|
||||
Wait(2000)
|
||||
StopAnimTask(PlayerPedId(), dict, "givetake2_a", 0.5)
|
||||
StopAnimTask(data.ped, dict, "givetake2_b", 0.5)
|
||||
if data.onBack then data.onBack() end
|
||||
if data.onBack then
|
||||
data.onBack()
|
||||
end
|
||||
end
|
||||
|
||||
--- Server event handler for processing item sales.
|
||||
|
||||
@@ -332,34 +332,22 @@ function stashRemoveItem(stashItems, stashName, items)
|
||||
if type(stashName) ~= "table" then
|
||||
stashName = { stashName }
|
||||
end
|
||||
|
||||
if isStarted(OXInv) then
|
||||
for k, v in pairs(items) do
|
||||
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
|
||||
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
|
||||
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"..QSInv, k, v)
|
||||
exports[QSInv]:RemoveItemIntoStash(stashName[1], k, v, l)
|
||||
end
|
||||
end
|
||||
end
|
||||
exports[QSInv]:RemoveItemIntoStash(stashName[1], k, v)
|
||||
debugPrint("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..QSInv, k, v)
|
||||
end
|
||||
|
||||
elseif isStarted(CoreInv) then
|
||||
@@ -393,7 +381,7 @@ function stashRemoveItem(stashItems, stashName, items)
|
||||
|
||||
elseif isStarted(TgiannInv) then
|
||||
for k, v in pairs(items) do
|
||||
local itemData = exports["tgiann-inventory"]:GetItemByNameFromSecondaryInventory("stash", stashName[1], k)
|
||||
local itemData = exports[TgiannInv]:GetItemByNameFromSecondaryInventory("stash", stashName[1], k)
|
||||
exports[TgiannInv]:RemoveItemFromSecondaryInventory("stash", stashName[1], k, v, itemData.slot, nil)
|
||||
debugPrint("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..TgiannInv, k, v)
|
||||
end
|
||||
@@ -404,11 +392,6 @@ function stashRemoveItem(stashItems, stashName, items)
|
||||
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
|
||||
@@ -423,14 +406,13 @@ function stashRemoveItem(stashItems, stashName, items)
|
||||
end
|
||||
end
|
||||
end
|
||||
debugPrint("^6Bridge^7: ^3saveStash^7: ^2Saving ^3QB^2 stash '^6"..stashName.."^7'")
|
||||
debugPrint("^6Bridge^7: ^3saveStash^7: ^2Saving ^3QB^2 stash '^6"..stashName[1].."^7'")
|
||||
MySQL.Async.insert('INSERT INTO stashitems (stash, items) VALUES (:stash, :items) ON DUPLICATE KEY UPDATE items = :items', {
|
||||
['stash'] = stashName,
|
||||
['stash'] = stashName[1],
|
||||
['items'] = json.encode(stashItems)
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
elseif isStarted(PSInv) then
|
||||
for k, v in pairs(items) do
|
||||
for l in pairs(stashItems) do
|
||||
@@ -445,9 +427,9 @@ function stashRemoveItem(stashItems, stashName, items)
|
||||
end
|
||||
end
|
||||
end
|
||||
debugPrint("^6Bridge^7: ^3saveStash^7: ^2Saving ^3QB^2 stash ^7'^6"..stashName.."^7'")
|
||||
debugPrint("^6Bridge^7: ^3saveStash^7: ^2Saving ^3PS^2 stash ^7'^6"..stashName[1].."^7'")
|
||||
MySQL.Async.insert('INSERT INTO stashitems (stash, items) VALUES (:stash, :items) ON DUPLICATE KEY UPDATE items = :items', {
|
||||
['stash'] = stashName,
|
||||
['stash'] = stashName[1],
|
||||
['items'] = json.encode(stashItems)
|
||||
})
|
||||
|
||||
@@ -456,11 +438,6 @@ function stashRemoveItem(stashItems, stashName, items)
|
||||
exports[RSGInv]:RemoveItem(stashName[1], k, v, false, 'crafting')
|
||||
debugPrint("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..RSGInv, 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
|
||||
print("^4ERROR^7: ^2No Inventory detected ^7- ^2Check ^3starter^1.^2lua^7")
|
||||
end
|
||||
|
||||
@@ -1 +1 @@
|
||||
2.0.08
|
||||
2.0.10
|
||||
Reference in New Issue
Block a user