ArabianMine

tp.lua

Jun 22nd, 2022 (edited)
726
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.32 KB | None | 0 0
  1. -- 1. Загружаем в одну папку формы (Gui)
  2. -- pastebin get -f iKzRve2g forms.lua
  3. -- https://computercraft.ru/topic/1016-lyogkaya-biblioteka-gui/
  4. -- 2. Ставим Transposer
  5. -- 2.1 Сверху него Teleposer
  6. -- 2.2 Cбоку (Любой) - обычный Chest (Можно двойной)
  7. -- 2.3 В сундук кидаем наши фокусы для Teleposera
  8. -- 3. Запускаем
  9. -- 4. Redstone I/O находится в переменной "rs"
  10. -- 4.1 Для его работы нужно заполнить адрес Redstone I/O блока
  11. -- 4.2 Выдает красный сигнал вверх
  12.  
  13. local term = require("term")
  14. forms=require("forms")        
  15. --------------------------------------------
  16. local component = require("component")
  17. local computer = require("computer")
  18. local event = require("event")
  19. local term = require("term")
  20. local os = require("os")
  21. local event = require("event")
  22. local rs = component.proxy("5d2a6c1b-0665-46b2-9896-9d3842f341d2") -- Тут обязательно адрес Redstone I/O
  23. local tr = component.transposer
  24. local gpu = component.gpu
  25. local teleposer_side = -1
  26. local chest_side = -1
  27. local chest_size = 0
  28.  
  29. local bg_color = 1591111
  30. local button_color = 0xB34415
  31. local button_tp_done = 0x00CC00
  32. local button_prepare_color = 0xFF0700
  33. term.clear()
  34.  
  35. function get_sides()
  36.     for side=0,5 do
  37.         if tr.getInventoryName(side)=="tile.bloodTeleposer" then
  38.                 teleposer_side = side
  39.         end
  40.         if tr.getInventoryName(side)=="tile.chest" or tr.getInventoryName(side)=="tile.CompressedChest" then
  41.                 chest_side = side
  42.         end
  43.     end
  44.     print("Teleposer Side:"..teleposer_side.."\nChest Side:"..chest_side.."\n")
  45.    
  46.     if teleposer_side == -1 then
  47.         print("Teleposer не найден..Установите в упор к транспозеру\n")
  48.         os.exit()
  49.     end
  50.     if chest_side == -1 then
  51.         print("Сундук не найден..Установите в упор к транспозеру\n")
  52.         os.exit()
  53.     end
  54.  
  55.     return teleposer_side,chest_side
  56. end
  57.    
  58.  
  59.  
  60. function focus_chest(c_side)
  61.     planeti = {}
  62.     chest_size = tr.getInventorySize(c_side)
  63.     for slot=1,chest_size do
  64.         if tr.getStackInSlot(c_side, slot) == nil then
  65.         else
  66.             if tr.getStackInSlot(c_side, slot).name ~= "AWWayofTime:telepositionFocus" then
  67.             else
  68.                 table.insert(planeti, tr.getStackInSlot(c_side, slot))
  69.             end
  70.         end
  71.     end
  72.     return planeti, chest_size
  73. end
  74.  
  75. function focus_teleposer(t_side)
  76.     teleposer_slot = tr.getStackInSlot(t_side,1)
  77.     if teleposer_slot == nil then
  78.     else
  79.         for empty_slot=1,tonumber(c_size) do
  80.             item = tr.getStackInSlot(chest_side, empty_slot)
  81.             if item == nil then
  82.                 tr.transferItem(teleposer_side,chest_side, 1,1,empty_slot)
  83.             end
  84.         end
  85.         print("Teleposer: Clear\n")
  86.     end
  87. end
  88.  
  89. function choise_planet(planets_list)
  90.     for k,v in ipairs(planets_list) do
  91.         print("Key: ", k, " Value: ", v.label)
  92.     end
  93. end
  94.  
  95.  
  96.  
  97. -------------------------------------------
  98. FormMain=forms.addForm()
  99. FormMain.color=bg_color
  100.  
  101. function top_label()
  102.     TopLabel=FormMain:addLabel(65,3, "Teleposer System to Planets")
  103.     TopLabel.H = 3
  104.     TopLabel.centered = true
  105.     TopLabel.color=bg_color
  106. end
  107.  
  108. function top_frame()
  109.     TopFrame=FormMain:addFrame(3,4, 1)
  110.     TopFrame.H = 2
  111.     TopFrame.W = 157
  112.     TopFrame.centered = true
  113.     TopFrame.color=0x184747
  114. end
  115.  
  116.  
  117. local function finditem(side, name)
  118.     local inv, item = tr.getInventorySize(side)
  119.     if inv then
  120.         for slot = 1, inv do
  121.             item = tr.getStackInSlot(side, slot)
  122.             if item and item.label == name then
  123.             return slot
  124.             end
  125.         end
  126.         return nil
  127.     end
  128. end
  129.  
  130. function enter_teleport(side, name) --chest_side, planet_label
  131.     computer.beep()
  132.     if tr.getStackInSlot(teleposer_side,1) == nil then
  133.         slot = finditem(side, name)
  134.         tr.transferItem(side, teleposer_side, 1, slot, 1)
  135.     else
  136.         for empty_slot=1,c_size do
  137.             item = tr.getStackInSlot(side, empty_slot)
  138.             if item == nil then
  139.                 tr.transferItem(teleposer_side,side, 1,1,empty_slot)
  140.             end
  141.         end
  142.         slot = finditem(side, name)
  143.         tr.transferItem(side, teleposer_side, 1, slot, 1)
  144.        
  145.     end
  146. end
  147.  
  148.  
  149. function warn_lbl(x,y)
  150.     warn_x = x + 35
  151.     warn_label = FormMain:addLabel(warn_x, y, "Prepare...")
  152.     warn_label.color = button_prepare_color
  153.     warn_label:show()
  154.     warn_label.W = 13
  155.     if ready_label:hide() then
  156.     else end
  157. end
  158.  
  159. function ready_lbl(x,y)
  160.     ready_label = FormMain:addLabel(warn_x, y, "Teleport Done")
  161.     ready_label.color = button_tp_done
  162.     ready_label:show()
  163.     ready_label.W = 13
  164.     if warn_label:hide() then
  165.     else end
  166. end
  167.  
  168. function planet(x,y,name,chest_side)
  169.     pln_btn = FormMain:addButton(x,y,name, function() pcall(warn_lbl, x,y) enter_teleport(chest_side, name) pcall(ready_lbl, x,y) end)
  170.     pln_btn.color = button_color
  171.     pln_btn.alignRight = false
  172.     pln_btn.autoSize = false
  173.     pln_btn.W = 25
  174. end
  175.  
  176.  
  177. function exit_button()
  178.     Btn1=FormMain:addButton(145,48,"Выход",function() exitForm:setActive() end)
  179.     Btn1.color=bg_color
  180.    
  181.     exitForm=forms.addForm()
  182.     exitForm.border=2
  183.     exitForm.W=31
  184.     exitForm.H=7
  185.     exitForm.left=math.floor((FormMain.W-exitForm.W)/2)
  186.     exitForm.top =math.floor((FormMain.H-exitForm.H)/2)
  187.     exitForm.color=bg_color
  188.     FormAsk=exitForm:addLabel(8,3,"Вы хотите выйти?")
  189.     FormAsk.color=bg_color
  190.     exitForm:addButton(5,5,"Да",function() term.clear() forms.stop() end)
  191.     exitForm:addButton(18,5,"Нет",function() FormMain:setActive() end)
  192. end
  193.  
  194. function blink_redstone()
  195.     computer.beep(200)
  196.     rs.setOutput(1,255)
  197.     redstone_button.color = 0x4700A6
  198.     redstone_button:show()
  199.     event.pull(2,"Pause")
  200.     redstone_button.color = 0xFF1300
  201.     redstone_button:show()
  202.     rs.setOutput(1,0)
  203. end
  204.  
  205. function push_redstone()
  206.     redstone_button = FormMain:addButton(10,47,"Push Redstone", function() blink_redstone() end)
  207.     redstone_button.W = 25
  208.     redstone_button.color = 0xFF1300
  209.     redstone_button:show()
  210. end
  211. ----------------
  212. teleposer_side,chest_side = get_sides()
  213. focus_teleposer(teleposer_side)
  214. planets,c_size = focus_chest(chest_side)
  215. --choise_planet(planets)
  216. ----------------
  217. top_label()
  218. exit_button()
  219. if rs then
  220.     push_redstone()
  221. end
  222. x = 10
  223. y = 10
  224. for key,value in ipairs(planets) do
  225.     planet(x,y,value.label,chest_side)
  226.     y = y+2
  227.     if y >= 40 then
  228.         x = x + 55
  229.         y = 10
  230.     end
  231. end
  232. forms.run(FormMain)
  233.  
  234.  
  235.  
Add Comment
Please, Sign In to add comment