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

Помощь с кодом

Вопрос

Привет всем, есть такой кусок кода:


local chest = component.isAvailable("chest") and component.chest or error("нет сундука")local items,run,isActive,stepCounter,emLost = {},true,true,0,0
local items,run,isActive,stepCounter,emLost = {},true,true,0,0

  local function use()
    for k = 1,27 do
      if chest.getStackInSlot(k) ~= nil and chest.getStackInSlot(k).id == ticket then
        chest.pushItem("DOWN",k,1)
        emLost = emLost + 1
        return true
      end
    end
    return false
  end
  _, add, msgNick, msg = event.pull(0.5,"chat_message")
  status(1,2,"денег потрачено   "..emLost*priceticket)

Мне нужно сканировать инвентарь сундука на наличие ticket в кол-ве, например, 3 штук и толкать их в другой инвентарь.
Важно что-бы функция не выполнялась если в сундуке меньше заданного кол-ва тикетов. Может кто, пожалуйста, помочь с этим?) 

Изменено пользователем Alex25764

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


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

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

Вот как вариант, выгружает тикеты, когда их больше или равно нужному количеству. От других предметов инвентарь не чистит, для этого нужна отдельная функция.

 

local component = require('component')

local function get_tickets(item, min_qty, side) -- получаем имя предмета, количество и куда перемещать
  if not component.isAvailable('chest') then -- проверяем наличие сундука
    return nil, 'нет сундука'
  end
  local chest = component.chest -- линкуем сундук
  local stacks = chest.getAllStacks() -- получаем инвентарь
  local counter, slots, c_item, moved = 0, {} -- создаем счетчик, список слотов и текущий предмет
  for k, v in pairs(stacks) do -- пробегаем по слотам
    c_item = v.basic() -- линкуем основную информацию о предмете
    if c_item.id == item then -- если имя совпадает
      table.insert(slots, k) -- добавляем слот в список
      counter = counter + c_item.qty -- обновляем счетчик
    end
  end
  if counter >= min_qty then -- условие допилить под свои нужды
    moved = true
    for i = 1, #slots do -- бежим по слотам
      chest.pushItem(side, slots[i]) -- выгружаем предметы
    end
  end
  return moved, counter -- возвращаем количество
end

local status, tickets = get_tickets('minecraft:stone', 3, 'DOWN')
if status then
  print('получено ' .. tickets .. ' билетов') -- обрабатываем удачную ситуацию
else
  -- обрабатываем исключение
end

 

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


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

Что содержит переменная chest? Зачем emLost? почему функция может вернуть только true, а где false? Можно целый код, а не его отрывок?

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


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

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

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

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

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

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

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

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

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


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