THE ORB
Démarrage du studio

tentative d'arithmétique sur une valeur nil

Un script a tenté un calcul sur une valeur vide, très souvent un montant d'argent ou d'objets jamais défini.

groupsL'argent ou les objets se comportent malcodeIl faut un développeur

Faites d'abord ceci

Vérifiez la ligne de ce joueur dans la base, à la recherche de valeurs vides dans la colonne nommée par le message.

bug_reportCollez plutôt toute votre console

Ce que ça veut dire

+, -, *, /, % ou ^ a été appliqué à quelque chose qui n'est pas un nombre. Le message le nomme : attempt to perform arithmetic on a nil value (field 'amount').

Lua convertit les chaînes numériques en arithmétique ("5" + 1 fait 6), donc une chaîne déclenche rarement ceci. Un nil, presque toujours.

Ce qui la provoque

Classé par fréquence : la cause la plus probable en premier.

  1. 1

    Un champ de table manquant

    Config.Prices[item] * count alors que cet objet n'a pas d'entrée de prix.

  2. 2

    Une colonne de base qui est NULL

    NULL revient en nil, pas en 0. Une ligne de joueur dont le bank n'a jamais été initialisé casse chaque calcul de solde qui y touche.

  3. 3

    Une valeur que le client devait envoyer et n'a pas envoyée

    Un gestionnaire d'événement faisant amount * price sur une charge où le client l'a omis.

  4. 4

    Accumuler dans une variable non initialisée

    total = total + xtotal a été déclaré sans valeur de départ.

Comment savoir laquelle est la vôtre

Affichez l'opérande nommé dans le message. S'il vient de la base, vérifiez les NULL de la colonne :

SELECT COUNT(*) FROM users WHERE bank IS NULL;

Où regarder

La ligne nommée, puis la source de cet opérande.

Comment la corriger

Mettez la valeur par défaut à la lecture, pas à l'usage :

local price = Config.Prices[item] or 0
local total = price * (count or 1)

Et côté base, rendez le problème impossible à reproduire :

ALTER TABLE users MODIFY bank INT NOT NULL DEFAULT 0;

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