THE ORB
Uruchamiam studio

attempt to perform arithmetic

Skrypt próbował liczyć na wartości, która była pusta — bardzo często na kwocie pieniędzy albo liczbie przedmiotów, której nigdy nie ustawiono.

groupsPieniądze albo przedmioty wariującodePotrzebny programista

Zrób najpierw to

Sprawdź wiersz gracza w bazie pod kątem pustych wartości w kolumnie, którą wymienia komunikat.

bug_reportWklej zamiast tego całą konsolę

Co to znaczy

+, -, *, /, % albo ^ zostało zastosowane do czegoś, co nie jest liczbą. Komunikat to nazywa: attempt to perform arithmetic on a nil value (field 'amount').

Lua przy arytmetyce konwertuje ciągi liczbowe ("5" + 1 to 6), więc ciąg znaków rzadko to wywołuje. Nil prawie zawsze.

Co to powoduje

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

  1. 1

    Brakujące pole tablicy

    Config.Prices[item] * count, gdzie ten przedmiot nie ma wpisu z ceną.

  2. 2

    Kolumna w bazie, która jest NULL

    NULL wraca jako nil, nie jako 0. Wiersz gracza, którego bank nigdy nie został zainicjowany, psuje każde obliczenie salda, które go dotyka.

  3. 3

    Wartość, którą klient miał wysłać i nie wysłał

    Handler zdarzenia robiący amount * price na danych, które klient pominął.

  4. 4

    Sumowanie do niezainicjowanej zmiennej

    total = total + x, gdzie total zadeklarowano, ale nigdy nie nadano mu wartości początkowej.

Jak poznać, który jest twój

Wypisz operand nazwany w komunikacie. Jeśli przyszedł z bazy danych, sprawdź kolumnę pod kątem NULL-i:

SELECT COUNT(*) FROM users WHERE bank IS NULL;

Gdzie szukać

Wskazana linia, a potem źródło tego operandu.

Jak to naprawić

Dawaj wartość domyślną przy odczycie, nie przy użyciu:

local price = Config.Prices[item] or 0
local total = price * (count or 1)

W bazie danych uczyń ten problem niemożliwym do powtórzenia:

ALTER TABLE users MODIFY bank INT NOT NULL DEFAULT 0;

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