mirror of
https://github.com/jimathy/jim_bridge.git
synced 2026-08-17 05:56:02 +01:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
23c2e1472e | ||
|
|
6367c9ed3b | ||
|
|
2d299a6a4a | ||
|
|
ced629d4dc | ||
|
|
714121d272 | ||
|
|
14c140cf85 | ||
|
|
881aec7c04 | ||
|
|
85b31e7e1d | ||
|
|
66c9287202 | ||
|
|
f0f59b8568 | ||
|
|
e03efa6687 | ||
|
|
5a22651961 | ||
|
|
236689452e | ||
|
|
b686f267e1 | ||
|
|
096e323409 | ||
|
|
b71ec14615 | ||
|
|
5a2304b785 | ||
|
|
6f413c555d | ||
|
|
fbc92aea41 |
130
crafting.lua
130
crafting.lua
@@ -33,6 +33,15 @@ function craftingMenu(data)
|
|||||||
if (data.job or data.gang) and not jobCheck(data.job or data.gang) then return end
|
if (data.job or data.gang) and not jobCheck(data.job or data.gang) then return end
|
||||||
local Menu, hasjob = {}, false
|
local Menu, hasjob = {}, false
|
||||||
local Recipes = data.craftable.Recipes
|
local Recipes = data.craftable.Recipes
|
||||||
|
local tempCarryTable = {}
|
||||||
|
for i = 1, #Recipes do
|
||||||
|
for k in pairs(Recipes[i]) do
|
||||||
|
if k ~= "amount" and k ~= "job" and k ~= "gang" then
|
||||||
|
tempCarryTable[k] = Recipes[i].amount or 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local canCarryTable = triggerCallback(GetCurrentResourceName()..':server:canCarry', tempCarryTable)
|
||||||
for i = 1, #Recipes do
|
for i = 1, #Recipes do
|
||||||
if not Recipes[i]["amount"] then Recipes[i]["amount"] = 1 end
|
if not Recipes[i]["amount"] then Recipes[i]["amount"] = 1 end
|
||||||
for k, v in pairs(Recipes[i]) do
|
for k, v in pairs(Recipes[i]) do
|
||||||
@@ -51,14 +60,20 @@ function craftingMenu(data)
|
|||||||
itemTable[l] = b
|
itemTable[l] = b
|
||||||
Wait(0)
|
Wait(0)
|
||||||
end
|
end
|
||||||
|
while not canCarryTable do Wait(0) end
|
||||||
if Config.System.Debug then print("^6Bridge^7: ^2Checking"..(data.stashName and " ^7'^6"..data.stashName.."^7'" or "").." ^2ingredients^7 - ^6"..k.."^7") end
|
if Config.System.Debug then print("^6Bridge^7: ^2Checking"..(data.stashName and " ^7'^6"..data.stashName.."^7'" or "").." ^2ingredients^7 - ^6"..k.."^7") end
|
||||||
if data.stashName then disable = not stashhasItem(stashItems, itemTable)
|
if data.stashName then disable = not stashhasItem(stashItems, itemTable)
|
||||||
else disable = not hasItem(itemTable) end
|
else disable = not hasItem(itemTable) end
|
||||||
setheader = (Items[tostring(k)] and Items[tostring(k)].label or "error - "..tostring(k))..(Recipes[i]["amount"] > 1 and " x"..Recipes[i]["amount"] or "")..(not disable and " ✔️" or "")
|
setheader = (Items[tostring(k)] and Items[tostring(k)].label or "error - " .. tostring(k)) .. (Recipes[i]["amount"] > 1 and " x" .. Recipes[i]["amount"] or "")
|
||||||
|
if not disable then
|
||||||
|
if not canCarryTable[k] then setheader = setheader .. " 📦"
|
||||||
|
else setheader = setheader .. " ✔️" end
|
||||||
|
elseif not canCarryTable[k] then setheader = setheader .. " 📦" end
|
||||||
Menu[#Menu + 1] = {
|
Menu[#Menu + 1] = {
|
||||||
isMenuHeader = disable,
|
isMenuHeader = disable or not canCarryTable[k],
|
||||||
icon = invImg(tostring(k)),
|
icon = invImg(tostring(k)),
|
||||||
header = setheader, txt = settext,
|
header = setheader,
|
||||||
|
txt = settext,
|
||||||
onSelect = function()
|
onSelect = function()
|
||||||
local transdata = { item = k, craft = data.craftable.Recipes[i], craftable = data.craftable, coords = data.coords, stashName = data.stashName, onBack = data.onBack }
|
local transdata = { item = k, craft = data.craftable.Recipes[i], craftable = data.craftable, coords = data.coords, stashName = data.stashName, onBack = data.onBack }
|
||||||
if Config.Crafting.MultiCraft then multiCraft(transdata) else makeItem(transdata) end
|
if Config.Crafting.MultiCraft then multiCraft(transdata) else makeItem(transdata) end
|
||||||
@@ -114,9 +129,9 @@ function makeItem(data)
|
|||||||
CraftLock = true
|
CraftLock = true
|
||||||
|
|
||||||
local bartime = data.craftable.progressBar and data.craftable.progressBar.time or 5000
|
local bartime = data.craftable.progressBar and data.craftable.progressBar.time or 5000
|
||||||
local bartext = data.craftable.progressBar and data.craftable.progressBar.label or Loc[Config.Lan].progressbar["progress_make"]
|
local bartext = (data.craftable.progressBar and data.craftable.progressBar.label) or (Loc[Config.Lan].progressbar and Loc[Config.Lan].progressbar["progress_make"]) or "Making a"
|
||||||
local animDict = data.craftable.Anims.animDict or "amb@prop_human_parking_meter@male@idle_a"
|
local animDict = data.craftable.Anims and data.craftable.Anims.animDict or "amb@prop_human_parking_meter@male@idle_a"
|
||||||
local anim = data.craftable.Anims.anim or "idle_a"
|
local anim = data.craftable.Anims and data.craftable.Anims.anim or "idle_a"
|
||||||
local amount = data.amount and (data.amount ~= 1) and data.amount or 1
|
local amount = data.amount and (data.amount ~= 1) and data.amount or 1
|
||||||
|
|
||||||
local crafted, crafting = true, true
|
local crafted, crafting = true, true
|
||||||
@@ -174,7 +189,6 @@ end
|
|||||||
|
|
||||||
RegisterNetEvent(GetCurrentResourceName()..":Crafting:GetItem", function(ItemMake, craftable, stashName)
|
RegisterNetEvent(GetCurrentResourceName()..":Crafting:GetItem", function(ItemMake, craftable, stashName)
|
||||||
local src, amount, stashItems = source, craftable and craftable.amount or 1, stashName and getStash(stashName)
|
local src, amount, stashItems = source, craftable and craftable.amount or 1, stashName and getStash(stashName)
|
||||||
|
|
||||||
if stashName then
|
if stashName then
|
||||||
local itemRemove = {}
|
local itemRemove = {}
|
||||||
for k, v in pairs(craftable[ItemMake] or {}) do
|
for k, v in pairs(craftable[ItemMake] or {}) do
|
||||||
@@ -212,15 +226,18 @@ function hasItem(items, amount, src) local amount = amount and amount or 1
|
|||||||
if type(items) ~= "table" then items = { [items] = amount and amount or 1, } end
|
if type(items) ~= "table" then items = { [items] = amount and amount or 1, } end
|
||||||
if GetResourceState(OXInv):find("start") then
|
if GetResourceState(OXInv):find("start") then
|
||||||
foundInv = OXInv
|
foundInv = OXInv
|
||||||
grabInv = src and exports.ox_inventory:GetInventoryItems(src) or exports[OXInv]:GetPlayerItems()
|
if src then grabInv = exports[OXInv]:GetInventoryItems(src)
|
||||||
|
else grabInv = exports[OXInv]:GetPlayerItems() end
|
||||||
|
|
||||||
elseif GetResourceState(QSInv):find("start") then
|
elseif GetResourceState(QSInv):find("start") then
|
||||||
foundInv = QSInv
|
foundInv = QSInv
|
||||||
grabInv = src and exports[QSInv]:GetInventory(src) or exports[QSInv]:getUserInventory()
|
if src then grabInv = exports[QSInv]:GetInventory(src)
|
||||||
|
else grabInv = exports[QSInv]:getUserInventory() end
|
||||||
|
|
||||||
elseif GetResourceState(OrigenInv):find("start") then
|
elseif GetResourceState(OrigenInv):find("start") then
|
||||||
foundInv = OrigenInv
|
foundInv = OrigenInv
|
||||||
grabInv = src and exports[OrigenInv]:getPlayerInventory(src) or exports[OrigenInv]:getPlayerInventory()
|
if src then grabInv = exports[OrigenInv]:getPlayerInventory(src)
|
||||||
|
else grabInv = exports[OrigenInv]:getPlayerInventory() end
|
||||||
|
|
||||||
elseif GetResourceState(CoreInv):find("start") then
|
elseif GetResourceState(CoreInv):find("start") then
|
||||||
foundInv = CoreInv
|
foundInv = CoreInv
|
||||||
@@ -447,4 +464,97 @@ function stashhasItem(stashItems, items, amount)
|
|||||||
end
|
end
|
||||||
for k, v in pairs(hasTable) do if v.hasItem == false then return false, hasTable end end
|
for k, v in pairs(hasTable) do if v.hasItem == false then return false, hasTable end end
|
||||||
return true, hasTable
|
return true, hasTable
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsDuplicityVersion() then
|
||||||
|
if GetResourceState(OXLibExport):find("start") then
|
||||||
|
createCallback(GetCurrentResourceName()..':server:canCarry', function(source, itemTable) local result = canCarry(itemTable, source) return result end)
|
||||||
|
else
|
||||||
|
createCallback(GetCurrentResourceName()..':server:canCarry', function(source, cb, itemTable) local result = canCarry(itemTable, source) cb(result) end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function canCarry(itemTable, src)
|
||||||
|
local resultTable = {}
|
||||||
|
if src then
|
||||||
|
if GetResourceState(OXInv):find("start") then
|
||||||
|
for k, v in pairs(itemTable) do
|
||||||
|
resultTable[k] = exports[OXInv]:CanCarryItem(src, k, v)
|
||||||
|
end
|
||||||
|
|
||||||
|
elseif GetResourceState(QSInv):find("start") then
|
||||||
|
for k, v in pairs(itemTable) do
|
||||||
|
resultTable[k] = exports[OXInv]:CanCarryItem(src, k, v)
|
||||||
|
end
|
||||||
|
|
||||||
|
elseif GetResourceState(CoreInv):find("start") then
|
||||||
|
--??
|
||||||
|
|
||||||
|
elseif GetResourceState(CodeMInv):find("start") then
|
||||||
|
for k, v in pairs(itemTable) do
|
||||||
|
local weight = Items[k].weight
|
||||||
|
resultTable[k] = exports[CodeMInv]:CanCarryItem(src, weight, v)
|
||||||
|
end
|
||||||
|
|
||||||
|
elseif GetResourceState(OrigenInv):find("start") then
|
||||||
|
for k, v in pairs(itemTable) do
|
||||||
|
resultTable[k] = exports[OrigenInv]:canCarryItem(src, k, v)
|
||||||
|
end
|
||||||
|
|
||||||
|
elseif GetResourceState(QBInv):find("start") then
|
||||||
|
local Player = Core.Functions.GetPlayer(src)
|
||||||
|
local items = Player.PlayerData.items
|
||||||
|
local weight, totalWeight = 0, 0
|
||||||
|
if not items then return false end
|
||||||
|
for _, item in pairs(items) do weight += item.weight * item.amount end
|
||||||
|
totalWeight = tonumber(weight)
|
||||||
|
|
||||||
|
for k, v in pairs(itemTable) do
|
||||||
|
local itemInfo = Items[k]
|
||||||
|
if not itemInfo and not Player.Offline then
|
||||||
|
triggerNotify(nil, 'Item does not exist', 'error', src)
|
||||||
|
resultTable[k] = true
|
||||||
|
else
|
||||||
|
resultTable[k] = (totalWeight + (Items[k]['weight'] * v)) <= 120000
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return resultTable
|
||||||
|
end
|
||||||
|
|
||||||
|
function getRandomReward(itemName) -- intended for job scripts
|
||||||
|
if Config.Rewards.RewardPool then
|
||||||
|
local reward = false
|
||||||
|
if type(Config.Rewards.RewardItem) == "string" then Config.Rewards.RewardItem = { Config.Rewards.RewardItem } end
|
||||||
|
for k, v in pairs(Config.Rewards.RewardItem) do
|
||||||
|
if v == itemName then reward = true break end
|
||||||
|
end
|
||||||
|
if reward then
|
||||||
|
removeItem(itemName, 1)
|
||||||
|
local totalRarity = 0
|
||||||
|
for i=1, #Config.Rewards.RewardPool do
|
||||||
|
totalRarity += Config.Rewards.RewardPool[i].rarity
|
||||||
|
end
|
||||||
|
if Config.System.Debug then
|
||||||
|
print("^6Bridge^7: ^3getRandomReward^7: ^2Total Rarity ^7'^6"..totalRarity.."^7'")
|
||||||
|
end
|
||||||
|
|
||||||
|
local randomNum = math.random(1, totalRarity)
|
||||||
|
if Config.System.Debug then
|
||||||
|
print("^6Bridge^7: ^3getRandomReward^7: ^2Random Number ^7'^6"..randomNum.."^7'")
|
||||||
|
end
|
||||||
|
local currentRarity = 0
|
||||||
|
for i=1, #Config.Rewards.RewardPool do
|
||||||
|
currentRarity += Config.Rewards.RewardPool[i].rarity
|
||||||
|
if randomNum <= currentRarity then
|
||||||
|
if Config.System.Debug then
|
||||||
|
print("^6Bridge^7: ^3getRandomReward^7: ^2Selected toy ^7'^6"..Config.Rewards.RewardPool[i].item.."^7'")
|
||||||
|
end
|
||||||
|
addItem(Config.Rewards.RewardPool[i].item, 1)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
@@ -8,20 +8,45 @@ function jobCheck(job)
|
|||||||
return canDo
|
return canDo
|
||||||
end
|
end
|
||||||
|
|
||||||
local time = 100
|
local time = 500
|
||||||
function loadModel(model)
|
function loadModel(model)
|
||||||
if not HasModelLoaded(model) then if Config.System.Debug then print("^6Bridge^7: ^2Loading Model^7: '^6"..model.."^7'") end
|
if not IsModelValid(model) then print("^6Bridge^7: ^1ERROR^7: ^2Model^7 - '^6"..model.."^7' ^2does not exist in server") return
|
||||||
while not HasModelLoaded(model) do if time > 0 then time -= 1 RequestModel(model)
|
else
|
||||||
else time = 1000 print("^6Bridge^7: ^3LoadModel^7: ^2Timed out loading model ^7'^6"..model.."^7'") break end
|
if not HasModelLoaded(model) then
|
||||||
Wait(10) end
|
if Config.System.Debug then print("^6Bridge^7: ^2Loading Model^7: '^6"..model.."^7'") end
|
||||||
|
while not HasModelLoaded(model) and time > 0 do time -= 1 RequestModel(model) Wait(0) end
|
||||||
|
if not HasModelLoaded(model) then time = 500 print("^6Bridge^7: ^3LoadModel^7: ^2Timed out loading model ^7'^6"..model.."^7'") end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function unloadModel(model) if Config.System.Debug then print("^6Bridge^7: ^2Removing Model from memory cache^7: '^6"..model.."^7'") end SetModelAsNoLongerNeeded(model) end
|
||||||
|
|
||||||
|
function loadAnimDict(animDict)
|
||||||
|
if not DoesAnimDictExist(animDict) then print("^6Bridge^7: ^1ERROR^7: ^2Anim Dictionary^7 - '^6"..animDict.."^7' ^2does not exist in server") return
|
||||||
|
else
|
||||||
|
if Config.System.Debug then print("^6Bridge^7: ^2Loading Anim Dictionary^7: '^6"..animDict.."^7'") end
|
||||||
|
while not HasAnimDictLoaded(animDict) do RequestAnimDict(animDict) Wait(5) end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function unloadAnimDict(animDict) if Config.System.Debug then print("^6Bridge^7: ^2Removing Anim Dictionary from memory cache^7: '^6"..animDict.."^7'") end RemoveAnimDict(animDict) end
|
||||||
|
|
||||||
|
function loadPtfxDict(ptFxName)
|
||||||
|
if not HasNamedPtfxAssetLoaded(ptFxName) then
|
||||||
|
if Config.System.Debug then
|
||||||
|
print("^6Bridge^7: ^2Loading Ptfx Dictionary^7: '^6"..ptFxName.."^7'")
|
||||||
|
end
|
||||||
|
while not HasNamedPtfxAssetLoaded(ptFxName) do RequestNamedPtfxAsset(ptFxName) Wait(5) end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function unloadModel(model) if Config.System.Debug then print("^6Bridge^7: ^2Removing Model^7: '^6"..model.."^7'") end SetModelAsNoLongerNeeded(model) end
|
|
||||||
function loadAnimDict(dict) if Config.System.Debug then print("^6Bridge^7: ^2Loading Anim Dictionary^7: '^6"..dict.."^7'") end while not HasAnimDictLoaded(dict) do RequestAnimDict(dict) Wait(5) end end
|
|
||||||
function unloadAnimDict(dict) if Config.System.Debug then print("^6Bridge^7: ^2Removing Anim Dictionary^7: '^6"..dict.."^7'") end RemoveAnimDict(dict) end
|
|
||||||
function loadPtfxDict(dict) if Config.System.Debug then if not HasNamedPtfxAssetLoaded(dict) then print("^6Bridge^7: ^2Loading Ptfx Dictionary^7: '^6"..dict.."^7'") end end while not HasNamedPtfxAssetLoaded(dict) do RequestNamedPtfxAsset(dict) Wait(5) end end
|
|
||||||
function unloadPtfxDict(dict) if Config.System.Debug then print("^6Bridge^7: ^2Removing Ptfx Dictionary^7: '^6"..dict.."^7'") end RemoveNamedPtfxAsset(dict) end
|
function unloadPtfxDict(dict) if Config.System.Debug then print("^6Bridge^7: ^2Removing Ptfx Dictionary^7: '^6"..dict.."^7'") end RemoveNamedPtfxAsset(dict) end
|
||||||
function loadTextureDict(dict) if Config.System.Debug then print("^6Bridge^7: ^2Loading Texture Dictionary^7: '^6"..dict.."^7'") end while not HasStreamedTextureDictLoaded(dict) do RequestNamedPtfxAsset(dict) Wait(5) end end
|
function loadTextureDict(dict)
|
||||||
|
if not HasStreamedTextureDictLoaded(dict) then
|
||||||
|
if Config.System.Debug then
|
||||||
|
print("^6Bridge^7: ^2Loading Texture Dictionary^7: '^6"..dict.."^7'")
|
||||||
|
end
|
||||||
|
while not HasStreamedTextureDictLoaded(dict) do RequestNamedPtfxAsset(dict) Wait(5) end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function countTable(table) local i = 0 for keys in pairs(table) do i += 1 end return i end
|
function countTable(table) local i = 0 for keys in pairs(table) do i += 1 end return i end
|
||||||
|
|
||||||
@@ -32,8 +57,8 @@ function playAnim(animDict, animName, duration, flag, ped)
|
|||||||
TaskPlayAnim(ped and ped or PlayerPedId(), animDict, animName, 8.0, -8.0, duration or 30000, flag or 50, 1, false, false, false)
|
TaskPlayAnim(ped and ped or PlayerPedId(), animDict, animName, 8.0, -8.0, duration or 30000, flag or 50, 1, false, false, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
function stopAnim(animDict, animName)
|
function stopAnim(animDict, animName, ped)
|
||||||
StopAnimTask(PlayerPedId(), animName, animDict)
|
StopAnimTask(ped and ped or PlayerPedId(), animName, animDict)
|
||||||
unloadAnimDict(animDict)
|
unloadAnimDict(animDict)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -60,7 +85,7 @@ local Peds = {}
|
|||||||
local Props = {}
|
local Props = {}
|
||||||
function makePed(model, coords, freeze, collision, scenario, anim, synced)
|
function makePed(model, coords, freeze, collision, scenario, anim, synced)
|
||||||
loadModel(model)
|
loadModel(model)
|
||||||
local ped = CreatePed(0, model, coords.x, coords.y, coords.z-1.03, coords.w, synced and synced or true, false)
|
local ped = CreatePed(0, model, coords.x, coords.y, coords.z-1.03, coords.w, synced or true, false)
|
||||||
SetEntityInvincible(ped, true)
|
SetEntityInvincible(ped, true)
|
||||||
SetBlockingOfNonTemporaryEvents(ped, true)
|
SetBlockingOfNonTemporaryEvents(ped, true)
|
||||||
FreezeEntityPosition(ped, freeze and freeze or true)
|
FreezeEntityPosition(ped, freeze and freeze or true)
|
||||||
@@ -82,7 +107,7 @@ end
|
|||||||
|
|
||||||
function makeProp(data, freeze, synced)
|
function makeProp(data, freeze, synced)
|
||||||
loadModel(data.prop)
|
loadModel(data.prop)
|
||||||
local prop = CreateObject(data.prop, data.coords.x, data.coords.y, data.coords.z-1.03, synced or false, synced or false, false)
|
local prop = CreateObject(data.prop, data.coords.x, data.coords.y, data.coords.z-1.03, freeze or false, synced or false, false)
|
||||||
SetEntityHeading(prop, data.coords.w + 180.0)
|
SetEntityHeading(prop, data.coords.w + 180.0)
|
||||||
FreezeEntityPosition(prop, freeze and freeze or 0)
|
FreezeEntityPosition(prop, freeze and freeze or 0)
|
||||||
if Config.System.Debug then
|
if Config.System.Debug then
|
||||||
@@ -494,7 +519,7 @@ end)
|
|||||||
RegisterNetEvent(GetCurrentResourceName()..":server:setNeed", function(type, amount) local src = source
|
RegisterNetEvent(GetCurrentResourceName()..":server:setNeed", function(type, amount) local src = source
|
||||||
if type == "thirst" then
|
if type == "thirst" then
|
||||||
setThirst(src, amount)
|
setThirst(src, amount)
|
||||||
elseif type == "thirst" then
|
elseif type == "hunger" then
|
||||||
setHunger(src, amount)
|
setHunger(src, amount)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
@@ -531,8 +556,8 @@ end
|
|||||||
-- [[CONSUME]] --
|
-- [[CONSUME]] --
|
||||||
function ConsumeSuccess(itemName, type)
|
function ConsumeSuccess(itemName, type)
|
||||||
ExecuteCommand("e c")
|
ExecuteCommand("e c")
|
||||||
toggleItem(false, itemName, 1)
|
removeItem(itemName, 1)
|
||||||
if GetResourceState(ESXEport):find("start") then
|
if GetResourceState(ESXExport):find("start") then
|
||||||
if Items[itemName].hunger then
|
if Items[itemName].hunger then
|
||||||
TriggerServerEvent(GetCurrentResourceName()..":server:setNeed", "hunger", Items[itemName].hunger * 10000)
|
TriggerServerEvent(GetCurrentResourceName()..":server:setNeed", "hunger", Items[itemName].hunger * 10000)
|
||||||
end
|
end
|
||||||
@@ -548,17 +573,22 @@ function ConsumeSuccess(itemName, type)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if type == "alcohol" then alcoholCount += 1
|
if type == "alcohol" then alcoholCount += 1
|
||||||
if alcoholCount > 1 and alcoholCount < 4 then TriggerEvent("evidence:client:SetStatus", "alcohol", 200) elseif alcoholCount >= 4 then TriggerEvent("evidence:client:SetStatus", "heavyalcohol", 200) AlienEffect() end
|
if alcoholCount > 1 and alcoholCount < 4 then
|
||||||
|
TriggerEvent("evidence:client:SetStatus", "alcohol", 200)
|
||||||
|
elseif alcoholCount >= 4 then
|
||||||
|
TriggerEvent("evidence:client:SetStatus", "heavyalcohol", 200)
|
||||||
|
AlienEffect()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if Config.RewardItem == itemName then toggleItem(true, Config.RewardPool[math.random(1, #Config.RewardPool)], 1) end
|
getRandomReward(itemName) -- check if a reward item should be given
|
||||||
end
|
end
|
||||||
|
|
||||||
function addItem(item, amount, info)
|
function addItem(item, amount, info)
|
||||||
TriggerServerEvent(GetCurrentResourceName()..":server:toggleItem", true, item, amount)
|
TriggerServerEvent(GetCurrentResourceName()..":server:toggleItem", true, item, amount, nil, info)
|
||||||
end
|
end
|
||||||
|
|
||||||
function removeItem(item, amount)
|
function removeItem(item, amount)
|
||||||
TriggerServerEvent(GetCurrentResourceName()..":server:toggleItem", false, item, amount)
|
TriggerServerEvent(GetCurrentResourceName()..":server:toggleItem", false, item, amount, nil, info)
|
||||||
end
|
end
|
||||||
|
|
||||||
RegisterNetEvent(GetCurrentResourceName()..":server:toggleItem", function(give, item, amount, newsrc)
|
RegisterNetEvent(GetCurrentResourceName()..":server:toggleItem", function(give, item, amount, newsrc)
|
||||||
@@ -620,7 +650,7 @@ RegisterNetEvent(GetCurrentResourceName()..":server:toggleItem", function(give,
|
|||||||
print("^4ERROR^7: ^2No Inventory detected ^7- ^2Check ^3exports^1.^2lua^7")
|
print("^4ERROR^7: ^2No Inventory detected ^7- ^2Check ^3exports^1.^2lua^7")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
dupeWarn(src, item) -- if not boot the player
|
dupeWarn(src, item, amount) -- if not boot the player
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local amount = amount and amount or 1
|
local amount = amount and amount or 1
|
||||||
@@ -675,10 +705,10 @@ RegisterNetEvent(GetCurrentResourceName()..":server:toggleItem", function(give,
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
--Item Exploit protection
|
--Item Exploit protection
|
||||||
function dupeWarn(src, item)
|
function dupeWarn(src, item, amount)
|
||||||
print("^5DupeWarn^7: (^1"..tostring(src).."^7) ^2Tried to remove item ^7('^3"..item.."^7')^2 but it wasn't there^7")
|
print("^5DupeWarn^7: (^1"..tostring(src).."^7) ^2Tried to remove item ^7('^3"..item.."^7')^2 but it wasn't there^7")
|
||||||
if Config.System.Debug == false then
|
if Config.System.Debug == false then
|
||||||
DropPlayer(src, src.." ^1Kicked for attempting to duplicate items")
|
DropPlayer(src, src.." ^1Kicked for suspected duplicating items:"..item)
|
||||||
end
|
end
|
||||||
print("^5DupeWarn:^7: (^1"..tostring(src).."^7) ^2Dropped from server - exploit protection detected an item not being found in players inventory^7")
|
print("^5DupeWarn:^7: (^1"..tostring(src).."^7) ^2Dropped from server - exploit protection detected an item not being found in players inventory^7")
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
name "Jim_Bridge"
|
name "Jim_Bridge"
|
||||||
author "Jimathy"
|
author "Jimathy"
|
||||||
version "1.0.9"
|
version "1.0.11"
|
||||||
description "Framework Bridge By Jimathy"
|
description "Framework Bridge By Jimathy"
|
||||||
fx_version "cerulean"
|
fx_version "cerulean"
|
||||||
game "gta5"
|
game "gta5"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
1.0.9
|
1.0.11
|
||||||
|
|||||||
117
wrapper.lua
117
wrapper.lua
@@ -1003,31 +1003,58 @@ AddStateBagChangeHandler(GetCurrentResourceName()..':setVehicleProperties', '',
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
RegisterNetEvent(GetCurrentResourceName()..":server:ChargePlayer", function(cost, type) local src = source
|
RegisterNetEvent(GetCurrentResourceName()..":server:ChargePlayer", function(cost, type, newsrc)
|
||||||
if Config.System.Debug then print("^6Bridge^7: ^2Charging ^2Player: '^6"..cost.."^7'", type) end
|
local src = newsrc or source
|
||||||
|
local fundResource = ""
|
||||||
if type == "cash" then
|
if type == "cash" then
|
||||||
if GetResourceState(OXInv):find("start") then
|
if GetResourceState(OXInv):find("start") then fundResource = OXInv
|
||||||
exports[OXInv]:RemoveItem(src, "money", cost)
|
exports[OXInv]:RemoveItem(src, "money", cost)
|
||||||
if Config.System.Debug then print("^6Bridge^7: ^2Charging ^2Player: '^6"..cost.."^7'", type, OXInv) end
|
elseif GetResourceState(QBExport):find("start") or GetResourceState(QBXExport):find("start") then fundResource = QBExport
|
||||||
elseif GetResourceState(QBExport):find("start") then
|
|
||||||
Core.Functions.GetPlayer(src).Functions.RemoveMoney("cash", cost)
|
Core.Functions.GetPlayer(src).Functions.RemoveMoney("cash", cost)
|
||||||
if Config.System.Debug then print("^6Bridge^7: ^2Charging ^2Player: '^6"..cost.."^7'", type, QBExport) end
|
elseif GetResourceState(ESXExport):find("start") then fundResource = ESXExport
|
||||||
elseif GetResourceState(ESXExport):find("start") then
|
|
||||||
local Player = ESX.GetPlayerFromId(src)
|
local Player = ESX.GetPlayerFromId(src)
|
||||||
Player.removeMoney(cost, "")
|
Player.removeMoney(cost, "")
|
||||||
if Config.System.Debug then print("^6Bridge^7: ^2Charging ^2Player: '^6"..cost.."^7'", type, ESXExport) end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if type == "bank" then
|
if type == "bank" then
|
||||||
if GetResourceState(QBExport):find("start") or GetResourceState(QBXExport):find("start") then
|
if GetResourceState(QBExport):find("start") or GetResourceState(QBXExport):find("start") then fundResource = QBExport
|
||||||
Core.Functions.GetPlayer(src).Functions.RemoveMoney("bank", cost)
|
Core.Functions.GetPlayer(src).Functions.RemoveMoney("bank", cost)
|
||||||
if Config.System.Debug then print("^6Bridge^7: ^2Charging ^2Player: '^6"..cost.."^7'", type, QBExport) end
|
elseif GetResourceState(ESXExport):find("start") then fundResource = ESXExport
|
||||||
elseif GetResourceState(ESXExport):find("start") then
|
|
||||||
local Player = ESX.GetPlayerFromId(src)
|
local Player = ESX.GetPlayerFromId(src)
|
||||||
Player.removeMoney(cost, "")
|
Player.removeMoney(cost, "")
|
||||||
if Config.System.Debug then print("^6Bridge^7: ^2Charging ^2Player: '^6"..cost.."^7'", type, ESXExport) end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if fundResource == "" then print("error - check exports.lua")
|
||||||
|
else
|
||||||
|
if Config.System.Debug then print("^6Bridge^7: ^2Charging ^2Player^7: '^6"..cost.."^7'", type, fundResource) end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterNetEvent(GetCurrentResourceName()..":server:FundPlayer", function(fund, type, newsrc)
|
||||||
|
local src = newsrc or source
|
||||||
|
local fundResource = ""
|
||||||
|
if type == "cash" then
|
||||||
|
if GetResourceState(OXInv):find("start") then fundResource = OXInv
|
||||||
|
exports[OXInv]:AddItem(src, "money", fund)
|
||||||
|
elseif GetResourceState(QBExport):find("start") or GetResourceState(QBXExport):find("start") then fundResource = QBExport
|
||||||
|
Core.Functions.GetPlayer(src).Functions.AddMoney("cash", fund)
|
||||||
|
elseif GetResourceState(ESXExport):find("start") then fundResource = ESXExport
|
||||||
|
local Player = ESX.GetPlayerFromId(src)
|
||||||
|
Player.addMoney(fund, "")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if type == "bank" then
|
||||||
|
if GetResourceState(QBExport):find("start") or GetResourceState(QBXExport):find("start") then fundResource = QBExport
|
||||||
|
Core.Functions.GetPlayer(src).Functions.AddMoney("bank", fund)
|
||||||
|
elseif GetResourceState(ESXExport):find("start") then fundResource = ESXExport
|
||||||
|
local Player = ESX.GetPlayerFromId(src)
|
||||||
|
Player.addMoney(fund, "")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if fundResource == "" then print("error - check exports.lua")
|
||||||
|
else
|
||||||
|
if Config.System.Debug then print("^6Bridge^7: ^2Funding ^2Player^7: '^2"..fund.."^7'", type, fundResource) end
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
function createUseableItem(item, funct)
|
function createUseableItem(item, funct)
|
||||||
@@ -1124,6 +1151,7 @@ function hasJob(job, source, grade) local hasJob, duty = false, true
|
|||||||
if ganginfo.name == job then hasJob = true
|
if ganginfo.name == job then hasJob = true
|
||||||
if grade and not (grade <= ganginfo.grade.level) then hasJob = false end
|
if grade and not (grade <= ganginfo.grade.level) then hasJob = false end
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif GetResourceState(QBExport):find("start") and not GetResourceState(QBXExport):find("start") then
|
elseif GetResourceState(QBExport):find("start") and not GetResourceState(QBXExport):find("start") then
|
||||||
local info = nil
|
local info = nil
|
||||||
Core.Functions.GetPlayerData(function(PlayerData)
|
Core.Functions.GetPlayerData(function(PlayerData)
|
||||||
@@ -1139,6 +1167,7 @@ function hasJob(job, source, grade) local hasJob, duty = false, true
|
|||||||
hasJob = true
|
hasJob = true
|
||||||
if grade and not (grade <= ganginfo.grade.level) then hasJob = false end
|
if grade and not (grade <= ganginfo.grade.level) then hasJob = false end
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
print("^4ERROR^7: ^2No Core detected for hasJob() ^7- ^2Check ^3exports^1.^2lua^7")
|
print("^4ERROR^7: ^2No Core detected for hasJob() ^7- ^2Check ^3exports^1.^2lua^7")
|
||||||
end
|
end
|
||||||
@@ -1157,6 +1186,7 @@ function getPlayer(source) local Player = {}
|
|||||||
cash = info.getMoney(),
|
cash = info.getMoney(),
|
||||||
bank = info.getAccount("bank").money,
|
bank = info.getAccount("bank").money,
|
||||||
}
|
}
|
||||||
|
|
||||||
elseif GetResourceState(OXCoreExport):find("start") then
|
elseif GetResourceState(OXCoreExport):find("start") then
|
||||||
local file = ('imports/%s.lua'):format('server')
|
local file = ('imports/%s.lua'):format('server')
|
||||||
local import = LoadResourceFile('ox_core', file)
|
local import = LoadResourceFile('ox_core', file)
|
||||||
@@ -1168,6 +1198,7 @@ function getPlayer(source) local Player = {}
|
|||||||
cash = exports[OXInv]:Search(src, 'count', "money"),
|
cash = exports[OXInv]:Search(src, 'count', "money"),
|
||||||
bank = 0,
|
bank = 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
elseif GetResourceState(QBXExport):find("start") then
|
elseif GetResourceState(QBXExport):find("start") then
|
||||||
local info = exports[QBXExport]:GetPlayer(src)
|
local info = exports[QBXExport]:GetPlayer(src)
|
||||||
Player = {
|
Player = {
|
||||||
@@ -1175,6 +1206,7 @@ function getPlayer(source) local Player = {}
|
|||||||
cash = exports[OXInv]:Search(src, 'count', "money"),
|
cash = exports[OXInv]:Search(src, 'count', "money"),
|
||||||
bank = info.Functions.GetMoney("bank"),
|
bank = info.Functions.GetMoney("bank"),
|
||||||
}
|
}
|
||||||
|
|
||||||
elseif GetResourceState(QBExport):find("start") and not GetResourceState(QBXExport):find("start") then
|
elseif GetResourceState(QBExport):find("start") and not GetResourceState(QBXExport):find("start") then
|
||||||
if Core.Functions.GetPlayer ~= nil then -- support older qb-core functions
|
if Core.Functions.GetPlayer ~= nil then -- support older qb-core functions
|
||||||
local info = Core.Functions.GetPlayer(src).PlayerData
|
local info = Core.Functions.GetPlayer(src).PlayerData
|
||||||
@@ -1191,6 +1223,7 @@ function getPlayer(source) local Player = {}
|
|||||||
bank = info.money["bank"],
|
bank = info.money["bank"],
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
print("^4ERROR^7: ^2No Core detected for getPlayer() ^7- ^2Check ^3exports^1.^2lua^7")
|
print("^4ERROR^7: ^2No Core detected for getPlayer() ^7- ^2Check ^3exports^1.^2lua^7")
|
||||||
end
|
end
|
||||||
@@ -1236,6 +1269,60 @@ function getPlayer(source) local Player = {}
|
|||||||
return Player
|
return Player
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function sendPhoneMail(data) local phoneResource = ""
|
||||||
|
if GetResourceState("gksphone"):find("start") then phoneResource = "gksphone"
|
||||||
|
exports["gksphone"]:SendNewMail(data)
|
||||||
|
|
||||||
|
elseif GetResourceState("yflip-phone"):find("start") then phoneResource = "yflip-phone"
|
||||||
|
TriggerServerEvent(GetCurrentResourceName()..":yflip:SendMail", data)
|
||||||
|
|
||||||
|
elseif GetResourceState("qs-smartphone"):find("start") then phoneResource = "qs-smartphone"
|
||||||
|
TriggerServerEvent('qs-smartphone:server:sendNewMail', data)
|
||||||
|
|
||||||
|
elseif GetResourceState("qs-smartphone-pro"):find("start") then phoneResource = "qs-smartphone-pro"
|
||||||
|
TriggerServerEvent('phone:sendNewMail', data)
|
||||||
|
|
||||||
|
elseif GetResourceState("roadphone"):find("start") then phoneResource = "roadphone"
|
||||||
|
data.message = data.message:gsub("%<br>", "\n")
|
||||||
|
exports['roadphone']:sendMail(data)
|
||||||
|
|
||||||
|
elseif GetResourceState("lb-phone"):find("start") then phoneResource = "lb-phone"
|
||||||
|
TriggerServerEvent(GetCurrentResourceName()..":lbphone:SendMail", data)
|
||||||
|
|
||||||
|
elseif GetResourceState("qb-phone"):find("start") then phoneResource = "qb-phone"
|
||||||
|
TriggerServerEvent('qb-phone:server:sendNewMail', data)
|
||||||
|
end
|
||||||
|
|
||||||
|
if phoneResource ~= "" then if Config.System.Debug then print("^6Bridge^7[^3"..phoneResource.."^7]: ^2Sending mail to player") end
|
||||||
|
else print("^6Bridge^7: ^1ERROR ^2Sending mail to player ^7 - ^2No supported phone found") end
|
||||||
|
end
|
||||||
|
|
||||||
|
RegisterNetEvent(GetCurrentResourceName()..":lbphone:SendMail", function(data)
|
||||||
|
local src = source
|
||||||
|
local phoneNumber = exports["lb-phone"]:GetEquippedPhoneNumber(src)
|
||||||
|
local emailAddress = exports["lb-phone"]:GetEmailAddress(phoneNumber)
|
||||||
|
exports["lb-phone"]:SendMail({
|
||||||
|
to = emailAddress,
|
||||||
|
subject = data.subject,
|
||||||
|
message = data.message,
|
||||||
|
--[[attachments = {
|
||||||
|
"https://cdn.discordapp.com/attachments/1035667053115363349/1042500877426110474/upload.png",
|
||||||
|
},]]
|
||||||
|
actions = data.buttons,
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterNetEvent(GetCurrentResourceName()..":yflip:SendMail", function(data)
|
||||||
|
local src = source
|
||||||
|
exports["yflip-phone"]:SendMail({
|
||||||
|
title = data.subject,
|
||||||
|
sender = data.sender,
|
||||||
|
senderDisplayName = data.sender,
|
||||||
|
content = data.message,
|
||||||
|
actions = data.buttons,
|
||||||
|
}, 'source', src)
|
||||||
|
end)
|
||||||
|
|
||||||
function registerCommand(command, options)
|
function registerCommand(command, options)
|
||||||
if GetResourceState(OXLibExport):find("start") then
|
if GetResourceState(OXLibExport):find("start") then
|
||||||
if Config.System.Debug then print("^6Bridge^7: ^2Registering ^3Command^2 with ^7"..OXLibExport, command) end
|
if Config.System.Debug then print("^6Bridge^7: ^2Registering ^3Command^2 with ^7"..OXLibExport, command) end
|
||||||
@@ -1266,13 +1353,13 @@ function invImg(item)
|
|||||||
return imgLink
|
return imgLink
|
||||||
end
|
end
|
||||||
|
|
||||||
function registerStash(name, label)
|
function registerStash(name, label, slots, weight)
|
||||||
if GetResourceState(OXInv):find("start") then
|
if GetResourceState(OXInv):find("start") then
|
||||||
--print("Registering OX Stash:", name, label)
|
--print("Registering OX Stash:", name, label)
|
||||||
exports[OXInv]:RegisterStash(name, label, 50, 4000000)
|
exports[OXInv]:RegisterStash(name, label, slots or 50, weight or 4000000)
|
||||||
elseif GetResourceState(QSInv):find("start") then
|
elseif GetResourceState(QSInv):find("start") then
|
||||||
--print("Registering QS Stash:", name, label)
|
--print("Registering QS Stash:", name, label)
|
||||||
exports[QSInv]:RegisterStash(name, 50, 4000000)
|
exports[QSInv]:RegisterStash(name, slots or 50, weight or 4000000)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- IN NO WAY PERFECT --
|
-- IN NO WAY PERFECT --
|
||||||
|
|||||||
Reference in New Issue
Block a user