intento de concatenar un valor nil
Un script intentó armar un mensaje con un valor que faltaba, normalmente un nombre de jugador o un ajuste de configuración que dejaste en blanco.
Haz esto primero
Revisa el archivo de configuración de ese script buscando un ajuste que nunca se rellenó.
Qué significa
Se usó el operador .. con algo que no es ni una cadena ni un número. El mensaje lo nombra: attempt to concatenate a nil value (local 'name').
Lua concatena números sin problema, así que esto casi siempre es un nil, y casi siempre está dentro de una cadena que se está armando para un print, una notificación, un mensaje de chat o una consulta.
Qué lo provoca
Ordenado por la frecuencia con la que es la respuesta.
- 1
Un campo de tabla que falta dentro de un mensaje
'Welcome ' .. player.namedonde el objeto del jugador no tienename, o el objeto entero es nil. Armar el mensaje es donde muerde por primera vez el dato que falta. - 2
Una función que no devolvió nada
GetPlayerName(src)devuelve nil para un jugador que ya se fue, y el resultado va derecho a una línea de registro. - 3
Un valor de configuración que nunca se puso
Config.Webhook .. '?wait=true'con la webhook vacía en una configuración que el usuario nunca llenó. - 4
Armar SQL por concatenación
Que además es un agujero de inyección, así que este error te está haciendo un favor al llamar la atención sobre él.
Cómo saber cuál es el tuyo
Envolvé el operando en tostring() temporalmente: el error desaparece y el mensaje imprime nil exactamente donde estaba el valor que faltaba, y eso te dice cuál es sin adivinar nada.
Dónde mirar
La línea que nombra. Leé la expresión entera: una concatenación larga puede tener cinco operandos y sólo uno es nil.
Cómo arreglarlo
Poné un valor por defecto, o usá string.format, que tolera nil en %s:
local name = GetPlayerName(src) or 'unknown'
print(('player %s bought %s'):format(name, item or 'nothing'))Y para SQL, usá marcadores de posición en vez de concatenar:
MySQL.query('SELECT * FROM users WHERE identifier = ?', { identifier })¿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.