SHOW:
|
|
- or go back to the newest paste.
1 | - | rednet.open("right") |
1 | + | --[[ Get with |
2 | - | names = peripheral.getNames() |
2 | + | pastebin get W4GLNE39 on |
3 | - | sides = {"right", "left", "top", "bottom", "front", "back"} |
3 | + | or |
4 | - | for i = 1, #names do |
4 | + | std pb W4GLNE39 on |
5 | - | c = peripheral.wrap(names[i]) |
5 | + | std ld on on |
6 | - | print(names[i]) |
6 | + | |
7 | - | ifcomp = true |
7 | + | Aren't I great with names?? |
8 | - | for a = 1, #sides do |
8 | + | --]] |
9 | - | if names[i] == sides[a] then |
9 | + | |
10 | - | ifcomp = false |
10 | + | local rebootCompsAtStart = false |
11 | - | end |
11 | + | --Set the above variable to true if you want On to reboot all PCs at startup. |
12 | - | if ifcomp == true then |
12 | + | |
13 | - | c.turnOn() |
13 | + | local configFile = "/.on_conf" |
14 | - | end |
14 | + | |
15 | - | end |
15 | + | local tArg = {...} |
16 | if tArg[1] == "rmconf" then | |
17 | - | print("All should be on") |
17 | + | fs.delete(configFile) |
18 | end | |
19 | ||
20 | if tArg[1] == "conf" then | |
21 | return shell.run("edit " .. configFile) | |
22 | end | |
23 | ||
24 | ||
25 | local compNames = {} | |
26 | local compIDs = {} | |
27 | local names = peripheral.getNames() | |
28 | ||
29 | local function loadConfig() | |
30 | if fs.exists(configFile) == false then | |
31 | file = fs.open(configFile, "w") | |
32 | file.writeLine("background = false") | |
33 | file.writeLine("onOrOff = 'on'") | |
34 | file.writeLine("animations = true") | |
35 | file.writeLine("spoofMode = false") | |
36 | file.writeLine("loadBarChar = '@'") | |
37 | file.writeLine("compList = '/.complist'") | |
38 | file.writeLine("monitorTextScale = 0.5") | |
39 | file.writeLine("startupProg = nil") | |
40 | file.close() | |
41 | end | |
42 | ||
43 | dofile(configFile) | |
44 | end | |
45 | ||
46 | local function writeCompFileList() | |
47 | file = fs.open(compList, "w") | |
48 | file.writeLine("List of last connected computers. Do not modify.") | |
49 | for a = 1, #compNames do | |
50 | if compNames[a] ~= nil and compIDs[a] ~= nil then | |
51 | file.writeLine(" '" .. compNames[a] .. "', id:" .. compIDs[a]) | |
52 | end | |
53 | end | |
54 | file.writeLine("\nFile generated by On by LDDestroier/EldidiStroyrr (same guy).") | |
55 | file.close() | |
56 | end | |
57 | ||
58 | local function loadAnimaion() | |
59 | screenX, screenY = term.getSize() | |
60 | ani_spinLine = { | |
61 | ".", | |
62 | "|", | |
63 | "|", | |
64 | "|", | |
65 | "|", | |
66 | " " | |
67 | } | |
68 | ani_loadBar = { --I'm sure there's a better way of doing this, but it's not to my knowledge. | |
69 | "[ ]", | |
70 | "[" .. loadBarChar.. " ]", | |
71 | "[" .. string.rep(loadBarChar, 2) .. " ]", | |
72 | "[" .. string.rep(loadBarChar, 3) .. " ]", | |
73 | "[ " .. string.rep(loadBarChar, 3) .. " ]", | |
74 | "[ " .. string.rep(loadBarChar, 3) .. " ]", | |
75 | "[ " .. string.rep(loadBarChar, 3) .. "]", | |
76 | "[ " .. string.rep(loadBarChar, 2) .. "]", | |
77 | "[ " .. loadBarChar.. "]", | |
78 | "[ ]", | |
79 | "[ ]" | |
80 | } | |
81 | end | |
82 | ||
83 | local function getBGColors() --I was getting used to the nomenclature | |
84 | if background == false then | |
85 | if colormode then | |
86 | term.setBackgroundColor(128) | |
87 | else | |
88 | term.setBackgroundColor(1) | |
89 | end | |
90 | else | |
91 | term.setBackgroundColor(colors.black) | |
92 | end | |
93 | end | |
94 | ||
95 | local sides = {"right", "left", "top", "bottom", "front", "back"} | |
96 | ||
97 | local function getConfig() | |
98 | local names = peripheral.getNames() | |
99 | local isOpen = false | |
100 | for k,v in pairs(sides) do | |
101 | if peripheral.getType(v)=="modem" then | |
102 | rednet.open(v) | |
103 | isOpen=true | |
104 | end | |
105 | end | |
106 | ||
107 | if term.isColor then --Gotta make sure that normal computers aren't using colors! | |
108 | if term.isColor() then | |
109 | colormode = true | |
110 | else | |
111 | colormode = false | |
112 | end | |
113 | end | |
114 | ||
115 | loadAnimaion() | |
116 | ||
117 | getBGColors() | |
118 | ||
119 | scr_x, scr_y = term.getSize() | |
120 | itemThreshold = scr_y - 5 | |
121 | end | |
122 | ||
123 | loadConfig() | |
124 | ||
125 | getConfig() | |
126 | ||
127 | for a = 1, #sides do | |
128 | if peripheral.getType(sides[a]) == "monitor" then | |
129 | local mon = peripheral.wrap(sides[a]) | |
130 | mon.setTextScale(monitorTextScale) | |
131 | end | |
132 | end | |
133 | ||
134 | function round(num, idp) | |
135 | local mult = 10^(idp or 0) | |
136 | return math.floor(num * mult + 0.5) / mult | |
137 | end | |
138 | ||
139 | function getDefaultColors() | |
140 | if colormode and background == false then | |
141 | term.setTextColor(16) | |
142 | else | |
143 | term.setTextColor(colors.black) | |
144 | end | |
145 | end | |
146 | ||
147 | function getCompNames() --Simply gets all computer names and puts them into a table and a readable text file. | |
148 | compNames = {} | |
149 | compIDs = {} | |
150 | names = peripheral.getNames() | |
151 | for a = 1, #names do | |
152 | if string.find(names[a], "computer") then | |
153 | local c = peripheral.wrap(names[a]) | |
154 | if c ~= nil then | |
155 | table.insert(compNames, names[a]) | |
156 | table.insert(compIDs, c.getID()) | |
157 | end | |
158 | end | |
159 | end | |
160 | if spoofMode then | |
161 | table.insert(compNames, "computer_test1") | |
162 | table.insert(compIDs, 1) | |
163 | table.insert(compNames, "computer_test2") | |
164 | table.insert(compIDs, 2) | |
165 | table.insert(compNames, "computer_test3") | |
166 | table.insert(compIDs, 5) | |
167 | table.insert(compNames, "computer_test4") | |
168 | table.insert(compIDs, 4) | |
169 | end | |
170 | end | |
171 | ||
172 | local itemX, itemY, itemPosXes, itemPosYes, scrollOver, doesntFit | |
173 | ||
174 | local function printCompNames() --Prints all output to screen. | |
175 | term.clear() | |
176 | term.setCursorPos(1,1) | |
177 | if background == false then | |
178 | getDefaultColors() | |
179 | end | |
180 | if onOrOff == "on" then | |
181 | write("Comps On'd:") | |
182 | elseif onOrOff == "off" then | |
183 | write("Comps Off'd:") | |
184 | end | |
185 | write(" (" .. #compNames .. ")\n") | |
186 | ||
187 | itemX = 1 | |
188 | itemY = 2 | |
189 | ||
190 | itemPosXes = {} | |
191 | itemPosYes = {} | |
192 | ||
193 | scrollOver = 0 | |
194 | doesntFit = false | |
195 | ||
196 | for a = 1, #compNames do | |
197 | term.setCursorPos(itemX,itemY) | |
198 | if compNames[a] ~= nil and compIDs[a] ~= nil then | |
199 | if itemX <= 8 then | |
200 | if itemY >= itemThreshold then | |
201 | itemX = itemX + 25 | |
202 | itemY = 1 | |
203 | else | |
204 | itemY = itemY + 1 | |
205 | end | |
206 | else | |
207 | if itemY >= scr_y - 1 then | |
208 | itemX = itemX + 25 | |
209 | itemY = 1 | |
210 | scrollOver = scrollOver + 1 | |
211 | else | |
212 | itemY = itemY + 1 | |
213 | end | |
214 | end | |
215 | posX, posY = term.getCursorPos() | |
216 | scr_x, scr_y = term.getSize() | |
217 | if scr_x - posX >= 25 then | |
218 | write(" " .. compNames[a]) | |
219 | write(" (id:" .. compIDs[a] .. ")") | |
220 | posX, posY = term.getCursorPos() | |
221 | table.insert(itemPosXes, posX) | |
222 | table.insert(itemPosYes, posY) | |
223 | else | |
224 | msg = "Screen is too small to list all computers" | |
225 | local messageX = scr_x - string.len(msg) | |
226 | term.setCursorPos(messageX,scr_y) | |
227 | write(msg) | |
228 | getDefaultColors() | |
229 | getBGColors() | |
230 | break | |
231 | end | |
232 | end | |
233 | end | |
234 | local menuY = scr_y - 3 | |
235 | term.setCursorPos(1,menuY) | |
236 | print("'R': reboot all") | |
237 | print("'B': run in background") | |
238 | print("'X': exit") | |
239 | writeCompFileList() | |
240 | maximumItems = itemThreshold + (scr_y * scrollOver) | |
241 | end | |
242 | ||
243 | local function turnCompsOn() | |
244 | for a = 1, #compNames do | |
245 | c = peripheral.wrap(compNames[a]) | |
246 | if c ~= nil then | |
247 | if onOrOff == "on" then | |
248 | c.turnOn() | |
249 | elseif onOrOff == "off" then | |
250 | c.shutdown() | |
251 | else | |
252 | error("'onOrOff' is neither \"on\" or \"off\"") | |
253 | end | |
254 | end | |
255 | end | |
256 | end | |
257 | ||
258 | local function rebootAllComps() | |
259 | local normalCursorY = #compNames + 7 | |
260 | term.setCursorPos(1,normalCursorY) | |
261 | oldLoadBarChar = loadBarChar | |
262 | loadBarChar = "R" | |
263 | loadAnimaion() | |
264 | getCompNames() | |
265 | for a = 1, #compNames do | |
266 | local c = peripheral.wrap(compNames[a]) | |
267 | if c ~= nil then | |
268 | c.reboot() | |
269 | end | |
270 | end | |
271 | printCompNames() | |
272 | sleep(0.1) | |
273 | loadBarChar = oldLoadBarChar | |
274 | loadAnimaion() | |
275 | end | |
276 | ||
277 | local function checkForComps() --Checks to see if there are any new computers, based on the compNames table. | |
278 | while true do | |
279 | oldCompNames = compNames | |
280 | getCompNames() | |
281 | turnCompsOn() | |
282 | if textutils.serialize(compNames) ~= textutils.serialize(oldCompNames) then | |
283 | if background == false then | |
284 | printCompNames() | |
285 | oldnames = names | |
286 | end | |
287 | end | |
288 | sleep(0.15) | |
289 | end | |
290 | end | |
291 | ||
292 | local function keyPress() | |
293 | if startupProg then | |
294 | background = true | |
295 | term.clear() | |
296 | term.setCursorPos(1,1) | |
297 | shell.run(startupProg) | |
298 | background = false | |
299 | getConfig() | |
300 | printCompNames() | |
301 | turnCompsOn() | |
302 | startupProg = nil | |
303 | end | |
304 | if background then | |
305 | background = true | |
306 | term.clear() | |
307 | term.setCursorPos(1,1) | |
308 | shell.run("/rom/programs/shell") | |
309 | background = false | |
310 | getConfig() | |
311 | printCompNames() | |
312 | turnCompsOn() | |
313 | end | |
314 | while true do | |
315 | local event, key = os.pullEvent("char") | |
316 | if key == "r" then | |
317 | rebootAllComps() | |
318 | end | |
319 | if key == "x" then | |
320 | term.setBackgroundColor(colors.black) | |
321 | --term.setTextColor(1) | |
322 | background = true | |
323 | printCompNames() | |
324 | return | |
325 | end | |
326 | if key == "b" then | |
327 | background = true | |
328 | term.setTextColor(colors.white) | |
329 | term.setBackgroundColor(colors.black) | |
330 | term.clear() | |
331 | term.setCursorPos(1,1) | |
332 | shell.run("/rom/programs/shell") | |
333 | background = false | |
334 | getConfig() | |
335 | printCompNames() | |
336 | turnCompsOn() | |
337 | end | |
338 | end | |
339 | end | |
340 | ||
341 | local function animateSpinLines() | |
342 | while true do | |
343 | for l = 1, #ani_spinLine do | |
344 | if background == false then | |
345 | for a = 1, #itemPosXes do | |
346 | if itemPosXes[a] ~= nil then | |
347 | drawX = (25 * round((itemPosXes[a] + 1) / 25) - 2) | |
348 | end | |
349 | if itemPosYes[a] ~= nil then | |
350 | drawY = itemPosYes[a] | |
351 | end | |
352 | term.setTextColor(1) | |
353 | if drawX <= scr_x and drawY <= scr_y then | |
354 | term.setCursorPos(drawX,drawY) | |
355 | c = peripheral.wrap(compNames[a]) | |
356 | if colormode then | |
357 | term.setTextColor(1) | |
358 | else | |
359 | term.setTextColor(colors.black) | |
360 | end | |
361 | if c ~= nil then | |
362 | if c.isOn() then | |
363 | itemNumber = l + (drawY + 1) | |
364 | if itemNumber > #ani_spinLine then | |
365 | repeat | |
366 | itemNumber = itemNumber - #ani_spinLine | |
367 | until itemNumber <= #ani_spinLine | |
368 | end | |
369 | write(ani_spinLine[itemNumber]) | |
370 | else | |
371 | write("*") | |
372 | end | |
373 | end | |
374 | end | |
375 | end | |
376 | getDefaultColors() | |
377 | end | |
378 | sleep(0.05) | |
379 | end | |
380 | end | |
381 | end | |
382 | ||
383 | local function animateLoadBar() | |
384 | while true do | |
385 | for l = 1, #ani_loadBar do | |
386 | if background == false then | |
387 | local drawX = 16 + string.len(#compNames) | |
388 | local drawY = 1 | |
389 | term.setCursorPos(drawX,drawY) | |
390 | if colormode then | |
391 | term.setTextColor(1) | |
392 | else | |
393 | term.setTextColor(colors.black) | |
394 | end | |
395 | write(ani_loadBar[l]) | |
396 | end | |
397 | sleep(0.06) | |
398 | end | |
399 | end | |
400 | end | |
401 | ||
402 | getCompNames() | |
403 | printCompNames() | |
404 | ||
405 | if rebootCompsAtStart then | |
406 | rebootAllComps() | |
407 | end | |
408 | ||
409 | if animations then | |
410 | parallel.waitForAny(checkForComps, keyPress, animateSpinLines, animateLoadBar) | |
411 | else | |
412 | parallel.waitForAny(checkForComps, keyPress) | |
413 | end | |
414 | ||
415 | normalCursorY = scr_y | |
416 | term.setCursorPos(1,normalCursorY) | |
417 | term.setTextColor(1) |