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.
Zrób najpierw to
Sprawdź wiersz gracza w bazie pod kątem pustych wartości w kolumnie, którą wymienia komunikat.
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
Brakujące pole tablicy
Config.Prices[item] * count, gdzie ten przedmiot nie ma wpisu z ceną. - 2
Kolumna w bazie, która jest NULL
NULL wraca jako nil, nie jako 0. Wiersz gracza, którego
banknigdy nie został zainicjowany, psuje każde obliczenie salda, które go dotyka. - 3
Wartość, którą klient miał wysłać i nie wysłał
Handler zdarzenia robiący
amount * pricena danych, które klient pominął. - 4
Sumowanie do niezainicjowanej zmiennej
total = total + x, gdzietotalzadeklarowano, 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 FixerDla tego rodzaju błędu Script Optimizer czyta skrypt i naprawia kod stojący za tym.