[英]attempt to compare a number with nil
I'm having issues with the below error:我遇到以下错误的问题:
esx_glovebox_sv.lua:138: attempt to compare number with nil. esx_glovebox_sv.lua:138:尝试将数字与 nil 进行比较。
Line 138 is third in RAW data below第 138 行是下面 RAW 数据中的第三行
RegisterServerEvent("esx_glovebox:getItem")
AddEventHandler(
"esx_glovebox:getItem",
function(plate, type, item, count, max, owned)
local _source = source
local xPlayer = ESX.GetPlayerFromId(_source)
if type == "item_standard" then
local targetItem = xPlayer.getInventoryItem(item)
if targetItem.limit == -1 or ((targetItem.count + count) <= targetItem.limit) then
TriggerEvent(
"esx_glovebox:getSharedDataStore",
plate,
function(store)
local coffres = (store.get("coffres") or {})
for i = 1, #coffres, 1 do
if coffres[i].name == item then
if (coffres[i].count >= count and count > 0) then
xPlayer.addInventoryItem(item, count)
if (coffres[i].count - count) == 0 then
table.remove(coffres, i)
else
coffres[i].count = coffres[i].count - count
end
break
else
TriggerClientEvent(
"pNotify:SendNotification",
_source,
{
text = _U("invalid_quantity"),
type = "error",
queue = "glovebox",
timeout = 3000,
layout = "bottomCenter"
}
)
end
If I understand your post correctly "line 138" points to the third line in your posted code snippet, which would be:如果我正确理解您的帖子,“第 138 行”指向您发布的代码片段中的第三行,即:
if targetItem.limit == -1 or ((targetItem.count + count) <= targetItem.limit) then
The error means, that one of the values you are working with is nil
and therefore can't be compared to a number.错误意味着,您正在使用的值之一nil
,因此无法与数字进行比较。 In your case this can only be targetItem.limit
.在您的情况下,这只能是targetItem.limit
。
If each targetItem
should have a limit
and count
value, the issue is somewhere else in your code.如果每个targetItem
都应该有一个limit
和count
数值,那么问题就出在代码的其他地方。
Instead of throwing an error you can simply check for the existance of the value by adding additional checks:您可以通过添加额外的检查来简单地检查值的存在,而不是抛出错误:
if type == "item_standard" then
local targetItem = xPlayer.getInventoryItem(item)
-- Make sure that targetItem and targetItem.limit aren't nil.
if targetItem and targetItem.limit then
if targetItem.limit == -1 or ((targetItem.count + count) <= targetItem.limit) then
Short explanation: In Lua both nil
and the boolean value false
represent a false
value inside of a logical expression.简短说明:在 Lua 中nil
和布尔值false
表示逻辑表达式中的false
值。 Any other value will be treated as true
.任何其他值都将被视为true
。 In this case you'll skip the nested if-statement if either targetItem
or targetItem.limit
are nil
.在这种情况下,如果targetItem
或targetItem.limit
为nil
您将跳过嵌套的 if 语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.