THE ORB
Arrancando el studio

bad argument #N to '<función>'

Un script le pasó al juego un valor del tipo equivocado, casi siempre porque algo que necesitaba (un vehículo, un modelo) nunca cargó.

groupsAlgo nunca aparececodeNecesita un desarrollador

Haz esto primero

Averigua si el modelo o el vehículo que intenta usar existe de verdad en tu servidor.

bug_reportMejor pega tu consola entera

Qué significa

Un nativo o una función estándar recibió el tipo equivocado en esa posición. El mensaje dice cuál y qué esperaba:

bad argument #1 to 'TaskGoToCoordAnyMeans' (number expected, got nil)

La numeración de argumentos empieza en 1. En un método llamado con dos puntos, el argumento #1 es el objeto mismo, así que el #2 es lo primero que hay dentro de los paréntesis.

Qué lo provoca

Ordenado por la frecuencia con la que es la respuesta.

  1. 1

    Un identificador de entidad que es 0 o nil

    CreateVehicle devolvió 0 porque el modelo nunca cargó, y el identificador se fue derecho a otro nativo. De lejos la forma más común.

  2. 2

    Un nombre de modelo que nunca se convirtió en hash

    La mayoría de las posiciones de modelo quieren un hash, no una cadena. Usá GetHashKey(name) o el literal con acentos graves.

  3. 3

    Un vector donde se quieren tres números, o al revés

    SetEntityCoords(ped, coords) falla donde se espera SetEntityCoords(ped, coords.x, coords.y, coords.z, ...).

  4. 4

    Un nil de una configuración o de una fila de la base de datos

    Leer una clave que falta produce nil en silencio; el error sale una línea después, acá.

  5. 5

    Orden de argumentos equivocado

    Dos números intercambiados no dan error. Un número donde va una cadena, sí.

Cómo saber cuál es el tuyo

Imprimí cada argumento con su tipo en la línea de arriba:

print(('ped=%s type=%s'):format(tostring(ped), type(ped)))

Si el valor es 0 y no nil, el fallo de verdad está más arriba: algo devolvió un identificador fallido y nadie lo comprobó.

Dónde mirar

La línea que nombra, y después la línea que PRODUJO el argumento malo.

Cómo arreglarlo

Cargá los modelos antes de generar, y comprobá los identificadores antes de usarlos:

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)

¿Sigues atascado en tu propio código?

Esta página es lo que suele significar este error. Pega tu consola en Server Fixer y ordenará todo lo que haya en ella y te dirá qué hacer primero; y si prefieres no tocarlo, ORBIE puede reparar el script y devolverte el recurso listo para soltar.

bug_reportAbrir el Server Fixer

Para este tipo de error, el Script Optimizer lee el script y repara el código que hay detrás.

Errores que viajan con este