mirror of
https://github.com/jimathy/jim_bridge.git
synced 2026-08-17 14:06:02 +01:00
Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46e3f18edc | ||
|
|
0886d8a4b6 | ||
|
|
6a23e4ac91 | ||
|
|
f7b7718679 | ||
|
|
9ae034da77 | ||
|
|
4d1b2abd3d | ||
|
|
f8e3f64907 | ||
|
|
3702835958 | ||
|
|
23c2e1472e | ||
|
|
6367c9ed3b | ||
|
|
2d299a6a4a | ||
|
|
ced629d4dc | ||
|
|
714121d272 | ||
|
|
14c140cf85 | ||
|
|
881aec7c04 | ||
|
|
85b31e7e1d | ||
|
|
66c9287202 | ||
|
|
f0f59b8568 | ||
|
|
e03efa6687 | ||
|
|
5a22651961 | ||
|
|
236689452e | ||
|
|
b686f267e1 |
132
crafting.lua
132
crafting.lua
@@ -61,7 +61,6 @@ function craftingMenu(data)
|
||||
Wait(0)
|
||||
end
|
||||
while not canCarryTable do Wait(0) end
|
||||
print(json.encode(canCarryTable, {indent = true}))
|
||||
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)
|
||||
else disable = not hasItem(itemTable) end
|
||||
@@ -76,7 +75,7 @@ function craftingMenu(data)
|
||||
header = setheader,
|
||||
txt = settext,
|
||||
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
|
||||
end,
|
||||
}
|
||||
@@ -130,15 +129,14 @@ function makeItem(data)
|
||||
CraftLock = true
|
||||
|
||||
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 animDict = data.craftable.Anims.animDict or "amb@prop_human_parking_meter@male@idle_a"
|
||||
local anim = data.craftable.Anims.anim or "idle_a"
|
||||
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 and data.craftable.Anims.animDict or "amb@prop_human_parking_meter@male@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 crafted, crafting = true, true
|
||||
local cam = createTempCam(PlayerPedId(), data.coords)
|
||||
startTempCam(cam)
|
||||
|
||||
for i = 1, amount do
|
||||
for k, v in pairs(data.craft) do
|
||||
if k ~= "amount" and k ~= "job" then
|
||||
@@ -210,6 +208,80 @@ RegisterNetEvent(GetCurrentResourceName()..":Crafting:GetItem", function(ItemMak
|
||||
end)
|
||||
|
||||
--[[SHOPS]]--
|
||||
function sellMenu(data)
|
||||
local origData = data
|
||||
local Menu = {}
|
||||
if data.sellTable.Items then
|
||||
local itemList = {}
|
||||
for k, v in pairs(data.sellTable.Items) do itemList[k] = 1 end
|
||||
local hasitems, hasTable = hasItem(itemList)
|
||||
for k, v in pairsByKeys(data.sellTable.Items) do
|
||||
Menu[#Menu +1] = {
|
||||
isMenuHeader = not hasTable[k].hasItem,
|
||||
icon = invImg(k),
|
||||
header = Items[k].label.. (hasTable[k].hasItem and "💰 (x"..hasTable[k].count..")" or ""),
|
||||
txt = Loc[Config.Lan].info["sell_all"].." "..v.." "..Loc[Config.Lan].info["sell_each"],
|
||||
onSelect = function()
|
||||
sellAnim({ item = k, price = v, ped = data.ped, onBack = function() sellMenu(data) end })
|
||||
end,
|
||||
}
|
||||
end
|
||||
else
|
||||
for k, v in pairsByKeys(data.sellTable) do
|
||||
if type(v) == "table" then
|
||||
Menu[#Menu +1] = {
|
||||
arrow = true,
|
||||
header = k,
|
||||
txt = "Amount of items: "..countTable(v.Items),
|
||||
onSelect = function()
|
||||
v.onBack = function() sellMenu(origData) end
|
||||
v.sellTable = data.sellTable[k]
|
||||
sellMenu(v)
|
||||
end,
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
openMenu(Menu, { header = data.sellTable.Header or "Amount of items: "..countTable(data.sellTable.Items), canClose = true, onBack = data.onBack })
|
||||
end
|
||||
|
||||
function sellAnim(data)
|
||||
if not hasItem(data.item, 1) then
|
||||
triggerNotify(nil, Loc[Config.Lan].error["dont_have"].." "..Items[data.item].label, "error")
|
||||
return
|
||||
end
|
||||
for k, v in pairs(GetGamePool('CObject')) do
|
||||
for _, model in pairs({`p_cs_clipboard`}) do
|
||||
if GetEntityModel(v) == model then
|
||||
if IsEntityAttachedToEntity(data.ped, v) then
|
||||
DeleteObject(v) DetachEntity(v, 0, 0) SetEntityAsMissionEntity(v, true, true)
|
||||
Wait(100) DeleteEntity(v)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
TriggerServerEvent(GetCurrentResourceName().."Sellitems", data) -- Had to slip in the sell command during the animation command
|
||||
lookEnt(data.ped)
|
||||
local dict = "mp_common"
|
||||
playAnim(dict, "givetake2_a", 0.3, 2)
|
||||
playAnim(dict, "givetake2_b", 0.3, 2, 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
|
||||
end
|
||||
|
||||
RegisterNetEvent(GetCurrentResourceName().."Sellitems", function(data)
|
||||
local src = source
|
||||
local hasItems, hasTable = hasItem(data.item, 1, src)
|
||||
if hasItems then
|
||||
TriggerEvent(GetCurrentResourceName()..":server:toggleItem", false, data.item, hasTable[data.item].count, src)
|
||||
TriggerEvent(GetCurrentResourceName()..":server:FundPlayer", (hasTable[data.item].count * data.price), "cash", src)
|
||||
else
|
||||
triggerNotify(nil,Loc[Config.Lan].error["dont_have"].." "..Items[data.item].label, "error", src)
|
||||
end
|
||||
end)
|
||||
|
||||
function openShop(data)
|
||||
if (data.job or data.gang) and not jobCheck(data.job or data.gang) then return end
|
||||
if GetResourceState(OXInv):find("start") then
|
||||
@@ -227,15 +299,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 GetResourceState(OXInv):find("start") then
|
||||
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
|
||||
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
|
||||
foundInv = OrigenInv
|
||||
grabInv = src and exports[OrigenInv]:getPlayerInventory(src) or exports[OrigenInv]:getPlayerInventory()
|
||||
if src then grabInv = exports[OrigenInv]:GetInventory(src)
|
||||
else grabInv = exports[OrigenInv]:getPlayerInventory() end
|
||||
|
||||
elseif GetResourceState(CoreInv):find("start") then
|
||||
foundInv = CoreInv
|
||||
@@ -403,7 +478,7 @@ function stashRemoveItem(stashItems, stashName, items) local amount = amount and
|
||||
|
||||
elseif GetResourceState(OrigenInv):find("start") then
|
||||
for k, v in pairs(items) do
|
||||
exports[OrigenInv]:RemoveItem(stashName, k, v)
|
||||
exports[OrigenInv]:RemoveFromStash(stashName, nil, k, v)
|
||||
if Config.System.Debug then print("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..OrigenInv, k, v) end
|
||||
end
|
||||
|
||||
@@ -473,7 +548,6 @@ if IsDuplicityVersion() then
|
||||
end
|
||||
|
||||
function canCarry(itemTable, src)
|
||||
print("checking if player can carry")
|
||||
local resultTable = {}
|
||||
if src then
|
||||
if GetResourceState(OXInv):find("start") then
|
||||
@@ -520,4 +594,40 @@ function canCarry(itemTable, src)
|
||||
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
|
||||
@@ -8,18 +8,16 @@ function jobCheck(job)
|
||||
return canDo
|
||||
end
|
||||
|
||||
local time = 100
|
||||
local time = 500
|
||||
function loadModel(model)
|
||||
if not IsModelValid(model) then print("^6Bridge^7: ^1ERROR^7: ^2Model^7 - '^6"..model.."^7' ^2does not exist in server") return
|
||||
else
|
||||
if not HasModelLoaded(model) then
|
||||
if Config.System.Debug then
|
||||
print("^6Bridge^7: ^2Loading Model^7: '^6"..model.."^7'")
|
||||
end
|
||||
if lib then lib.requestModel(model, time)
|
||||
else while not HasModelLoaded(model) and time > 0 do time -= 1 end end
|
||||
if not HasModelLoaded(model) then time = 100 print("^6Bridge^7: ^3LoadModel^7: ^2Timed out loading model ^7'^6"..model.."^7'") 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 print("^6Bridge^7: ^3LoadModel^7: ^2Timed out loading model ^7'^6"..model.."^7'") end
|
||||
end
|
||||
time = 500
|
||||
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
|
||||
@@ -28,8 +26,7 @@ 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
|
||||
if lib then lib.requestAnimDict(animDict, 100)
|
||||
else while not HasAnimDictLoaded(animDict) do RequestAnimDict(animDict) Wait(5) end 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
|
||||
@@ -37,12 +34,9 @@ function unloadAnimDict(animDict) if Config.System.Debug then print("^6Bridge^7:
|
||||
function loadPtfxDict(ptFxName)
|
||||
if not HasNamedPtfxAssetLoaded(ptFxName) then
|
||||
if Config.System.Debug then
|
||||
if not HasNamedPtfxAssetLoaded(ptFxName) then
|
||||
print("^6Bridge^7: ^2Loading Ptfx Dictionary^7: '^6"..ptFxName.."^7'")
|
||||
end
|
||||
print("^6Bridge^7: ^2Loading Ptfx Dictionary^7: '^6"..ptFxName.."^7'")
|
||||
end
|
||||
if lib then lib.requestNamedPtfxAsset(ptFxName, 100)
|
||||
else while not HasNamedPtfxAssetLoaded(ptFxName) do RequestNamedPtfxAsset(ptFxName) Wait(5) end end
|
||||
while not HasNamedPtfxAssetLoaded(ptFxName) do RequestNamedPtfxAsset(ptFxName) Wait(5) end
|
||||
end
|
||||
end
|
||||
function unloadPtfxDict(dict) if Config.System.Debug then print("^6Bridge^7: ^2Removing Ptfx Dictionary^7: '^6"..dict.."^7'") end RemoveNamedPtfxAsset(dict) end
|
||||
@@ -51,8 +45,7 @@ function loadTextureDict(dict)
|
||||
if Config.System.Debug then
|
||||
print("^6Bridge^7: ^2Loading Texture Dictionary^7: '^6"..dict.."^7'")
|
||||
end
|
||||
if lib then lib.requestStreamedTextureDict(textureDict, timeout)
|
||||
else while not HasStreamedTextureDictLoaded(dict) do RequestNamedPtfxAsset(dict) Wait(5) end end
|
||||
while not HasStreamedTextureDictLoaded(dict) do RequestNamedPtfxAsset(dict) Wait(5) end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -65,8 +58,9 @@ 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)
|
||||
end
|
||||
|
||||
function stopAnim(animDict, animName)
|
||||
StopAnimTask(PlayerPedId(), animName, animDict)
|
||||
function stopAnim(animDict, animName, ped)
|
||||
StopAnimTask(ped or PlayerPedId(), animDict, animName, 0.5)
|
||||
StopAnimTask(ped or PlayerPedId(), animName, animDict, 0.5)
|
||||
unloadAnimDict(animDict)
|
||||
end
|
||||
|
||||
@@ -93,7 +87,7 @@ local Peds = {}
|
||||
local Props = {}
|
||||
function makePed(model, coords, freeze, collision, scenario, anim, synced)
|
||||
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)
|
||||
SetBlockingOfNonTemporaryEvents(ped, true)
|
||||
FreezeEntityPosition(ped, freeze and freeze or true)
|
||||
@@ -115,7 +109,7 @@ end
|
||||
|
||||
function makeProp(data, freeze, synced)
|
||||
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)
|
||||
FreezeEntityPosition(prop, freeze and freeze or 0)
|
||||
if Config.System.Debug then
|
||||
@@ -235,8 +229,9 @@ function ensureNetToVeh(vehNetID)
|
||||
return vehicle
|
||||
end
|
||||
|
||||
local previewTxd = CreateRuntimeTxd(GetCurrentResourceName()..'previewTxd')
|
||||
function makeBlip(data)
|
||||
local blip = AddBlipForCoord(data.coords)
|
||||
local blip = AddBlipForCoord(vec3(data.coords.x, data.coords.y, data.coords.z))
|
||||
SetBlipAsShortRange(blip, true)
|
||||
SetBlipSprite(blip, data.sprite or 106)
|
||||
SetBlipColour(blip, data.col or 5)
|
||||
@@ -246,8 +241,23 @@ function makeBlip(data)
|
||||
BeginTextCommandSetBlipName('STRING')
|
||||
AddTextComponentString(tostring(data.name))
|
||||
EndTextCommandSetBlipName(blip)
|
||||
if GetResourceState("blip_info"):find("start") or GetResourceState("blip-info"):find("start") or GetResourceState("blipinfo"):find("start") then
|
||||
if data.preview then
|
||||
local txname = tostring('preview'..keyGen()..keyGen())
|
||||
if data.preview:find("http") then
|
||||
local newTxt = CreateDui(data.preview, 512, 256)
|
||||
local duihandle = GetDuiHandle(newTxt)
|
||||
while not GetDuiHandle(newTxt) do Wait(0) end
|
||||
CreateRuntimeTextureFromDuiHandle(previewTxd, txname, duihandle)
|
||||
else
|
||||
CreateRuntimeTextureFromImage(previewTxd, txname, data.preview)
|
||||
end
|
||||
exports["blip_info"]:SetBlipInfoImage(blip, GetCurrentResourceName()..'previewTxd', txname)
|
||||
exports["blip_info"]:SetBlipInfoTitle(blip, data.name, false)
|
||||
end
|
||||
end
|
||||
if Config.System.Debug then print("^6Bridge^7: ^6Blip ^2created for location^7: '^6"..data.name.."^7'") end
|
||||
return blip
|
||||
return blip
|
||||
end
|
||||
|
||||
function makeEntityBlip(data)
|
||||
@@ -262,6 +272,21 @@ function makeEntityBlip(data)
|
||||
BeginTextCommandSetBlipName('STRING')
|
||||
AddTextComponentString(tostring(data.name))
|
||||
EndTextCommandSetBlipName(blip)
|
||||
if GetResourceState("blip_info"):find("start") or GetResourceState("blip-info"):find("start") or GetResourceState("blipinfo"):find("start") then
|
||||
if data.preview then
|
||||
local txname = tostring('preview'..keyGen()..keyGen())
|
||||
if data.preview:find("http") then
|
||||
local newTxt = CreateDui(data.preview, 512, 256)
|
||||
local duihandle = GetDuiHandle(newTxt)
|
||||
while not GetDuiHandle(newTxt) do Wait(0) end
|
||||
CreateRuntimeTextureFromDuiHandle(previewTxd, txname, duihandle)
|
||||
else
|
||||
CreateRuntimeTextureFromImage(previewTxd, txname, data.preview)
|
||||
end
|
||||
exports["blip_info"]:SetBlipInfoImage(blip, GetCurrentResourceName()..'previewTxd', txname)
|
||||
exports["blip_info"]:SetBlipInfoTitle(blip, data.name, false)
|
||||
end
|
||||
end
|
||||
if Config.System.Debug then print("^6Bridge^7: ^6Blip ^2created for Entity^7: '^6"..data.name.."^7'") end
|
||||
return blip
|
||||
end
|
||||
@@ -527,7 +552,7 @@ end)
|
||||
RegisterNetEvent(GetCurrentResourceName()..":server:setNeed", function(type, amount) local src = source
|
||||
if type == "thirst" then
|
||||
setThirst(src, amount)
|
||||
elseif type == "thirst" then
|
||||
elseif type == "hunger" then
|
||||
setHunger(src, amount)
|
||||
end
|
||||
end)
|
||||
@@ -564,8 +589,8 @@ end
|
||||
-- [[CONSUME]] --
|
||||
function ConsumeSuccess(itemName, type)
|
||||
ExecuteCommand("e c")
|
||||
toggleItem(false, itemName, 1)
|
||||
if GetResourceState(ESXEport):find("start") then
|
||||
removeItem(itemName, 1)
|
||||
if GetResourceState(ESXExport):find("start") then
|
||||
if Items[itemName].hunger then
|
||||
TriggerServerEvent(GetCurrentResourceName()..":server:setNeed", "hunger", Items[itemName].hunger * 10000)
|
||||
end
|
||||
@@ -581,17 +606,22 @@ function ConsumeSuccess(itemName, type)
|
||||
end
|
||||
end
|
||||
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
|
||||
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
|
||||
|
||||
function addItem(item, amount, info)
|
||||
TriggerServerEvent(GetCurrentResourceName()..":server:toggleItem", true, item, amount)
|
||||
TriggerServerEvent(GetCurrentResourceName()..":server:toggleItem", true, item, amount, nil, info)
|
||||
end
|
||||
|
||||
function removeItem(item, amount)
|
||||
TriggerServerEvent(GetCurrentResourceName()..":server:toggleItem", false, item, amount)
|
||||
TriggerServerEvent(GetCurrentResourceName()..":server:toggleItem", false, item, amount, nil, info)
|
||||
end
|
||||
|
||||
RegisterNetEvent(GetCurrentResourceName()..":server:toggleItem", function(give, item, amount, newsrc)
|
||||
@@ -653,7 +683,7 @@ RegisterNetEvent(GetCurrentResourceName()..":server:toggleItem", function(give,
|
||||
print("^4ERROR^7: ^2No Inventory detected ^7- ^2Check ^3exports^1.^2lua^7")
|
||||
end
|
||||
else
|
||||
dupeWarn(src, item) -- if not boot the player
|
||||
dupeWarn(src, item, amount) -- if not boot the player
|
||||
end
|
||||
else
|
||||
local amount = amount and amount or 1
|
||||
@@ -708,10 +738,10 @@ RegisterNetEvent(GetCurrentResourceName()..":server:toggleItem", function(give,
|
||||
end)
|
||||
|
||||
--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")
|
||||
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
|
||||
print("^5DupeWarn:^7: (^1"..tostring(src).."^7) ^2Dropped from server - exploit protection detected an item not being found in players inventory^7")
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name "Jim_Bridge"
|
||||
author "Jimathy"
|
||||
version "1.0.10"
|
||||
version "1.0.12"
|
||||
description "Framework Bridge By Jimathy"
|
||||
fx_version "cerulean"
|
||||
game "gta5"
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.0.10
|
||||
1.0.12
|
||||
|
||||
61
wrapper.lua
61
wrapper.lua
@@ -26,7 +26,7 @@ for k, v in pairs(Exports) do
|
||||
if GetResourceState(v):find("start") then print("^6Bridge^7: '^3"..v.."^7' ^2export found ^7") end
|
||||
end
|
||||
|
||||
local itemResource, vehResource, jobResource = "", "", ""
|
||||
local itemResource, jobResource = "", ""
|
||||
|
||||
-- Load item lists
|
||||
if GetResourceState(OXInv):find("start") then itemResource = OXInv
|
||||
@@ -56,7 +56,7 @@ else
|
||||
end
|
||||
|
||||
-- Load Vehicles
|
||||
if GetResourceState(QBXExport):find("start") or GetResourceState(QBExport):find("start") then vehResource = QBExport
|
||||
if GetResourceState(QBXExport):find("start") or GetResourceState(QBExport):find("start") then
|
||||
Core = Core or exports[QBExport]:GetCoreObject()
|
||||
if GetResourceState(QBExport):find("start") and not GetResourceState(QBXExport):find("start") then
|
||||
RegisterNetEvent('QBCore:Client:UpdateObject', function()
|
||||
@@ -1003,31 +1003,58 @@ AddStateBagChangeHandler(GetCurrentResourceName()..':setVehicleProperties', '',
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent(GetCurrentResourceName()..":server:ChargePlayer", function(cost, type) local src = source
|
||||
if Config.System.Debug then print("^6Bridge^7: ^2Charging ^2Player: '^6"..cost.."^7'", type) end
|
||||
RegisterNetEvent(GetCurrentResourceName()..":server:ChargePlayer", function(cost, type, newsrc)
|
||||
local src = newsrc or source
|
||||
local fundResource = ""
|
||||
if type == "cash" then
|
||||
if GetResourceState(OXInv):find("start") then
|
||||
if GetResourceState(OXInv):find("start") then fundResource = OXInv
|
||||
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") then
|
||||
elseif GetResourceState(QBExport):find("start") or GetResourceState(QBXExport):find("start") then fundResource = QBExport
|
||||
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
|
||||
elseif GetResourceState(ESXExport):find("start") then fundResource = ESXExport
|
||||
local Player = ESX.GetPlayerFromId(src)
|
||||
Player.removeMoney(cost, "")
|
||||
if Config.System.Debug then print("^6Bridge^7: ^2Charging ^2Player: '^6"..cost.."^7'", type, ESXExport) end
|
||||
end
|
||||
end
|
||||
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)
|
||||
if Config.System.Debug then print("^6Bridge^7: ^2Charging ^2Player: '^6"..cost.."^7'", type, QBExport) end
|
||||
elseif GetResourceState(ESXExport):find("start") then
|
||||
elseif GetResourceState(ESXExport):find("start") then fundResource = ESXExport
|
||||
local Player = ESX.GetPlayerFromId(src)
|
||||
Player.removeMoney(cost, "")
|
||||
if Config.System.Debug then print("^6Bridge^7: ^2Charging ^2Player: '^6"..cost.."^7'", type, ESXExport) 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)
|
||||
|
||||
function createUseableItem(item, funct)
|
||||
@@ -1326,13 +1353,13 @@ function invImg(item)
|
||||
return imgLink
|
||||
end
|
||||
|
||||
function registerStash(name, label)
|
||||
function registerStash(name, label, slots, weight)
|
||||
if GetResourceState(OXInv):find("start") then
|
||||
--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
|
||||
--print("Registering QS Stash:", name, label)
|
||||
exports[QSInv]:RegisterStash(name, 50, 4000000)
|
||||
exports[QSInv]:RegisterStash(name, slots or 50, weight or 4000000)
|
||||
end
|
||||
end
|
||||
-- IN NO WAY PERFECT --
|
||||
|
||||
Reference in New Issue
Block a user