THE ORB
Démarrage du studio

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é.

groupsQuelque chose n'apparaît jamaiscodeIl faut un développeur

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.

bug_reportCollez plutôt toute votre console

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. 1

    Un handle d'entité à 0 ou nil

    CreateVehicle a 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. 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. 3

    Un vecteur là où trois nombres sont attendus, ou l'inverse

    SetEntityCoords(ped, coords) échoue là où l'on attend SetEntityCoords(ped, coords.x, coords.y, coords.z, ...).

  4. 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. 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 Fixer

Pour 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