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.
Mach das zuerst
Prüf die Config-Datei des Scripts auf eine Einstellung, die nie ausgefüllt wurde.
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
Ein fehlendes Tabellenfeld in einer Nachricht
'Welcome ' .. player.name, wobei das Spielerobjekt keinnamehat oder das ganze Objekt nil ist. Beim Bauen der Nachricht beißt die fehlende Angabe zuerst zu. - 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
Ein Konfigurationswert, der nie gesetzt wurde
Config.Webhook .. '?wait=true'mit leerem Webhook in einer Konfiguration, die der Nutzer nie ausgefüllt hat. - 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 öffnenFür diese Art Fehler Script Optimizer liest das Script und repariert den Code dahinter.