LukasBor

CC_IR_switch_CNS_server

Feb 28th, 2021 (edited)
325
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --[[
  2. Server pro automatizaci vyhybek Immersive Railroading pomoci ComputerCraftu, instalace jako autorun:
  3. edit startup: multishell.launch({},"/Vyhybky.lua")
  4. pastebin get VAvHgZDv /Vyhybky.lua
  5.  
  6. Endermodem na strane "top" (komunikace CNS - odpovedi na dotaz, zda pro vlak aktivovat vyhybku a informace o poloze a smeru vlaku)
  7.  
  8. Prichozi: DVyhybka:tag (napr. "DHTJDepo:Dieselka" = DHTJDepo - Detector u vyhybky Hlavni Trat smer Jih u Depo, tag vlaku Dieselka).
  9. Odchozi: Vyhybka:1 (napr. "HTJDepo:1" = aktivuj vyhybku na Hlavni Trati ve smeru Jih na odbocce do Depa, nebo "...:0" pro klid).
  10.  
  11. Pokud pro prijaty detektor a dany vlak (jeho tag) existuje shoda, odesle se pozadavek na aktivaci vyhybky (není-li, posle se klid).
  12. Format seznamu detektoru a vlaku v souboru Vyhybky.txt je:
  13. {
  14. TagVlaku = {"jmena", "detektoru", "aktivujicich", "vyhybky"} -- dalsi tag jako nove podpole
  15. }
  16. --]]
  17.  
  18. -- Nacteni seznamu vlaku a jejich vyhybek ze souboru
  19. file = fs.open("Vyhybky.txt","r")
  20. Seznam = textutils.unserialize(file.readAll())
  21. file.close()
  22.  
  23. -- Kanal pro komunikaci s CNS
  24. local modemport = 6611
  25.  
  26. -- Potrebne komponenty
  27. local modem = peripheral.wrap("left")
  28. local monitor = peripheral.find("monitor")
  29.  
  30. -- Hlavni telo programu
  31. term.redirect(monitor)
  32. term.clear()
  33. term.setCursorPos(1,1)
  34. modem.open(modemport)
  35. print("Cekam na prijem dotazu ...")
  36. -- V nekonecne smycce cekame na zachyceni eventu...
  37. while true do
  38.   local event, modemSide, senderChannel, replyChannel, message, senderDistance = os.pullEvent("modem_message")
  39.   print("Prijato: "..message)
  40.   local act = false
  41.   local dvojtecka, _ = string.find(message,":")
  42.   local det = string.sub(message,2,dvojtecka-1)  -- Od druheho znaku (prvni znak je D) do znaku pred dvojteckou
  43.   local tag = string.sub(message,dvojtecka+1,-1) -- Od znaku za dvojteckou do posledniho (pozice -1 je posledni znak)
  44.   -- Pokud vlak nema tag, bude s nim CNS zachazet jako s tagem "testing"
  45.   if (string.len(tag) == 0) then tag = "testing"; print("Prazdny tag = \"testing\"") end
  46.   -- Vyhledani vyhybky podle tagu vlaku
  47.   for _,vyhybka in pairs(Seznam[tag]) do
  48.     -- Pokud je v seznamu, bude act = true a pokud ne, zustane act = false
  49.     if (det == vyhybka) then
  50.       act = true
  51.       break
  52.     end
  53.   end
  54.   -- Pokud je act = true, vyhybka je v seznamu a aktivujeme ji (jinak ji prepneme do klidu)
  55.   if (act) then
  56.     modem.transmit(modemport,modemport,det..":1")
  57.     print("Vyhybka "..det.." aktivni.")
  58.   else
  59.     modem.transmit(modemport,modemport,det..":0")
  60.     print("Vyhybka "..det.." v klidu.")
  61.   end
  62. end
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×