Hello,
How can I create map blips that are only visible to players with a certain item in their inventory?
I tried this:
-------- CLIENT ----------
ESX = nil
Citizen.CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Citizen.Wait(0)
end
end)
-- Create blips
Citizen.CreateThread(function()
Citizen.Wait(Config.Relocate * 1000) -- (Default) change position each 20 minutes
local blip = nil
BlackMarketZone = math.random(1,2)
ESX.TriggerServerCallback('myscript:getItemAmount', function(qtty)
if qtty > 0 then
if BlackMarketZone == 1 then
blip = AddBlipForCoord(Config.Zones.Zone1.Blips.Pos.x, Config.Zones.Zone1.Blips.Pos.y, Config.Zones.Zone1.Blips.Pos.z)
elseif BlackMarketZone == 2 then
blip = AddBlipForCoord(Config.Zones.Zone2.Blips.Pos.x, Config.Zones.Zone2.Blips.Pos.y, Config.Zones.Zone2.Blips.Pos.z)
end
SetBlipSprite(blip, Config.BlipInfo.Sprite)
SetBlipDisplay(blip, Config.BlipInfo.Display)
SetBlipScale(blip, Config.BlipInfo.Scale)
SetBlipColour(blip, Config.BlipInfo.Colour)
SetBlipAsShortRange(blip, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(_U('blip_name'))
EndTextCommandSetBlipName(blip)
else
ESX.ShowNotification(_U('need_chip'))
end
end, 'phone')
end)
-------- SERVER ----------
ESX.RegisterServerCallback('myscript:getItemAmount', function(source, cb, item)
local _source = source
local xPlayer = ESX.GetPlayerFromId(_source)
local qtty = xPlayer.getInventoryItem(item).count
cb(qtty)
end)
But this does not work. It tells me in console that the ESX.TriggerServerCallback
-line is trying to index a nil value…