SHOW:
|
|
- or go back to the newest paste.
| 1 | - | --[[This is a fix of the original version (https://pastebin.com/knPtJCjb). Thanks to https://pastebin.com/dyre9saS and https://pastebin.com/gyMNUyRb for providing a fix to the clock while I was distracted from this project. I've remade the getTime function to make it work with Timezones again]] |
| 1 | + | function putValue(line, text, color) |
| 2 | - | local mon = peripheral.find("monitor")
|
| 2 | + | local align = 30 - string.len(text) |
| 3 | - | local core = peripheral.find("draconic_rf_storage")
|
| 3 | + | term.setCursorPos(align, line) |
| 4 | - | local tier = 0 |
| 4 | + | term.setTextColor(color) |
| 5 | - | local colorShield = colors.white |
| 5 | + | print(text) |
| 6 | - | local colorCore = colors.white |
| 6 | + | |
| 7 | - | local input, output = peripheral.find("flux_gate")
|
| 7 | + | |
| 8 | - | local limitTransfer = true |
| 8 | + | function DrawBox(xMin, xMax, yMin, yMax, title) |
| 9 | - | local currentControls = "main" |
| 9 | + | term.setBackgroundColor(colors.gray) |
| 10 | - | local page = 1 |
| 10 | + | for xPos = xMin, xMax, 1 do |
| 11 | - | local putLimit = "" |
| 11 | + | term.setCursorPos(xPos, yMin) |
| 12 | - | local version = "1.0" |
| 12 | + | term.write(" ")
|
| 13 | - | local timediff = 0 |
| 13 | + | |
| 14 | - | local monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31}
|
| 14 | + | |
| 15 | term.setCursorPos(xMin, yPos) | |
| 16 | - | if fs.exists("logs.cfg") then
|
| 16 | + | term.write(" ")
|
| 17 | term.setCursorPos(xMax, yPos) | |
| 18 | - | file = io.open("logs.cfg", "w")
|
| 18 | + | term.write(" ")
|
| 19 | - | file:write("")
|
| 19 | + | |
| 20 | - | file:close() |
| 20 | + | for xPos = xMin, xMax, 1 do |
| 21 | term.setCursorPos(xPos, yMax) | |
| 22 | term.write(" ")
| |
| 23 | - | if fs.exists("config.cfg") then
|
| 23 | + | |
| 24 | term.setCursorPos(xMin + 4, yMin) | |
| 25 | - | file = io.open("config.cfg", "w")
|
| 25 | + | term.setBackgroundColor(colors.black) |
| 26 | - | file:write("Timezone: 0")
|
| 26 | + | term.write(" ")
|
| 27 | - | file:close() |
| 27 | + | term.write(title) |
| 28 | term.write(" ")
| |
| 29 | end | |
| 30 | - | mon.setTextScale(1) |
| 30 | + | |
| 31 | function DrawProgress(xMin, xMax, yMin, yMax, percentage) | |
| 32 | - | local function fileWrite(path, text) |
| 32 | + | yTotal = yMax - yMin |
| 33 | - | local file = io.open(path, "w") |
| 33 | + | for xPos = xMin, xMax, 1 do |
| 34 | - | file:write(text) |
| 34 | + | term.setCursorPos(xPos, yMin) |
| 35 | - | file:close() |
| 35 | + | for yPos = yMin, yMax, 1 do |
| 36 | yProgress = 1 - ((yPos - yMin) / yTotal) | |
| 37 | if yProgress <= percentage then | |
| 38 | - | local function fileWriteFromTable(path, t) |
| 38 | + | term.setPaletteColour(colors.green, 0x5cd65c) |
| 39 | - | local text = "" |
| 39 | + | term.setBackgroundColor(colors.green) |
| 40 | - | for _, line in pairs(t) do |
| 40 | + | else |
| 41 | - | text = text..line.."\n" |
| 41 | + | term.setPaletteColour(colors.red, 0xFF6666) |
| 42 | - | end |
| 42 | + | term.setBackgroundColor(colors.red) |
| 43 | - | fileWrite(path, text) |
| 43 | + | |
| 44 | term.setCursorPos(xPos, yPos) | |
| 45 | term.write(" ")
| |
| 46 | - | local function fileGetTable(path) |
| 46 | + | |
| 47 | - | if fs.exists(path) then |
| 47 | + | |
| 48 | - | local file = io.open(path, "r") |
| 48 | + | term.setBackgroundColor(colors.black) |
| 49 | - | local lines = {}
|
| 49 | + | |
| 50 | - | local i = 1 |
| 50 | + | |
| 51 | - | local line = file:read("*l")
|
| 51 | + | function putNumber(number) |
| 52 | - | while line ~= nil do |
| 52 | + | local round = 0 |
| 53 | - | lines[i] = line |
| 53 | + | local texts = "" |
| 54 | - | line = file:read("*l")
|
| 54 | + | |
| 55 | - | i = i +1 |
| 55 | + | if number >= 1000000000000000000 then |
| 56 | - | end |
| 56 | + | round = (number / 1000000000000000000) |
| 57 | - | file:close() |
| 57 | + | texts = string.sub(round, 0, 3) .. "ERF" |
| 58 | - | return lines |
| 58 | + | |
| 59 | - | end |
| 59 | + | if number >= 1000000000000000 then |
| 60 | - | return {}
|
| 60 | + | round = (number / 1000000000000000) |
| 61 | texts = string.sub(round, 0, 3) .. "PRF" | |
| 62 | else | |
| 63 | - | local function fileReplaceLine(path, n, text) |
| 63 | + | if number >= 1000000000000 then |
| 64 | - | local lines = fileGetTable(path) |
| 64 | + | round = (number / 1000000000000) |
| 65 | - | lines[n] = text |
| 65 | + | texts = string.sub(round, 0, 3) .. "TRF" |
| 66 | - | fileWriteFromTable(path, lines) |
| 66 | + | else |
| 67 | if number >= 1000000000 then | |
| 68 | round = (number / 1000000000) | |
| 69 | - | local function fileAppend(path, text) |
| 69 | + | texts = string.sub(round, 0, 3) .. "GRF" |
| 70 | - | local file = io.open(path, "a") |
| 70 | + | else |
| 71 | - | file:write(text.."\n") |
| 71 | + | if number >= 1000000 then |
| 72 | - | file:close() |
| 72 | + | round = (number / 1000000) |
| 73 | texts = string.sub(round, 0, 4) .. "MRF" | |
| 74 | else | |
| 75 | - | local function fileGetLength(path) |
| 75 | + | if number >= 1000 then |
| 76 | - | local file = io.open(path, "r") |
| 76 | + | round = (number / 1000) |
| 77 | - | local i = 0 |
| 77 | + | texts = string.sub(round, 0, 4) .. "kRF" |
| 78 | - | while file:read("*l") ~= nil do
|
| 78 | + | else |
| 79 | - | i = i +1 |
| 79 | + | texts = string.sub(number, 0, 3) .. " RF" |
| 80 | - | end |
| 80 | + | end |
| 81 | - | file:close() |
| 81 | + | end |
| 82 | - | return i |
| 82 | + | end |
| 83 | end | |
| 84 | end | |
| 85 | - | local function fileGetLines(path, startN, endN) |
| 85 | + | |
| 86 | - | local lines = fileGetTable(path) |
| 86 | + | |
| 87 | - | local linesOut = {}
|
| 87 | + | return texts |
| 88 | - | local x = 1 |
| 88 | + | |
| 89 | - | for i = startN, endN, 1 do |
| 89 | + | |
| 90 | - | linesOut[x] = lines[i] |
| 90 | + | -- Initialize our interface! |
| 91 | - | x = x + 1 |
| 91 | + | -- Find all of our peripherals |
| 92 | - | end |
| 92 | + | monitor = peripheral.find("monitor")
|
| 93 | - | return linesOut |
| 93 | + | battery = peripheral.find("inductionMatrix")
|
| 94 | ||
| 95 | -- Check and bind monitor | |
| 96 | - | local function editConfigFile(path,line,text) |
| 96 | + | if monitor == nil then |
| 97 | - | fileReplaceLine(path,line,text) |
| 97 | + | error("ER: No screen found to display!")
|
| 98 | else | |
| 99 | monitor.clear() | |
| 100 | - | local function detectInOutput() |
| 100 | + | term.redirect(monitor) |
| 101 | - | input, output = peripheral.find("flux_gate")
|
| 101 | + | term.setCursorPos(1, 1) |
| 102 | - | --print(input) |
| 102 | + | term.setBackgroundColor(colors.black) |
| 103 | - | --print(output) |
| 103 | + | |
| 104 | - | if core.getTransferPerTick() ~= 0 then |
| 104 | + | DrawBox(2, 17, 2, 25, "ENERGY") |
| 105 | - | if core.getTransferPerTick() < 0 then |
| 105 | + | |
| 106 | - | output.setSignalLowFlow(0) |
| 106 | + | |
| 107 | - | sleep(2) |
| 107 | + | -- Check if we have a battery |
| 108 | - | if core.getTransferPerTick() >= 0 then |
| 108 | + | if battery == nil then |
| 109 | - | --keep it |
| 109 | + | error("ER: No battery connected to computer")
|
| 110 | - | else |
| 110 | + | |
| 111 | - | output, input = peripheral.find("flux_gate")
|
| 111 | + | |
| 112 | - | end |
| 112 | + | -- -- Draw our static interface text |
| 113 | - | output.setSignalLowFlow(2147483647) |
| 113 | + | -- term.setCursorPos(1, 2); |
| 114 | - | input.setSignalLowFlow(2147483647) |
| 114 | + | -- print("Max RF:")
|
| 115 | - | elseif core.getTransferPerTick() > 0 then |
| 115 | + | -- term.setCursorPos(1, 3); |
| 116 | - | input.setSignalLowFlow(0) |
| 116 | + | -- print("Max Thru:")
|
| 117 | - | sleep(2) |
| 117 | + | term.setCursorPos(1, 1) |
| 118 | - | if core.getTransferPerTick() <= 0 then |
| 118 | + | DrawBox(2, 17, 20, 25, "CURRENT") |
| 119 | - | --keep it |
| 119 | + | term.setTextColor(colors.green) |
| 120 | - | else |
| 120 | + | term.setCursorPos(5, 22); |
| 121 | - | output, input = peripheral.find("flux_gate")
|
| 121 | + | print("In:")
|
| 122 | - | end |
| 122 | + | term.setTextColor(colors.red) |
| 123 | - | output.setSignalLowFlow(2147483647) |
| 123 | + | term.setCursorPos(12, 22); |
| 124 | - | input.setSignalLowFlow(2147483647) |
| 124 | + | print("Out:")
|
| 125 | - | end |
| 125 | + | -- term.setCursorPos(1, 7); |
| 126 | - | end |
| 126 | + | -- print("Cur Bal:")
|
| 127 | ||
| 128 | -- term.setCursorPos(1, 9); | |
| 129 | - | if peripheral.find("flux_gate") == nil then
|
| 129 | + | -- print("Stored:")
|
| 130 | - | limitTransfer = false |
| 130 | + | -- term.setCursorPos(1, 10); |
| 131 | - | else |
| 131 | + | -- print("Filled:")
|
| 132 | - | limitTransfer = true |
| 132 | + | -- term.setCursorPos(1, 11); |
| 133 | - | detectInOutput() |
| 133 | + | -- print("Critical:")
|
| 134 | ||
| 135 | -- Entering our infinite loop of checking the battery | |
| 136 | - | local function makeNumber2Digits(number) |
| 136 | + | -- This will refresh all information every 2 seconds |
| 137 | - | strNumber = tostring(number) |
| 137 | + | alarmIsRinging = false |
| 138 | - | if string.len(strNumber) == 1 then |
| 138 | + | alarmIsActive = false |
| 139 | - | return "0" .. strNumber |
| 139 | + | alarmCounter = 0 |
| 140 | ||
| 141 | - | return string.sub(strNumber, string.len(strNumber) - 2) |
| 141 | + | |
| 142 | ||
| 143 | -- batteryMaxCharge = battery.getMaxEnergy() | |
| 144 | -- batteryMaxInOuts = battery.getTransferCap() | |
| 145 | - | local function getTime(long) |
| 145 | + | -- -- putValue(2, putNumber(batteryMaxCharge), colors.lightBlue) |
| 146 | - | date_table = os.date("*t")
|
| 146 | + | -- -- putValue(3, putNumber(batteryMaxInOuts), colors.lightBlue) |
| 147 | ||
| 148 | - | hour, minute, second = date_table.hour, date_table.min, date_table.sec |
| 148 | + | -- -- Get our input/output/balance battery values |
| 149 | - | year, month, day = date_table.year, date_table.month, date_table.day |
| 149 | + | batteryCurrentIn = battery.getLastInput() |
| 150 | batteryCurrentOut = battery.getLastOutput() | |
| 151 | - | timezoneConfig = fileGetLines("config.cfg",1,1)
|
| 151 | + | |
| 152 | - | timedifflocal = tonumber(string.sub(timezoneConfig[1], 10)) |
| 152 | + | term.setTextColor(colors.green) |
| 153 | term.setCursorPos(4, 23); | |
| 154 | - | if hour + timedifflocal > 24 then |
| 154 | + | print(putNumber(batteryCurrentIn)) |
| 155 | - | if day + 1 > monthDays[month] then |
| 155 | + | |
| 156 | - | if month + 1 > 12 then |
| 156 | + | term.setTextColor(colors.red) |
| 157 | - | year = year + 1 |
| 157 | + | term.setCursorPos(11, 23); |
| 158 | - | month = 1 |
| 158 | + | print(putNumber(batteryCurrentOut)) |
| 159 | - | day = 1 |
| 159 | + | |
| 160 | - | hour = hour + timedifflocal - 24 |
| 160 | + | -- batteryCurrentBalance = batteryCurrentIn - batteryCurrentOut |
| 161 | - | else |
| 161 | + | -- batteryCurrentColor = (batteryCurrentBalance >= 0) and colors.green or colors.red |
| 162 | - | month = month + 1 |
| 162 | + | -- batteryCurrentSign = (batteryCurrentBalance >= 0) and "+" or "" |
| 163 | - | day = 1 |
| 163 | + | -- putValue(7, batteryCurrentSign .. putNumber(batteryCurrentBalance), batteryCurrentColor) |
| 164 | - | hour = hour + timedifflocal - 24 |
| 164 | + | |
| 165 | -- -- Get our statistical values | |
| 166 | -- batteryCurrentCharge = battery.getEnergy() | |
| 167 | - | day = day + 1 |
| 167 | + | -- putValue(9, putNumber(batteryCurrentCharge), colors.lightBlue) |
| 168 | - | hour = hour + timedifflocal - 24 |
| 168 | + | |
| 169 | batteryCurrentColor = colors.red | |
| 170 | - | elseif hour + timedifflocal < 0 then |
| 170 | + | batteryCurrentPercentage = battery.getEnergyFilledPercentage() * 100 |
| 171 | - | if day - 1 < 1 then |
| 171 | + | batteryCurrent = battery.getEnergyFilledPercentage() |
| 172 | - | if month -1 < 1 then |
| 172 | + | |
| 173 | - | year = year - 1 |
| 173 | + | if batteryCurrentPercentage > 30 then |
| 174 | - | month = 12 |
| 174 | + | batteryCurrentColor = colors.orange |
| 175 | - | day = monthDays[12] |
| 175 | + | |
| 176 | - | hour = hour + timedifflocal + 24 |
| 176 | + | if batteryCurrentPercentage > 60 then |
| 177 | - | else |
| 177 | + | batteryCurrentColor = colors.green |
| 178 | - | month = month - 1 |
| 178 | + | |
| 179 | - | day = monthDays[month] |
| 179 | + | -- putValue(10, string.sub(putNumber(batteryCurrentPercentage), 0, 4) .. "%", batteryCurrentColor) |
| 180 | - | hour = hour + timedifflocal + 24 |
| 180 | + | |
| 181 | term.setCursorPos(1, 1) | |
| 182 | DrawProgress(5, 14, 4, 16, batteryCurrent) | |
| 183 | - | day = day - 1 |
| 183 | + | |
| 184 | - | hour = hour + timedifflocal + 24 |
| 184 | + | term.setCursorPos(1, 1) |
| 185 | term.setTextColor(batteryCurrentColor) | |
| 186 | term.setCursorPos(7, 18); | |
| 187 | - | hour = hour + timedifflocal |
| 187 | + | print(string.sub(batteryCurrentPercentage, 0, 5) .. "%") |
| 188 | term.setBackgroundColor(colors.black) | |
| 189 | - | if long then |
| 189 | + | |
| 190 | - | return string.format("%s.%s.%d %s:%s:%s", makeNumber2Digits(day), makeNumber2Digits(month), year, makeNumber2Digits(hour), makeNumber2Digits(minute), makeNumber2Digits(second))
|
| 190 | + | -- Hey, ring the alarm! |
| 191 | if batteryCurrentPercentage > 10 then | |
| 192 | - | return string.format("%s.%s.%d %s:%s", makeNumber2Digits(day), makeNumber2Digits(month), year, makeNumber2Digits(hour), makeNumber2Digits(minute))
|
| 192 | + | alarmIsRinging = false |
| 193 | alarmIsActive = false | |
| 194 | end | |
| 195 | ||
| 196 | - | local function getLogs(path, xPos, yPos) |
| 196 | + | if batteryCurrentPercentage < 10 and alarmIsActive == false then |
| 197 | - | local Logs = fileGetLines(path, fileGetLength(path)-5, fileGetLength(path)) |
| 197 | + | alarmIsRinging = true |
| 198 | - | for i = 1, 6, 1 do |
| 198 | + | alarmIsActive = true |
| 199 | - | mon.setCursorPos(xPos+2,yPos+1+i) |
| 199 | + | alarmCounter = 0 |
| 200 | - | mon.write(Logs[i]) |
| 200 | + | redstone.setOutput("back", true)
|
| 201 | - | end |
| 201 | + | |
| 202 | ||
| 203 | if alarmIsRinging == true then | |
| 204 | - | local function addLog(path, time, text) |
| 204 | + | alarmCounter = alarmCounter + 1 |
| 205 | - | fileAppend(path, "["..time.."]") |
| 205 | + | if alarmCounter >= 10 then |
| 206 | - | fileAppend(path, text) |
| 206 | + | redstone.setOutput("back", false)
|
| 207 | alarmIsRinging = false | |
| 208 | end | |
| 209 | - | local function round(num, idp) |
| 209 | + | |
| 210 | - | local mult = 10^(idp or 0) |
| 210 | + | |
| 211 | - | return math.floor(num * mult + 0.5) / mult |
| 211 | + | -- Wait 2s until next iteration |
| 212 | os.sleep(1) | |
| 213 | ||
| 214 | - | local function convertRF(rf) |
| 214 | + | |
| 215 | - | rfString = "" |
| 215 | + |