143 lines
3.9 KiB
Lua
143 lines
3.9 KiB
Lua
|
ESX = nil
|
||
|
local IsDead = false
|
||
|
local IsAnimated = false
|
||
|
|
||
|
Citizen.CreateThread(function()
|
||
|
while ESX == nil do
|
||
|
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
|
||
|
Citizen.Wait(0)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('esx_basicneeds:resetStatus', function()
|
||
|
TriggerEvent('esx_status:set', 'hunger', 500000)
|
||
|
TriggerEvent('esx_status:set', 'thirst', 500000)
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('esx_basicneeds:healPlayer')
|
||
|
AddEventHandler('esx_basicneeds:healPlayer', function()
|
||
|
-- restore hunger & thirst
|
||
|
TriggerEvent('esx_status:set', 'hunger', 1000000)
|
||
|
TriggerEvent('esx_status:set', 'thirst', 1000000)
|
||
|
|
||
|
-- restore hp
|
||
|
local playerPed = PlayerPedId()
|
||
|
SetEntityHealth(playerPed, GetEntityMaxHealth(playerPed))
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('esx:onPlayerDeath', function()
|
||
|
IsDead = true
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('esx:onPlayerSpawn', function(spawn)
|
||
|
if IsDead then
|
||
|
TriggerEvent('esx_basicneeds:resetStatus')
|
||
|
end
|
||
|
|
||
|
IsDead = false
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('esx_status:loaded', function(status)
|
||
|
|
||
|
TriggerEvent('esx_status:registerStatus', 'hunger', 1000000, '#CFAD0F', function(status)
|
||
|
return false
|
||
|
end, function(status)
|
||
|
status.remove(100)
|
||
|
end)
|
||
|
|
||
|
TriggerEvent('esx_status:registerStatus', 'thirst', 1000000, '#0C98F1', function(status)
|
||
|
return false
|
||
|
end, function(status)
|
||
|
status.remove(75)
|
||
|
end)
|
||
|
|
||
|
Citizen.CreateThread(function()
|
||
|
while true do
|
||
|
Citizen.Wait(1000)
|
||
|
|
||
|
local playerPed = PlayerPedId()
|
||
|
local prevHealth = GetEntityHealth(playerPed)
|
||
|
local health = prevHealth
|
||
|
|
||
|
TriggerEvent('esx_status:getStatus', 'hunger', function(status)
|
||
|
if status.val == 0 then
|
||
|
if prevHealth <= 150 then
|
||
|
health = health - 5
|
||
|
else
|
||
|
health = health - 1
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
TriggerEvent('esx_status:getStatus', 'thirst', function(status)
|
||
|
if status.val == 0 then
|
||
|
if prevHealth <= 150 then
|
||
|
health = health - 5
|
||
|
else
|
||
|
health = health - 1
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
if health ~= prevHealth then
|
||
|
SetEntityHealth(playerPed, health)
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('esx_basicneeds:isEating', function(cb)
|
||
|
cb(IsAnimated)
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('esx_basicneeds:onEat')
|
||
|
AddEventHandler('esx_basicneeds:onEat', function(prop_name)
|
||
|
if not IsAnimated then
|
||
|
prop_name = prop_name or 'prop_cs_burger_01'
|
||
|
IsAnimated = true
|
||
|
|
||
|
Citizen.CreateThread(function()
|
||
|
local playerPed = PlayerPedId()
|
||
|
local x,y,z = table.unpack(GetEntityCoords(playerPed))
|
||
|
local prop = CreateObject(GetHashKey(prop_name), x, y, z + 0.2, true, true, true)
|
||
|
local boneIndex = GetPedBoneIndex(playerPed, 18905)
|
||
|
AttachEntityToEntity(prop, playerPed, boneIndex, 0.12, 0.028, 0.001, 10.0, 175.0, 0.0, true, true, false, true, 1, true)
|
||
|
|
||
|
ESX.Streaming.RequestAnimDict('mp_player_inteat@burger', function()
|
||
|
TaskPlayAnim(playerPed, 'mp_player_inteat@burger', 'mp_player_int_eat_burger_fp', 8.0, -8, -1, 49, 0, 0, 0, 0)
|
||
|
|
||
|
Citizen.Wait(3000)
|
||
|
IsAnimated = false
|
||
|
ClearPedSecondaryTask(playerPed)
|
||
|
DeleteObject(prop)
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('esx_basicneeds:onDrink')
|
||
|
AddEventHandler('esx_basicneeds:onDrink', function(prop_name)
|
||
|
if not IsAnimated then
|
||
|
prop_name = prop_name or 'prop_ld_flow_bottle'
|
||
|
IsAnimated = true
|
||
|
|
||
|
Citizen.CreateThread(function()
|
||
|
local playerPed = PlayerPedId()
|
||
|
local x,y,z = table.unpack(GetEntityCoords(playerPed))
|
||
|
local prop = CreateObject(GetHashKey(prop_name), x, y, z + 0.2, true, true, true)
|
||
|
local boneIndex = GetPedBoneIndex(playerPed, 18905)
|
||
|
AttachEntityToEntity(prop, playerPed, boneIndex, 0.12, 0.028, 0.001, 10.0, 175.0, 0.0, true, true, false, true, 1, true)
|
||
|
|
||
|
ESX.Streaming.RequestAnimDict('mp_player_intdrink', function()
|
||
|
TaskPlayAnim(playerPed, 'mp_player_intdrink', 'loop_bottle', 1.0, -1.0, 2000, 0, 1, true, true, true)
|
||
|
|
||
|
Citizen.Wait(3000)
|
||
|
IsAnimated = false
|
||
|
ClearPedSecondaryTask(playerPed)
|
||
|
DeleteObject(prop)
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
end
|
||
|
end)
|