Versuch, einen nil-Wert aufzurufen
Ein Script wollte eine Funktion nutzen, die es nicht gibt — meist, weil es für eine andere Version deines Frameworks geschrieben wurde.
Mach das zuerst
Prüf, ob das Script für dein Framework und für deine Version davon gemacht ist.
Was es bedeutet
Das Script wollte etwas aufrufen, das keine Funktion ist. Der Name in Klammern sagt was: (global 'ESX'), (field 'GetPlayerData'), (method 'getJob').
method 'x' lohnt genaues Lesen: Der Aufruf nutzte einen Doppelpunkt (obj:x()), und die Tabelle hat kein x. Das ist fast immer ein Framework-Versionsunterschied, bei dem die Methode umbenannt oder verschoben wurde.
Was es auslöst
Sortiert danach, wie oft es die Antwort ist.
- 1
Eine Native, die es auf dieser Seite nicht gibt
Client-Natives auf dem Server aufgerufen oder umgekehrt. Fast alle Zeichen-, Eingabe- und Kamera-Natives sind nur client-seitig — auf dem Server ist dieses Global schlicht nil, und es aufzurufen heißt, nil aufzurufen.
- 2
Eine zwischen Versionen umbenannte Framework-Methode
xPlayer.getJob()gegenxPlayer.job,QBCore.Functions.GetPlayerDatagegenPlayerData, ESX Legacy gegen ESX 1.1. Für eine Version geschriebene Scripts rufen Methoden auf, die die andere nicht hat. - 3
Ein Export, der zu nil auflöste
exports['res']:method(), wobei die Resource gestoppt, falsch benannt ist oder diesen Namen nicht exportiert. FiveM gibt nil zurück, statt zu werfen — der Fehlschlag landet hier. - 4
Die Funktion ist weiter unten in der Datei definiert
Lua weist
local function fzu, wenn diese Zeile läuft, nicht beim Parsen.f()über seiner Definition aufzurufen heißt, nil aufzurufen. - 5
Ein Tippfehler
TriggerServerEvnetoderGetPlayerPedId, obwohl die echte NativePlayerPedIdheißt.
Wie du erkennst, welcher deiner ist
print(type(dasDing))
über dem Aufruf. nil bei einer Native heißt, du bist auf der falschen Seite — sieh in die Native-Referenz, die für jeden Eintrag Client oder Server nennt. table heißt, du rufst eine Tabelle auf, was meist bedeutet, dass . statt : verwendet wurde.
Wo du nachsehen musst
Die genannte Datei und Zeile. Ist der Name eine globale Native, such in der Native-Referenz, bevor du annimmst, dein Code sei falsch.
Wie du es behebst
-- Exports: prüf, ob die Resource läuft, bevor du ihr vertraust
if GetResourceState('ox_inventory') ~= 'started' then return end
local count = exports.ox_inventory:Search(src, 'count', 'water')
-- Framework-Methoden: lies die API dieser Version, rate nicht
local job = xPlayer.job -- ESX Legacy
-- local job = xPlayer.getJob() -- älteres ESXHä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.
Fehler, die mit diesem zusammen auftreten
- Versuch, einen nil-Wert zu indizieren
- Diesen Export gibt es nicht
- Das Framework-Objekt ist nil (ESX / QBCore)
- Tote Coroutine kann nicht fortgesetzt werden
- SCRIPT ERROR in citizen:/scripting/lua/scheduler.lua
- Versuch, eine Zahl, einen Boolean oder Text zu indizieren
- Versuch, über eine C-Aufrufgrenze zu yielden
- Stack-Überlauf
- Tabellenindex ist nil