SHOW:
|
|
- or go back to the newest paste.
1 | -- Require: | |
2 | -- Monitor and GPU tear 3 and PC | |
3 | - | -- Adapter, Redstone controller or redstone card |
3 | + | -- Adapter for lsc and reactors |
4 | - | -- I update this script for auto-enable reactor from redstone signal on 50% lapatron storage |
4 | + | -- I update this script for auto-enable reactor from adapter on 50% lapatron storage |
5 | - | -- Owner scripts: 4GNAME |
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 | - | rs = comp.redstone |
20 | + | |
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.text(GPU1, screenWidth-17, 3, 0x858585,"OFF - CTRL+C") |
122 | + | |
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 | - | if math.floor(chargeFirst) <= procent then |
129 | + | |
130 | - | for b = 0, 5 do |
130 | + | |
131 | - | rs.setOutput(b, 255) |
131 | + | |
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 | - | for i = 0, 5 do |
144 | + | setAllreactorsRodLevel(maxi) |
145 | - | rs.setOutput(i, 0) |
145 | + | |
146 | - | end |
146 | + | |
147 | end | |
148 | - | else if stored <= (capacity * 20 / 100) then |
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 |