попытка сравнить число с нулем - PullRequest
0 голосов
/ 23 января 2020

У меня проблемы с приведенной ниже ошибкой:

esx_glovebox_sv. lua: 138: попытка сравнить число с nil.

Строка 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

1 Ответ

1 голос
/ 23 января 2020

Если я правильно понимаю ваш пост, "строка 138" указывает на третью строку в вашем фрагменте кода, который будет:

if targetItem.limit == -1 or ((targetItem.count + count) <= targetItem.limit) then

Ошибка означает, что одно из значений, с которыми вы работаете равен nil и поэтому не может сравниваться с числом. В вашем случае это может быть только targetItem.limit.

Если у каждого targetItem должно быть значение limit и count, проблема в другом месте вашего кода.

Вместо этого Для выдачи ошибки вы можете просто проверить наличие значения, добавив дополнительные проверки:

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

Краткое объяснение: В Lua оба nil и логическое значение false представляют false значение внутри логического выражения. Любое другое значение будет рассматриваться как true. В этом случае вы пропустите вложенный оператор if, если targetItem или targetItem.limit nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...