1
0
Fork 0
forked from Simnation/Main
Main/resources/[qb]/qb-smallresources/client/consumables.lua
2025-06-07 08:51:21 +02:00

529 lines
20 KiB
Lua

-- 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