THE ORB
Démarrage du studio

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.

groupsCette fonctionnalité cesse de marcherpersonVous pouvez le corriger

Faites d'abord ceci

Vérifiez le fichier de configuration de ce script à la recherche d'un réglage jamais rempli.

bug_reportCollez plutôt toute votre console

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

    Un champ de table manquant dans un message

    'Welcome ' .. player.name où l'objet joueur n'a pas de name, ou l'objet entier est nil. Construire le message est l'endroit où la donnée manquante mord en premier.

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