tentative de concaténer une valeur nil
Un script a tenté de construire un message à partir d'une valeur manquante, en général un nom de joueur ou un réglage laissé vide.
Faites d'abord ceci
Vérifiez le fichier de configuration de ce script à la recherche d'un réglage jamais rempli.
Ce que ça veut dire
L'opérateur .. a été utilisé avec quelque chose qui n'est ni une chaîne ni un nombre. Le message le nomme : attempt to concatenate a nil value (local 'name').
Lua concatène les nombres sans problème : c'est donc presque toujours un nil, et presque toujours dans une chaîne construite pour un print, une notification, un message de chat ou une requête.
Ce qui la provoque
Classé par fréquence : la cause la plus probable en premier.
- 1
Un champ de table manquant dans un message
'Welcome ' .. player.nameoù l'objet joueur n'a pas dename, ou l'objet entier est nil. Construire le message est l'endroit où la donnée manquante mord en premier. - 2
Une fonction qui n'a rien renvoyé
GetPlayerName(src)renvoie nil pour un joueur déjà parti, et le résultat file droit dans une ligne de journal. - 3
Une valeur de config jamais définie
Config.Webhook .. '?wait=true'avec le webhook vide dans une config que l'utilisateur n'a jamais remplie. - 4
Construire du SQL par concaténation
Ce qui est aussi une faille d'injection : cette erreur vous rend donc service en attirant l'attention dessus.
Comment savoir laquelle est la vôtre
Enveloppez temporairement l'opérande dans tostring() : l'erreur disparaît et le message affiche nil exactement là où la valeur manquait, ce qui vous dit laquelle sans deviner.
Où regarder
La ligne nommée. Lisez toute l'expression : une longue concaténation peut avoir cinq opérandes et un seul est nil.
Comment la corriger
Mettez une valeur par défaut, ou utilisez string.format, qui tolère nil dans %s :
local name = GetPlayerName(src) or 'unknown'
print(('player %s bought %s'):format(name, item or 'nothing'))Et pour le SQL, utilisez des paramètres plutôt que la concaténation :
MySQL.query('SELECT * FROM users WHERE identifier = ?', { identifier })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
- tentative d'indexer une valeur nil
- Erreur de syntaxe SQL
- 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