Advertisement
qwertz19281

ComputerCraft Minecart counter (railstaion server)

Dec 29th, 2015
348
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.51 KB | None | 0 0
  1. function add(queue, val)
  2.     queue[(#queue)+1]=val
  3. end
  4.  
  5. function peek(queue)
  6.     if queue==nil or #queue<1 then
  7.         return nil
  8.     end
  9.     return queue[1]
  10. end
  11.  
  12. function shiftDown(queue)
  13.     if queue==nil or #queue<1 then
  14.         return false
  15.     elseif #queue==1 then
  16.         queue[1]=nil
  17.         return true
  18.     end
  19.     while i=2,#queue do
  20.         queue[i-1]=queue[i]
  21.     end
  22.     queue[#queue]=nil
  23.     return true
  24. end
  25. -- TODO: Waeten, bis ALLE Loren in den Puffern sind
  26. local modem=peripheral.wrap("top")
  27. modem.open(23365)
  28.  
  29. -- init
  30.  
  31. local bhl={}
  32. local qus={}
  33.  
  34. function ctlbh(bid)
  35.     modem.transmit(23365, 23365, {0,bid,unpack(bhl[bid].rds)})    
  36. end
  37.  
  38. function READRS(bid)
  39.     dao=true
  40.     while dao do
  41.         evt={os.pullEvent("modem_message")}
  42.         if (evt[3]==23365) and (evt[4]==23365) and (evt[5][2]==i) then
  43.             bhl[bid].rds={unpack(evt[5],3)}
  44.             dao=false
  45.         else
  46.             os.queueEvent(unpack(evt))
  47.         end
  48.     end
  49. end
  50.  
  51. function setmode(bh,md)
  52.     if md=0 then
  53.         bh=nil
  54.         NS=false
  55.     elseif md=1 then
  56.         modem.transmit(23365, 7, {bh.id}) -- REFRESH
  57.         NS=false
  58.     elseif md=2 then
  59.         bh.rds={false,false,false,true,false,false}
  60.         NS=true
  61.     elseif md=3 then
  62.         bh.rds={false,false,false,true,true,false}
  63.         NS=false
  64.     else
  65.         bh=nil
  66.         NS=false
  67.     end
  68.    
  69.     if bh~=nil then
  70.         bh.md=md
  71.     end
  72. end
  73. --modem.transmit(23365, 7, nil) -- Request ALL Stats!
  74.  
  75. for i=1,128 do
  76.     qus[i]={}
  77.     bhl[i]={
  78.         id=i
  79.         md=3 --0/nil=NOT INIT, 1=NORM, 2=NOT!!!!!!!, 3=NOWCLEAN
  80.         rds={false,false,false,true,true,false} --Redstone Panel
  81.         quvs={i-1,i} --Queue dir
  82.         lti={} -- Loren to insert
  83.     }
  84.     darr=true
  85.     warr=true
  86.     while darr do
  87.         bhl[i].rds[4]=warr
  88.         ctlbh(i) -- Send to clean Street
  89.         READRS(i)
  90.         if(evt[5][5])
  91.             darr=false --YEAR, LEER!
  92.         end
  93.         sleep(1)
  94.         warr=not warr
  95.     end
  96.     bhl[i].rds[4]=false
  97.     bhl[i].rds[5]=false
  98.     bhl[i].rds[6]=false
  99.     ctlbh(i)
  100.     bhl[i].md=1
  101.     if bhl[i].quvs[1]==0 then
  102.         bhl[i].quvs[1]==128
  103.     end
  104. end
  105.  
  106. while true do
  107.     for i=1,128 do
  108.         -- Request lors to be transmitted
  109.         modem.transmit(23369,23369,{bhl[i].id})
  110.         evt={os.pullEvent("modem_message")}
  111.         if (evt[3]==23369) and (evt[4]==23369) and (evt[5][1]==i) then
  112.             if(evt[5][2]~=nil) then
  113.                  add(bhl[i].lti,evt[5][2])
  114.             end
  115.         else
  116.             os.queueEvent(unpack(evt))
  117.         end
  118.         --/
  119.         --Insert if needed
  120.         pk=peek(bhl[i].lti[2])
  121.         while not((pk==nil) or (#pk<1)) do
  122.             shiftDown(bhl[i].lti) --Raus aus er Req
  123.             add(qus[bhl[i].quvs[2]],pk) --zur Queue
  124.             bhl[i].rds[6]=true --ReinlassAntrieb an
  125.             ctlbh(i)
  126.             oka=true
  127.             while oka do
  128.                 READRS(i)
  129.                 if bhl[i].rds[2] then
  130.                     oka=false
  131.                 end
  132.             end --OK, AusSchiene ist an!
  133.             bhl[i].rds[6]=false --ReinlassAntrieb aus
  134.             ctlbh(i)
  135.             oka=true
  136.             while oka do
  137.                 READRS(i)
  138.                 if not bhl[i].rds[2] then
  139.                     oka=false
  140.                 end
  141.             end --OK, AusSchiene ist aus!
  142.         end
  143.         --/
  144.         --NOW!!! Let out from Left and distribute!!! BamBamBam Baam!
  145.         tnr=nil
  146.         while bhl[i].rds[3] do
  147.             tnr=peek(qus[bhl[i].quvs[1]])
  148.             shiftDir(qus[bhl[i].quvs[1]])
  149.             if tnr==i then --Rein mit Dir, du hast das Ziel erreicht!!!
  150.                 bhl[i].rds[5]=true --CurveCtl reinlassen!
  151.                 ctlbh(i) --Update!
  152.             else
  153.                 bhl[i].rds[5]=true --CurveCtl aus!
  154.                 ctlbh(i) --Update!
  155.             end
  156.             bhl[i].rds[4]=true --Schleuse an!
  157.             ctlbh(i)
  158.             oka=true
  159.             while oka do
  160.                 READRS(i)
  161.                 if bhl[i].rds[2] then
  162.                     oka=false
  163.                 end
  164.             end --OK, AusSchiene ist an!
  165.             add(qus[bhl[i].quvs[2]],tnr)
  166.             bhl[i].rds[4]=false --Schleuse aus!
  167.             ctlbh(i)
  168.             oka=true
  169.             while oka do
  170.                 READRS(i)
  171.                 if not bhl[i].rds[2] then
  172.                     oka=false
  173.                 end
  174.             end --OK, AusSchiene ist aus!
  175.         end
  176.         --/
  177.     end
  178. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement