GetPlayer(source) devolveu nil no servidor
O servidor procurou um jogador e não achou: normalmente ele desconectou no meio da ação.
Faça isto primeiro
De vez em quando é normal. O tempo todo significa que o script não confere se o jogador ainda está lá.
O que significa
Um handler do servidor pediu ao framework um objeto de jogador e não recebeu nada. Todo acesso a campos que vier depois falha.
O que causa isso
Ordenado pela frequência com que é a resposta.
- 1
O jogador se desconectou no meio da operação
Entre o evento disparar e o handler rodar, ele saiu. Comum com qualquer operação demorada ou com espera.
- 2
O source não é o que você acha
Dentro de um callback ou de uma closure aninhada,
sourcenão é o que você pensa. Tem que capturar no topo do handler:local src = source
- 3
O jogador está conectado mas não carregado
Durante o
playerConnecting, e por um momento depois de entrar, ainda não existe objeto de jogador: o personagem não foi escolhido. - 4
O source veio do cliente
Um cliente que manda o próprio id pode mandar o de qualquer um. Isso é um buraco de segurança além de um nil.
- 5
A função de busca errada
GetPlayerFromId(id de servidor) eGetPlayerFromIdentifier(licença), usadas uma pela outra por engano.
Como saber qual é o seu
local src = source
print('src', src, GetPlayerName(src))Se o GetPlayerName também é nil, ele saiu ou nunca entrou por completo. Se o nome resolve mas o objeto do framework não, ele está conectado mas não carregado.
Onde olhar
O topo do handler do evento, e cada lugar em que source é lido depois de uma espera.
Como consertar
RegisterNetEvent('shop:buy', function(item, count)
local src = source -- capture primeiro, sempre
local xPlayer = ESX.GetPlayerFromId(src)
if not xPlayer then return end -- ele saiu, ou nunca carregou
-- nunca confie num id mandado pelo cliente: src é a autoridade
end)Ainda travado no seu próprio código?
Esta página é o que esse erro costuma significar. Cole o seu console no Server Fixer e ele vai ordenar tudo o que estiver lá e te dizer o que fazer primeiro; e se você preferir não mexer, o ORBIE consegue consertar o script e te devolver o resource pronto para soltar.
bug_reportAbrir o Server FixerPara esse tipo de erro, o Conversor de scripts traduz um resource entre ESX, QBCore e Qbox.