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
-- reactor_sender.lua -- Läuft an dem Computer, der direkt am Reaktor / Energiespeicher hängt. -- Starten: speichern unter reactor_sender.lua und ausführen. -- Öffne das Modem an der jeweiligen Seite, z.B. rednet.open("right") local modemSide = "right" -- falls dein Modem woanders ist, anpassen local serviceName = "POWAH_REACTOR" -- Broadcast/Service-Name local function safeOpenModem() if peripheral.getType(modemSide) == "modem" or peripheral.getType(modemSide) == "wireless_modem" then rednet.open(modemSide) return true end -- falls es nicht als modem erkannt wird, versuchen trotzdem local ok, _ = pcall(rednet.open, modemSide) return ok end local function findReactorPeripheral() -- Versucht, ein angeschlossenes Peripherie-Gerät zu finden, das Energie-Methoden hat. -- Prüft alle Peripherie-Namen am Computer. for _, name in ipairs(peripheral.getNames()) do local methods = peripheral.getMethods(name) local mset = {} for _, m in ipairs(methods) do mset[m] = true end -- gängige Methoden-Names prüfen if mset["getEnergyStored"] or mset["getMaxEnergyStored"] or mset["getEnergy"] or mset["getMaxEnergy"] or mset["getStored"] or mset["getCapacity"] or mset["getEnergyStoredForge"] then return name end end return nil end -- Flexible Abruf-Funktionen: versucht mehrere mögliche Methoden local function callIfExists(peri, ...) for i = 1, select("#", ...) do local m = select(i, ...) if peripheral.call(peri, m) ~= nil then -- return value (could be false/nil though); to be safe wrap pcall local ok, res = pcall(peripheral.call, peri, m) if ok then return res end end end return nil end local function pollReactor(peri) -- Gibt eine Tabelle zurück: {stored=number, capacity=number, producedPerTick=number} if not peri then return nil end local result = {} -- gespeicherte Energie local stored = nil stored = callIfExists(peri, "getEnergyStored", "getEnergy", "getStored", "getCurrentEnergy" ) -- Kapazität local capacity = nil capacity = callIfExists(peri, "getMaxEnergyStored", "getMaxEnergy", "getCapacity", "getMaxEnergy" ) -- Produktion (RF/t oder FE/t) local produced = nil produced = callIfExists(peri, "getEnergyGenerated", -- hypothetisch "getEnergyPerTick", "getRfPerTick", "getGenerationRate", "getPower" ) -- Manche Peripheries liefern ein Table mit feldern if type(stored) == "table" then if stored.stored then stored = stored.stored end if stored.energy then stored = stored.energy end end result.stored = tonumber(stored) or 0 result.capacity = tonumber(capacity) or 0 result.produced = tonumber(produced) or 0 return result end -- Hauptloop: wartet auf Anfragen per rednet und antwortet mit Status local function main() if not safeOpenModem() then print("Fehler: Konnte Modem nicht öffnen an Seite:", modemSide) return end print("Reactor sender gestartet. Suche nach Peripherie...") local peri = findReactorPeripheral() if not peri then print("Warnung: Keine passende Peripherie automatisch gefunden.") print("Peripherie-Liste:") for _,n in ipairs(peripheral.getNames()) do print("-", n) end else print("Gefundene Peripherie:", peri) end while true do -- wartet auf Anfrage (serviceName) local senderId, msg = nil, nil senderId, msg = rednet.receive(5) -- 5s timeout, damit wir sporadisch die Peripherien neu erkennen if msg == serviceName or (type(msg) == "table" and msg.request == "status") then -- erneutes Erkennen der Peripherie (falls z.B. Block neu gesetzt) peri = findReactorPeripheral() or peri local status = pollReactor(peri) rednet.send(senderId, status, serviceName) else -- timeout oder anderes: peridi neu suchen peri = findReactorPeripheral() or peri end end end main()
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)