THE ORB
Iniciando o studio

Estouro de eventos de rede confiáveis

Um script mandou tanta coisa para um jogador que a conexão dele não deu conta, então ele foi expulso.

groupsJogadores expulsos aleatoriamentecodePrecisa de um desenvolvedor

Faça isto primeiro

Anote com quais jogadores acontece e quando. Esse precisa de alguém para achar o script barulhento.

bug_reportMelhor colar o console inteiro

O que significa

Foram enfileirados para um cliente mais eventos do que o canal confiável aguenta. O FiveM corta a conexão em vez de ficar ainda mais atrás, então os jogadores são expulsos sem um motivo visível.

O canal é por cliente, então o jogador expulso não é necessariamente o que está fazendo algo estranho.

O que causa isso

Ordenado pela frequência com que é a resposta.

  1. 1

    Um evento disparado num laço de tick

    TriggerClientEvent dentro de uma thread com um Wait curto, por jogador, é a causa de manual.

  2. 2

    Uma transmissão dentro de um laço

    TriggerClientEvent('x', -1, ...) dentro de qualquer coisa que se repete se multiplica pela quantidade de jogadores.

  3. 3

    Cargas muito grandes

    Um inventário inteiro ou um mapa de todos os jogadores, mandado com frequência. O tamanho enche o canal tão bem quanto a quantidade.

  4. 4

    Um laço de realimentação entre cliente e servidor

    O cliente dispara um evento do servidor, o servidor responde com um evento de cliente, o cliente responde de novo.

  5. 5

    Um trapaceiro saturando um evento

    Que além disso é um problema de segurança: veja o scanner de vulnerabilidades.

Como saber qual é o seu

Conte-os. Um contador por evento no servidor durante um minuto deixa o culpado à vista na hora:

local counts = {}
local realTrigger = TriggerClientEvent
-- envolver, contar, imprimir a cada 60 s

Onde olhar

Cada TriggerClientEvent dentro de um CreateThread, e cada transmissão para -1.

Como consertar

Mande estado, não uma torrente de eventos. Os state bags se replicam uma vez e só quando mudam:

-- em vez de um TriggerClientEvent a cada tick
Entity(veh).state:set('fuel', level, true)

Quando for preciso mandar eventos, coloque freio e agrupe:

if GetGameTimer() - lastSend > 1000 then
    lastSend = GetGameTimer()
    TriggerClientEvent('myres:update', src, batchedPayload)
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 Fixer

Para esse tipo de erro, o Escâner de segurança marca o tratamento de eventos que leva até aqui.

Erros que andam junto com este