THE ORB
Studio wird gestartet

Versuch, einen nil-Wert zu verketten

Ein Script wollte eine Nachricht aus einem fehlenden Wert bauen — meist ein Spielername oder eine Einstellung, die du leer gelassen hast.

groupsDiese Funktion hört auf zu funktionierenpersonDas kannst du beheben

Mach das zuerst

Prüf die Config-Datei des Scripts auf eine Einstellung, die nie ausgefüllt wurde.

bug_reportFüg lieber deine ganze Konsole ein

Was es bedeutet

Der Operator .. wurde mit etwas benutzt, das weder Zeichenkette noch Zahl ist. Die Meldung nennt es: attempt to concatenate a nil value (local 'name').

Lua verkettet Zahlen anstandslos — es ist also fast immer ein nil, und fast immer in einer Zeichenkette, die für ein print, eine Benachrichtigung, eine Chatnachricht oder eine Abfrage gebaut wird.

Was es auslöst

Sortiert danach, wie oft es die Antwort ist.

  1. 1

    Ein fehlendes Tabellenfeld in einer Nachricht

    'Welcome ' .. player.name, wobei das Spielerobjekt kein name hat oder das ganze Objekt nil ist. Beim Bauen der Nachricht beißt die fehlende Angabe zuerst zu.

  2. 2

    Eine Funktion, die nichts zurückgab

    GetPlayerName(src) gibt nil für einen Spieler zurück, der schon weg ist, und das Ergebnis landet direkt in einer Protokollzeile.

  3. 3

    Ein Konfigurationswert, der nie gesetzt wurde

    Config.Webhook .. '?wait=true' mit leerem Webhook in einer Konfiguration, die der Nutzer nie ausgefüllt hat.

  4. 4

    SQL durch Verkettung bauen

    Was zugleich eine Injection-Lücke ist — dieser Fehler tut dir also einen Gefallen, indem er darauf aufmerksam macht.

Wie du erkennst, welcher deiner ist

Wickel den Operanden vorübergehend in tostring(): Der Fehler verschwindet, und die Meldung druckt nil genau dort, wo der fehlende Wert war — das sagt dir ohne Raten, welcher es ist.

Wo du nachsehen musst

Die genannte Zeile. Lies den ganzen Ausdruck: Eine lange Verkettung kann fünf Operanden haben, und nur einer ist nil.

Wie du es behebst

Setz einen Standardwert oder nimm string.format, das nil in %s verträgt:

local name = GetPlayerName(src) or 'unknown'
print(('player %s bought %s'):format(name, item or 'nothing'))

Und für SQL nimm Platzhalter statt Verkettung:

MySQL.query('SELECT * FROM users WHERE identifier = ?', { identifier })

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