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) |