forked from Simnation/Main
92 lines
2.9 KiB
Lua
92 lines
2.9 KiB
Lua
![]() |
local Config = {
|
||
|
HookahProp = 'prop_bong_01', -- Eigenes Prop (ohne .ydr/.ytd)
|
||
|
TobaccoItem = 'shisha_tobacco',
|
||
|
Keybind = 'E',
|
||
|
Animation = {
|
||
|
dict = 'anim@amb@clubhouse@table@male@smoking@base',
|
||
|
anim = 'base',
|
||
|
prop = 'v_corp_lngestoolfd',
|
||
|
flag = 49,
|
||
|
bone = 57005
|
||
|
},
|
||
|
SmokeEffect = {
|
||
|
name = 'ent_anim_cig_exhale_mth',
|
||
|
scale = 0.2
|
||
|
},
|
||
|
UseDuration = 30 -- Sekunden
|
||
|
}
|
||
|
|
||
|
local isSmoking = false
|
||
|
local smokeEffect = nil
|
||
|
|
||
|
-- Preload Assets
|
||
|
CreateThread(function()
|
||
|
RequestModel(Config.HookahProp)
|
||
|
RequestAnimDict(Config.Animation.dict)
|
||
|
while not HasModelLoaded(Config.HookahProp) or not HasAnimDictLoaded(Config.Animation.dict) do
|
||
|
Wait(0)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
-- Hookah Placement Logic
|
||
|
RegisterCommand('placehookah', function()
|
||
|
if isSmoking then return end
|
||
|
|
||
|
local playerPed = PlayerPedId()
|
||
|
local coords = GetOffsetFromEntityInWorldCoords(playerPed, 0.0, 0.8, -0.4)
|
||
|
local heading = GetEntityHeading(playerPed)
|
||
|
|
||
|
local hookah = CreateObject(Config.HookahProp, coords.x, coords.y, coords.z, true, true, true)
|
||
|
PlaceObjectOnGroundProperly(hookah)
|
||
|
SetEntityHeading(hookah, heading)
|
||
|
FreezeEntityPosition(hookah, true)
|
||
|
|
||
|
exports['qb-target']:AddTargetEntity(hookah, {
|
||
|
options = {
|
||
|
{
|
||
|
type = 'client',
|
||
|
event = 'qb-hookah:startSmoking',
|
||
|
icon = 'fas fa-smoking',
|
||
|
label = 'Smoke Hookah',
|
||
|
targeticon = 'fas fa-eye',
|
||
|
item = Config.TobaccoItem
|
||
|
}
|
||
|
},
|
||
|
distance = 2.5
|
||
|
})
|
||
|
end, false)
|
||
|
|
||
|
-- Smoking Logic
|
||
|
RegisterNetEvent('qb-hookah:startSmoking', function(entity)
|
||
|
if isSmoking then return end
|
||
|
|
||
|
QBCore.Functions.TriggerCallback('qb-hookah:removeTobacco', function(success)
|
||
|
if not success then
|
||
|
QBCore.Functions.Notify('You need hookah tobacco!', 'error')
|
||
|
return
|
||
|
end
|
||
|
|
||
|
isSmoking = true
|
||
|
local playerPed = PlayerPedId()
|
||
|
local animDict = Config.Animation.dict
|
||
|
|
||
|
-- Attach bong prop
|
||
|
local bong = CreateObject(Config.Animation.prop, GetEntityCoords(playerPed), true, true, true)
|
||
|
AttachEntityToEntity(bong, playerPed, Config.Animation.bone, 0.12, 0.018, -0.01, -80.0, -20.0, 180.0, true, true, false, true, 1, true)
|
||
|
|
||
|
-- Play animation
|
||
|
TaskPlayAnim(playerPed, animDict, Config.Animation.anim, 8.0, -8.0, Config.UseDuration * 1000, Config.Animation.flag, 0, false, false, false)
|
||
|
|
||
|
-- Smoke effect
|
||
|
UseParticleFxAssetNextCall('core')
|
||
|
smokeEffect = StartParticleFxLoopedOnEntityBone(Config.SmokeEffect.name, playerPed, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, GetPedBoneIndex(playerPed, 47419), Config.SmokeEffect.scale, 0.0, 0.0, 0.0)
|
||
|
|
||
|
-- Auto stop
|
||
|
Wait(Config.UseDuration * 1000)
|
||
|
DeleteObject(bong)
|
||
|
StopParticleFxLooped(smokeEffect, 0)
|
||
|
ClearPedTasks(playerPed)
|
||
|
isSmoking = false
|
||
|
end)
|
||
|
end)
|