115 lines
3.7 KiB
Lua
115 lines
3.7 KiB
Lua
local IsDead = false
|
|
local IsAnimated = false
|
|
|
|
local function setPlayerNeeds(hunger, thirst)
|
|
TriggerEvent('esx_status:set', 'hunger', hunger)
|
|
TriggerEvent('esx_status:set', 'thirst', thirst)
|
|
end
|
|
|
|
AddEventHandler('esx_basicneeds:resetStatus', function()
|
|
setPlayerNeeds(500000, 500000)
|
|
end)
|
|
|
|
RegisterNetEvent('esx_basicneeds:healPlayer')
|
|
AddEventHandler('esx_basicneeds:healPlayer', function()
|
|
setPlayerNeeds(1000000, 1000000)
|
|
|
|
local playerPed = PlayerPedId()
|
|
SetEntityHealth(playerPed, GetEntityMaxHealth(playerPed))
|
|
end)
|
|
|
|
AddEventHandler('esx:onPlayerDeath', function()
|
|
IsDead = true
|
|
end)
|
|
|
|
AddEventHandler('esx:onPlayerSpawn', function()
|
|
if IsDead then
|
|
setPlayerNeeds(500000, 500000)
|
|
end
|
|
IsDead = false
|
|
end)
|
|
|
|
AddEventHandler('esx_status:loaded', function()
|
|
local function registerStatus(name, color, removalRate)
|
|
TriggerEvent('esx_status:registerStatus', name, 1000000, color,
|
|
function() return Config.Visible end,
|
|
function(status) status.remove(removalRate) end
|
|
)
|
|
end
|
|
|
|
registerStatus('hunger', '#CFAD0F', 100)
|
|
registerStatus('thirst', '#0C98F1', 75)
|
|
end)
|
|
|
|
-- Status Tick & HUD Update
|
|
AddEventHandler('esx_status:onTick', function(statuses)
|
|
local playerPed = PlayerPedId()
|
|
local prevHealth = GetEntityHealth(playerPed)
|
|
local newHealth = prevHealth
|
|
|
|
for _, status in pairs(statuses) do
|
|
if status.percent == 0 then
|
|
-- Verursacht Schaden, wenn Hunger oder Durst auf 0 sind
|
|
local damage = (prevHealth <= 150) and 5 or 1
|
|
if status.name == 'hunger' or status.name == 'thirst' then
|
|
newHealth = newHealth - damage
|
|
end
|
|
end
|
|
end
|
|
|
|
if newHealth ~= prevHealth then
|
|
SetEntityHealth(playerPed, newHealth)
|
|
end
|
|
end)
|
|
|
|
AddEventHandler('esx_basicneeds:isEating', function(callback)
|
|
callback(IsAnimated)
|
|
end)
|
|
|
|
local function handleAnimation(itemType, propName, anim, pos, rot)
|
|
if IsAnimated then return end
|
|
|
|
IsAnimated = true
|
|
local playerPed = PlayerPedId()
|
|
local x, y, z = table.unpack(GetEntityCoords(playerPed))
|
|
local prop = CreateObject(joaat(propName), x, y, z + 0.2, true, true, true)
|
|
local boneIndex = GetPedBoneIndex(playerPed, 18905)
|
|
|
|
pos = pos or vector3(0.12, 0.028, 0.001)
|
|
rot = rot or vector3(10.0, 175.0, 0.0)
|
|
|
|
AttachEntityToEntity(prop, playerPed, boneIndex, pos.x, pos.y, pos.z, rot.x, rot.y, rot.z, true, true, false, true, 1, true)
|
|
|
|
CreateThread(function()
|
|
ESX.Streaming.RequestAnimDict(anim.dict, function()
|
|
TaskPlayAnim(playerPed, anim.dict, anim.name, table.unpack(anim.settings))
|
|
RemoveAnimDict(anim.dict)
|
|
|
|
Wait(3000)
|
|
IsAnimated = false
|
|
ClearPedSecondaryTask(playerPed)
|
|
DeleteObject(prop)
|
|
end)
|
|
end)
|
|
end
|
|
|
|
RegisterNetEvent('esx_basicneeds:onUse', function(itemType, propName, anim, pos, rot)
|
|
propName = propName or (itemType == 'food' and 'prop_cs_burger_01' or 'prop_ld_flow_bottle')
|
|
handleAnimation(itemType, propName, anim, pos, rot)
|
|
end)
|
|
|
|
-- Deprecated Events (Veraltete Events für Abwärtskompatibilität)
|
|
local function warnDeprecated(eventName, itemType, propName)
|
|
local invokingResource = GetInvokingResource()
|
|
print(('[^3WARNING^7] ^5%s^7 used ^5%s^7, which is deprecated. Refer to ESX documentation for updates.'):format(invokingResource, eventName))
|
|
TriggerEvent('esx_basicneeds:onUse', itemType, propName)
|
|
end
|
|
|
|
RegisterNetEvent('esx_basicneeds:onEat', function(propName)
|
|
warnDeprecated('esx_basicneeds:onEat', 'food', propName or 'prop_cs_burger_01')
|
|
end)
|
|
|
|
AddEventHandler('esx_basicneeds:onDrink', function(propName)
|
|
warnDeprecated('esx_basicneeds:onDrink', 'drink', propName or 'prop_ld_flow_bottle')
|
|
end)
|