-- Variables local QBCore = exports['qb-core']:GetCoreObject() local alcoholCount = 0 local healing, parachuteEquipped = false, false local currVest, currVestTexture = nil, nil -- Functions RegisterNetEvent('QBCore:Client:UpdateObject', function() QBCore = exports['qb-core']:GetCoreObject() end) local function loadAnimDict(dict) if HasAnimDictLoaded(dict) then return end RequestAnimDict(dict) while not HasAnimDictLoaded(dict) do Wait(10) end end local function equipParachuteAnim() loadAnimDict('clothingshirt') TaskPlayAnim(PlayerPedId(), 'clothingshirt', 'try_shirt_positive_d', 8.0, 1.0, -1, 49, 0, false, false, false) end local function healOxy() if healing then return end healing = true local count = 9 while count > 0 do Wait(1000) count -= 1 SetEntityHealth(PlayerPedId(), GetEntityHealth(PlayerPedId()) + 6) end healing = false end local function trevorEffect() StartScreenEffect('DrugsTrevorClownsFightIn', 3.0, 0) Wait(3000) StartScreenEffect('DrugsTrevorClownsFight', 3.0, 0) Wait(3000) StartScreenEffect('DrugsTrevorClownsFightOut', 3.0, 0) StopScreenEffect('DrugsTrevorClownsFight') StopScreenEffect('DrugsTrevorClownsFightIn') StopScreenEffect('DrugsTrevorClownsFightOut') end local function methBagEffect() local startStamina = 8 trevorEffect() SetRunSprintMultiplierForPlayer(PlayerId(), 1.49) while startStamina > 0 do Wait(1000) if math.random(5, 100) < 10 then RestorePlayerStamina(PlayerId(), 1.0) end startStamina = startStamina - 1 if math.random(5, 100) < 51 then trevorEffect() end end SetRunSprintMultiplierForPlayer(PlayerId(), 1.0) end local function ecstasyEffect() local startStamina = 30 SetFlash(0, 0, 500, 7000, 500) while startStamina > 0 do Wait(1000) startStamina -= 1 RestorePlayerStamina(PlayerId(), 1.0) if math.random(1, 100) < 51 then SetFlash(0, 0, 500, 7000, 500) ShakeGameplayCam('SMALL_EXPLOSION_SHAKE', 0.08) end end if IsPedRunning(PlayerPedId()) then SetPedToRagdoll(PlayerPedId(), math.random(1000, 3000), math.random(1000, 3000), 3, false, false, false) end end local function alienEffect() StartScreenEffect('DrugsMichaelAliensFightIn', 3.0, 0) Wait(math.random(5000, 8000)) StartScreenEffect('DrugsMichaelAliensFight', 3.0, 0) Wait(math.random(5000, 8000)) StartScreenEffect('DrugsMichaelAliensFightOut', 3.0, 0) StopScreenEffect('DrugsMichaelAliensFightIn') StopScreenEffect('DrugsMichaelAliensFight') StopScreenEffect('DrugsMichaelAliensFightOut') end local function crackBaggyEffect() local startStamina = 8 local ped = PlayerPedId() alienEffect() SetRunSprintMultiplierForPlayer(PlayerId(), 1.3) while startStamina > 0 do Wait(1000) if math.random(1, 100) < 10 then RestorePlayerStamina(PlayerId(), 1.0) end startStamina -= 1 if math.random(1, 100) < 60 and IsPedRunning(ped) then SetPedToRagdoll(ped, math.random(1000, 2000), math.random(1000, 2000), 3, false, false, false) end if math.random(1, 100) < 51 then alienEffect() end end if IsPedRunning(ped) then SetPedToRagdoll(ped, math.random(1000, 3000), math.random(1000, 3000), 3, false, false, false) end SetRunSprintMultiplierForPlayer(PlayerId(), 1.0) end local function cokeBaggyEffect() local startStamina = 20 local ped = PlayerPedId() alienEffect() SetRunSprintMultiplierForPlayer(PlayerId(), 1.1) while startStamina > 0 do Wait(1000) if math.random(1, 100) < 20 then RestorePlayerStamina(PlayerId(), 1.0) end startStamina -= 1 if math.random(1, 100) < 10 and IsPedRunning(ped) then SetPedToRagdoll(ped, math.random(1000, 3000), math.random(1000, 3000), 3, false, false, false) end if math.random(1, 300) < 10 then alienEffect() Wait(math.random(3000, 6000)) end end if IsPedRunning(ped) then SetPedToRagdoll(ped, math.random(1000, 3000), math.random(1000, 3000), 3, false, false, false) end SetRunSprintMultiplierForPlayer(PlayerId(), 1.0) end -- Events RegisterNetEvent('consumables:client:Eat', function(itemName) QBCore.Functions.Progressbar('eat_something', Lang:t('consumables.eat_progress'), 5000, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true }, { animDict = 'mp_player_inteat@burger', anim = 'mp_player_int_eat_burger', flags = 49 }, { model = 'prop_cs_burger_01', bone = 60309, coords = vec3(0.0, 0.0, -0.02), rotation = vec3(30, 0.0, 0.0), }, {}, function() -- Done TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items[itemName], 'remove') TriggerServerEvent('consumables:server:addHunger', QBCore.Functions.GetPlayerData().metadata.hunger + Config.Consumables.eat[itemName]) TriggerServerEvent('hud:server:RelieveStress', math.random(2, 4)) end) end) RegisterNetEvent('consumables:client:Drink', function(itemName) QBCore.Functions.Progressbar('drink_something', Lang:t('consumables.drink_progress'), 5000, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true }, { animDict = 'mp_player_intdrink', anim = 'loop_bottle', flags = 49 }, { model = 'vw_prop_casino_water_bottle_01a', bone = 60309, coords = vec3(0.0, 0.0, -0.05), rotation = vec3(0.0, 0.0, -40), }, {}, function() -- Done TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items[itemName], 'remove') TriggerServerEvent('consumables:server:addThirst', QBCore.Functions.GetPlayerData().metadata.thirst + Config.Consumables.drink[itemName]) end) end) RegisterNetEvent('consumables:client:DrinkAlcohol', function(itemName) QBCore.Functions.Progressbar('drink_alcohol', Lang:t('consumables.liqour_progress'), math.random(3000, 6000), false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true }, { animDict = 'mp_player_intdrink', anim = 'loop_bottle', flags = 49 }, { model = 'prop_cs_beer_bot_40oz', bone = 60309, coords = vec3(0.0, 0.0, -0.05), rotation = vec3(0.0, 0.0, -40), }, {}, function() -- Done TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items[itemName], 'remove') TriggerServerEvent('consumables:server:drinkAlcohol', itemName) TriggerServerEvent('consumables:server:addThirst', QBCore.Functions.GetPlayerData().metadata.thirst + Config.Consumables.alcohol[itemName]) TriggerServerEvent('hud:server:RelieveStress', math.random(2, 4)) alcoholCount += 1 AlcoholLoop() if alcoholCount > 1 and alcoholCount < 4 then TriggerEvent('evidence:client:SetStatus', 'alcohol', 200) elseif alcoholCount >= 4 then TriggerEvent('evidence:client:SetStatus', 'heavyalcohol', 200) end end, function() -- Cancel QBCore.Functions.Notify(Lang:t('consumables.canceled'), 'error') end) end) RegisterNetEvent('consumables:client:Custom', function(itemName) QBCore.Functions.TriggerCallback('consumables:itemdata', function(data) QBCore.Functions.Progressbar('custom_consumable', data.progress.label, data.progress.time, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true }, { animDict = data.animation.animDict, anim = data.animation.anim, flags = data.animation.flags }, { model = data.prop.model, bone = data.prop.bone, coords = data.prop.coords, rotation = data.prop.rotation }, {}, function() -- Done ClearPedTasks(PlayerPedId()) TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items[itemName], 'remove') if data.replenish.type then TriggerServerEvent('consumables:server:add' .. data.replenish.type, QBCore.Functions.GetPlayerData().metadata[string.lower(data.replenish.type)] + data.replenish.replenish) end if data.replenish.isAlcohol then alcoholCount += 1 AlcoholLoop() if alcoholCount > 1 and alcoholCount < 4 then TriggerEvent('evidence:client:SetStatus', 'alcohol', 200) elseif alcoholCount >= 4 then TriggerEvent('evidence:client:SetStatus', 'heavyalcohol', 200) end end if data.replenish.event then TriggerEvent(data.replenish.event) end end) end, itemName) end) RegisterNetEvent('consumables:client:Cokebaggy', function() local ped = PlayerPedId() QBCore.Functions.Progressbar('snort_coke', Lang:t('consumables.coke_progress'), math.random(5000, 8000), false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, { animDict = 'switch@trevor@trev_smoking_meth', anim = 'trev_smoking_meth_loop', flags = 49, }, {}, {}, function() -- Done StopAnimTask(ped, 'switch@trevor@trev_smoking_meth', 'trev_smoking_meth_loop', 1.0) TriggerServerEvent('consumables:server:useCokeBaggy') TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items['cokebaggy'], 'remove') TriggerEvent('evidence:client:SetStatus', 'widepupils', 200) cokeBaggyEffect() end, function() -- Cancel StopAnimTask(ped, 'switch@trevor@trev_smoking_meth', 'trev_smoking_meth_loop', 1.0) QBCore.Functions.Notify(Lang:t('consumables.canceled'), 'error') end) end) RegisterNetEvent('consumables:client:Crackbaggy', function() local ped = PlayerPedId() QBCore.Functions.Progressbar('snort_coke', Lang:t('consumables.crack_progress'), math.random(7000, 10000), false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, { animDict = 'switch@trevor@trev_smoking_meth', anim = 'trev_smoking_meth_loop', flags = 49, }, {}, {}, function() -- Done StopAnimTask(ped, 'switch@trevor@trev_smoking_meth', 'trev_smoking_meth_loop', 1.0) TriggerServerEvent('consumables:server:useCrackBaggy') TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items['crack_baggy'], 'remove') TriggerEvent('evidence:client:SetStatus', 'widepupils', 300) crackBaggyEffect() end, function() -- Cancel StopAnimTask(ped, 'switch@trevor@trev_smoking_meth', 'trev_smoking_meth_loop', 1.0) QBCore.Functions.Notify(Lang:t('consumables.canceled'), 'error') end) end) RegisterNetEvent('consumables:client:EcstasyBaggy', function() QBCore.Functions.Progressbar('use_ecstasy', Lang:t('consumables.ecstasy_progress'), 3000, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, { animDict = 'mp_suicide', anim = 'pill', flags = 49, }, {}, {}, function() -- Done StopAnimTask(PlayerPedId(), 'mp_suicide', 'pill', 1.0) TriggerServerEvent('consumables:server:useXTCBaggy') TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items['xtcbaggy'], 'remove') ecstasyEffect() end, function() -- Cancel StopAnimTask(PlayerPedId(), 'mp_suicide', 'pill', 1.0) QBCore.Functions.Notify(Lang:t('consumables.canceled'), 'error') end) end) RegisterNetEvent('consumables:client:oxy', function() QBCore.Functions.Progressbar('use_oxy', Lang:t('consumables.healing_progress'), 2000, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, { animDict = 'mp_suicide', anim = 'pill', flags = 49, }, {}, {}, function() -- Done StopAnimTask(PlayerPedId(), 'mp_suicide', 'pill', 1.0) TriggerServerEvent('consumables:server:useOxy') TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items['oxy'], 'remove') ClearPedBloodDamage(PlayerPedId()) healOxy() end, function() -- Cancel StopAnimTask(PlayerPedId(), 'mp_suicide', 'pill', 1.0) QBCore.Functions.Notify(Lang:t('consumables.canceled'), 'error') end) end) RegisterNetEvent('consumables:client:meth', function() QBCore.Functions.Progressbar('snort_meth', Lang:t('consumables.meth_progress'), 1500, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, { animDict = 'switch@trevor@trev_smoking_meth', anim = 'trev_smoking_meth_loop', flags = 49, }, {}, {}, function() -- Done StopAnimTask(PlayerPedId(), 'switch@trevor@trev_smoking_meth', 'trev_smoking_meth_loop', 1.0) TriggerServerEvent('consumables:server:useMeth') TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items['meth'], 'remove') TriggerEvent('evidence:client:SetStatus', 'widepupils', 300) TriggerEvent('evidence:client:SetStatus', 'agitated', 300) methBagEffect() end, function() -- Cancel StopAnimTask(PlayerPedId(), 'switch@trevor@trev_smoking_meth', 'trev_smoking_meth_loop', 1.0) QBCore.Functions.Notify(Lang:t('consumables.canceled'), 'error') end) end) RegisterNetEvent('consumables:client:UseJoint', function() QBCore.Functions.Progressbar('smoke_joint', Lang:t('consumables.joint_progress'), 1500, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, {}, {}, {}, function() -- Done TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items['joint'], 'remove') if IsPedInAnyVehicle(PlayerPedId(), false) then QBCore.Functions.PlayAnim('timetable@gardener@smoking_joint', 'smoke_idle', false) else QBCore.Functions.PlayAnim('timetable@gardener@smoking_joint', 'smoke_idle', false) end TriggerEvent('evidence:client:SetStatus', 'weedsmell', 300) TriggerServerEvent('hud:server:RelieveStress', Config.RelieveWeedStress) end) end) RegisterNetEvent('consumables:client:UseParachute', function() equipParachuteAnim() QBCore.Functions.Progressbar('use_parachute', Lang:t('consumables.use_parachute_progress'), 5000, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, {}, {}, {}, function() -- Done local ped = PlayerPedId() TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items['parachute'], 'remove') GiveWeaponToPed(ped, `GADGET_PARACHUTE`, 1, false, false) local parachuteData = { outfitData = { ['bag'] = { item = 7, texture = 0 } } -- Adding Parachute Clothing } TriggerEvent('qb-clothing:client:loadOutfit', parachuteData) parachuteEquipped = true TaskPlayAnim(ped, 'clothingshirt', 'exit', 8.0, 1.0, -1, 49, 0, false, false, false) end) end) RegisterNetEvent('consumables:client:ResetParachute', function() if parachuteEquipped then equipParachuteAnim() QBCore.Functions.Progressbar('reset_parachute', Lang:t('consumables.pack_parachute_progress'), 40000, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, {}, {}, {}, function() -- Done local ped = PlayerPedId() TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items['parachute'], 'add') local parachuteResetData = { outfitData = { ['bag'] = { item = 0, texture = 0 } } -- Removing Parachute Clothing } TriggerEvent('qb-clothing:client:loadOutfit', parachuteResetData) TaskPlayAnim(ped, 'clothingshirt', 'exit', 8.0, 1.0, -1, 49, 0, false, false, false) TriggerServerEvent('consumables:server:AddParachute') parachuteEquipped = false end) else QBCore.Functions.Notify(Lang:t('consumables.no_parachute'), 'error') end end) RegisterNetEvent('consumables:client:UseArmor', function() if GetPedArmour(PlayerPedId()) >= 75 then QBCore.Functions.Notify(Lang:t('consumables.armor_full'), 'error') return end QBCore.Functions.Progressbar('use_armor', Lang:t('consumables.armor_progress'), 5000, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, {}, {}, {}, function() -- Done TriggerServerEvent('consumables:server:useArmor') end) end) RegisterNetEvent('consumables:client:UseHeavyArmor', function() if GetPedArmour(PlayerPedId()) == 100 then QBCore.Functions.Notify(Lang:t('consumables.armor_full'), 'error') return end local ped = PlayerPedId() local PlayerData = QBCore.Functions.GetPlayerData() QBCore.Functions.Progressbar('use_heavyarmor', Lang:t('consumables.heavy_armor_progress'), 5000, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, {}, {}, {}, function() -- Done if not Config.Disable.vestDrawable then if PlayerData.charinfo.gender == 0 then currVest = GetPedDrawableVariation(ped, 9) currVestTexture = GetPedTextureVariation(ped, 9) if GetPedDrawableVariation(ped, 9) == 7 then SetPedComponentVariation(ped, 9, 19, GetPedTextureVariation(ped, 9), 2) else SetPedComponentVariation(ped, 9, 5, 2, 2) end else currVest = GetPedDrawableVariation(ped, 30) currVestTexture = GetPedTextureVariation(ped, 30) SetPedComponentVariation(ped, 9, 30, 0, 2) end end TriggerServerEvent('consumables:server:useHeavyArmor') end) end) RegisterNetEvent('consumables:client:ResetArmor', function() local ped = PlayerPedId() if currVest ~= nil and currVestTexture ~= nil then QBCore.Functions.Progressbar('remove_armor', Lang:t('consumables.remove_armor_progress'), 2500, false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, {}, {}, {}, function() -- Done SetPedComponentVariation(ped, 9, currVest, currVestTexture, 2) SetPedArmour(ped, 0) TriggerEvent('qb-inventory:client:ItemBox', QBCore.Shared.Items['heavyarmor'], 'add') TriggerServerEvent('consumables:server:resetArmor') end) else QBCore.Functions.Notify(Lang:t('consumables.armor_empty'), 'error') end end) -- RegisterNetEvent('consumables:client:UseRedSmoke', function() -- if parachuteEquipped then -- local ped = PlayerPedId() -- SetPlayerParachuteSmokeTrailColor(ped, 255, 0, 0) -- SetPlayerCanLeaveParachuteSmokeTrail(ped, true) -- TriggerEvent("qb-inventory:client:ItemBox", QBCore.Shared.Items["smoketrailred"], "remove") -- else -- QBCore.Functions.Notify("You need to have a paracute to activate smoke!", "error") -- end -- end) --Threads local looped = false function AlcoholLoop() if not looped then looped = true CreateThread(function() while true do Wait(10) if alcoholCount > 0 then Wait(1000 * 60 * 15) alcoholCount -= 1 else looped = false break end end end) end end