Объяснение ошибки
В Lua это одна из самых распространенных ошибок, с которой вы столкнетесь, поэтому очень важно знать, как ее решить.
Ошибка: attempt to index a nil value
Чтобы понять, что означает эта ошибка, вам нужно понять только эти понятия.
- В Lua можно индексировать только таблицы (то есть
myTable[myIndex]
) - В Lua, если переменная оценивается как
nil
, то попытка проиндексировать ее, как если бы она была таблицей, приводит к ошибке
Так что, должно быть немного легче понять ошибкуты принят. Более явным способом описания этой ошибки было бы что-то вроде «интерпретатор Lua попытался проиндексировать вашу переменную user
в строке 37, но user
оценивается как nil
.»
ваш конкретный случай
В строке 242 вы вызываете обратный вызов и передаете nil
cb(nil)
Этот обратный вызов отправляет это значение nil
в строку 37 в качестве параметра user
TriggerEvent('f:getPlayer', source, function(user)
n = user.getPhoneNumber()
end)
Таким образом, когда вы пытаетесь запустить user.getPhoneNumber()
, вы на самом деле запускаете nil.getPhoneNumber()
, что выдает ошибку, которую вы видели.
Способы устранения этого типа ошибки
1) Всякий раз, когда вы работаетес переменной, которая может быть nil
, создайте оператор if, проверяющий, является ли он nil
перед продолжением.
2) Убедитесь, что вы никогда не устанавливали эту переменную на nil
.
Способы исправления вашей конкретной ошибки
1) В строке 36 создайте оператор if
TriggerEvent('f:getPlayer', source, function(user)
if user ~= nil then
n = user.getPhoneNumber()
end
end)
Или выполните аналогичную проверку nil, как это
TriggerEvent('f:getPlayer', source, function(user)
if user then
n = user.getPhoneNumber()
end
end)
2) Всегда передавайте пользователя в вашем обратном вызове. Например, в строке 242 и в других местах передайте фактический объект пользователя.
cb(Users[someUser])