Advertisement
Koridev

rc

Mar 27th, 2025 (edited)
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.33 KB | None | 0 0
  1. -- reactor_client.lua
  2. -- Client-Skript, das auf Nachrichten (rednet) reagiert
  3. -- und die von dir gefundenen Methoden bereitstellt.
  4.  
  5. -----------------------------------------
  6. -- KONFIG
  7. -----------------------------------------
  8. local reactorSide = "back"   -- Dort, wo dein Reactor-Port ist
  9. local modemSide   = "top"    -- Modem (Wireless/Wired)
  10.  
  11. -----------------------------------------
  12. -- INIT
  13. -----------------------------------------
  14. local reactor = peripheral.wrap(reactorSide)
  15. if not reactor then
  16.   error("Reaktor-Port an Seite '"..reactorSide.."' nicht gefunden!")
  17. end
  18.  
  19. local modem = peripheral.wrap(modemSide)
  20. if not modem then
  21.   error("Modem an Seite '"..modemSide.."' nicht gefunden!")
  22. end
  23. rednet.open(modemSide)
  24.  
  25. print("Reaktor-Client gestartet. ID:", os.getComputerID())
  26. print("Warte auf Kommandos via rednet...")
  27.  
  28. -----------------------------------------
  29. -- HAUPTSCHLEIFE
  30. -----------------------------------------
  31. while true do
  32.   local senderID, msg, proto = rednet.receive("REACTOR_PROTO")
  33.   -- Wir erwarten msg = { cmd="...", ... }
  34.   if type(msg) ~= "table" or not msg.cmd then
  35.     rednet.send(senderID, {error="Ungültiges Kommando"}, "REACTOR_PROTO")
  36.   else
  37.     local cmd = msg.cmd
  38.  
  39.     if cmd == "GET_DATA" then
  40.       -- Sammle alle Daten, die wir haben wollen:
  41.       local active   = reactor.getActive()
  42.       local rfTick   = reactor.getEnergyProducedLastTick() or 0
  43.       local fuelAmt  = reactor.getFuelAmount() or 0
  44.       local fuelMax  = reactor.getFuelAmountMax() or 1
  45.       local fuelCons = reactor.getFuelConsumedLastTick() or 0
  46.       local reac     = reactor.getFuelReactivity() or 0
  47.       local temp     = reactor.getFuelTemperature() or 0
  48.       local casingT  = reactor.getCasingTemperature() or 0
  49.       local rods     = reactor.getNumberOfControlRods()
  50.      
  51.       local rodLevel = 0
  52.       if rods > 0 then
  53.         rodLevel = reactor.getControlRodLevel(0)  -- oder Mittelwert, etc.
  54.       end
  55.  
  56.       local energyStored  = reactor.getEnergyStored() or 0
  57.       local energyCap     = reactor.getEnergyCapacity() or 1
  58.  
  59.       local data = {
  60.         active         = active,
  61.         energyProduced = rfTick,
  62.         fuelAmount     = fuelAmt,
  63.         fuelAmountMax  = fuelMax,
  64.         fuelConsumed   = fuelCons,
  65.         reactivity     = reac,
  66.         fuelTemp       = temp,
  67.         casingTemp     = casingT,
  68.         rodLevel       = rodLevel,
  69.         rods           = rods,
  70.         energyStored   = energyStored,
  71.         energyCapacity = energyCap
  72.       }
  73.       rednet.send(senderID, data, "REACTOR_PROTO")
  74.  
  75.     elseif cmd == "SET_ACTIVE" then
  76.       if type(msg.active)=="boolean" then
  77.         reactor.setActive(msg.active)
  78.         rednet.send(senderID, {ok=true}, "REACTOR_PROTO")
  79.       else
  80.         rednet.send(senderID, {error="active muss boolean sein"}, "REACTOR_PROTO")
  81.       end
  82.  
  83.     elseif cmd == "SET_ROD_LEVEL" then
  84.       if type(msg.level)=="number" then
  85.         local rods = reactor.getNumberOfControlRods()
  86.         for i=0, rods-1 do
  87.           reactor.setControlRodLevel(i, msg.level)
  88.         end
  89.         rednet.send(senderID, {ok=true}, "REACTOR_PROTO")
  90.       else
  91.         rednet.send(senderID, {error="level muss number sein"}, "REACTOR_PROTO")
  92.       end
  93.  
  94.     else
  95.       rednet.send(senderID, {error="Unbekanntes cmd: "..tostring(cmd)}, "REACTOR_PROTO")
  96.     end
  97.   end
  98. end
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement