THE ORB
Uruchamiam studio

Restart zasobu zostawia po sobie wątki, encje albo handlery

Restart skryptu zostawił jego stare pojazdy, postacie albo menu, więc teraz wszystkiego jest po dwa.

groupsDuplikaty po restarciecodePotrzebny programista

Zrób najpierw to

Pełny restart serwera to czyści. Skrypt trzeba naprawić, żeby sprzątał po sobie.

bug_reportWklej zamiast tego całą konsolę

Co to znaczy

/restart myres zatrzymuje i uruchamia zasób, ale nie cofa tego, co zasób zrobił światu. Wątki są zabijane; zespawnowane encje, fokus NUI, blipy, pedy i cokolwiek zarejestrowanego gdzie indziej — nie. Zrestartuj to kilka razy i masz po kilka kopii wszystkiego.

Objawem jest zwykle "działa, dopóki tego nie zrestartuję, a potem robi to dwa razy".

Co to powoduje

Uszeregowane według tego, jak często są odpowiedzią.

  1. 1

    Zespawnowane encje nigdy nie są sprzątane

    Pedy, pojazdy, obiekty i blipy tworzone przy starcie, tworzone znowu przy następnym starcie, przy oryginałach wciąż na miejscu.

  2. 2

    Fokus NUI trzymany w momencie zatrzymania

    Gracz zostaje bez możliwości ruchu i bez interfejsu na ekranie.

  3. 3

    Handlery zarejestrowane w innym zasobie

    Strefa targetowania albo komenda zarejestrowana w zasobie zewnętrznym zostaje zarejestrowana.

  4. 4

    Wątki, które przeżywają zatrzymanie na kliencie

    Wątek kliencki działa dalej, dopóki klient nie zauważy, że zasób się zatrzymał.

  5. 5

    Dane zapisane do state baga albo do globalnej

    Zostają; następny start je powiększa.

Jak poznać, który jest twój

Zrestartuj zasób dwa razy i policz. Dwa pedy tam, gdzie powinien być jeden, to cała diagnoza.

Gdzie szukać

Wszystko tworzone przy starcie zasobu i to, czy istnieje onResourceStop, który to cofa.

Jak to naprawić

Każdy zasób, który dotyka świata, potrzebuje sprzątania:

local spawned = {}

AddEventHandler('onResourceStop', function(res)
    if res ~= GetCurrentResourceName() then return end
    for _, entity in ipairs(spawned) do
        if DoesEntityExist(entity) then DeleteEntity(entity) end
    end
    SetNUIFocus(false, false)
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 Fixer

Dla tego rodzaju błędu Script Optimizer znajduje to, co kosztuje cię klatki, i przepisuje.

Błędy, które chodzą z tym w parze