From e50a457657ea5087b52c350f1dcb93ab2afa6404 Mon Sep 17 00:00:00 2001 From: Nordi98 Date: Tue, 12 Aug 2025 13:34:26 +0200 Subject: [PATCH] ed --- resources/[weapons]/[Scripts]/pug-sling/.fxap | Bin 178 -> 0 bytes .../[Scripts]/pug-sling/client/main.lua | Bin 17199 -> 0 bytes .../[Scripts]/pug-sling/client/open.lua | 176 ----------- .../[weapons]/[Scripts]/pug-sling/config.lua | 288 ------------------ .../[Scripts]/pug-sling/fxmanifest.lua | 31 -- .../pug-sling/json/config-weapons.json | 1 - .../pug-sling/old-sling/client-old.lua | Bin 6919 -> 0 bytes .../pug-sling/old-sling/config-old.lua | 107 ------- .../[Scripts]/pug-sling/old-sling/readme.md | 40 --- .../[weapons]/[Scripts]/pug-sling/readme.md | 56 ---- .../[Scripts]/pug-sling/server/main.lua | 65 ---- .../[Scripts]/tgiann-weapons-on-back/.fxap | Bin 0 -> 178 bytes .../tgiann-weapons-on-back/checkInv.lua | 28 ++ .../client/bridge/codem_inv.lua | 89 ++++++ .../client/bridge/core_inv.lua | 116 +++++++ .../client/bridge/esx_inv.lua | 88 ++++++ .../client/bridge/main.lua | 99 ++++++ .../client/bridge/mf_inv.lua | 77 +++++ .../client/bridge/origen_inv.lua | 79 +++++ .../client/bridge/ox_inv.lua | 64 ++++ .../client/bridge/qb_inv.lua | 64 ++++ .../client/bridge/qs_inv.lua | 89 ++++++ .../client/bridge/tgiann_inv.lua | 62 ++++ .../tgiann-weapons-on-back/client/client.lua | Bin 0 -> 6569 bytes .../client/editable.lua | 12 + .../tgiann-weapons-on-back/configs/config.lua | 206 +++++++++++++ .../configs/core_inv_config.lua | 5 + .../tgiann-weapons-on-back/fxmanifest.lua | 34 +++ .../server/bridge/core_inv.lua | 13 + .../server/bridge/esx_inv.lua | 10 + .../tgiann-weapons-on-back/server/server.lua | Bin 0 -> 1954 bytes 31 files changed, 1135 insertions(+), 764 deletions(-) delete mode 100644 resources/[weapons]/[Scripts]/pug-sling/.fxap delete mode 100644 resources/[weapons]/[Scripts]/pug-sling/client/main.lua delete mode 100644 resources/[weapons]/[Scripts]/pug-sling/client/open.lua delete mode 100644 resources/[weapons]/[Scripts]/pug-sling/config.lua delete mode 100644 resources/[weapons]/[Scripts]/pug-sling/fxmanifest.lua delete mode 100644 resources/[weapons]/[Scripts]/pug-sling/json/config-weapons.json delete mode 100644 resources/[weapons]/[Scripts]/pug-sling/old-sling/client-old.lua delete mode 100644 resources/[weapons]/[Scripts]/pug-sling/old-sling/config-old.lua delete mode 100644 resources/[weapons]/[Scripts]/pug-sling/old-sling/readme.md delete mode 100644 resources/[weapons]/[Scripts]/pug-sling/readme.md delete mode 100644 resources/[weapons]/[Scripts]/pug-sling/server/main.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/.fxap create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/checkInv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/codem_inv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/core_inv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/esx_inv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/main.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/mf_inv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/origen_inv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/ox_inv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/qb_inv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/qs_inv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/tgiann_inv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/client.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/editable.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/configs/config.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/configs/core_inv_config.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/fxmanifest.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/server/bridge/core_inv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/server/bridge/esx_inv.lua create mode 100644 resources/[weapons]/[Scripts]/tgiann-weapons-on-back/server/server.lua diff --git a/resources/[weapons]/[Scripts]/pug-sling/.fxap b/resources/[weapons]/[Scripts]/pug-sling/.fxap deleted file mode 100644 index ebf0501d2c26ad059b15109d8ac5fe955de3bf00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 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 0 then - return true - else - return false - end - elseif GetResourceState("qb-inventory") == 'started' then - return exports['qb-inventory']:HasItem(Weapon) - elseif GetResourceState("ps-inventory") == 'started' then - return exports['ps-inventory']:HasItem(Weapon) - elseif GetResourceState("ox_inventory") == 'started' then - local count = exports.ox_inventory:GetItemCount(Weapon) - if count > 0 then - return true - else - return false - end - elseif GetResourceState("tgiann-inventory") == 'started' then - -- Fixed implementation for tgiann-inventory - return exports["tgiann-inventory"]:HasItem(Weapon, 1) - elseif GetResourceState("core_inventory") == 'started' then - if Framework == "QBCore" then - local citizenid = FWork.Functions.GetPlayerData().citizenid - local Primary = exports['core_inventory']:getItems('primary-' .. citizenid, Weapon) - local Secondry = exports['core_inventory']:getItems('secondry-' .. citizenid, Weapon) - if Primary > 0 or Secondry > 0 then - return true - else - return false - end - else - return false - end - elseif Framework == "QBCore" then - local FinalValue = false - local items = FWork.Functions.GetPlayerData().items - for _, v in pairs(items) do - if v.name ~= nil then - if tostring(v.name) == tostring(Weapon) then - FinalValue = true - end - end - end - return FinalValue - end -end - - - local function CheckJobVerified() - local PlayerJob = Config.FrameworkFunctions.GetPlayer().PlayerData.job.name - for _,v in pairs(Config.RackCapableJobs) do - if tostring(v) == tostring(PlayerJob) then - return true - end - end - return false - end - - RegisterCommand(Config.WeaponRackCommand, function() - if CheckJobVerified() then - --IS IN VEHICLE - if IsPedInAnyVehicle(PlayerPedId()) then - local veh = GetVehiclePedIsUsing(PlayerPedId()) - local plate = GetVehicleNumberPlateText(veh) - --IS EMERGENCY VEHICLE - if GetVehicleClass(veh) == 18 then - if Framework == "ESX" then - if GetResourceState("qb-inventory") == 'started' or GetResourceState("ps-inventory") == 'started' then - TriggerEvent("inventory:client:SetCurrentStash", "Rack".. plate) - TriggerServerEvent("inventory:server:OpenInventory", "stash", "Rack" .. plate, { - maxweight = Config.RackMaxWeight, - slots = Config.RackSlots, - }) - elseif GetResourceState("qs-inventory") == 'started' then - exports['qs-inventory']:RegisterStash("Rack".. plate, Config.RackSlots, Config.RackMaxWeight) - elseif GetResourceState("ox_inventory") == 'started' then - TriggerServerEvent("Pug:server:SlingOpenOxInvRack", "Rack".. plate, Config.RackSlots, Config.RackMaxWeight) - exports.ox_inventory:openInventory('stash', "Rack".. plate) - end - else - FWork.Functions.Progressbar("reaching_rack", "Reaching for rack", 4000, false, true, { - disableMovement = false, - disableCarMovement = false, - disableMouse = false, - disableCombat = true, - }, { - animDict = "move_m@intimidation@cop@unarmed", - anim = "idle", - flags = 49, - }, {}, {}, function() - if GetResourceState("qb-inventory") == 'started' or GetResourceState("ps-inventory") == 'started' then - TriggerEvent("inventory:client:SetCurrentStash", "Rack".. plate) - TriggerServerEvent("inventory:server:OpenInventory", "stash", "Rack" .. plate, { - maxweight = Config.RackMaxWeight, - slots = Config.RackSlots, - }) - elseif GetResourceState("qs-inventory") == 'started' then - exports['qs-inventory']:RegisterStash("Rack".. plate, Config.RackSlots, Config.RackMaxWeight) - elseif GetResourceState("ox_inventory") == 'started' then - TriggerServerEvent("Pug:server:SlingOpenOxInvRack", "Rack".. plate, Config.RackSlots, Config.RackMaxWeight) - exports.ox_inventory:openInventory('stash', "Rack".. plate) - end - end, function() -- Cancel - SlingNotify("Canceled", "error", 4500) - end) - end - else - SlingNotify(Config.LangT.EmergencyServiceVehicle, "error") - end - else - SlingNotify(Config.LangT.MustBeInVehicle, "error") - end - else - SlingNotify(Config.LangT.NotPolice, "error") - end - end) -end \ No newline at end of file diff --git a/resources/[weapons]/[Scripts]/pug-sling/config.lua b/resources/[weapons]/[Scripts]/pug-sling/config.lua deleted file mode 100644 index 91d381db6..000000000 --- a/resources/[weapons]/[Scripts]/pug-sling/config.lua +++ /dev/null @@ -1,288 +0,0 @@ -Config = {} -Config.UseOldSlingScript = false -- MAKKE THIS TRUE IF YOU WANT TO USE THE OLD VERSION OF THE SCRIPT. VIDEO FOUND HERE: https://youtu.be/Pf-B03cmFtQ -if not Config.UseOldSlingScript then - ---------- [Framework] ---------- - -- (DONT TOUCH THIS UNLESS YOU HAVE A CUSTOM FRAMEWORK) - if GetResourceState('es_extended') == 'started' then - Framework = "ESX" -- (ESX) or (QBCore) - elseif GetResourceState('qb-core') == 'started' then - Framework = "QBCore" -- (ESX) or (QBCore) - end - if Framework == "QBCore" then - Config.CoreName = "qb-core" -- your core name - FWork = exports[Config.CoreName]:GetCoreObject() - elseif Framework == "ESX" then - Config.CoreName = "es_extended" -- your core name - FWork = exports[Config.CoreName]:getSharedObject() - end - ------------------------------ - ---------- [INTAGERS] ---------- - Config.LoopSpeed = 500 -- How fast the loop to check weapons runs. Lower numbers are lest optimized. - Config.RackMaxWeight = 45000 -- Rack stash weight capacity. - Config.RackSlots = 2 -- Rack stash amount of item slots available. - Config.WeaponLimit = 4 -- Ammount of weapons/items that will show up on the player when they have the item or weapon - Config.AmountOfTimesToCheckIfTheModelIsLoaded = 10 -- This value adjust the amount of times to check to see if a modle is loaded. The check runs every 100 milliseconds - ------------------------------ - ---------- [STRINGS] ---------- - Config.WeaponRackCommand = "rack" -- /rack command to rack weapons into any service vehicles - Config.WeaponSettingCommand = "setweapon" -- (GLOBAL POSITION FOR EVERYONE) /setweapon command to begin editing where the weapons/items should sit on the player - Config.PersonalWeponSettingsCommand = "weaponposition" -- (PLAYERS PERSONAL POSITION THAT THEY SET HOW THEY LIKE) You can remove this command from the server.lua - ------------------------------ - ---------- [TABLES] ---------- - Config.RackCapableJobs = { -- Jobs that can do the /rack command - "leo", - "police", - "marshal", - - } - ------------------------------ - Config.LangT = { - DeleteFromConfig = "DELETE FROM CONFIG", - Change = "CHANGE ", - ToggleWeapons = "ALL WEAPONS ON/OFF", - RotateZ = "ROTATE Z", - Up = "UP", - Down = "DOWN", - Left = "LEFT", - Right = "RIGHT", - In = "In", - Out = "Out", - Rotate = "ROTATE", - MustBeInVehicle = "You must be in a vehicle", - NotPolice = "You are not a police Officer", - EmergencyServiceVehicle = "Must be in a emergency service vehicle!", - } - -- THE ATTACHMENTS WORK BUT SOME SERVERS HAD CRASHING ISSUES WHEN THEY WERE UNHASHED. YOU CAN UNHASH THEM BUT IF YOU CRASH THEN HASH THEM BACK OUT. - Config.WeaponsOnBack = {-- THE ATTACHMENTS WORK BUT SOME SERVERS HAD CRASHING ISSUES WHEN THEY WERE UNHASHED. YOU CAN UNHASH THEM BUT IF YOU CRASH THEN HASH THEM BACK OUT. - -- Pistols - - - -- Assault Rifles - ["weapon_carbinerifle"] = { -- THE ATTACHMENTS WORK BUT SOME SERVERS HAD CRASHING ISSUES WHEN THEY WERE UNHASHED. YOU CAN UNHASH THEM BUT IF YOU CRASH THEN HASH THEM BACK OUT. - model = "w_ar_carbinerifle", - --Attachments = { - --["COMPONENT_CARBINERIFLE_CLIP_01"] = {Base = 'WAPClip',Component = "W_AR_CARBINERIFLE_MAG1"}, - --["COMPONENT_CARBINERIFLE_CLIP_02"] = {Base = 'WAPClip',Component = "W_AR_CARBINERIFLE_MAG2"}, - --["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr',Component = "W_AT_AR_FLSH"}, - --["COMPONENT_AT_SCOPE_MEDIUM"] = {Base = 'WAPScop',Component = "W_AT_SCOPE_MEDIUM"}, - --["COMPONENT_AT_AR_SUPP"] = {Base = 'WAPSupp', Component = "W_AT_AR_SUPP"}, - --["COMPONENT_AT_AR_AFGRIP"] = {Base = 'WAPGrip',Component = "W_AT_AR_AFGRIP"}, - --} - }, - ["weapon_carbinerifle_mk2"] = { - model = "w_ar_carbineriflemk2", - -- Attachments = { - -- ["COMPONENT_CARBINERIFLE_MK2_CLIP_01"] = {Base = 'WAPClip', Component = "w_ar_carbineriflemk2_mag1"}, - -- ["COMPONENT_CARBINERIFLE_MK2_CLIP_02"] = {Base = 'WAPClip', Component = "w_ar_carbineriflemk2_mag2"}, - -- ["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - -- ["COMPONENT_AT_SIGHTS"] = {Base = 'WAPScop', Component = "w_at_sights_1"}, - -- ["COMPONENT_AT_AR_SUPP"] = {Base = 'WAPSupp', Component = "W_AT_AR_SUPP"}, - -- ["COMPONENT_AT_MUZZLE_01"] = {Base = 'WAPSupp', Component = "w_at_muzzle_1"}, - -- ["COMPONENT_AT_AR_AFGRIP_02"] = {Base = 'WAPGrip', Component = "w_at_afgrip_2"}, - -- ["COMPONENT_CARBINERIFLE_MK2_CAMO"] = {Base = 'Cosmetic', Component = "w_at_cr_camo1"}, - -- } - }, - ["weapon_specialcarbine"] = { - model = "w_ar_specialcarbine", - --Attachments = { - --["COMPONENT_SPECIALCARBINE_CLIP_01"] = {Base = 'WAPClip', Component = "w_ar_specialcarbine_mag1"}, - --["COMPONENT_SPECIALCARBINE_CLIP_02"] = {Base = 'WAPClip', Component = "w_ar_specialcarbine_mag2"}, - --["COMPONENT_SPECIALCARBINE_CLIP_03"] = {Base = 'WAPClip', Component = "w_ar_specialcarbine_boxmag"}, - --["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - --["COMPONENT_AT_SCOPE_MEDIUM"] = {Base = 'WAPScop', Component = "w_at_scope_medium"}, - --["COMPONENT_AT_AR_SUPP_02"] = {Base = 'WAPSupp', Component = "w_at_ar_supp_02"}, - --["COMPONENT_AT_AR_AFGRIP"] = {Base = 'WAPGrip', Component = "W_AT_AR_AFGRIP"}, - --["COMPONENT_SPECIALCARBINE_VARMOD_LOWRIDER"] = {Base = 'Cosmetic', Component = "w_ar_specialcarbine_luxe"}, - --} - }, - ["weapon_advancedrifle"] = { - model = "w_ar_advancedrifle", - -- Attachments = { - -- ["COMPONENT_ADVANCEDRIFLE_CLIP_01"] = {Base = 'WAPClip', Component = "w_ar_advancedrifle_mag1"}, - -- ["COMPONENT_ADVANCEDRIFLE_CLIP_02"] = {Base = 'WAPClip', Component = "w_ar_advancedrifle_mag2"}, - -- ["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - -- ["COMPONENT_AT_SCOPE_SMALL"] = {Base = 'WAPScop', Component = "w_at_scope_small"}, - -- ["COMPONENT_AT_AR_SUPP"] = {Base = 'WAPSupp', Component = "w_at_ar_supp"}, - -- } - }, - - -- Sub Machine Guns - ["weapon_assaultsmg"] = { - model = "w_sb_assaultsmg", - --Attachments = { - --["COMPONENT_ASSAULTSMG_CLIP_01"] = {Base = 'WAPClip', Component = "W_SB_ASSAULTSMG_Mag1"}, - --["COMPONENT_ASSAULTSMG_CLIP_02"] = {Base = 'WAPClip', Component = "W_SB_ASSAULTSMG_Mag2"}, - --["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - --["COMPONENT_AT_SCOPE_MACRO"] = {Base = 'WAPScop', Component = "w_at_scope_macro"}, - --["COMPONENT_AT_AR_SUPP_02"] = {Base = 'WAPSupp', Component = "w_at_ar_supp_02"}, - --} - }, - ["weapon_smg"] = { - model = "w_sb_smg", - --Attachments = { - --["COMPONENT_SMG_CLIP_01"] = {Base = 'WAPClip', Component = "w_sb_smg_mag1"}, - --["COMPONENT_SMG_CLIP_02"] = {Base = 'WAPClip', Component = "w_sb_smg_mag2"}, - --["COMPONENT_SMG_CLIP_03"] = {Base = 'WAPClip', Component = "w_sb_smg_boxmag"}, - --["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - --["COMPONENT_AT_SCOPE_MACRO_02"] = {Base = 'WAPScop_2', Component = "w_at_scope_macro_2"}, - --["COMPONENT_AT_PI_SUPP"] = {Base = 'WAPSupp', Component = "w_at_pi_supp"}, - --} - }, - ["weapon_smg_mk2"] = { - model = "w_sb_smgmk2", - -- Attachments = { - -- ["COMPONENT_SMG_MK2_CLIP_01"] = {Base = 'WAPClip', Component = "w_sb_smgmk2_mag1"}, - -- ["COMPONENT_SMG_MK2_CLIP_02"] = {Base = 'WAPClip', Component = "w_sb_smgmk2_mag2"}, - -- ["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - -- ["COMPONENT_AT_SIGHTS"] = {Base = 'WAPScop', Component = "w_at_sights_1"}, - -- ["COMPONENT_AT_SCOPE_SMALL"] = {Base = 'WAPScop', Component = "w_at_scope_small"}, - -- ["COMPONENT_AT_AR_AFGRIP_02"] = {Base = 'WAPGrip', Component = "w_at_afgrip_2"}, - -- } - }, - ["weapon_combatpdw"] = { - model = "w_sb_pdw", - --Attachments = { - --["COMPONENT_SMG_MK2_CLIP_01"] = {Base = 'WAPClip', Component = "w_sb_smgmk2_mag1"}, - --["COMPONENT_SMG_MK2_CLIP_02"] = {Base = 'WAPClip', Component = "w_sb_smgmk2_mag2"}, - --["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - --["COMPONENT_AT_SIGHTS"] = {Base = 'WAPScop', Component = "w_at_sights_1"}, - --["COMPONENT_AT_SCOPE_SMALL"] = {Base = 'WAPScop', Component = "w_at_scope_small"}, - --["COMPONENT_AT_AR_AFGRIP_02"] = {Base = 'WAPGrip', Component = "w_at_afgrip_2"}, - --} - }, - - - - -- Sniper Rifles - ["weapon_musket"] = { model = "w_ar_musket" }, - ["weapon_sniperrifle"] = { - model = "w_sr_sniperrifle", - -- Attachments = { - -- ["COMPONENT_SNIPERRIFLE_CLIP_01"] = {Base = 'WAPClip', Component = "w_sr_sniperrifle_mag1"}, - -- ["COMPONENT_AT_SCOPE_LARGE"] = {Base = 'WAPScop', Component = "w_at_scope_large"}, - -- ["COMPONENT_AT_SCOPE_MAX"] = {Base = 'WAPScop', Component = "w_at_scope_max"}, - -- ["COMPONENT_AT_AR_SUPP_02"] = {Base = 'WAPSupp', Component = "w_at_ar_supp_02"}, - -- } - }, - - -- Shotguns - ["weapon_combatshotgun"] = { - model = "w_sg_pumpshotgunh4", - -- Attachments = { - -- ["COMPONENT_ASSAULTSHOTGUN_CLIP_01"] = {Base = 'WAPClip', Component = "w_sg_assaultshotgun_mag1"}, - -- ["COMPONENT_ASSAULTSHOTGUN_CLIP_02"] = {Base = 'WAPClip', Component = "w_sg_assaultshotgun_mag2"}, - -- ["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - -- ["COMPONENT_AT_AR_SUPP"] = {Base = 'WAPSupp', Component = "w_at_ar_supp"}, - -- ["COMPONENT_AT_AR_AFGRIP"] = {Base = 'WAPGrip', Component = "w_at_ar_afgrip"}, - -- } - }, - ["weapon_bullpupshotgun"] = { - model = "w_sg_bullpupshotgun", - -- Attachments = { - -- ["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - -- ["COMPONENT_AT_AR_SUPP_02"] = {Base = 'WAPSupp', Component = "w_at_ar_supp_02"}, - -- ["COMPONENT_AT_AR_AFGRIP"] = {Base = 'WAPGrip', Component = "w_at_ar_afgrip"}, - -- } - }, - ["weapon_pumpshotgun"] = { - model = "w_sg_pumpshotgun", - -- Attachments = { - -- ["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - -- ["COMPONENT_AT_SR_SUPP"] = {Base = 'WAPSupp', Component = "W_AT_AR_SUPP"}, - -- } - }, - ["weapon_heavyshotgun"] = { - model = "w_sg_heavyshotgun", - -- Attachments = { - -- ["COMPONENT_HEAVYSHOTGUN_CLIP_01"] = {Base = 'WAPClip', Component = "w_sg_heavyshotgun_mag1"}, - -- ["COMPONENT_HEAVYSHOTGUN_CLIP_02"] = {Base = 'WAPClip', Component = "w_sg_heavyshotgun_mag2"}, - -- ["COMPONENT_HEAVYSHOTGUN_CLIP_03"] = {Base = 'WAPClip', Component = "w_sg_heavyshotgun_boxmag"}, - -- ["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - -- ["COMPONENT_AT_AR_SUPP_02"] = {Base = 'WAPSupp', Component = "w_at_ar_supp_02"}, - -- ["COMPONENT_AT_AR_AFGRIP"] = {Base = 'WAPGrip', Component = "w_at_ar_afgrip"}, - -- } - }, - ["weapon_huntingrifle"] = { - model = "w_sr_huntingrifle", - -- Attachments = { - -- ["COMPONENT_HEAVYSHOTGUN_CLIP_01"] = {Base = 'WAPClip', Component = "w_sg_heavyshotgun_mag1"}, - -- ["COMPONENT_HEAVYSHOTGUN_CLIP_02"] = {Base = 'WAPClip', Component = "w_sg_heavyshotgun_mag2"}, - -- ["COMPONENT_HEAVYSHOTGUN_CLIP_03"] = {Base = 'WAPClip', Component = "w_sg_heavyshotgun_boxmag"}, - -- ["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - -- ["COMPONENT_AT_AR_SUPP_02"] = {Base = 'WAPSupp', Component = "w_at_ar_supp_02"}, - -- ["COMPONENT_AT_AR_AFGRIP"] = {Base = 'WAPGrip', Component = "w_at_ar_afgrip"}, - -- } - }, - ["weapon_crossbow"] = { - model = "w_sr_crossbow", - -- Attachments = { - -- ["COMPONENT_HEAVYSHOTGUN_CLIP_01"] = {Base = 'WAPClip', Component = "w_sg_heavyshotgun_mag1"}, - -- ["COMPONENT_HEAVYSHOTGUN_CLIP_02"] = {Base = 'WAPClip', Component = "w_sg_heavyshotgun_mag2"}, - -- ["COMPONENT_HEAVYSHOTGUN_CLIP_03"] = {Base = 'WAPClip', Component = "w_sg_heavyshotgun_boxmag"}, - -- ["COMPONENT_AT_AR_FLSH"] = {Base = 'WAPFlshLasr', Component = "W_AT_AR_FLSH"}, - -- ["COMPONENT_AT_AR_SUPP_02"] = {Base = 'WAPSupp', Component = "w_at_ar_supp_02"}, - -- ["COMPONENT_AT_AR_AFGRIP"] = {Base = 'WAPGrip', Component = "w_at_ar_afgrip"}, - -- } - }, - - - - -- Melee Weapons - ["weapon_machete"] = { model = "w_me_machette_lr" }, - ["weapon_bat"] = { model = "w_me_bat" }, - ["weapon_hatchet"] = { model = "w_me_hatchet" }, - - -- Items - ["cokebaggy"] = { model = "bkr_prop_coke_cutblock_01" }, - ["markedbills"] = { model = "prop_money_bag_01" }, - ["meth"] = { model = "hei_prop_pill_bag_01" }, - ["weed_brick"] = { model = "bkr_prop_weed_drying_02a" }, - ["fishingrod"] = { model = "prop_fishing_rod_02" }, - ["fishingrod2"] = { model = "prop_fishing_rod_01" }, - ["fishingrod3"] = { model = "prop_fishing_rod_01" }, - - -- Addon weapons - -- ["weapon_crossbow"] = { model = "w_me_katana"}, - -- ["weapon_remington"] = { model = "w_sg_remington" }, - -- ["weapon_mp5"] = { model = "w_sb_mp5" }, - -- ["weapon_huntingrifle"] = { model = "w_sr_huntingrifle" }, - } - ------------------------------ - ------------------------------ - --## DONT CHANGE ANY OF THESE ##-- - Config.FrameworkFunctions = { - -- Client-side trigger callback - TriggerCallback = function(...) - if Framework == 'QBCore' then - FWork.Functions.TriggerCallback(...) - else - FWork.TriggerServerCallback(...) - end - end, - - -- Server-side register callback - CreateCallback = function(...) - if Framework == 'QBCore' then - FWork.Functions.CreateCallback(...) - else - FWork.RegisterServerCallback(...) - end - end, - - GetPlayer = function() - local self = {} - if Framework == 'QBCore' then - player = FWork.Functions.GetPlayerData() - self.PlayerData = { job = { name = player.job.name} } - return self - else - player = FWork.GetPlayerData() - self.PlayerData = { job = { name = player.job.name }} - return self - end - return nil - end, - } - ------------------------------ - ------------------------------ -end \ No newline at end of file diff --git a/resources/[weapons]/[Scripts]/pug-sling/fxmanifest.lua b/resources/[weapons]/[Scripts]/pug-sling/fxmanifest.lua deleted file mode 100644 index 84eba9afb..000000000 --- a/resources/[weapons]/[Scripts]/pug-sling/fxmanifest.lua +++ /dev/null @@ -1,31 +0,0 @@ -lua54 'yes' -fx_version 'cerulean' -game 'gta5' - -author 'Discord: zpug' -description 'pug-sling' -version '2.1.3' - -shared_scripts { - 'config.lua', - 'old-sling/config-old.lua', -} - -server_script 'server/main.lua' -client_script { - 'client/main.lua', - 'client/open.lua', - 'old-sling/client-old.lua', -} - -file 'json/config-weapons.json' - -escrow_ignore { - 'config.lua', - 'client/open.lua', - 'server/main.lua', - 'json/config-weapons.json', - - 'old-sling/config-old.lua', -} -dependency '/assetpacks' \ No newline at end of file diff --git a/resources/[weapons]/[Scripts]/pug-sling/json/config-weapons.json b/resources/[weapons]/[Scripts]/pug-sling/json/config-weapons.json deleted file mode 100644 index 481fd7f6e..000000000 --- a/resources/[weapons]/[Scripts]/pug-sling/json/config-weapons.json +++ /dev/null @@ -1 +0,0 @@ -[{"WeaponModel":"fishingrod","yR":103.34645567461848,"zR":-13.5,"xR":-9.01574753224849,"bone":36,"x":0.0,"z":0.17,"y":-0.08999999999999,"WeaponProp":"prop_fishing_rod_02"},{"WeaponModel":"weapon_pistol","yR":-209.99999856576324,"zR":0.0,"xR":-185.59054903686048,"bone":36,"x":-0.13999999999999,"z":0.03999999999999,"y":-0.13999999999999,"WeaponProp":"w_pi_pistol"},{"WeaponModel":"fishingrod2","yR":114.92125941440465,"zR":-9.0,"xR":-18.54330701753497,"bone":36,"x":0.0,"z":0.14999999999999,"y":-0.10999999999999,"WeaponProp":"prop_fishing_rod_01"},{"WeaponModel":"weapon_advancedrifle","yR":-180.27558963745833,"zR":-1.5,"xR":3.85826759040355,"bone":36,"x":0.06999999999999,"z":-0.08,"y":-0.14999999999999,"WeaponProp":"w_ar_advancedrifle"},{"WeaponModel":"weapon_bullpupshotgun","yR":0.0,"zR":-4.5,"xR":0.0,"bone":36,"x":0.0,"z":0.07,"y":-0.13999999999999,"WeaponProp":"w_sg_bullpupshotgun"},{"WeaponModel":"weapon_musket","yR":186.1023604311049,"zR":0.0,"xR":0.51181094720959,"bone":36,"x":0.39,"z":-0.10999999999999,"y":-0.15999999999999,"WeaponProp":"w_ar_musket"},{"WeaponModel":"weapon_sawnoffshotgun","yR":121.37795131653549,"zR":-36.0,"xR":20.82677146419882,"bone":36,"x":0.4,"z":0.21,"y":0.02,"WeaponProp":"w_sg_sawnoff"},{"WeaponModel":"weed_brick","yR":-61.33858216926455,"zR":-15.0,"xR":-1.61417311057448,"bone":36,"x":0.0,"z":0.03,"y":-0.2,"WeaponProp":"bkr_prop_weed_drying_02a"},{"WeaponModel":"weapon_compactrifle","yR":55.31496053561568,"zR":-4.5,"xR":8.14960626885295,"bone":36,"x":0.0,"z":0.09,"y":0.17,"WeaponProp":"w_ar_assaultrifle_smg"},{"WeaponModel":"meth","yR":96.22047184035182,"zR":-19.5,"xR":-7.5984251499176,"bone":36,"x":-0.24,"z":0.12999999999999,"y":-0.09999999999999,"WeaponProp":"hei_prop_pill_bag_01"},{"WeaponModel":"weapon_bullpuprifle","yR":0.0,"zR":0.0,"xR":0.0,"bone":36,"x":0.17,"z":0.06,"y":-0.14999999999999,"WeaponProp":"w_ar_bullpuprifle"},{"WeaponModel":"fishingrod3","yR":77.51968448981643,"zR":-15.0,"xR":-18.7795277684927,"bone":36,"x":0.0,"z":-0.15,"y":-0.10999999999999,"WeaponProp":"prop_fishing_rod_01"},{"WeaponModel":"weapon_heavyshotgun","yR":61.0629915446043,"zR":1.5,"xR":-2.75590546429157,"bone":36,"x":0.13999999999999,"z":0.05,"y":-0.14999999999999,"WeaponProp":"w_sg_heavyshotgun"},{"WeaponModel":"cokebaggy","yR":-2.44094524532556,"zR":84.0,"xR":5.3937011770904,"bone":36,"x":-0.3,"z":-0.23,"y":0.05,"WeaponProp":"bkr_prop_coke_cutblock_01"},{"WeaponModel":"weapon_assaultshotgun","yR":39.88188944756985,"zR":0.0,"xR":-171.22047116979958,"bone":36,"x":0.11999999999999,"z":-0.09999999999999,"y":-0.14999999999999,"WeaponProp":"w_sg_assaultshotgun"},{"WeaponModel":"weapon_sniperrifle","yR":-1.33858224377036,"zR":0.0,"xR":185.2755897305906,"bone":36,"x":0.05,"z":-0.10999999999999,"y":-0.14999999999999,"WeaponProp":"w_sr_sniperrifle"},{"WeaponModel":"weapon_microsmg","yR":66.81102283298969,"zR":-10.5,"xR":180.23622082546354,"bone":36,"x":0.24,"z":-0.02,"y":0.16,"WeaponProp":"w_sb_microsmg"},{"WeaponModel":"weapon_gusenberg","yR":0.0,"zR":0.0,"xR":0.0,"bone":36,"x":0.28,"z":0.04,"y":-0.14999999999999,"WeaponProp":"w_sb_gusenberg"},{"WeaponModel":"markedbills","yR":88.93700690940023,"zR":-10.5,"xR":21.37795263901353,"bone":36,"x":-0.52,"z":-0.15999999999999,"y":-0.07999999999999,"WeaponProp":"prop_money_bag_01"},{"WeaponModel":"weapon_specialcarbine","yR":145.0000005029142,"zR":0.0,"xR":-182.59842509403826,"bone":36,"x":0.25,"z":0.0,"y":0.22,"WeaponProp":"w_ar_specialcarbine"},{"WeaponModel":"weapon_carbinerifle_mk2","yR":0.0,"zR":0.0,"xR":0.0,"bone":36,"x":0.28,"z":0.06,"y":-0.14999999999999,"WeaponProp":"w_ar_carbineriflemk2"},{"WeaponModel":"weapon_machete","yR":-86.85039333999157,"zR":0.0,"xR":6.73228338360786,"bone":36,"x":0.47,"z":0.02,"y":-0.14999999999999,"WeaponProp":"w_me_machette_lr"},{"WeaponModel":"weapon_assaultsmg","yR":144.3700785934925,"zR":-6.0,"xR":-183.74015843495728,"bone":36,"x":0.14999999999999,"z":-0.03,"y":0.21,"WeaponProp":"w_sb_assaultsmg"},{"WeaponModel":"weapon_bat","yR":-85.43307075276971,"zR":1.5,"xR":-2.75590548291802,"bone":36,"x":0.42,"z":0.04,"y":-0.11999999999999,"WeaponProp":"w_me_bat"},{"WeaponModel":"weapon_smg","yR":146.65354270488025,"zR":-10.5,"xR":-175.35433065146209,"bone":36,"x":0.24,"z":-0.07,"y":0.23,"WeaponProp":"w_sb_smg"},{"WeaponModel":"weapon_huntingrifle","yR":0.0,"zR":0.0,"xR":0.0,"bone":36,"x":0.0,"z":0.0,"y":-0.11999999999999,"WeaponProp":"w_sr_huntingrifle"},{"WeaponModel":"weapon_crossbow","yR":-5.19685041159391,"zR":-4.5,"xR":-92.67716420814397,"bone":36,"x":0.0,"z":0.0,"y":-0.19,"WeaponProp":"w_sr_crossbow"},{"WeaponModel":"weapon_combatshotgun","yR":-6.14173240959644,"zR":7.5,"xR":54.21259872615337,"bone":36,"x":-0.06,"z":0.09999999999999,"y":-0.12999999999999,"WeaponProp":"w_sg_pumpshotgunh4"},{"WeaponModel":"weapon_pumpshotgun","yR":0.0,"zR":0.0,"xR":0.0,"bone":36,"x":0.0,"z":0.0,"y":-0.2,"WeaponProp":"w_sg_pumpshotgun"},{"WeaponModel":"weapon_carbinerifle","yR":-193.779527079314,"zR":-12.0,"xR":-176.49606244638563,"bone":36,"x":0.12999999999999,"z":-0.03,"y":0.22,"WeaponProp":"w_ar_carbinerifle"}] \ No newline at end of file diff --git a/resources/[weapons]/[Scripts]/pug-sling/old-sling/client-old.lua b/resources/[weapons]/[Scripts]/pug-sling/old-sling/client-old.lua deleted file mode 100644 index 524cb642b871b3d8eaedd2cd04d32a02a587e80e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6919 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 N%{=AN?aXh!2zb=0PMQD! diff --git a/resources/[weapons]/[Scripts]/pug-sling/old-sling/config-old.lua b/resources/[weapons]/[Scripts]/pug-sling/old-sling/config-old.lua deleted file mode 100644 index 5563f887c..000000000 --- a/resources/[weapons]/[Scripts]/pug-sling/old-sling/config-old.lua +++ /dev/null @@ -1,107 +0,0 @@ -if Config.UseOldSlingScript then - Config2 = {} - Config2.CoreName = "qb-core" -- Only change this if you have changed your core name. - Config2.Inventory = "qb-inventory" -- Inventory type (ox_inventory, qb-inventory, lj-inventory etc.) - - Config2.LoopSpeed = 500 -- How fast the loop to check weapons runs. Lower numbers are lest optimized. - - Config2.Placement = { - ["Back"] = { - bone = 24816, - x = 0.275, -- up and down - y = -0.165, -- in and out - z = 0.02, -- left and right - x_rotation = 0.0, - y_rotation = 0.0, - z_rotation = 0.0 - }, - ["Front"] = { - bone = 10706, - x = 0.0, -- up and down - y = 0.19, -- in and out - z = -0.25, -- left and right - x_rotation = 0.0, -- flips the gun how you would want - y_rotation = 75.0, -- tilts sideways - z_rotation = 180.0 -- tilts into ped - } - } - Config2.PlacementSecond = { - ["Back"] = { - bone = 24816, - x = 0.235, -- up and down - y = -0.165, -- in and out - z = -0.08, -- left and right - x_rotation = 180.0, -- flips the gun how you would want - y_rotation = 0.0, -- tilts sideways - z_rotation = 0.0 -- tilts into ped - }, - ["Front"] = { - bone = 24816, - x = 0.275, -- up and down - y = -0.165, -- in and out - z = 0.02, -- left and right - x_rotation = 0.0, -- flips the gun how you would want - y_rotation = 0.0, -- tilts sideways - z_rotation = 0.0 -- tilts into ped - } - } - Config2.PlacementThird = { - ["Back"] = { - bone = 10706, - x = 0.0, -- up and down - y = 0.19, -- in and out - z = -0.25, -- left and right - x_rotation = 0.0, -- flips the gun how you would want - y_rotation = 75.0, -- tilts sideways - z_rotation = 180.0 -- tilts into ped - }, - ["Front"] = { - bone = 24816, - x = 0.235, -- up and down - y = -0.165, -- in and out - z = -0.08, -- left and right - x_rotation = 180.0, -- flips the gun how you would want - y_rotation = 0.0, -- tilts sideways - z_rotation = 0.0 -- tilts into ped - } - } - - -- To add custom rotations to items or weapons all you need to do is add the "x_rotation = 0.0, y_rotation = 90.0, z_rotation = 0.0" - -- as seen for the "weapon_machete" for example and adjust the values of the rotations. - Config2.WeaponsOnBack = { - -- assault rifles: - ["weapon_carbinerifle"] = { model = "w_ar_carbinerifle" }, - ["weapon_compactrifle"] = { model = "w_ar_assaultrifle_smg" }, - ["weapon_carbinerifle_mk2"] = { model = "w_ar_carbineriflemk2" }, - ["weapon_assaultrifle"] = { model = "w_ar_assaultrifle" }, - ["weapon_specialcarbine"] = { model = "w_ar_specialcarbine" }, - ["weapon_bullpuprifle"] = { model = "w_ar_bullpuprifle" }, - ["weapon_advancedrifle"] = { model = "w_ar_advancedrifle" }, - -- sub machine guns: - ["weapon_microsmg"] = { model = "w_sb_microsmg" }, - ["weapon_assaultsmg"] = { model = "w_sb_assaultsmg" }, - ["weapon_smg"] = { model = "w_sb_smg" }, - ["weapon_smg_mk2"] = { model = "w_sb_smgmk2" }, - ["weapon_gusenberg"] = { model = "w_sb_gusenberg" }, - -- sniper rifles: - ["weapon_sniperrifle"] = { model = "w_sr_sniperrifle" }, - -- shotguns: - ["weapon_sawnoffshotgun"] = { model = "w_sg_sawnoff" }, - ["weapon_assaultshotgun"] = { model = "w_sg_assaultshotgun" }, - ["weapon_bullpupshotgun"] = { model = "w_sg_bullpupshotgun" }, - ["weapon_pumpshotgun"] = { model = "w_sg_pumpshotgun" }, - ["weapon_musket"] = { model = "w_ar_musket" }, - ["weapon_heavyshotgun"] = { model = "w_sg_heavyshotgun" }, - -- mele weapons - ["weapon_machete"] = { model = "w_me_machette_lr", x_rotation = 0.0, y_rotation = 90.0, z_rotation = 0.0 }, - ["weapon_bat"] = { model = "w_me_bat", x_rotation = 0.0, y_rotation = 90.0, z_rotation = 0.0 }, - ["coke_brick"] = { model = "bkr_prop_coke_cutblock_01", x_rotation = 0.0, y_rotation = 90.0, z_rotation = 90.0 }, - ["markedbills"] = { model = "prop_money_bag_01", x_rotation = 0.0, y_rotation = 90.0, z_rotation = 0.0 }, - - -- Addon weapons - ["weapon_katana"] = { model = "w_me_katana", x_rotation = 0.0, y_rotation = 90.0, z_rotation = 0.0 }, - ["weapon_remington"] = { model = "w_sg_remington" }, - ["weapon_mp5"] = { model = "w_sb_mp5" }, - ["weapon_huntingrifle"] = { model = "w_sr_huntingrifle" }, - } -end \ No newline at end of file diff --git a/resources/[weapons]/[Scripts]/pug-sling/old-sling/readme.md b/resources/[weapons]/[Scripts]/pug-sling/old-sling/readme.md deleted file mode 100644 index cac5194c2..000000000 --- a/resources/[weapons]/[Scripts]/pug-sling/old-sling/readme.md +++ /dev/null @@ -1,40 +0,0 @@ -# pug-sling -Advanced weapons slings for the qbcore framework. Any weapon in the players inventory will show up on there back. - -# -- if you are using ox_inventory make sure to change Config.Inventory no other inventory name matters. - -# -- If you are using illenium-appearance make sure to head to illenium-appearance/server/server.lua and replace these commands with these. -lib.addCommand("reloadskin", { help = _L("commands.reloadskin.title") }, function(source) - local src = source - TriggerClientEvent("illenium-appearance:client:reloadSkin", src) - Wait(500) - TriggerClientEvent("Pug:ReloadGuns:sling", src) -end) - -lib.addCommand("clearstuckprops", { help = _L("commands.clearstuckprops.title") }, function(source) - local src = source - TriggerClientEvent("illenium-appearance:client:ClearStuckProps", src) - Wait(500) - TriggerClientEvent("Pug:ReloadGuns:sling", src) -end) -# -- - -# -- Support -Full support provided in my discord here: https://discord.gg/jYZuWYjfvq -# -- - -# -- My other scripts -https://pug-webstore.tebex.io/ -# -- - -# -- Config file -To add a new weapon you must change the first option to the qbcore shared.lua. -# -- - -# -- Commands -`/sling` - Will toggle the weapon placement on the front and back. -# -- - -# -- Use this event to clear items stuck on players without removing the weapons on the players back -TriggerEvent("Pug:ReloadGuns:sling") -# -- \ No newline at end of file diff --git a/resources/[weapons]/[Scripts]/pug-sling/readme.md b/resources/[weapons]/[Scripts]/pug-sling/readme.md deleted file mode 100644 index c988c3d61..000000000 --- a/resources/[weapons]/[Scripts]/pug-sling/readme.md +++ /dev/null @@ -1,56 +0,0 @@ -# pug-sling 2.0 - -# -- If you are using illenium-appearance make sure to head to illenium-appearance/server/server.lua and replace these commands with these. -lib.addCommand("reloadskin", { help = _L("commands.reloadskin.title") }, function(source) - local src = source - TriggerClientEvent("illenium-appearance:client:reloadSkin", src) - Wait(500) - TriggerClientEvent("Pug:ReloadGuns:sling", src) -end) - -lib.addCommand("clearstuckprops", { help = _L("commands.clearstuckprops.title") }, function(source) - local src = source - TriggerClientEvent("illenium-appearance:client:ClearStuckProps", src) - Wait(500) - TriggerClientEvent("Pug:ReloadGuns:sling", src) -end) -# -- - -# -- Use this event to clear items stuck on players without removing the weapons on the players back -TriggerEvent("Pug:ReloadGuns:sling") -# -- - - -Advanced Weapon Sling | Weapons On Back: For any questions please contact me here: https://discord.com/invite/jYZuWYjfvq - -PREVIEW HERE: https://youtu.be/hluGYRiVY1E - -This script is partially locked using escrow encryption. Most of the script is accessible in client/open.lua, and config.lua. - -Full QBCore & ESX Compatibility. - -This completely configurable script consist of: - -● Wearable weapons and items that are placed onto the player when they have the set weapon or item anywhere within their inventory. -● Advanced system controlling and moving around items/weapons in 3D space to get the best position of where the items/weapons should sit on the player. -● Option for individual players to tailor the placement of items and weapons on their characters, enabling unique item positioning for each player. (QBCORE ONLY) -● Full control over the items/weapons with the ability to adjust rotation, XYZ position, and edit the entire script from in-game without doing any code or configuring. -● /rack Command Utilizes the custom weapon racking system, which is exclusively available for select jobs and used to store weapons in emergency service vehicles. -● Version 1.0 comes with this script and is a completely different system shown off and explained in the video. -● Anti-Car tornadoing mechanics designed to prevent car tornadoing from ever occurring on your server. -● /weaponposition command for individual players to set personal weapon and item placements (optional). -● /setweapon command to begin editing where the weapons/items should sit on the player. -● Advanced checks to avoid and stop car tornadoing that occurs in every FiveM server. -● 30 weapons and items pre-configured for you. -● 0:00 ms ResMon for complete optimization. -● qb-inventory support. -● ox_inventory support. -● qs-inventory support. -● ps-inventory support. -● Request inventory support and i will do it for this script if it is possible. - -Requirements consist of: -QBCore OR ESX (other frameworks will work but not supported) -qb-inventory OR ox_inventory OR qs-inventory OR ps-inventory (any qb-inventory resource name changed will work) - -1400 LINES OF CODE \ No newline at end of file diff --git a/resources/[weapons]/[Scripts]/pug-sling/server/main.lua b/resources/[weapons]/[Scripts]/pug-sling/server/main.lua deleted file mode 100644 index d6348deb8..000000000 --- a/resources/[weapons]/[Scripts]/pug-sling/server/main.lua +++ /dev/null @@ -1,65 +0,0 @@ - -if not Config.UseOldSlingScript then - Config.FrameworkFunctions.CreateCallback('Pug:server:GetWeaponConfig', function(source, cb) - local File = LoadResourceFile(GetCurrentResourceName(), "./json/config-weapons.json") - cb(File) - end) - - RegisterNetEvent("Pug:server:SaveWeaponFile", function(JsonWeapons, Personal) - local src = source - if Personal then - if Framework == "QBCore" then - local Player = FWork.Functions.GetPlayer(src) - if Player ~= nil then - Player.Functions.SetMetaData("pug-weapondata", JsonWeapons) - Player.Functions.Save() - end - else - - end - else - local JsonWeapon = json.encode(JsonWeapons) - SaveResourceFile(GetCurrentResourceName(), "./json/config-weapons.json", JsonWeapon) - TriggerClientEvent("Pug:client:RegisterAllBackWeapons", -1, JsonWeapon) - end - end) - - - ---------- [OX_INVENTORY RACK STASH SUPPORT] ---------- - local StashCreated = {} - RegisterNetEvent("Pug:server:SlingOpenOxInvRack", function(StashName, Slots, Space) - if not StashCreated[StashName] then - StashCreated[StashName] = true - exports.ox_inventory:RegisterStash( - StashName, - StashName, - Slots, - Space - ) - end - end) - ------------------------------ - - - ---------- [Commands] ---------- - if Framework == "QBCore" then - FWork.Commands.Add(Config.WeaponSettingCommand, "Adjust server weapons positions", {}, false, function(source, args) - local src = source - TriggerClientEvent("Pug:client:OpenSlingEditor",src) - end,"admin") - FWork.Commands.Add(Config.PersonalWeponSettingsCommand, "Adjust personal weapons positions", {}, false, function(source, args) - local src = source - TriggerClientEvent("Pug:client:OpenSlingEditor",src, true) - end) - else - FWork.RegisterCommand(Config.WeaponSettingCommand, 'admin', function(xPlayer, args) - local src = xPlayer.source - TriggerClientEvent("Pug:client:OpenSlingEditor",src) - end, true, {help = 'Create business menu', validate = true, arguments = {} }) - FWork.RegisterCommand(Config.PersonalWeponSettingsCommand, 'admin', function(xPlayer, args) - local src = xPlayer.source - TriggerClientEvent("Pug:client:OpenSlingEditor",src, true) - end, true, {help = 'Create business menu', validate = true, arguments = {} }) - end - ------------------------------ -end \ No newline at end of file diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/.fxap b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/.fxap new file mode 100644 index 0000000000000000000000000000000000000000..f01780bd685b90fca0525a253e377028642c2db6 GIT binary patch literal 178 zcmV;j08Rf!SV2$$000000LKl5+$8u-e)qbG5^XV$dN^^Dvf32#H=*~aP2xFc#sJQ) z%iHa7K`xZQL(KW#rN=$LC*Nhs(hvC~yzg;71;Di`Z@2nIg!(8j%UGL0oW?(k3>15x zAQWH0C!ERw_MKjQ{`u literal 0 HcmV?d00001 diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/checkInv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/checkInv.lua new file mode 100644 index 000000000..c7a602bab --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/checkInv.lua @@ -0,0 +1,28 @@ +config.useDefaultInventory = true + +local function log(msg) + print(string.format('\x1b[32m[tgiann-weapons-on-back]\x1b[0m %s', msg)) +end + +-- Chezza Studios inventory works fine with normal esx(don't add to the list) +local inventorys = { + "tgiann-inventory", + "mf-inventory", + "ox_inventory", + "core_inventory", + "qs-inventory", + "codem-inventory", + "origen_inventory" +} + +for i = 1, #inventorys do + local inventory = inventorys[i] + local isStarted = GetResourceState(inventory) == "started" + if isStarted then + config[inventory] = true + config.useDefaultInventory = false + log(string.format("Started with %s inventory", inventory)) + end +end + +if config.useDefaultInventory then log(string.format("Started with %s default inventory", config.framework == "qb" and "QB" or "ESX")) end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/codem_inv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/codem_inv.lua new file mode 100644 index 000000000..490b46e57 --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/codem_inv.lua @@ -0,0 +1,89 @@ +if not config["codem-inventory"] then return end + +local playerJob = "" +local lastItems = {} + +RegisterNetEvent('tgiCore:Client:OnPlayerLogout', function() + self.Functions.RemoveAllWeapons() +end) + +RegisterNetEvent('tgiCore:Client:OnPlayerLoaded') +AddEventHandler('tgiCore:Client:OnPlayerLoaded', function(PlayerData) + playerJob = PlayerData.job.name + SetTimeout(2000, function() -- some waiting time because the character's inventory data is loaded later + lastItems = exports['codem-inventory']:GetClientPlayerInventory() + weaponCheck() + end) +end) + +RegisterNetEvent('tgiCore:Client:OnJobUpdate') +AddEventHandler('tgiCore:Client:OnJobUpdate', function(job) + self.Functions.RemoveAllWeapons() + playerJob = job.name + weaponCheck() +end) + +RegisterNetEvent('codem-inventory:client:additem') +AddEventHandler('codem-inventory:client:additem', function(slot, data) + lastItems[tostring(slot)] = data + weaponCheck() +end) + +RegisterNetEvent('codem-inventory:client:removeitemtoclientInventory') +AddEventHandler('codem-inventory:client:removeitemtoclientInventory', function(slot, amount) + slot = tostring(slot) + if lastItems[slot] then + local itemAmount = lastItems[slot].count or lastItems[slot].amount + if itemAmount == amount then + lastItems[slot] = nil + end + end + weaponCheck() +end) + +RegisterNetEvent('codem-inventory:client:clearinventory') +AddEventHandler('codem-inventory:client:clearinventory', function() + lastItems = {} + weaponCheck() +end) + +RegisterNetEvent('codem-inventory:client:setitembyslot') +AddEventHandler('codem-inventory:client:setitembyslot', function(slot, itemData) + lastItems[tostring(slot)] = itemData + weaponCheck() +end) + +self.Functions.CheckWeaponIsRemoved = function() + if not next(self.weapons) then return end + for key, _ in pairs(self.weapons) do + local success = false + for _, item in pairs(lastItems) do + if key == item.info?.serie or item.name then + success = true + break + end + end + if not success then + self.Functions.RemoveWeapon(key) + end + end +end + +function weaponCheck() + if not lastItems then return end + Wait(100) + self.Functions.CheckWeaponIsRemoved() + local isMale = GetEntityModel(PlayerPedId()) == `mp_m_freemode_01` + for _, item in pairs(lastItems) do + if item and item.type == "weapon" then + self.Functions.AddWeapon({ + weapon = item.name, + key = item?.info?.serie or item.name, + attachments = config.tgiann_attachments and + getTgiannAttachments(item.info.tgiattachments, joaat(item.name)) or item.info.attachments, + playerJob = playerJob, + isMale = isMale + }) + end + end +end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/core_inv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/core_inv.lua new file mode 100644 index 000000000..4c3a8ae84 --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/core_inv.lua @@ -0,0 +1,116 @@ +-- https://docs.c8re.store/core-inventory/api +if not config.core_inventory then return end + +local function splitStr(str, delimiter) + local result = {} + local from = 1 + local delim_from, delim_to = string.find(str, delimiter, from) + while delim_from do + result[#result + 1] = string.sub(str, from, delim_from - 1) + from = delim_to + 1 + delim_from, delim_to = string.find(str, delimiter, from) + end + result[#result + 1] = string.sub(str, from) + return result +end + +local playerJob = "" +local invItems = {} +local playerItems = {} + +local function getInventoryItems() + tgiCore.cbFunction('tgiann-weapons-on-back:core_inventory:server:getInventory', function(newPlayerItems) + playerItems = newPlayerItems + weaponCheck(true) + end) +end + +RegisterNetEvent('core_inventory:client:sync', function(inventory, data) + local split = splitStr(inventory, '-')[1] + if config.enableInv[split] then + playerItems[split] = data.content + end +end) + +RegisterNetEvent('tgiCore:Client:OnPlayerLoaded') +AddEventHandler('tgiCore:Client:OnPlayerLoaded', function(PlayerData) + if not PlayerData then return end + playerJob = PlayerData.job.name + getInventoryItems(PlayerData.identifier) +end) + +RegisterNetEvent('tgiCore:Client:OnPlayerLogout', function() + self.Functions.RemoveAllWeapons() +end) + +RegisterNetEvent('tgiCore:Client:OnJobUpdate') +AddEventHandler('tgiCore:Client:OnJobUpdate', function(job) + self.Functions.RemoveAllWeapons() + playerJob = job.name + weaponCheck(false) +end) + +if config.framework == "qb" then + RegisterNetEvent('QBCore:Player:SetPlayerData', function(PlayerData) + playerJob = PlayerData.job.name + if not config.enableInv["content"] then return end + playerItems["content"] = PlayerData?.items + weaponCheck(true) + end) +else + RegisterNetEvent('esx:addInventoryItem') + AddEventHandler('esx:addInventoryItem', function(job) + local PlayerData = exports["tgiann-core"]:getPlayerData() + if not PlayerData then return end + getInventoryItems(PlayerData.identifier) + end) + + RegisterNetEvent('esx:removeInventoryItem') + AddEventHandler('esx:removeInventoryItem', function(job) + local PlayerData = exports["tgiann-core"]:getPlayerData() + if not PlayerData then return end + getInventoryItems(PlayerData.identifier) + end) +end + +self.Functions.CheckWeaponIsRemoved = function() + if not next(self.weapons) then return end + for key, _ in pairs(self.weapons) do + local success = false + for _, item in pairs(invItems) do + if item and key == (item.metadata?.serial or item.name) then + success = true + break + end + end + if not success then + self.Functions.RemoveWeapon(key) + end + end +end + +function weaponCheck(updateData) + if updateData then + invItems = {} + for _, inv in pairs(playerItems) do + for _, item in pairs(inv) do + invItems[#invItems + 1] = item + end + end + end + Wait(100) + self.Functions.CheckWeaponIsRemoved() + local isMale = GetEntityModel(PlayerPedId()) == `mp_m_freemode_01` + for _, item in pairs(invItems) do + if item and string.find(string.lower(item.name), "weapon") then + self.Functions.AddWeapon({ + weapon = item.name, + key = item.metadata?.serial or item.name, + attachments = config.tgiann_attachments and + getTgiannAttachments(item.metadata.tgiattachments, joaat(item.name)) or item.metadata.attachments, + playerJob = playerJob, + isMale = isMale + }) + end + end +end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/esx_inv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/esx_inv.lua new file mode 100644 index 000000000..ff1881be5 --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/esx_inv.lua @@ -0,0 +1,88 @@ +if config.framework ~= "esx" then return end +if not config.useDefaultInventory then return end + +local playerJob = "" +local lastItems = {} + +local function getInventoryItems() + tgiCore.cbFunction('tgiann-weapons-on-back:esx_inv:server:getInventory', function(playerItems, loadout) + local itemList = {} + -- ESX is suck + if loadout and #loadout > 0 then + for i = 1, #loadout do + itemList[#itemList + 1] = loadout[i] + end + end + + if playerItems and #playerItems > 0 then + for i = 1, #playerItems do + if playerItems[i].count > 0 then + itemList[#itemList + 1] = playerItems[i] + end + end + end + lastItems = itemList + weaponCheck() + end) +end + +RegisterNetEvent('tgiCore:Client:OnPlayerLoaded') +AddEventHandler('tgiCore:Client:OnPlayerLoaded', function(PlayerData) + playerJob = PlayerData.job.name + getInventoryItems() +end) + +RegisterNetEvent('tgiCore:Client:OnPlayerLogout', function() + self.Functions.RemoveAllWeapons() +end) + +RegisterNetEvent('esx:addInventoryItem') +AddEventHandler('esx:addInventoryItem', function(job) + getInventoryItems() +end) + +RegisterNetEvent('esx:removeInventoryItem') +AddEventHandler('esx:removeInventoryItem', function(job) + getInventoryItems() +end) + +RegisterNetEvent('tgiCore:Client:OnJobUpdate') +AddEventHandler('tgiCore:Client:OnJobUpdate', function(job) + self.Functions.RemoveAllWeapons() + playerJob = job.name + weaponCheck() +end) + +self.Functions.CheckWeaponIsRemoved = function() + if not next(self.weapons) then return end + for key, _ in pairs(self.weapons) do + local success = false + for _, item in pairs(lastItems) do + if item and key == item.name then + success = true + break + end + end + if not success then + self.Functions.RemoveWeapon(key) + end + end +end + +function weaponCheck() + self.Functions.CheckWeaponIsRemoved() + Wait(100) + local isMale = GetEntityModel(PlayerPedId()) == `mp_m_freemode_01` + for _, item in pairs(lastItems) do + if item and string.find(string.lower(item.name), "weapon") then + self.Functions.AddWeapon({ + weapon = item.name, + key = item.name, + attachments = config.tgiann_attachments and + getTgiannAttachments(item?.info?.tgiattachments, joaat(item.name)) or item.components, + playerJob = playerJob, + isMale = isMale + }) + end + end +end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/main.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/main.lua new file mode 100644 index 000000000..786946d5f --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/main.lua @@ -0,0 +1,99 @@ +tgiCore = nil +CreateThread(function() + while not tgiCore do + tgiCore = tgiCoreExports:getCore() + Wait(200) + end +end) + +local function LoadModel(model) + if HasModelLoaded(model) then return end + RequestModel(model) + while not HasModelLoaded(model) do Wait(0) end +end + +self.Functions.AddAttachments = function(entity, weaponName, weaponHash, attachments) + if not attachments then return end + if config.tgiann_attachments then + for _, data in pairs(attachments) do + local model = GetWeaponComponentTypeModel(data.component) + if model ~= 0 then + LoadModel(model) + GiveWeaponComponentToWeaponObject(entity, data.component) + SetModelAsNoLongerNeeded(data.component) + else + SetWeaponObjectTintIndex(entity, data.component) + end + end + elseif config.core_inventory then + for _, data in pairs(attachments) do + local model = GetWeaponComponentTypeModel(data.componentHash) + if model ~= 0 then + LoadModel(model) + GiveWeaponComponentToWeaponObject(entity, data.componentHash) + SetModelAsNoLongerNeeded(data.componentHash) + else + SetWeaponObjectTintIndex(entity, data.componentHash) + end + end + elseif config.ox_inventory then + if not oxItems then oxItems = exports.ox_inventory:Items() end + for i = 1, #attachments do + local components = oxItems[attachments[i]].client.component + for v = 1, #components do + local component = components[v] + if DoesWeaponTakeWeaponComponent(weaponHash, component) then + local model = GetWeaponComponentTypeModel(component) + if model ~= 0 then + LoadModel(model) + GiveWeaponComponentToWeaponObject(entity, component) + SetModelAsNoLongerNeeded(component) + end + end + end + end + elseif config.framework == "qb" then + for _, data in pairs(attachments) do + local model = GetWeaponComponentTypeModel(data.component) + if model ~= 0 then + LoadModel(model) + GiveWeaponComponentToWeaponObject(entity, data.component) + SetModelAsNoLongerNeeded(data.component) + else + SetWeaponObjectTintIndex(entity, data.component) + end + end + else + --ESX is suck + for i = 1, #attachments do + local componentData = tgiCore.core.GetWeaponComponent(weaponName, attachments[i]) + if componentData then + local hash = componentData.hash + local model = GetWeaponComponentTypeModel(hash) + if model ~= 0 then + LoadModel(model) + GiveWeaponComponentToWeaponObject(entity, hash) + SetModelAsNoLongerNeeded(hash) + else + SetWeaponObjectTintIndex(entity, hash) + end + end + end + end +end + +function getTgiannAttachments(tgiattachments, weapon) + local invSettings = exports["tgiann-attachment"]:inventoryConfig() + if invSettings then + return tgiattachments + else + local returnVal = nil + local waitCb = true + tgiCore.cbFunction("tgiann-attachment:getAttachment", function(data) + returnVal = data + waitCb = false + end, weapon) + while waitCb do Wait(10) end + return returnVal + end +end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/mf_inv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/mf_inv.lua new file mode 100644 index 000000000..c8bcde8df --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/mf_inv.lua @@ -0,0 +1,77 @@ +if not config["mf-inventory"] then return end + +local playerJob = "" +local lastItems = {} + +local function getInventoryItems(identifier) + exports["mf-inventory"]:getInventoryItems(identifier, function(items) + lastItems = items + weaponCheck() + end) +end + +RegisterNetEvent('esx:playerLoaded') +AddEventHandler('esx:playerLoaded', function(PlayerData) + playerJob = PlayerData.job.name + getInventoryItems(PlayerData.identifier) +end) + +RegisterNetEvent('tgiCore:Client:OnPlayerLogout', function() + self.Functions.RemoveAllWeapons() +end) + +RegisterNetEvent('esx:addInventoryItem') +AddEventHandler('esx:addInventoryItem', function(job) + local PlayerData = exports["tgiann-core"]:getPlayerData() + if not PlayerData then return end + getInventoryItems(PlayerData.identifier) +end) + +RegisterNetEvent('esx:removeInventoryItem') +AddEventHandler('esx:removeInventoryItem', function(job) + local PlayerData = exports["tgiann-core"]:getPlayerData() + if not PlayerData then return end + getInventoryItems(PlayerData.identifier) +end) + +RegisterNetEvent('tgiCore:Client:OnJobUpdate') +AddEventHandler('tgiCore:Client:OnJobUpdate', function(job) + self.Functions.RemoveAllWeapons() + playerJob = job.name + weaponCheck() +end) + +self.Functions.CheckWeaponIsRemoved = function() + if not next(self.weapons) then return end + for key, _ in pairs(self.weapons) do + local success = false + for _, item in pairs(lastItems) do + if item and key == item.name then + success = true + break + end + end + if not success then + self.Functions.RemoveWeapon(key) + end + end +end + +function weaponCheck() + if not lastItems then return end + Wait(100) + self.Functions.CheckWeaponIsRemoved(lastItems) + local isMale = GetEntityModel(PlayerPedId()) == `mp_m_freemode_01` + for _, item in pairs(lastItems) do + if item and string.find(string.lower(item.name), "weapon") then + self.Functions.AddWeapon({ + weapon = item.name, + key = item.name, + attachments = config.tgiann_attachments and + getTgiannAttachments(item.metadata.tgiattachments, joaat(item.name)), + playerJob = playerJob, + isMale = isMale + }) + end + end +end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/origen_inv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/origen_inv.lua new file mode 100644 index 000000000..aee6b831a --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/origen_inv.lua @@ -0,0 +1,79 @@ +if not config.origen_inventory then return end + +local origen_inventory = exports.origen_inventory +local playerJob = "" +local lastItems = {} + +local function getInventoryItems() + lastItems = origen_inventory:GetInventory() + weaponCheck() +end + +RegisterNetEvent('tgiCore:Client:OnPlayerLogout', function() + self.Functions.RemoveAllWeapons() +end) + +RegisterNetEvent('tgiCore:Client:OnPlayerLoaded') +AddEventHandler('tgiCore:Client:OnPlayerLoaded', function(PlayerData) + playerJob = PlayerData.job.name + getInventoryItems() +end) + +RegisterNetEvent('tgiCore:Client:OnJobUpdate') +AddEventHandler('tgiCore:Client:OnJobUpdate', function(job) + self.Functions.RemoveAllWeapons() + playerJob = job.name + weaponCheck() +end) + +--QB +RegisterNetEvent('QBCore:Player:SetPlayerData', function(PlayerData) + playerJob = PlayerData.job.name + getInventoryItems() +end) + +--ESX +RegisterNetEvent('esx:addInventoryItem') +AddEventHandler('esx:addInventoryItem', function() + getInventoryItems() +end) + +RegisterNetEvent('esx:removeInventoryItem') +AddEventHandler('esx:removeInventoryItem', function() + getInventoryItems() +end) + +self.Functions.CheckWeaponIsRemoved = function() + if not next(self.weapons) then return end + for key, _ in pairs(self.weapons) do + local success = false + for _, item in pairs(lastItems) do + if key == item.info.serie then + success = true + break + end + end + if not success then + self.Functions.RemoveWeapon(key) + end + end +end + +function weaponCheck() + if not lastItems then return end + Wait(100) + self.Functions.CheckWeaponIsRemoved() + local isMale = GetEntityModel(PlayerPedId()) == `mp_m_freemode_01` + for _, item in pairs(lastItems) do + if item and item.type == "weapon" then + self.Functions.AddWeapon({ + weapon = item.name, + key = item.info.serie, + attachments = config.tgiann_attachments and + getTgiannAttachments(item.info.tgiattachments, joaat(item.name)) or item.info.attachments, + playerJob = playerJob, + isMale = isMale + }) + end + end +end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/ox_inv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/ox_inv.lua new file mode 100644 index 000000000..84715b1e3 --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/ox_inv.lua @@ -0,0 +1,64 @@ +if not config.ox_inventory then return end + +local playerJob = "" +local lastItems = {} + +RegisterNetEvent('tgiCore:Client:OnPlayerLoaded') +AddEventHandler('tgiCore:Client:OnPlayerLoaded', function(PlayerData) + playerJob = PlayerData.job.name + lastItems = exports.ox_inventory:GetPlayerItems() or {} + weaponCheck() +end) + +RegisterNetEvent('tgiCore:Client:OnPlayerLogout', function() + self.Functions.RemoveAllWeapons() +end) + +AddEventHandler('ox_inventory:updateInventory', function(changes) + for i, value in pairs(changes) do + lastItems[i] = value or nil + end + weaponCheck() +end) + +RegisterNetEvent('tgiCore:Client:OnJobUpdate') +AddEventHandler('tgiCore:Client:OnJobUpdate', function(job) + self.Functions.RemoveAllWeapons() + playerJob = job.name + weaponCheck() +end) + +self.Functions.CheckWeaponIsRemoved = function() + if not next(self.weapons) then return end + for key, _ in pairs(self.weapons) do + local success = false + for _, item in pairs(lastItems) do + if item and key == (item.metadata.serial or item.name) then + success = true + break + end + end + if not success then + self.Functions.RemoveWeapon(key) + end + end +end + +function weaponCheck() + if not lastItems then return end + Wait(100) + self.Functions.CheckWeaponIsRemoved() + local isMale = GetEntityModel(PlayerPedId()) == `mp_m_freemode_01` + for _, item in pairs(lastItems) do + if item and string.find(string.lower(item.name), "weapon") then + self.Functions.AddWeapon({ + weapon = item.name, + key = item.metadata.serial or item.name, + attachments = config.tgiann_attachments and + getTgiannAttachments(item.metadata.tgiattachments, joaat(item.name)) or item.metadata.components, + playerJob = playerJob, + isMale = isMale + }) + end + end +end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/qb_inv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/qb_inv.lua new file mode 100644 index 000000000..7ee834347 --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/qb_inv.lua @@ -0,0 +1,64 @@ +if config.framework ~= "qb" then return end +if not config.useDefaultInventory then return end + +local playerJob = "" +local lastItems = {} + +RegisterNetEvent('tgiCore:Client:OnPlayerLogout', function() + self.Functions.RemoveAllWeapons() +end) + +RegisterNetEvent('tgiCore:Client:OnPlayerLoaded') +AddEventHandler('tgiCore:Client:OnPlayerLoaded', function(PlayerData) + playerJob = PlayerData.job.name + lastItems = PlayerData?.items + weaponCheck() +end) + +RegisterNetEvent('QBCore:Player:SetPlayerData', function(PlayerData) + playerJob = PlayerData.job.name + lastItems = PlayerData?.items + weaponCheck() +end) + +RegisterNetEvent('tgiCore:Client:OnJobUpdate') +AddEventHandler('tgiCore:Client:OnJobUpdate', function(job) + self.Functions.RemoveAllWeapons() + playerJob = job.name + weaponCheck() +end) + +self.Functions.CheckWeaponIsRemoved = function() + if not next(self.weapons) then return end + for key, _ in pairs(self.weapons) do + local success = false + for _, item in pairs(lastItems) do + if key == item.info.serie then + success = true + break + end + end + if not success then + self.Functions.RemoveWeapon(key) + end + end +end + +function weaponCheck() + if not lastItems then return end + Wait(100) + self.Functions.CheckWeaponIsRemoved() + local isMale = GetEntityModel(PlayerPedId()) == `mp_m_freemode_01` + for _, item in pairs(lastItems) do + if item and item.type == "weapon" then + self.Functions.AddWeapon({ + weapon = item.name, + key = item.info.serie, + attachments = config.tgiann_attachments and + getTgiannAttachments(item.info.tgiattachments, joaat(item.name)) or item.info.attachments, + playerJob = playerJob, + isMale = isMale + }) + end + end +end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/qs_inv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/qs_inv.lua new file mode 100644 index 000000000..387313a79 --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/qs_inv.lua @@ -0,0 +1,89 @@ +if not config["qs-inventory"] then return end + +local playerJob = "" +local lastItems = {} +local isBussy = false + +local function getInventoryItems() + if isBussy then return end + isBussy = true + while exports['qs-inventory']:inInventory() do Wait(10) end -- getUserInventory not updating when inventory is open + Wait(1000) -- getUserInventory is updating late + lastItems = exports['qs-inventory']:getUserInventory() + weaponCheck(playerJob, true) + isBussy = false +end + +RegisterNetEvent('tgiCore:Client:OnPlayerLoaded') +AddEventHandler('tgiCore:Client:OnPlayerLoaded', function(PlayerData) + playerJob = PlayerData.job.name + getInventoryItems() +end) + +RegisterNetEvent('tgiCore:Client:OnPlayerLogout', function() + self.Functions.RemoveAllWeapons() +end) + +--ESX +RegisterNetEvent('esx:addInventoryItem') +AddEventHandler('esx:addInventoryItem', function() + getInventoryItems() +end) + +RegisterNetEvent('esx:removeInventoryItem') +AddEventHandler('esx:removeInventoryItem', function() + getInventoryItems() +end) + +--QB +RegisterNetEvent('QBCore:Player:SetPlayerData', function(PlayerData) + playerJob = PlayerData.job.name + lastItems = PlayerData?.items + weaponCheck() +end) + +RegisterNetEvent('tgiCore:Client:OnJobUpdate') +AddEventHandler('tgiCore:Client:OnJobUpdate', function(job) + self.Functions.RemoveAllWeapons() + playerJob = job.name + weaponCheck(playerJob) +end) + +self.Functions.CheckWeaponIsRemoved = function() + if not next(self.weapons) then return end + for key, _ in pairs(self.weapons) do + local success = false + for _, item in pairs(lastItems) do + if item and key == (item.info?.serie or item.name) then + success = true + break + end + end + if not success then + self.Functions.RemoveWeapon(key) + end + end +end + +function weaponCheck() + Wait(100) + self.Functions.CheckWeaponIsRemoved() + local isMale = GetEntityModel(PlayerPedId()) == `mp_m_freemode_01` + for _, item in pairs(lastItems) do + if item then + local isWeapon = string.find(string.lower(item.name), "weapon") + debug(item.name .. " Check For Add Weapon", "isWeapon: " .. tostring(isWeapon)) + if isWeapon then + debug(item.name .. " Added") + self.Functions.AddWeapon({ + weapon = item.name, + key = item.info?.serie or item.name, + attachments = config.tgiann_attachments and + getTgiannAttachments(item.info.tgiattachments, joaat(item.name)) or item.info?.attachments, + playerJob = playerJob, + isMale = isMale + }) + end + end + end +end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/tgiann_inv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/tgiann_inv.lua new file mode 100644 index 000000000..71e036f7f --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/bridge/tgiann_inv.lua @@ -0,0 +1,62 @@ +if not config["tgiann-inventory"] then return end + +local playerJob = "" +local lastItems = {} + +RegisterNetEvent('tgiCore:Client:OnPlayerLogout', function() + self.Functions.RemoveAllWeapons() +end) + +RegisterNetEvent('tgiCore:Client:OnPlayerLoaded') +AddEventHandler('tgiCore:Client:OnPlayerLoaded', function(PlayerData) + playerJob = PlayerData.job.name + lastItems = exports["tgiann-inventory"]:GetPlayerItems() + weaponCheck() +end) + +RegisterNetEvent('tgiann-inventory:inventoryUpdated') +AddEventHandler('tgiann-inventory:inventoryUpdated', function(items) + lastItems = items + weaponCheck() +end) + +RegisterNetEvent('tgiCore:Client:OnJobUpdate') +AddEventHandler('tgiCore:Client:OnJobUpdate', function(job) + self.Functions.RemoveAllWeapons() + playerJob = job.name + weaponCheck() +end) + +self.Functions.CheckWeaponIsRemoved = function() + if not next(self.weapons) then return end + for key, _ in pairs(self.weapons) do + local success = false + for _, item in pairs(lastItems) do + if key == item?.info?.serie then + success = true + break + end + end + if not success then + self.Functions.RemoveWeapon(key) + end + end +end + +function weaponCheck() + if not lastItems then return end + Wait(100) + self.Functions.CheckWeaponIsRemoved() + local isMale = GetEntityModel(PlayerPedId()) == `mp_m_freemode_01` + for _, item in pairs(lastItems) do + if item and item.type == "weapon" then + self.Functions.AddWeapon({ + weapon = string.gsub(item.name, "_police", ""), + key = item?.info?.serie or item.name, + attachments = item?.info?.tgiattachments or {}, + playerJob = playerJob, + isMale = isMale + }) + end + end +end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/client.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/client.lua new file mode 100644 index 0000000000000000000000000000000000000000..b45246355dd59bea1537a1850de4ed4b69adec11 GIT binary patch literal 6569 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 bqk#c^1^A++u_L_%ykAe-CU_tzlr@crGiJtU literal 0 HcmV?d00001 diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/editable.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/editable.lua new file mode 100644 index 000000000..a5f9866b3 --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/client/editable.lua @@ -0,0 +1,12 @@ +function canShow(targetPed) + local isEntityVisible = IsEntityVisible(targetPed) + local getEntityAlpha = GetEntityAlpha(targetPed) + local pedIsVisible = isEntityVisible and getEntityAlpha == 255 + debug("pedIsVisible: " .. tostring(pedIsVisible), "ped:" .. targetPed, "isEntityVisible: " .. tostring(isEntityVisible), "getEntityAlpha: " .. getEntityAlpha) + return pedIsVisible +end + +function debug(...) + if not config.debug then return end + print(...) +end diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/configs/config.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/configs/config.lua new file mode 100644 index 000000000..113d7ef2d --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/configs/config.lua @@ -0,0 +1,206 @@ +--[[ + - this script needs tgiann-core script to work, you can download the script from your keymaster account + Start tgiann-core script after es_extented/qb-core script and before tgiann-* scripts + Adjust the tgiann-core config file according to the framework you are using + + https://tgiann.gitbook.io/tgiann/scripts/tgiann-weapons-on-back + + Note: If you want the weapons to be invisible while in Noclip, the character must be completely invisible. If your character is invisible to other players, other players cannot see these weapons. + If you want to edit this, take a look at client/editable.lua +]] + +tgiCoreExports = exports["tgiann-core"] +config = tgiCoreExports:getConfig() +config.debug = false + +config.tgiann_attachments = GetResourceState("tgiann-attachment") ~= "missing" -- https://tgiann.tebex.io/package/5399235 + +-- Weapon positions for male and female characters. You can add additional positions here if you like. +config.positions = { + male = { + back = { -- We have set 3 positions for the back. You can add or remove extra positions if you like. This setting also applies to other positions. + { -- position 1 + bone = 24816, + offset = vector3(0.285, -0.17, 0.13), + rot = vector3(0.0, 170.0, 0.0), + }, + { -- position 2 + bone = 24816, + offset = vector3(0.285, -0.17, 0.0), + rot = vector3(0.0, 170.0, 0.0), + }, + { -- position 3 + bone = 24816, + offset = vector3(0.285, -0.17, -0.13), + rot = vector3(0.0, 170.0, 0.0), + } + }, + front = { + { + bone = 24818, + offset = vector3(-0.03, 0.19, 0.0), + rot = vector3(-10.0, 40.0, 5.0), + } + }, + right = { + { + bone = 11816, + offset = vector3(-0.01, 0.02, 0.215), + rot = vector3(-100.0, 60.0, 45.0), + } + }, + rLegBack = { + { + bone = 11816, + offset = vector3(-0.15, -0.11, 0.22), + rot = vector3(0.0, 95.0, 180.0), + } + }, + waist = { + { + bone = 11816, + offset = vector3(-0.07, -0.13, 0.05), + rot = vector3(180.0, -30.0, 10.0), + } + }, + -- You can add extra positions here if you like. + -- The positions you add can be used in the `config.weaponPositions`, `config.weaponGroupPositions` and `config.weaponGroupJobPositions` settings. + --[[ exampleCustomName = { + { + bone = 11816, + offset = vector3(-0.07, -0.13, 0.05), + rot = vector3(180.0, -30.0, 10.0), + } + }, ]] + }, + female = { + back = { + { + bone = 24816, + offset = vector3(0.285, -0.15, 0.13), + rot = vector3(0.0, 170.0, 0.0), + }, + { + bone = 24816, + offset = vector3(0.285, -0.15, 0.0), + rot = vector3(0.0, 170.0, 0.0), + }, + { + bone = 24816, + offset = vector3(0.285, -0.15, -0.13), + rot = vector3(0.0, 170.0, 0.0), + } + }, + front = { + { + bone = 24818, + offset = vector3(-0.03, 0.21, 0.0), + rot = vector3(-10.0, 40.0, 5.0), + } + }, + right = { + { + bone = 11816, + offset = vector3(-0.09, 0.03, 0.18), + rot = vector3(-105.0, 75.0, 45.0), + } + }, + rLegBack = { + { + bone = 11816, + offset = vector3(-0.15, -0.11, 0.22), + rot = vector3(0.0, 95.0, 180.0), + } + }, + waist = { + { + bone = 11816, + offset = vector3(-0.07, -0.09, 0.05), + rot = vector3(180.0, -30.0, 10.0), + } + } + } + +} + +-- Weapons in the list do not appear on the character +config.disabledWeapons = { + weapon_flashlight = true, + weapon_knuckle = true, + weapon_bottle = true, + weapon_snowball = true, +} + +-- adjusts the location of the weapon regardless of its group +config.weaponPositions = { + --weapon_pistol = "right", +} + +-- adjusts the position of the weapon regardless of its group +config.weaponCustomPositions = { + male = { + weapon_bat = { + bone = 24816, + offset = vector3(0.0, -0.15, 0.03), + rot = vector3(0.0, 80.0, 0.0), + } + }, + female = { + weapon_bat = { + bone = 24816, + offset = vector3(0.0, -0.15, 0.03), + rot = vector3(0.0, 80.0, 0.0), + } + } +} + +--"waist" - "back" - "front" - "rigt" - "rLegBack" - "none" +config.weaponGroupPostions = { + [3539449195] = "back", --GROUP_DIGISCANNER + [-37788308] = "rLegBack", --GROUP_FIREEXTINGUISHER + [1175761940] = "none", --GROUP_HACKINGDEVICE + [2725924767] = "back", --GROUP_HEAVY + [-728555052] = "back", --GROUP_MELEE + [3759491383] = "none", --GROUP_METALDETECTOR + [1159398588] = "back", --GROUP_MG + [3493187224] = "none", --GROUP_NIGHTVISION + [431593103] = "none", --GROUP_PARACHUTE + [1595662460] = "none", --GROUP_PETROLCAN + [416676503] = "waist", --GROUP_PISTOL + [970310034] = "front", --GROUP_RIFLE + [860033945] = "back", --GROUP_SHOTGUN + [-957766203] = "front", --GROUP_SMG + [-1212426201] = "back", --GROUP_SNIPER + [690389602] = "none", --GROUP_STUNGUN + [1548507267] = "none", --GROUP_THROWN + [75159441] = "back", --GROUP_TRANQILIZER + [2685387236] = "none", --GROUP_UNARMED +} + +-- weapon locations for jobs +config.weaponGroupJobPostions = { + { + jobs = { "police" }, -- u can add multible job name + postions = { + [3539449195] = "back", --GROUP_DIGISCANNER + [-37788308] = "rLegBack", --GROUP_FIREEXTINGUISHER + [1175761940] = "none", --GROUP_HACKINGDEVICE + [2725924767] = "back", --GROUP_HEAVY + [-728555052] = "back", --GROUP_MELEE + [3759491383] = "none", --GROUP_METALDETECTOR + [1159398588] = "back", --GROUP_MG + [3493187224] = "none", --GROUP_NIGHTVISION + [431593103] = "none", --GROUP_PARACHUTE + [1595662460] = "none", --GROUP_PETROLCAN + [416676503] = "right", --GROUP_PISTOL + [970310034] = "front", --GROUP_RIFLE + [860033945] = "front, --GROUP_SHOTGUN + [-957766203] = "front", --GROUP_SMG + [-1212426201] = "back", --GROUP_SNIPER + [690389602] = "none", --GROUP_STUNGUN + [1548507267] = "none", --GROUP_THROWN + [75159441] = "back", --GROUP_TRANQILIZER + [2685387236] = "none", --GROUP_UNARMED + } + } +} diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/configs/core_inv_config.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/configs/core_inv_config.lua new file mode 100644 index 000000000..be3ce7e4f --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/configs/core_inv_config.lua @@ -0,0 +1,5 @@ +config.enableInv = { + ["content"] = true, + ["primary"] = true, + ["secondry"] = true, +} \ No newline at end of file diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/fxmanifest.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/fxmanifest.lua new file mode 100644 index 000000000..c59b2fef0 --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/fxmanifest.lua @@ -0,0 +1,34 @@ +fx_version 'cerulean' +game 'gta5' +version '1.0.1' + +lua54 'yes' + +dependencies { + 'tgiann-core', +} + +escrow_ignore { + 'configs/*.lua', + 'checkInv.lua', + 'client/bridge/*.lua', + 'client/editable.lua', + 'server/bridge/*.lua' +} + +shared_script { + 'configs/*.lua', + 'checkInv.lua', +} + +client_scripts { + 'client/*.lua', + 'client/bridge/*.lua' +} + +server_scripts { + "server/server.lua", + 'server/bridge/*.lua', +} + +dependency '/assetpacks' \ No newline at end of file diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/server/bridge/core_inv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/server/bridge/core_inv.lua new file mode 100644 index 000000000..b330e546d --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/server/bridge/core_inv.lua @@ -0,0 +1,13 @@ +if not config.core_inventory then return end + +tgiCore.cbFunction('tgiann-weapons-on-back:core_inventory:server:getInventory', function(source, cb) + local src = source + local xPlayer = tgiCore.getPlayer(src) + if not xPlayer then return end + local citizenid = tgiCore.getCid(xPlayer) + local playerItems = {} + for inv, canAdd in pairs(config.enableInv) do + if canAdd then playerItems[inv] = exports['core_inventory']:getInventory(string.format("%s-%s", inv, citizenid)) end + end + cb(playerItems) +end) diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/server/bridge/esx_inv.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/server/bridge/esx_inv.lua new file mode 100644 index 000000000..a59396790 --- /dev/null +++ b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/server/bridge/esx_inv.lua @@ -0,0 +1,10 @@ +if config.framework ~= "esx" then return end +if not config.useDefaultInventory then return end + +-- esx is very bad, I can't access current inventory data from client +tgiCore.cbFunction('tgiann-weapons-on-back:esx_inv:server:getInventory', function(source, cb) + local src = source + local xPlayer = tgiCore.getPlayer(src) + if not xPlayer then return end + cb(xPlayer.getInventory(), xPlayer.getLoadout()) +end) \ No newline at end of file diff --git a/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/server/server.lua b/resources/[weapons]/[Scripts]/tgiann-weapons-on-back/server/server.lua new file mode 100644 index 0000000000000000000000000000000000000000..794191b64bc92968410b62866720d8454831d3d1 GIT binary patch literal 1954 zcmV;T2VM9^SV2$$000000NBIjGT#ig0>Cpfk|w_=6SOuW_c7GZM1b+b+%|xXcP4rk z04pvgD`Q=2avJx>lK+@^mYWWb&@%B}c=)j?}%LwdDz;FL6mqBiO>A7UxT?jT;(~< z2xwA}b9(K8o$-iRTv=S_eGHAD?njTKNUnbezh)EGVzG5yvPcBUAi z>@2fVu!%w8Puqp+<)ltj5#*J8k^QTdranGY zU&hm^^81?(eBPaHf3NW3WJM z9Q=aVT=x)veB)&9WzJL}`;%U{afgM9AsX2k6+cW}Xt{dsq9y9d%*D9VyZ5yNbCFpI6gwRj#g`^$2%0wa;L$CHQ2tx1jJ=0 zj1w9x-L)Ff1H;Eg4&8~toPcXTuZ77DPtn2TQLyNWw$#emU+M;#Kllwf zv1f}+9eUpvlg3?Jz~_TZ1z#tre0_Y}?x^%_6*2%*-9&B`vR!;9uz@OP;zhWndSDAW zGtcgHllIUb}U*C45>cew`f-5(Q6WIYfL+z2X`$nF3i+gk0j*2*ZE_^PL22ZPT; z(jFE>l=rR0GyLFCRz&T6B|@{#x8?C(RbFk(r!Joj#%4iv`9!6-Y*Q75c82~tja_;h z4Tw=`wDNDuD#V?a0`s>CeHo) zL**giR82Vil}L@uqMZ!q5S`$~DJnGiK58Fj;9WO>VT#Abqm;Py#B!lzv}ihSym}UY z@=j%rLv=P;3BVZb2^dasW4o|Zw_SfEC(v97N`agy+5^h-bo0vudY{5)+ zl?;LjyW8^ZjFi2Qu{@5LM1`!{@1uMm!li?ivql5nwZ!H!#;U;U<;#<$kK*~mLSRwe z>0jgHu`VgM#?jfzxIjy~fDW7+({$liQvPhYLr#EZOk-ta>^9&l3*~@K_D>Nr8x>pI zkUeZ>kfx1;r1e^2owhQbpZ!GSLVei5?)MBXh-Xr&=E6BYZ6FN;iDkD%DL2Zt(s z4(wX@YLjx3N&7}7s3Tcc-LA;k?hJBGuDQ}`Se2kF^#9(4ias)KS@6soNS0J36u=Bf z|0eJxzZi{3R7>!<^WDyI9b5UVANJw*O@NrDyMJH(NVtY$(xb!51o-#8Kot(N)Ed6< zyQRXUp%h3wqUnUFd?RBhF+1Kk7uf(83O~J3gyBoYu%*rwz4>??N2am?0E{S7hMI&` ozNd1ECKrA5UFXsSDZyM5C>#KQ@S8pYKDUX?*C7I#WM>*8xjGfi4gdfE literal 0 HcmV?d00001