Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- 1. Загружаем в одну папку формы (Gui)
- -- pastebin get -f iKzRve2g forms.lua
- -- https://computercraft.ru/topic/1016-lyogkaya-biblioteka-gui/
- -- 2. Ставим Transposer
- -- 2.1 Сверху него Teleposer
- -- 2.2 Cбоку (Любой) - обычный Chest (Можно двойной)
- -- 2.3 В сундук кидаем наши фокусы для Teleposera
- -- 3. Запускаем
- -- 4. Redstone I/O находится в переменной "rs"
- -- 4.1 Для его работы нужно заполнить адрес Redstone I/O блока
- -- 4.2 Выдает красный сигнал вверх
- local term = require("term")
- forms=require("forms")
- --------------------------------------------
- local component = require("component")
- local computer = require("computer")
- local event = require("event")
- local term = require("term")
- local os = require("os")
- local event = require("event")
- local rs = component.proxy("5d2a6c1b-0665-46b2-9896-9d3842f341d2") -- Тут обязательно адрес Redstone I/O
- local tr = component.transposer
- local gpu = component.gpu
- local teleposer_side = -1
- local chest_side = -1
- local chest_size = 0
- local bg_color = 1591111
- local button_color = 0xB34415
- local button_tp_done = 0x00CC00
- local button_prepare_color = 0xFF0700
- term.clear()
- function get_sides()
- for side=0,5 do
- if tr.getInventoryName(side)=="tile.bloodTeleposer" then
- teleposer_side = side
- end
- if tr.getInventoryName(side)=="tile.chest" or tr.getInventoryName(side)=="tile.CompressedChest" then
- chest_side = side
- end
- end
- print("Teleposer Side:"..teleposer_side.."\nChest Side:"..chest_side.."\n")
- if teleposer_side == -1 then
- print("Teleposer не найден..Установите в упор к транспозеру\n")
- os.exit()
- end
- if chest_side == -1 then
- print("Сундук не найден..Установите в упор к транспозеру\n")
- os.exit()
- end
- return teleposer_side,chest_side
- end
- function focus_chest(c_side)
- planeti = {}
- chest_size = tr.getInventorySize(c_side)
- for slot=1,chest_size do
- if tr.getStackInSlot(c_side, slot) == nil then
- else
- if tr.getStackInSlot(c_side, slot).name ~= "AWWayofTime:telepositionFocus" then
- else
- table.insert(planeti, tr.getStackInSlot(c_side, slot))
- end
- end
- end
- return planeti, chest_size
- end
- function focus_teleposer(t_side)
- teleposer_slot = tr.getStackInSlot(t_side,1)
- if teleposer_slot == nil then
- else
- for empty_slot=1,tonumber(c_size) do
- item = tr.getStackInSlot(chest_side, empty_slot)
- if item == nil then
- tr.transferItem(teleposer_side,chest_side, 1,1,empty_slot)
- end
- end
- print("Teleposer: Clear\n")
- end
- end
- function choise_planet(planets_list)
- for k,v in ipairs(planets_list) do
- print("Key: ", k, " Value: ", v.label)
- end
- end
- -------------------------------------------
- FormMain=forms.addForm()
- FormMain.color=bg_color
- function top_label()
- TopLabel=FormMain:addLabel(65,3, "Teleposer System to Planets")
- TopLabel.H = 3
- TopLabel.centered = true
- TopLabel.color=bg_color
- end
- function top_frame()
- TopFrame=FormMain:addFrame(3,4, 1)
- TopFrame.H = 2
- TopFrame.W = 157
- TopFrame.centered = true
- TopFrame.color=0x184747
- end
- local function finditem(side, name)
- local inv, item = tr.getInventorySize(side)
- if inv then
- for slot = 1, inv do
- item = tr.getStackInSlot(side, slot)
- if item and item.label == name then
- return slot
- end
- end
- return nil
- end
- end
- function enter_teleport(side, name) --chest_side, planet_label
- computer.beep()
- if tr.getStackInSlot(teleposer_side,1) == nil then
- slot = finditem(side, name)
- tr.transferItem(side, teleposer_side, 1, slot, 1)
- else
- for empty_slot=1,c_size do
- item = tr.getStackInSlot(side, empty_slot)
- if item == nil then
- tr.transferItem(teleposer_side,side, 1,1,empty_slot)
- end
- end
- slot = finditem(side, name)
- tr.transferItem(side, teleposer_side, 1, slot, 1)
- end
- end
- function warn_lbl(x,y)
- warn_x = x + 35
- warn_label = FormMain:addLabel(warn_x, y, "Prepare...")
- warn_label.color = button_prepare_color
- warn_label:show()
- warn_label.W = 13
- if ready_label:hide() then
- else end
- end
- function ready_lbl(x,y)
- ready_label = FormMain:addLabel(warn_x, y, "Teleport Done")
- ready_label.color = button_tp_done
- ready_label:show()
- ready_label.W = 13
- if warn_label:hide() then
- else end
- end
- function planet(x,y,name,chest_side)
- pln_btn = FormMain:addButton(x,y,name, function() pcall(warn_lbl, x,y) enter_teleport(chest_side, name) pcall(ready_lbl, x,y) end)
- pln_btn.color = button_color
- pln_btn.alignRight = false
- pln_btn.autoSize = false
- pln_btn.W = 25
- end
- function exit_button()
- Btn1=FormMain:addButton(145,48,"Выход",function() exitForm:setActive() end)
- Btn1.color=bg_color
- exitForm=forms.addForm()
- exitForm.border=2
- exitForm.W=31
- exitForm.H=7
- exitForm.left=math.floor((FormMain.W-exitForm.W)/2)
- exitForm.top =math.floor((FormMain.H-exitForm.H)/2)
- exitForm.color=bg_color
- FormAsk=exitForm:addLabel(8,3,"Вы хотите выйти?")
- FormAsk.color=bg_color
- exitForm:addButton(5,5,"Да",function() term.clear() forms.stop() end)
- exitForm:addButton(18,5,"Нет",function() FormMain:setActive() end)
- end
- function blink_redstone()
- computer.beep(200)
- rs.setOutput(1,255)
- redstone_button.color = 0x4700A6
- redstone_button:show()
- event.pull(2,"Pause")
- redstone_button.color = 0xFF1300
- redstone_button:show()
- rs.setOutput(1,0)
- end
- function push_redstone()
- redstone_button = FormMain:addButton(10,47,"Push Redstone", function() blink_redstone() end)
- redstone_button.W = 25
- redstone_button.color = 0xFF1300
- redstone_button:show()
- end
- ----------------
- teleposer_side,chest_side = get_sides()
- focus_teleposer(teleposer_side)
- planets,c_size = focus_chest(chest_side)
- --choise_planet(planets)
- ----------------
- top_label()
- exit_button()
- if rs then
- push_redstone()
- end
- x = 10
- y = 10
- for key,value in ipairs(planets) do
- planet(x,y,value.label,chest_side)
- y = y+2
- if y >= 40 then
- x = x + 55
- y = 10
- end
- end
- forms.run(FormMain)
Add Comment
Please, Sign In to add comment