THE ORB
Studio wird gestartet

Versuch, mit einem nil-Wert zu rechnen

Ein Script wollte mit einem leeren Wert rechnen — sehr oft ein Geld- oder Item-Betrag, der nie gesetzt wurde.

groupsGeld oder Items verhalten sich falschcodeBraucht einen Entwickler

Mach das zuerst

Prüf die Zeile des Spielers in der Datenbank auf leere Werte in der Spalte, die die Meldung nennt.

bug_reportFüg lieber deine ganze Konsole ein

Was es bedeutet

+, -, *, /, % oder ^ wurde auf etwas angewendet, das keine Zahl ist. Die Meldung nennt es: attempt to perform arithmetic on a nil value (field 'amount').

Lua wandelt numerische Zeichenketten in der Arithmetik um ("5" + 1 ist 6), also löst eine Zeichenkette das selten aus. Ein nil fast immer.

Was es auslöst

Sortiert danach, wie oft es die Antwort ist.

  1. 1

    Ein fehlendes Tabellenfeld

    Config.Prices[item] * count, wenn dieses Item keinen Preiseintrag hat.

  2. 2

    Eine Datenbankspalte, die NULL ist

    NULL kommt als nil zurück, nicht als 0. Eine Spielerzeile, deren bank nie initialisiert wurde, zerlegt jede Saldoberechnung, die sie anfasst.

  3. 3

    Ein Wert, den der Client hätte schicken sollen und nicht schickte

    Ein Event-Handler, der amount * price auf einer Nutzlast rechnet, in der der Client es weggelassen hat.

  4. 4

    In eine nicht initialisierte Variable aufsummieren

    total = total + x, wobei total deklariert, aber nie mit einem Startwert versehen wurde.

Wie du erkennst, welcher deiner ist

Gib den in der Meldung genannten Operanden aus. Kam er aus der Datenbank, prüf die Spalte auf NULL:

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

Wo du nachsehen musst

Die genannte Zeile, dann die Quelle dieses Operanden.

Wie du es behebst

Setz den Standardwert beim Lesen, nicht beim Benutzen:

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

Und in der Datenbank: mach das Problem unwiederholbar:

ALTER TABLE users MODIFY bank INT NOT NULL DEFAULT 0;

Hängst du immer noch an deinem eigenen Code?

Diese Seite sagt, was dieser Fehler üblicherweise bedeutet. Füg deine Konsole in Server Fixer ein: es sortiert alles darin und sagt dir, was zuerst dran ist; und wenn du lieber nicht ranwillst, kann ORBIE das Script reparieren und dir die Resource fertig zum Einsetzen zurückgeben.

bug_reportServer Fixer öffnen

Für diese Art Fehler Script Optimizer liest das Script und repariert den Code dahinter.

Fehler, die mit diesem zusammen auftreten