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ó.
Haz esto primero
Averigua si el modelo o el vehículo que intenta usar existe de verdad en tu servidor.
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
Un identificador de entidad que es 0 o nil
CreateVehicledevolvió 0 porque el modelo nunca cargó, y el identificador se fue derecho a otro nativo. De lejos la forma más común. - 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
Un vector donde se quieren tres números, o al revés
SetEntityCoords(ped, coords)falla donde se esperaSetEntityCoords(ped, coords.x, coords.y, coords.z, ...). - 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
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 FixerPara este tipo de error, el Script Optimizer lee el script y repara el código que hay detrás.
Errores que viajan con este
- Falló la creación de la entidad
- intento de indexar un valor nil
- no se puede reanudar una corrutina muerta
- SCRIPT ERROR en citizen:/scripting/lua/scheduler.lua
- intento de indexar un número, booleano o texto
- intento de ceder a través de un límite de llamada en C
- desbordamiento de pila
- el índice de la tabla es nil