tentative d'appeler une valeur nil
Un script a tenté d'utiliser une fonction qui n'existe pas, en général parce qu'il a été écrit pour une autre version de votre framework.
Faites d'abord ceci
Vérifiez que le script est fait pour votre framework et pour votre version de celui-ci.
Ce que ça veut dire
Le script a tenté d'invoquer quelque chose qui n'est pas une fonction. Le nom entre parenthèses dit quoi : (global 'ESX'), (field 'GetPlayerData'), (method 'getJob').
method 'x' mérite une lecture attentive : cela signifie que l'appel a utilisé deux-points (obj:x()) et que la table n'a pas de x. C'est presque toujours une différence de version du framework, où la méthode a été renommée ou déplacée.
Ce qui la provoque
Classé par fréquence : la cause la plus probable en premier.
- 1
Une native qui n'existe pas de ce côté
Des natives client appelées sur le serveur, ou l'inverse. La plupart des natives de dessin, de saisie et de caméra sont client uniquement : sur le serveur ce global est simplement nil, et l'appeler c'est appeler nil.
- 2
Une méthode du framework renommée entre versions
xPlayer.getJob()contrexPlayer.job,QBCore.Functions.GetPlayerDatacontrePlayerData, ESX Legacy contre ESX 1.1. Les scripts écrits pour une version appellent des méthodes que l'autre n'a pas. - 3
Un export qui a résolu vers nil
exports['res']:method()où la ressource est arrêtée, mal nommée, ou n'exporte pas ce nom. FiveM renvoie nil au lieu de lever une erreur, donc l'échec atterrit ici. - 4
La fonction est définie plus bas dans le fichier
Lua affecte
local function fquand cette ligne s'exécute, pas à l'analyse. Appelerf()au-dessus de sa définition, c'est appeler nil. - 5
Une faute de frappe
TriggerServerEvnet, ouGetPlayerPedIdalors que la vraie native estPlayerPedId.
Comment savoir laquelle est la vôtre
print(type(laChose))
au-dessus de l'appel. nil pour une native signifie que vous êtes du mauvais côté : consultez la référence des natives, qui indique client ou serveur pour chaque entrée. table signifie que vous appelez une table, ce qui veut généralement dire que . a été utilisé là où : fallait.
Où regarder
Le fichier et la ligne nommés. Si le nom est une native globale, cherchez dans la référence des natives avant de supposer que votre code est fautif.
Comment la corriger
-- exports : vérifiez que la ressource tourne avant de lui faire confiance
if GetResourceState('ox_inventory') ~= 'started' then return end
local count = exports.ox_inventory:Search(src, 'count', 'water')
-- méthodes du framework : lisez l'API de cette version, ne devinez pas
local job = xPlayer.job -- ESX Legacy
-- local job = xPlayer.getJob() -- ESX plus ancienToujours bloqué sur votre propre code ?
Cette page explique ce que cette erreur signifie en général. Collez votre console dans Server Fixer : il classera tout ce qui s'y trouve et vous dira quoi faire en premier ; et si vous préférez ne pas y toucher, ORBIE peut réparer le script et vous rendre la ressource prête à déposer.
bug_reportOuvrir le Server FixerPour ce type d'erreur, le Script Optimizer lit le script et répare le code derrière tout ça.
Les erreurs qui voyagent avec celle-ci
- tentative d'indexer une valeur nil
- Cet export n'existe pas
- L'objet du framework est nil (ESX / QBCore)
- impossible de reprendre une coroutine morte
- SCRIPT ERROR dans citizen:/scripting/lua/scheduler.lua
- tentative d'indexer un nombre, un booléen ou du texte
- tentative de yield à travers une frontière d'appel C
- débordement de pile
- l'index de la table est nil