THE ORB
Uruchamiam studio

attempt to compare

Skrypt próbował porównać dwie rzeczy, których nie da się porównać — zwykle liczbę z czymś, czego brakuje albo co jest tekstem.

groupsTa funkcja przestaje działaćcodePotrzebny programista

Zrób najpierw to

Jeśli stało się to po komendzie, prawdopodobną przyczyną są wartości wpisane do tej komendy.

bug_reportWklej zamiast tego całą konsolę

Co to znaczy

<, >, <= albo >= użyto między wartościami, których Lua nie umie uporządkować: attempt to compare nil with number, attempt to compare string with number, attempt to compare two table values.

== nigdy tego nie produkuje. Robią to tylko te cztery operatory porządkujące, co od razu zawęża szukanie we wskazanej linii.

Co to powoduje

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

  1. 1

    nil po jednej stronie

    if playerMoney > price, gdzie odczyt nic nie zwrócił. Ten sam problem u podstaw co przy indeksowaniu nila, tylko linijkę później.

  2. 2

    Liczba, która przyszła jako ciąg znaków

    Wartości konfiguracji zapisane jako "100", dane JSON i argumenty komend. Argumenty komend FiveM są ZAWSZE ciągami znaków, również w /givemoney 1 5000.

  3. 3

    Porównywanie wektora z liczbą

    #(a - b) > 5.0 jest poprawne. (a - b) > 5.0 porównuje wektory.

  4. 4

    Kolumna z bazy czytana wprost

    oxmysql zwraca to, co daje mu MySQL, a kolumny DECIMAL potrafią przyjść jako ciągi znaków.

Jak poznać, który jest twój

print(type(left), type(right))

Komunikat i tak nazywa oba typy, więc w zasadzie tylko potwierdzasz, która zmienna trzyma który.

Gdzie szukać

Wskazana linia. Jeśli wartość przyszła z komendy, popatrz na parsowanie argumentów; jeśli z bazy, popatrz na typ kolumny.

Jak to naprawić

Konwertuj raz, na granicy:

RegisterCommand('givemoney', function(source, args)
    local target = tonumber(args[1])
    local amount = tonumber(args[2])
    if not target or not amount or amount <= 0 then return end
    -- od tego miejsca bezpiecznie
end)

Dla odległości używaj operatora długości:

if #(GetEntityCoords(ped) - target) > 5.0 then return 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 czyta skrypt i naprawia kod stojący za tym.

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