Перейти к содержимому
  • 0
InsuperablEx

Помогите разобраться

Вопрос

local component = require("component")
local event = require("event")
local serialization = require("serialization")
local robot = component.robot
local tunnel = component.tunnel
local inv = component.inventory_controller

linkedCardAddress = '817a1dc5-324f-46f4-9a27-dfd6cce83d0a' -- Linked Card address

function onMessage(_, _, address, _, _, message)
	if address == linkedCardAddress then
		local unSerMessage = serialization.unserialize(message)
		if unSerMessage.text == "get_count" then
			local itemSize = 0
			for i = 1, robot.inventorySize() do
				print(i)
				if inv.getStackInInternalSlot(i).label == unSerMessage.getCountLabel then
					itemSize = itemSize + inv.getStackInInternalSlot(i).size
					tunnel.send(serialization.serialize(itemSize))
				end
			end
		end
	end
end
event.listen("modem_message", onMessage)

Цикл не проходит положенные 81 ячейку инвентаря.
В чем дело?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

21 минуту назад, InsuperablEx сказал:

Если закомментировать этот блок кода, то цикл доходит до 81

1) Похоже, что-то сломано в моде. Даже если он выдаёт размер инвентаря робоита 81, то всё равно не позволит использовать больше 64 ячеек.

2) Этот код не содержит условия для останова цикла. Остановиться он может только по ошибке. С каким сообщением останавливается программа? Скорее всего, что-то вроде attempt to index a nil valueпри обработке пустого слота.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
49 минут назад, InsuperablEx сказал:

Цикл не проходит положенные 81 ячейку инвентаря

Цикл перебирает ячейки инвентаря робота. Но инвентарь робота не может вместить больше 64 ячеек независимо от количества установленных улучшений инвентаря.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, eu_tomat сказал:

Цикл перебирает ячейки инвентаря робота. Но инвентарь робота не может вместить больше 64 ячеек независимо от количества установленных улучшений инвентаря.

Понимаю, но цикл завершается на 4-х судя по выводу print() если в инвентаре лежит 3 предмета

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если закомментировать этот блок кода, то цикл доходит до 81

if inv.getStackInInternalSlot(i).label == unSerMessage.getCountLabel then
	itemSize = itemSize + inv.getStackInInternalSlot(i).size
	tunnel.send(serialization.serialize(itemSize))
end

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 минуты назад, eu_tomat сказал:

1) Похоже, что-то сломано в моде. Даже если он выдаёт размер инвентаря робоита 81, то всё равно не позволит использовать больше 64 ячеек.

2) Этот код не содержит условия для останова цикла. Остановиться он может только по ошибке. С каким сообщением останавливается программа? Скорее всего, что-то вроде attempt to index a nil valueпри обработке пустого слота.

Нет, программа завершается без ошибок, а listener остаётся работать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Разобрался, спасибо за подсказку, надо было добавить условие 

if inv.getStackInInternalSlot(i) ~= nil then

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...