bad argument #N to '<fonction>'
Un script a passé au jeu une valeur du mauvais type, presque toujours parce que quelque chose dont il avait besoin (un véhicule, un modèle) n'a jamais chargé.
Faites d'abord ceci
Vérifiez si le modèle ou le véhicule qu'il tente d'utiliser existe réellement sur votre serveur.
Ce que ça veut dire
Une native ou une fonction standard a reçu le mauvais type à cette position. Le message dit laquelle et ce qu'elle attendait :
bad argument #1 to 'TaskGoToCoordAnyMeans' (number expected, got nil)
La numérotation commence à 1. Pour une méthode appelée avec deux-points, l'argument #1 est l'objet lui-même : le #2 est donc la première chose entre les parenthèses.
Ce qui la provoque
Classé par fréquence : la cause la plus probable en premier.
- 1
Un handle d'entité à 0 ou nil
CreateVehiclea renvoyé 0 parce que le modèle n'a jamais chargé, et le handle est parti droit dans une autre native. De loin la forme la plus courante. - 2
Un nom de modèle jamais converti en hash
La plupart des emplacements de modèle veulent un hash, pas une chaîne. Utilisez
GetHashKey(name)ou le littéral à accents graves. - 3
Un vecteur là où trois nombres sont attendus, ou l'inverse
SetEntityCoords(ped, coords)échoue là où l'on attendSetEntityCoords(ped, coords.x, coords.y, coords.z, ...). - 4
Un nil venu d'une config ou d'une ligne de base
Lire une clé absente produit nil en silence ; l'erreur ressort une ligne plus loin, ici.
- 5
Mauvais ordre des arguments
Deux nombres intervertis ne produisent pas d'erreur. Un nombre là où va une chaîne, si.
Comment savoir laquelle est la vôtre
Affichez chaque argument avec son type sur la ligne au-dessus :
print(('ped=%s type=%s'):format(tostring(ped), type(ped)))Si la valeur est 0 plutôt que nil, le vrai bug est en amont : quelque chose a renvoyé un handle en échec et personne n'a vérifié.
Où regarder
La ligne nommée, puis la ligne qui a PRODUIT le mauvais argument.
Comment la corriger
Chargez les modèles avant de faire apparaître, et vérifiez les handles avant de les utiliser :
local model = GetHashKey('adder')
RequestModel(model)
local deadline = GetGameTimer() + 5000
while not HasModelLoaded(model) and GetGameTimer() < deadline do Wait(0) end
if not HasModelLoaded(model) then return end
local veh = CreateVehicle(model, coords.x, coords.y, coords.z, heading, true, false)
if not DoesEntityExist(veh) then return end
SetModelAsNoLongerNeeded(model)Toujours 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
- Échec de la création de l'entité
- tentative d'indexer une valeur nil
- 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