[SOLVED] ServerCallback by esx

Hello guys,

i’m trying to do a simple check for given item quantity

Client.lua

ESX = nil

Citizen.CreateThread(function()
    while ESX == nil do
        TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
        Citizen.Wait(0)
    end

    while ESX.GetPlayerData().job == nil do Citizen.Wait(10) end
    PlayerData = ESX.GetPlayerData()
end)

Citizen.CreateThread(function()
	while true do
		Citizen.Wait(0)
		if IsControlJustReleased(0, 170) then
            ESX.TriggerServerCallback('fill_helper:getItemQty', function(count) 
                ESX.ShowNotification(count)
            end, "wood")
		end
	end
end)

Server.lua

ESX = nil

TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)

ESX.RegisterServerCallback('fill_helper:getItemQty', function(source, cb, item)
	local xPlayer = ESX.GetPlayerFromId(source)
	
	for key, value in ipairs(xPlayer.inventory) do
        if value.name == item then
            cb(value.count)
        end
    end
    cb(0)
end)

Everything works, but i’m getting an error: es_extended/client/functions.lua:1121 attempt to call nil value (field ‘?’)

Error is related to the function

RegisterNetEvent('esx:serverCallback')
AddEventHandler('esx:serverCallback', function(requestId, ...)
    ESX.ServerCallbacks[requestId](...)
    ESX.ServerCallbacks[requestId] = nil
end)

What am i doing wrong?

Solved by myself. I had to declare local variable and call the callback once

ESX = nil

TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)

ESX.RegisterServerCallback('fill_helper:getItemQty', function(source, cb, item)
	local xPlayer = ESX.GetPlayerFromId(source)
        local result = 0
	
	for key, value in ipairs(xPlayer.inventory) do
        if value.name == item then
            result = value.count
        end
    end
    cb(result)
end)

Lua is really weird script language o_0 I hope this will help somebody facing same weird behaviour.

5 Likes

So brother, I did not understand very well, I should replace

"RegisterNetEvent (‘esx: serverCallback’)
AddEventHandler (‘esx: serverCallback’, function (requestId, …)
ESX.ServerCallbacks [requestId] (…)
ESX.ServerCallbacks [requestId] = nil
end) "

For the latter command, what does it name?

2 Likes

Problem is calling cb() twice on ESX.RegisterServerCallback functions. Thanks @fellinirp

what file is it that i have to edit in es-extended

what file is it that i have to edit in es-extended?