Limit tempa state bagów / state bagi się nie replikują
Skrypt aktualizuje współdzielone informacje o wiele za często, więc część tych aktualizacji jest wyrzucana.
Zrób najpierw to
Tu potrzebna jest zmiana w skrypcie — powinien aktualizować, gdy coś się zmienia, a nie bez przerwy.
Co to znaczy
State bagi mają limit tempa na encję. Zapis szybszy niż limit oznacza, że aktualizacje są porzucane, dławione, a w złych przypadkach serwer spędza cały czas na replikacji. Nic nie zgłasza błędu — wartość po prostu nie dociera na klienta albo dociera z opóźnieniem.
Co to powoduje
Uszeregowane według tego, jak często są odpowiedzią.
- 1
Zapis state baga w każdym ticku
Limit istnieje dokładnie po to, żeby to powstrzymać. Paliwo, prędkość i pozycja zapisywane w każdej klatce będą dławione.
- 2
Bardzo duże wartości
Cały ekwipunek w state bagu jest replikowany do każdego w zasięgu przy każdej zmianie. Dane tej wielkości przy dowolnej częstotliwości to problem.
- 3
Wiele bagów na jednej encji
Kilkadziesiąt kluczy na tej samej encji, każdy replikowany osobno.
- 4
Replikowane, choć nie musiało być
:set(key, value, true)replikuje. Stan wyłącznie lokalny powinien przekazywaćfalse. - 5
Odczyt baga na kliencie, który nie widzi encji
Poza zasięgiem znaczy brak baga. To nie limit tempa, ale ten sam objaw "wartości tam nie ma".
Jak poznać, który jest twój
Zapisz raz i odczytaj: jeśli pojedynczy zapis dociera, a pętla zapisów nie, chodzi o limit tempa. Jeśli nie dociera żaden, encja jest poza zasięgiem.
Gdzie szukać
Każde .state:set w zasobie i to, jak często się wykonuje.
Jak to naprawić
Zapisuj tylko przy zmianie i tylko to, co musi przejść przez sieć:
local last
CreateThread(function()
while true do
Wait(1000) -- nie 0
local fuel = math.floor(GetFuel(veh))
if fuel ~= last then -- tylko przy zmianie
last = fuel
Entity(veh).state:set('fuel', fuel, true)
end
end
end)Wciąż utknąłeś na własnym kodzie?
Ta strona mówi, co ten błąd zwykle oznacza. Wklej swoją konsolę do Server Fixera, a uszereguje wszystko, co w niej jest, i powie, co zrobić najpierw; a jeśli wolisz tego nie ruszać, ORBIE naprawi skrypt i odda ci zasób gotowy do wrzucenia.
bug_reportOtwórz Server FixerDla tego rodzaju błędu Skaner bezpieczeństwa oznacza obsługę zdarzeń, która do tego prowadzi.