THE ORB
Iniciando o studio

Limite de frequência de state bags / os state bags não replicam

Um script atualiza informação compartilhada muito mais vezes do que deveria, então algumas atualizações estão sendo descartadas.

groupsOs valores parecem errados ou chegam atrasadoscodePrecisa de um desenvolvedor

Faça isto primeiro

Isso precisa de mudança no script: ele deveria atualizar quando algo muda, não o tempo todo.

bug_reportMelhor colar o console inteiro

O que significa

Os state bags têm um limite de frequência por entidade. Escrever mais rápido que esse limite significa que as atualizações são descartadas, freadas, ou no pior caso o servidor passa todo o tempo replicando. Não dá erro: o valor simplesmente não chega ao cliente, ou chega atrasado.

O que causa isso

Ordenado pela frequência com que é a resposta.

  1. 1

    Escrever um state bag a cada tick

    O limite existe justamente para frear isso. O combustível, a velocidade e a posição escritos a cada quadro vão ser freados.

  2. 2

    Valores muito grandes

    Um inventário inteiro dentro de um state bag é replicado para todos que estão no alcance a cada mudança. Uma carga desse tamanho em qualquer frequência é um problema.

  3. 3

    Muitos bags sobre uma mesma entidade

    Dezenas de chaves sobre a mesma entidade, cada uma replicando separadamente.

  4. 4

    Replicado quando não era preciso

    :set(chave, valor, true) replica. O estado que é só local deveria passar false.

  5. 5

    Ler um bag num cliente que não consegue ver a entidade

    Fora de alcance significa que não tem bag. Não é um limite de frequência, mas dá o mesmo sintoma de «o valor não está lá».

Como saber qual é o seu

Escreva uma vez e leia: se uma única escrita chega e um laço de escritas não, é o limite de frequência. Se nenhuma chega, a entidade está fora de alcance.

Onde olhar

Cada .state:set do resource, e com que frequência ele roda.

Como consertar

Escreva só quando mudar, e só o que precisa cruzar a rede:

local last
CreateThread(function()
    while true do
        Wait(1000)                          -- não 0
        local fuel = math.floor(GetFuel(veh))
        if fuel ~= last then                -- só quando muda
            last = fuel
            Entity(veh).state:set('fuel', fuel, true)
        end
    end
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