Advertisement
danya201272

[OpenComputers]LSC Controller Nuke(RODS)

Oct 30th, 2022 (edited)
798
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.69 KB | Source Code | 0 0
  1. -- Require:
  2. -- Monitor and GPU tear 3 and PC
  3. -- Adapter for lsc and reactors
  4. -- I update this script for auto-enable reactor from adapter on 50% lapatron storage
  5. -- Owner scripts: 4GNAME, Starsyborg
  6.  
  7. unicode = require("unicode")
  8. comp = require("component")
  9. colors = require("colors")
  10. side = require("sides")
  11. screen = require("term")
  12. computer = require("computer")
  13. event = require("event")
  14. graphics = require("graphics")
  15. fs = require("filesystem")
  16. TC, RO, RN, RD, TPS = 2, 0, 0, 0
  17. reactors = {}
  18.  
  19. GPU1 = comp.gpu
  20. lsc = comp.impact_lsc
  21. procent = 55 -- В процентах емкость лапатрона, когда начнется заряд реактора
  22. fuls = 100 -- В процентах емкость лапатрона, яр заряд остановка
  23. maxi = 10 -- От 1 до 10 Уровень стержней, На зарядку реакторам
  24. mini = 1 -- От 1 до 10 Уровень стержней, На разрядку реакторам
  25.  
  26. screenWidth = 160
  27. screenHeight = 40
  28.  
  29. GPU1.setResolution(screenWidth, screenHeight)
  30.  
  31. for reactor, impact_reactor in pairs(comp.list("impact_reactor", true)) do
  32.   table.insert(reactors, comp.proxy(reactor))
  33. end
  34.  
  35. function setAllreactorsRodLevel(level)
  36.  for i in pairs(reactors) do
  37.   reactors[i].setLevelRods(level)
  38.  end
  39. end
  40.  
  41. setAllreactorsRodLevel(mini)
  42.  
  43. function times()
  44.     f = io.open("/tmp/TF", "w")
  45.     f:write("test")
  46.     f:close()
  47.     return(fs.lastModified("/tmp/TF"))
  48. end
  49.  
  50. function spam()
  51.     RO = times()
  52.     os.sleep(TC)
  53.     RN = times()
  54.     RD = RN - RO
  55.     TPS = 20000 * TC / RD
  56.     TPS = string.sub(TPS, 1, 5)
  57.     nTPS = tonumber(TPS)
  58.     GPU1.set(154, 8, "     ")
  59.     if nTPS <= 10 then
  60.         GPU1.setForeground(0xcc4c4c)
  61.     elseif nTPS <= 15 then
  62.         GPU1.setForeground(0xf2b233)
  63.     elseif nTPS > 15 then
  64.         GPU1.setForeground(0x7fcc19)
  65.     end
  66.     GPU1.set(154, 8, TPS)
  67. end
  68.  
  69. function rectangleAround(GPU, x, y, w, h, b, color)
  70.     if y % 2 == 0 then
  71.         error("Pixel position must be odd on y axis")
  72.     end
  73.     graphics.rectangle(GPU, x, y, w - b, b, color)
  74.     graphics.rectangle(GPU, x + w - b, y, b, h - b + 1, color)
  75.     graphics.rectangle(GPU, x + b - 1, y + h - b, w - b + 1, b, color)
  76.     graphics.rectangle(GPU, x, y + b - 1, b, h - b + 1, color)
  77. end
  78.  
  79. function splitNumber(number)
  80.     number = math.floor(number)
  81.     local formattedNumber = {}
  82.     local string = tostring(math.abs(number))
  83.     local sign = number / math.abs(number)
  84.     for i = 1, #string do
  85.         n = string:sub(i, i)
  86.         formattedNumber[i] = n
  87.         if ((#string - i) % 3 == 0) and (#string - i > 0) then
  88.             formattedNumber[i] = formattedNumber[i] .. ","
  89.         end
  90.     end
  91.     if (sign < 0) then
  92.         table.insert(formattedNumber, 1, "-")
  93.     end
  94.     return table.concat(formattedNumber, "")
  95. end
  96.  
  97. function time(number)
  98.     local formattedTime = {}
  99.     formattedTime[1] = math.floor(number / 3600); formattedTime[2] = " H, "
  100.     formattedTime[3] = math.floor((number - formattedTime[1] * 3600) / 60); formattedTime[4] = " M, "
  101.     formattedTime[5] = number % 60; formattedTime[6] = " S"
  102.     return table.concat(formattedTime, "")
  103. end
  104.  
  105. function drawCharge()
  106.     local chargeFirst = lsc.getChargePercent()
  107.     local stored, capacity, input, output = lsc.getStoredLSC()
  108.     local pX = 20
  109.     local pY = 53
  110.     local pW = screenWidth - 2 * pX
  111.     local pH = 8
  112.     local charge = (pW - 2) * (lsc.getChargePercent() / 100)
  113.     local capacityEU = "CAPACITY: " .. splitNumber(capacity) .. " EU"
  114.     local storedEU = "STORED: " .. splitNumber(stored) .. " EU"
  115.     local inputEU = "IN: " .. splitNumber(input) .. " EU/T"
  116.     local outputEU = "OUT: " .. splitNumber(output) .. " EU/T "
  117.     local chargePercent = "       CHARGE: " .. math.floor(chargeFirst) .. " %"
  118.     local differenceIO = input - output
  119.  
  120.     rectangleAround(GPU1, pX, pY, pW, pH, 2, 0x131e27)
  121.  
  122.     graphics.rectangle(GPU1, pX + 2, pY + 2, charge - 2, 4, 0x7ec7ff)
  123.     if chargeFirst > 0 and chargeFirst < 100 then
  124.         graphics.rectangle(GPU1, pX + charge + 1, pY + 2, pW - 2 - charge, 4, 0x294052)
  125.     else
  126.         if chargeFirst <= 0 then
  127.             graphics.rectangle(GPU1, pX + 2, pY + 2, pW - 4, 4, 0x294052)
  128.         end
  129.     end
  130.     local diftext = "              " .. "COST: " .. splitNumber(math.abs(differenceIO)) .. " EU/T"
  131.     if differenceIO < 0 then
  132.         graphics.text(GPU1, pX + pW - #diftext, pY + pH, 0xff0000, diftext)
  133.     else
  134.         graphics.text(GPU1, pX + pW - #diftext, pY + pH, 0x33ff00, diftext)
  135.     end
  136.     graphics.text(GPU1, screenWidth-17, 3, 0x858585,"OFF - CTRL+C")
  137.     graphics.text(GPU1, screenWidth-10, 15, 0x00FF00,"TPS")
  138.     graphics.text(GPU1, pX + pW - #chargePercent, pY - 2, 0x7ec7ff, chargePercent)
  139.     graphics.text(GPU1, pX, pY - 2, 0x7ec7ff, capacityEU .. "              ")
  140.     graphics.text(GPU1, pX, pY + pH, 0x7ec7ff, storedEU .. "              ")
  141.     graphics.text(GPU1, pX, pY + pH + 4, 0x33ff00, inputEU .. "              ")
  142.     graphics.text(GPU1, pX, pY + pH + 6, 0xff0000, outputEU .. "              ")
  143.     if math.floor(chargeFirst) <= procent then
  144.     setAllreactorsRodLevel(maxi)
  145.     computer.beep(1000, 0.1)
  146.     graphics.text(GPU1, screenWidth-12, 11, 0x00FF00,"REACTOR:ON_")
  147.     end
  148.    
  149.  
  150.     if differenceIO > 0 then
  151.         fillTime = math.floor((capacity - stored) / (differenceIO * 20))
  152.         fillTimeString = "                        FULL: " .. time(math.abs(fillTime))
  153.         graphics.text(GPU1, pX + pW - #fillTimeString, pY + pH + 2, 0x7ec7ff, fillTimeString .. "              ")
  154.     else if differenceIO == 0 then
  155.         if stored >= (capacity * fuls / 100) then
  156.             fillTimeString = "                       CHARGE OK"
  157.             setAllreactorsRodLevel(mini)
  158.             os.sleep(1)
  159.             graphics.text(GPU1, screenWidth-12, 11, 0xFF0000,"REACTOR:OFF")
  160.         else if stored <= (capacity * procent / 100) then
  161.             fillTimeString = "                         NEED HELP"
  162.             computer.beep(1000, 1.0)
  163.         end
  164.             fillTimeString = "                        NO CHARGE"
  165.         end
  166.         graphics.text(GPU1, pX + pW - #fillTimeString, pY + pH + 2, 0x7ec7ff, fillTimeString)
  167.     else
  168.         fillTime = math.floor((stored) / (differenceIO * 20))
  169.         fillTimeString = "                        EMPTY: " .. time(math.abs(fillTime))
  170.         graphics.text(GPU1, pX + pW - #fillTimeString, pY + pH + 2, 0x7ec7ff, fillTimeString .. "              ")
  171.     end
  172.     end
  173. end
  174.  
  175. screen.clear()
  176.  
  177. while true do
  178.     drawCharge()
  179.     graphics.update()
  180.     spam()
  181.     os.sleep(.1)
  182.     if event.pull(.5, "interrupted") then
  183.         screen.clear()
  184.         print("soft interrupt, closing")
  185.         break
  186.     end
  187. end
Tags: GTCE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement