I recently installed optionalneeds and my hunger status meter doesn’t work anymore. It works again when I disable optionalneeds. anyone know what the issue is
basicneeds client main.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('playerSpawned', 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, '#FFFF00',
function(status)
return false
end, function(status)
status.remove(75)
end)
TriggerEvent('esx_status:registerStatus', 'thirst', 1000000, '#0099FF',
function(status)
return false
end, function(status)
status.remove(100)
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(6500)
IsAnimated = false
ClearPedSecondaryTask(playerPed)
DeleteObject(prop)
end)
end)
end
end)
RegisterNetEvent('esx_basicneeds:chips')
AddEventHandler('esx_basicneeds:chips', function(prop_name)
if not IsAnimated then
prop_name = prop_name or 'prop_cs_crisps_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(6500)
IsAnimated = false
ClearPedSecondaryTask(playerPed)
DeleteObject(prop)
end)
end)
end
end)
RegisterNetEvent('esx_basicneeds:onEat2')
AddEventHandler('esx_basicneeds:onEat2', function(prop_name)
if not IsAnimated then
prop_name = prop_name or 'prop_cs_hotdog_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(6500)
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.13, 0.012, 0.012, 280.00, 170.0, 18.0, true, true, false, true, 1, true)
ESX.Streaming.RequestAnimDict('mp_player_intdrink', function()
TaskPlayAnim(playerPed, 'mp_player_intdrink', 'loop_bottle', 8.0, -8, -1, 49, 0, 0, 0, 0)
Citizen.Wait(6500)
IsAnimated = false
ClearPedSecondaryTask(playerPed)
DeleteObject(prop)
end)
end)
end
end)
basicneeds server main.lua
ESX = nil
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
ESX.RegisterUsableItem('bread', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('bread', 1)
TriggerClientEvent('esx_status:add', source, 'hunger', 200000)
TriggerClientEvent('esx_basicneeds:onEat', source)
TriggerClientEvent('esx:showNotification', source, ('Du åt 1x smörgås'))
end)
ESX.RegisterUsableItem('chocolate', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('chocolate', 1)
TriggerClientEvent('esx_status:add', source, 'hunger', 100000)
TriggerClientEvent('esx_basicneeds:onEat', source)
TriggerClientEvent('esx:showNotification', source, _U('used_chocolate'))
end)
ESX.RegisterUsableItem('beef', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('beef', 1)
TriggerClientEvent('esx_status:add', source, 'hunger', 600000)
TriggerClientEvent('esx_basicneeds:onEat', source)
TriggerClientEvent('esx:showNotification', source, _U('used_sandwich'))
end)
ESX.RegisterUsableItem('hamburger', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('hamburger', 1)
TriggerClientEvent('esx_status:add', source, 'hunger', 600000)
TriggerClientEvent('esx_basicneeds:onEat', source)
TriggerClientEvent('esx:showNotification', source, _U('used_hamburger'))
end)
ESX.RegisterUsableItem('cupcake', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('cupcake', 1)
TriggerClientEvent('esx_status:add', source, 'hunger', 200000)
TriggerClientEvent('esx_basicneeds:onEat', source)
TriggerClientEvent('esx:showNotification', source, _U('used_cupcake'))
end)
ESX.RegisterUsableItem('water', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('water', 1)
TriggerClientEvent('esx_status:add', source, 'thirst', 200000)
TriggerClientEvent('esx_basicneeds:onDrink', source)
TriggerClientEvent('esx:showNotification', source, ('Du drack en Loka lemon 50cl'))
end)
ESX.RegisterUsableItem('cola', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('cola', 1)
TriggerClientEvent('esx_status:add', source, 'thirst', 0)
TriggerClientEvent('esx_basicneeds:onDrink', source)
TriggerClientEvent('esx:showNotification', source, _U('used_cola'))
end)
ESX.RegisterUsableItem('icetea', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('icetea', 1)
TriggerClientEvent('esx_status:add', source, 'thirst', 200000)
TriggerClientEvent('esx_basicneeds:onDrink', source)
TriggerClientEvent('esx:showNotification', source, _U('used_icetea'))
end)
ESX.RegisterUsableItem('energy', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('energy', 1)
TriggerClientEvent('esx_status:add', source, 'thirst', 80000)
TriggerClientEvent('esx_basicneeds:onDrink', source)
TriggerClientEvent('esx:showNotification', source, _U('used_energy'))
end)
ESX.RegisterUsableItem('drpepper', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('drpepper', 1)
TriggerClientEvent('esx_status:add', source, 'thirst', 600000)
TriggerClientEvent('esx_basicneeds:onDrink', source)
TriggerClientEvent('esx:showNotification', source, _U('used_drpepper'))
end)
ESX.RegisterUsableItem('saucisson', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('saucisson', 1)
TriggerClientEvent('esx_status:add', source, 'hunger', 600000)
TriggerClientEvent('esx_basicneeds:onEat', source)
TriggerClientEvent('esx:showNotification', source, _U('used_saucisson'))
end)
ESX.RegisterUsableItem('grapperaisin', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('grapperaisin', 1)
TriggerClientEvent('esx_status:add', source, 'hunger', 1000)
TriggerClientEvent('esx_basicneeds:onEat', source)
TriggerClientEvent('esx:showNotification', source, _U('used_grapperaisin'))
end)
ESX.RegisterUsableItem('breadsaucisson', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('breadsaucisson', 1)
TriggerClientEvent('esx_status:add', source, 'hunger', 300000)
TriggerClientEvent('esx_basicneeds:onEat', source)
TriggerClientEvent('esx:showNotification', source, _U('used_breadsaucisson'))
end)
ESX.RegisterUsableItem('hamburgerplate', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('hamburgerplate', 1)
TriggerClientEvent('esx_status:add', source, 'hunger', 50000)
TriggerClientEvent('esx_basicneeds:onEat', source)
TriggerClientEvent('esx:showNotification', source, _U('used_hamburgerplate'))
end)
TriggerEvent('es:addGroupCommand', 'heal', 'admin', function(source, args, user)
-- heal another player - don't heal source
if args[1] then
local target = tonumber(args[1])
-- is the argument a number?
if target ~= nil then
-- is the number a valid player?
if GetPlayerName(target) then
print('esx_basicneeds: ' .. GetPlayerName(source) .. ' is healing a player!')
TriggerClientEvent('esx_basicneeds:healPlayer', target)
TriggerClientEvent('chatMessage', target, "HEAL", {223, 66, 244}, "You have been healed!")
else
TriggerClientEvent('chatMessage', source, "HEAL", {255, 0, 0}, "Player not found!")
end
else
TriggerClientEvent('chatMessage', source, "HEAL", {255, 0, 0}, "Incorrect syntax! You must provide a valid player ID")
end
else
-- heal source
print('esx_basicneeds: ' .. GetPlayerName(source) .. ' is healing!')
TriggerClientEvent('esx_basicneeds:healPlayer', source)
end
end, function(source, args, user)
TriggerClientEvent('chatMessage', source, "HEAL", {255, 0, 0}, "Insufficient Permissions.")
end, {help = "Heal a player, or yourself - restores thirst, hunger and health."})
optionalneeds client main.lua
ESX = nil
local IsAlreadyDrunk = false
local DrunkLevel = -1
Citizen.CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Citizen.Wait(0)
end
end)
function Drunk(level, start)
Citizen.CreateThread(function()
local playerPed = GetPlayerPed(-1)
if start then
DoScreenFadeOut(800)
Wait(1000)
end
if level == 0 then
RequestAnimSet("move_m@drunk@slightlydrunk")
while not HasAnimSetLoaded("move_m@drunk@slightlydrunk") do
Citizen.Wait(0)
end
SetPedMovementClipset(playerPed, "move_m@drunk@slightlydrunk", true)
elseif level == 1 then
RequestAnimSet("move_m@drunk@moderatedrunk")
while not HasAnimSetLoaded("move_m@drunk@moderatedrunk") do
Citizen.Wait(0)
end
SetPedMovementClipset(playerPed, "move_m@drunk@moderatedrunk", true)
elseif level == 2 then
RequestAnimSet("move_m@drunk@verydrunk")
while not HasAnimSetLoaded("move_m@drunk@verydrunk") do
Citizen.Wait(0)
end
SetPedMovementClipset(playerPed, "move_m@drunk@verydrunk", true)
end
SetTimecycleModifier("spectator5")
SetPedMotionBlur(playerPed, true)
SetPedIsDrunk(playerPed, true)
if start then
DoScreenFadeIn(800)
end
end)
end
function Reality()
Citizen.CreateThread(function()
local playerPed = GetPlayerPed(-1)
DoScreenFadeOut(800)
Wait(1000)
ClearTimecycleModifier()
ResetScenarioTypesEnabled()
ResetPedMovementClipset(playerPed, 0)
SetPedIsDrunk(playerPed, false)
SetPedMotionBlur(playerPed, false)
DoScreenFadeIn(800)
end)
end
AddEventHandler('esx_status:loaded', function(status)
TriggerEvent('esx_status:registerStatus', 'drunk', 0, '#8F15A5',
function(status)
if status.val > 0 then
return true
else
return false
end
end,
function(status)
status.remove(1500)
end
)
Citizen.CreateThread(function()
while true do
Wait(1000)
TriggerEvent('esx_status:getStatus', 'drunk', function(status)
if status.val > 0 then
local start = true
if IsAlreadyDrunk then
start = false
end
local level = 0
if status.val <= 250000 then
level = 0
elseif status.val <= 500000 then
level = 1
else
level = 2
end
if level ~= DrunkLevel then
Drunk(level, start)
end
IsAlreadyDrunk = true
DrunkLevel = level
end
if status.val == 0 then
if IsAlreadyDrunk then
Reality()
end
IsAlreadyDrunk = false
DrunkLevel = -1
end
end)
end
end)
end)
RegisterNetEvent('esx_optionalneeds:onDrink')
AddEventHandler('esx_optionalneeds:onDrink', function()
local playerPed = GetPlayerPed(-1)
TaskStartScenarioInPlace(playerPed, "WORLD_HUMAN_DRINKING", 0, 1)
Citizen.Wait(1000)
ClearPedTasksImmediately(playerPed)
end)
optionalneeds server main.lua
ESX = nil
TriggerEvent('esx:getSharedObject', function(obj)
ESX = obj
end)
ESX.RegisterUsableItem('beer', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeInventoryItem('beer', 1)
TriggerClientEvent('esx_status:add', source, 'drunk', 250000)
TriggerClientEvent('esx_optionalneeds:onDrink', source)
TriggerClientEvent('esx:showNotification', source, _U('used_beer'))
end)