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 MODEM_SIDE = "bottom" local PROTOCOL = "rtm_switch" local CONFIG_FILE = "slave.cfg" local config = { outputs = { straight = {}, cross = {}, }, defaultState = "straight", } local state = "straight" local function saveConfig() local h = fs.open(CONFIG_FILE, "w") h.write(textutils.serialize(config)) h.close() end local function loadConfig() if not fs.exists(CONFIG_FILE) then saveConfig() return end local h = fs.open(CONFIG_FILE, "r") local raw = h.readAll() h.close() local t = textutils.unserialize(raw) if type(t) == "table" then config = t end end local function clearAll() for _, side in ipairs({"top","bottom","left","right","front","back"}) do if side ~= MODEM_SIDE then redstone.setOutput(side, false) end end end local function applyOutputs(list) clearAll() for _, side in ipairs(list or {}) do if side ~= MODEM_SIDE then redstone.setOutput(side, true) end end end local function applyState() if state == "straight" then applyOutputs(config.outputs.straight) else applyOutputs(config.outputs.cross) end end local function reply(targetId, extra) local payload = { ok = true, id = os.getComputerID(), state = state, } if type(extra) == "table" then for k, v in pairs(extra) do payload[k] = v end end rednet.send(targetId, payload, PROTOCOL) end loadConfig() state = config.defaultState or "straight" applyState() rednet.open(MODEM_SIDE) while true do local senderId, msg, protocol = rednet.receive(PROTOCOL) if type(msg) == "table" then if msg.cmd == "set" and (msg.state == "straight" or msg.state == "cross") then state = msg.state applyState() reply(senderId) elseif msg.cmd == "ping" then reply(senderId, {alive = true}) elseif msg.cmd == "get_config" then reply(senderId, {config = config}) end end 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)