Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
local function proxy(name) return component.proxy(component.list("gpu")()) end local gpu = proxy("gpu") local w, h = gpu.getResolution() local TARGET_INSTABILITY = 2 local STABILIZER_ENERGY = 10000 local OUTPUT_RATE = 60000 local SLEEP_TIME = 3.0 local ERROR_SLEEP_TIME = 8.0 local CORE_TYPE = "warpdriveEnanReactorCore" local function pairsByKeys(t, f) local a = {} for n in pairs(t) do table.insert(a, n) end table.sort(a, f) local i = 0 local iter = function () i = i + 1 if a[i] == nil then return nil else return a[i], t[a[i]] end end return iter end local function configureRelease(core) local energy, capacity = core.energy() local pct = energy / capacity if pct > 0.9 then core.releaseRate(OUTPUT_RATE) else core.release(false) end end local function initialConfig(core) core.stabilizerEnergy(STABILIZER_ENERGY) core.instabilityTarget(100 - TARGET_INSTABILITY) configureRelease(core) core.enable(true) end local cursorY = 1 local function print(...) local resStr = "" for _, v in ipairs({...}) do resStr = resStr .. tostring(v) .. " " end if gpu.set(1, cursorY, resStr) then cursorY = cursorY + 1 end end local function clear() gpu.fill(1, 1, w, h, ' ') cursorY = 1 end local function drawState(cores) clear() print("Состояние ядер:") for addr, core in pairsByKeys(cores) do pcall(function() local instabil = {core.instability()} instabil = 100.0 - (instabil[1] + instabil[2] + instabil[3] + instabil[4]) / 4.0 local rmode = core.releaseRate() if rmode == "at_rate" then rmode = "rate" else rmode = "hold" end print(addr, "Energy: " .. tostring(core.energy()), "Stability: " .. tostring(instabil), "Release mode: " .. rmode) end) end end local function main() local cores = {} for addr, _ in pairs(component.list(CORE_TYPE)) do cores[addr] = component.proxy(addr) initialConfig(cores[addr]) end drawState(cores) local lastDrawedTime = computer.uptime() while true do -- Get event e = {computer.pullSignal(SLEEP_TIME)} if e[1] == "component_added" then local addr, ctype = e[2], e[3] if ctype == CORE_TYPE then cores[addr] = component.proxy(addr) initialConfig(cores[addr]) end elseif e[1] == "component_removed" then local addr, ctype = e[2], e[3] if ctype == CORE_TYPE then cores[addr] = nil end end local currentTime = computer.uptime() if currentTime > (lastDrawedTime + SLEEP_TIME) then for _, core in pairs(cores) do pcall(configureRelease, core) end drawState(cores) lastDrawedTime = currentTime end end end local s, e = xpcall(main(), function(err) return err .. "\n" .. debug.traceback(); end) if not s then clear() gpu.setForeground(0xFF0000) print(e) gpu.setForeground(0xFFFFFF) local startTime = computer.uptime() repeat computer.pullSignal(ERROR_SLEEP_TIME) until computer.uptime() > (startTime + ERROR_SLEEP_TIME) end
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)