LUA | MTASA попытка индексировать поле '?' (нулевое значение) - PullRequest
0 голосов
/ 25 апреля 2018

У меня проблема с моим скриптом lua для сервера MTA. Когда я запускаю код, я получаю следующую ошибку:

attempt to index field '?' (a nil value)

Вот код:

addEvent("bank:transfer", true)
addEventHandler("bank:transfer", root, function(id, amount, to, reason)
    if(transferBank(id, amount, to, reason)) then
         triggerClientEvent(client, "bank:transferRecieve", client, true)
    else
         triggerClientEvent(client, "bank:transferRecieve", client, false)
    end
end)

function transferBank(id, amount, to, reason)
    if(id and amount and to and reason) then
        if(BANK_ACCOUNTS[to]) then
            if(BANK_ACCOUNTS[id].balance >= amount) then
                dbExec(connection, "INSERT INTO bank_records (bank_id, record_type, record_from, reason, amount, date) VALUES(?, ?, ?, ?, ?, NOW())", to, 3, id, reason, amount)
                dbExec(connection, "UPDATE bank_accounts SET balance = balance - ? WHERE id=?", amount, id)
                dbExec(connection, "UPDATE bank_accounts SET balance = balance + ? WHERE id=?", amount, to)
                BANK_ACCOUNTS[to].balance = BANK_ACCOUNTS[to].balance + amount
                BANK_ACCOUNTS[id].balance = BANK_ACCOUNTS[id].balance - amount

                return true
            else
                return false, "Le Compte Bancaire spécifié ne contient pas assez d'argent."
            end
        else
            return false, "Le Compte Bancaire spécifié n'existe pas."
        end
    else
        return false, "Argument Invalide."
    end
end

Я искал часы, но не могу найти, откуда возникла ошибка.

1 Ответ

0 голосов
/ 25 апреля 2018

Минимальный пример, который вызывает это сообщение об ошибке:

local BANK_ACCOUNTS = {}
BANK_ACCOUNTS[to].balance = 1

В этом случае BANK_ACCOUNTS [to] равен nil, следовательно, вы не можете изменить его. Что касается nil, то у Lua нет имени / ключа поля, которое можно вставить в сообщение об ошибке.

BANK_ACCOUNTS["test"].balance = 1

выдаст вам следующее сообщение об ошибке:

attempt to index field 'test' (a nil value)

Так что в какой-то момент либо id, либо id равны нулю.

Потому что вы не ввели бы if BANK_ACCOUNTS[to] then, если бы to были nil, это должно быть id

...