2026-04-14 17:41:39 +02:00

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)