Advertisement
Guest User

zbieracz

a guest
Oct 29th, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 13.30 KB | None | 0 0
  1. id=4
  2. id2=163621
  3.  
  4. rap={wyd="tartak", fun="zbieracz", nse=2, orp=5, oka=2, zgd=0, zpp=12000, stn=0, akt=0, pal=0, pll=turtle.getFuelLevel(), sur=0, gpx=0, gpy=0, gpz=0, pro=0, fnn="", fno="startUp", rod="", nrd=0, var=0, kom="", psp=0, ptp=0, psd=0}
  5.  
  6. function aktualizuj() --do aktualizowania parametrow (w tle)
  7.   napisz("Uruchamiam funkcje aktualizacji.")
  8.   while true do
  9.     repeat
  10.       a5, b5, c5, d5, e5, f5=os.pullEvent("modem_message")
  11.     until e5.rod=="K"
  12.     rap.oka=e5.oka
  13.     rap.zgd=e5.zgd
  14.     rap.orp=e5.orp
  15.     rap.zpp=e5.zpp
  16.     -- tu bylo sleep(e5.oka)
  17.   end
  18. end
  19.  
  20. function raportuj() --do raportowania parametrow (w tle)
  21.   napisz("F: raportuj - Rozpoczynam raportowanie w tle")
  22.   while true do
  23.   local tablica={wyd=rap.wyd, fun=rap.fun, nse=rap.nse, orp=rap.orp, oka=rap.oka, zgd=rap.zgd, stn=rap.stn, akt=rap.akt, pal=rap.pal, pll=rap.pll, sur=rap.sur, gpx=rap.gpx, gpy=rap.gpy, gpz=rap.gpz, pro=rap.pro, fnn=rap.fnn, fno=rap.fno, rod="R", nrd=rap.nrd, var=rap.var, kom=rap.kom, psp=rap.psp, ptp=rap.ptp, psd=rap.psd, zpp=rap.zpp}
  24.     rap.pll=turtle.getFuelLevel()
  25.     modem.transmit(1, id, tablica)
  26.     sleep(rap.orp)
  27.   end
  28. end
  29.  
  30. function napisz(arg1) --do komentowania w ramach funkcji
  31.   local tablica={wyd=rap.wyd, fun=rap.fun, nse=rap.nse, oka=rap.oka, orp=rap.orp, zgd=rap.zgd, stn=rap.stn, akt=rap.akt, pal=rap.pal, pll=rap.pll, sur=rap.sur, gpx=rap.gpx, gpy=rap.gpy, gpz=rap.gpz, pro=rap.pro, rod="F", nrd=0, var=0, kom=arg1, fnn=rap.fnn, fno=rap.fno} --pobiera zmienne z tablicy glownej (wiekszosc) ale przypisuje wlasny rodzaj i tresc komunikatu
  32.   print(arg1)
  33.   modem.transmit(1, id, tablica)
  34. end
  35.  
  36. function uruchom_modem() -- uruchamia modem, zwraca true jesli otwarty na kanale id
  37.  
  38.   modem=peripheral.wrap("right")
  39.   modem.open(id)
  40.   if modem.isOpen(id)==true then
  41.     rap.fnn="W1"
  42.     rap.fno="uruchom_modem"
  43.     napisz("Modem otwarty na kanale"..id)
  44.     return true
  45.   else
  46.     print("Modem nie zostal otwarty")
  47.     return false
  48.   end
  49. end
  50.  
  51. function polaczenie_z_baza(arg1, arg2, arg3, arg4) --czeka na odpowiedz zwrotna na tablice rodzaju "P" o tresci: ARG1 (rodzaj pytania-nrd), ARG2 (tresc komunikatu-kom) przez ARG3 czasu i czynnosc te powtarza ARG4 razy. Zwraca tresc komentarza tablicy zwroconej (kom), jezeli spelnione zostaly warunki (zgodnosc zmiennej var).
  52.   rap.fnn="W2"
  53.   rap.fno="polaczenie_z_baza"
  54.   local warunek=0
  55.   local licz=0
  56.   napisz("Polaczenie_z_baza(): Wysylam pytanie numer:")
  57.   napisz(arg1)
  58.   repeat
  59.     local tablica={wyd=rap.wyd, fun=rap.fun, orp=rap.orp, zgd=rap.zgd, stn=rap.stn, akt=rap.akt, pal=rap.pal, pll=rap.pll, sur=rap.sur, gpx=rap.gpx, gpy=rap.gpy, gpz=rap.gpz, pro=rap.pro, rod="P", nrd=arg1, kom=arg2, var=id2, fnn=rap.fnn, fno=rap.fno}
  60.     modem.transmit(1, id, tablica)
  61.     napisz("Polaczenie_z_baza(): proba: "..licz)
  62.     os.startTimer(arg3)
  63.     repeat
  64.       a1, b1, c1, d1, e1, f1 = os.pullEvent()
  65.       if ((a1=="modem_message") and (e1.nrd==1) and (e1.rod=="P") and (e1.var==id2)) then
  66.         warunek=1
  67.       else
  68.         warunek=0
  69.       end
  70.     until (warunek==1) or (a1=="timer")
  71.     licz=licz+1
  72.   until (warunek==1) or (licz==arg4)    
  73.   if warunek==1 then
  74.     napisz("Otrzymalem wiadomosc zwrotna!")
  75.     return e1.kom
  76.   elseif a1=="timer" then
  77.     napisz("polaczenie_z_baza: Uplynal czas oczekiwania.")
  78.     return a1
  79.   else
  80.     napisz("Nieznany wynik funkcji.")
  81.   end    
  82. end
  83.  
  84. function sygnal(kierunek)
  85.   if kierunek=="przod" then
  86.     czyjest, blok=turtle.inspect()
  87.   elseif kierunek=="gora" then
  88.     czyjest, blok=turtle.inspectUp()
  89.   elseif kierunek=="dol" then
  90.     czyjest, blok=turtle.inspectDown()
  91.   else
  92.     napisz("F: sygnal - funkcja sygnal ze zlym parametrem")
  93.   end
  94.  
  95.   if czyjest==false then
  96.     znaleziono="nic"
  97.   elseif blok["name"]=="minecraft:log" then
  98.     znaleziono="drewno"
  99.   elseif blok["name"]=="minecraft:sapling" then
  100.     znaleziono="sadzonka"
  101.   elseif blok["name"]=="minecraft:glass" then
  102.     znaleziono="szklo"
  103.   elseif blok["name"]=="minecraft:chest" then
  104.     znaleziono="skrzynia"
  105.   elseif blok["name"]=="minecraft:leaves" then
  106.     znaleziono="lisc"
  107.   elseif blok["name"]=="minecraft:snow_layer" then
  108.     znaleziono="snieg"
  109.   elseif blok["name"]=="minecraft:nether_brick" then
  110.     znaleziono="ceglanetheru"
  111.   elseif blok["name"]=="minecraft:stone" then
  112.     znaleziono="kamien"
  113.   elseif blok["name"]=="minecraft:lit_pumpkin" then
  114.     znaleziono="lampion"
  115.   elseif blok["name"]=="minecraft:obsidian" then
  116.     znaleziono="obsydian"
  117.   elseif (blok["name"]=="minecraft:stained_glass") and (blok.state["color"]=="blue") then
  118.     znaleziono="szklo_niebieskie"
  119.   elseif (blok["name"]=="minecraft:stained_glass") and (blok.state["color"]=="red") then
  120.     znaleziono="szklo_czerwone"
  121.   elseif (blok["name"]=="minecraft:stained_glass") and (blok.state["color"]=="purple") then
  122.     znaleziono="szklo_purpurowe"
  123.   elseif (blok["name"]=="minecraft:stained_glass") and (blok.state["color"]=="yellow") then
  124.     znaleziono="szklo_zolte"
  125.   elseif (blok["name"]=="minecraft:stained_glass") and (blok.state["color"]=="orange") then
  126.     znaleziono="szklo_pomaranczowe"
  127.   elseif blok["name"]=="minecraft:dirt" then
  128.     znaleziono="ziemia"
  129.   elseif blok["name"]=="minecraft:grass" then
  130.     znaleziono="trawa"
  131.   else
  132.     znaleziono="inne"
  133.   end
  134.   return znaleziono
  135. end
  136.  
  137. -- koniec czesci ogolnej
  138.  
  139. function obroc()
  140.   while (sygnal("przod")~="szklo" and sygnal("przod")~="skrzynia") do
  141.   turtle.turnLeft()
  142.   end
  143. end
  144.  
  145. function ustaw(arg1)
  146.  
  147.   if (arg1=="rozladunek") or (arg1=="start") then
  148.     if sygnal("dol")=="szklo_pomaranczowe" then
  149.       obroc()
  150.       turtle.turnRight()
  151.       rusz()
  152.       rusz()
  153.       obroc()          
  154.     elseif sygnal("dol")=="szklo_czerwone" then
  155.       obroc()
  156.       turtle.turnRight()
  157.       rusz()
  158.       obroc()
  159.     elseif sygnal("dol")=="szklo_niebieskie" then
  160.       obroc()    
  161.     elseif sygnal("dol")=="szklo_zolte" then
  162.       obroc()
  163.       turtle.turnLeft()
  164.       rusz()
  165.       rusz()
  166.       rusz()
  167.       obroc()  
  168.     else
  169.       napisz("F:ustaw - wywolano funkcje w zlym miejscu")
  170.     end
  171.     if arg1=="start" then
  172.       turtle.turnLeft()
  173.       turtle.turnLeft()
  174.     end
  175.  
  176.   elseif arg1=="tankuj" then
  177.     if sygnal("dol")=="szklo_pomaranczowe" then
  178.       obroc()
  179.       turtle.turnRight()
  180.       rusz()
  181.       rusz()
  182.       rusz()
  183.       rusz()
  184.       rusz()
  185.       obroc()  
  186.     elseif sygnal("dol")=="szklo_czerwone" then
  187.       obroc()
  188.       turtle.turnRight()
  189.       rusz()
  190.       rusz()
  191.       rusz()
  192.       rusz()
  193.       obroc()
  194.     elseif sygnal("dol")=="szklo_niebieskie" then
  195.       obroc()
  196.       turtle.turnRight()
  197.       rusz()
  198.       rusz()
  199.       rusz()
  200.       obroc()
  201.     elseif sygnal("dol")=="szklo_zolte" then
  202.       obroc()
  203.     else
  204.       napisz("F:ustaw = wywolano funkcje w zlym miejscu")  
  205.     end  
  206.   elseif arg1=="sadzonki" then
  207.     if sygnal("dol")=="szklo_pomaranczowe" then
  208.       obroc()
  209.     elseif sygnal("dol")=="szklo_czerwone" then
  210.       obroc()
  211.       turtle.turnLeft()
  212.       rusz()
  213.       obroc()    
  214.     elseif sygnal("dol")=="szklo_niebieskie" then
  215.       obroc()
  216.       turtle.turnLeft()
  217.       rusz()
  218.       rusz()
  219.       obroc()
  220.     elseif sygnal("dol")=="szklo_zolte" then
  221.       obroc()
  222.       turtle.turnLeft()
  223.       rusz()
  224.       rusz()
  225.       rusz()
  226.       rusz()
  227.       rusz()
  228.       obroc()  
  229.     else
  230.       napisz("F:ustaw - wywolano funkcje w zlym miejscu")
  231.     end
  232.  
  233.   else  
  234.     napisz("F:ustaw - funkcja ze zlym parametrem")  
  235.   end
  236.  
  237. end
  238.  
  239. function rusz()
  240.   while turtle.forward()==false do
  241.     if (sygnal("przod")=="lisc") or (sygnal("przod")=="snieg") then
  242.       turtle.dig()
  243.     else
  244.       napisz("F:ruch - natrafilem na przeszkode")
  245.       sleep(5)
  246.     end
  247.   end
  248.   turtle.suck()
  249. end  
  250.  
  251. function seria()
  252.   local seria=rap.fno
  253.   rap.fno="seria"
  254.   if (sygnal("dol")=="szklo_niebieskie") or (sygnal("dol")=="szklo_pomaranczowe") or (sygnal("dol")=="szklo_purpurowe") or (sygnal("dol")=="szklo") then
  255.     napisz("F: ruch - Jestem na linii. Zaczynam isc")
  256.     rusz()
  257.     while (sygnal("dol")=="ziemia") or (sygnal("dol")=="trawa") do
  258.       rusz()
  259.     end
  260.     napisz("F: seria - Koniec linii.")
  261.   else
  262.     napisz("Nie jestem na linii. Nie mog isc.")
  263.     rap.pro=1
  264.   end
  265.   rap.fno=seria
  266. end
  267.  
  268. function zawroc()
  269.   local zawroc=rap.fno
  270.   rap.fno="zawroc"
  271.   if sygnal("dol")=="szklo_purpurowe" then  
  272.     napisz("F: zawroc - zawracam")
  273.     turtle.turnRight()
  274.     rusz()
  275.     turtle.turnRight()
  276.   elseif sygnal("dol")=="szklo_pomaranczowe" then  
  277.     napisz("F: zawroc - zawracam")
  278.     turtle.turnLeft()
  279.     rusz()
  280.     turtle.turnLeft()
  281.   else
  282.     napisz("F:zawroc - Nie jestem ustawiony na polu zawracania")
  283.   end
  284.   rap.fno=zawroc
  285. end
  286.  
  287. function seriaglowna()
  288.   seria()
  289.   zawroc()
  290.   seria()
  291.   zawroc()
  292.   seria()
  293.   zawroc()
  294.   seria()
  295. end
  296.  
  297. function czypusty()
  298.   local czypusty = rap.fno
  299.   rap.fno="czypusty"
  300.   local licz2=1
  301.   local znaleziono=0
  302.   repeat
  303.     if turtle.getItemCount(licz2)>0 then
  304.       znaleziono=1
  305.     end  
  306.     licz2=licz2+1
  307.   until licz2==17
  308.   if znaleziono==0 then
  309.     napisz("F:czypusty. Rozladowano")
  310.     return true
  311.   else
  312.     napisz("F:czypusty. Nie rozladowano!")
  313.     return false
  314.   end
  315.   rap.fno=czypusty
  316. end
  317.  
  318. function wysyp()
  319.   local wysyp=rap.fno
  320.   rap.fno="wysyp"
  321.   if (sygnal("dol")=="szklo_niebieskie") and (sygnal("przod")=="skrzynia") then
  322.     napisz("F: wysyp - zaczynam wysypywac")
  323.     local licz=1
  324.     repeat
  325.       turtle.select(licz)
  326.       turtle.drop()
  327.       licz=licz+1
  328.     until licz==17    
  329.   else
  330.     napisz("F:wysyp. Nie moge wysypac. Niewlasciwe pole.")
  331.     return false
  332.   end
  333.   rap.fno=wysyp
  334. end
  335.  
  336. function rozladunek()
  337.   if czypusty()==true then
  338.     napisz("F: rozladunek - nie ma potrzeby rozladunku")
  339.   else    
  340.     local rozladunek=rap.fno
  341.     rap.fno="rozladunek"
  342.     napisz("F: rozladunek - ustawiam do rozladunku")
  343.     ustaw("rozladunek")  
  344.     if (sygnal("dol")=="szklo_niebieskie") and sygnal("przod")=="skrzynia" then
  345.       napisz("Ustawiony na polu rozladunku. Wywoluje funkcje wysyp()")
  346.       wysyp()
  347.       if czypusty()==false then
  348.         rap.psp=1
  349.         napisz("F:rozladunek - skrzynia pelna!")      
  350.         ustaw("start")
  351.       else
  352.         rap.psp=0
  353.         napisz("F:rozladunek - material rozladowany")
  354.         ustaw("start")
  355.       end
  356.     else
  357.       napisz("F:rozladunek - nie stoje na pozycji do wysypu")
  358.     end
  359.   end  
  360.   rap.fno=rozladunek
  361. end
  362.  
  363. function tankuj()
  364.   local tankuj=rap.fno
  365.   rap.fno="tankuj"
  366.   if turtle.getFuelLevel()<rap.zpp then  
  367.     if czypusty()==true then
  368.       ustaw("tankuj")
  369.       if (sygnal("dol")=="szklo_zolte") and (sygnal("przod")=="skrzynia") then
  370.         napisz("F:tankuj. Rozpoczynam tankowanie")
  371.         turtle.select(1)
  372.         local tank=1
  373.         repeat
  374.           turtle.suck()
  375.           turtle.refuel()
  376.           tank=tank+1
  377.         until tank==10  
  378.         if turtle.getFuelLevel()<rap.zpp then
  379.           rap.ptp=1
  380.           napisz("Zatankowano - skrzynia z paliwem pusta, niedobor paliwa")
  381.         else
  382.           rap.ptp=0
  383.           napisz("Zatankowano - poziom paliwa OK")
  384.         end    
  385.       else
  386.         napisz("F:tankuj. Nie ustawiony do tankowania.")          
  387.       end
  388.       ustaw("start")
  389.     else
  390.       napisz("F:tankuj. Inwentaz nie oprozniony")  
  391.       ustaw("start")
  392.     end
  393.   else
  394.     napisz("F: tankuj. Bak pelny, nie ma potrzeby tankowania")  
  395.   end  
  396.   rap.fno=tankuj
  397. end
  398.  
  399. function gotowosc()
  400.   turtle.select(16)
  401.   local warunek=0
  402.   local data=turtle.getItemDetail()
  403.   napisz("Sprawdzam gotowosc. Paliwo zalecane to:")
  404.   napisz(rap.zpp)
  405.   if turtle.getFuelLevel()<rap.zpp then
  406.     warunek=1
  407.     napisz("F: gotowosc: brak paliwa")
  408.   elseif turtle.getItemCount(1)>0 then
  409.     warunek=1
  410.     napisz("F: gotowosc: zajety slot 1")
  411.   elseif turtle.getItemCount(4)>0 then
  412.     napisz("F: gotowosc: zajety slot 4")
  413.     warunek=1
  414.   elseif turtle.getItemCount(8)>0 then
  415.     napisz("F: gotowosc: zajety slot 8")
  416.     warunek=1
  417.   elseif turtle.getItemCount(16)>0 then
  418.     if data["name"]~="minecraft:sapling" then
  419.       napisz("F: gotowosc: zly przedmiot w slocie 16")
  420.       warunek=1
  421.     else
  422.       print("")
  423.     end
  424.   else
  425.     warunek=0
  426.   end  
  427.   turtle.select(1)
  428.   return warunek
  429. end
  430.  
  431. function cyklglowny()
  432.   local petla=1
  433.   while true do
  434.     if rap.zgd==1 then
  435.       rozladunek()
  436.       tankuj()
  437.       sadzonki()
  438.       if gotowosc()==0 then
  439.         print("tne!")
  440.         sleep(5)
  441.         seriawycinka()
  442.         zawroc()
  443.         powrot()
  444.         zawroc()
  445.         napisz("Koniec cyklu glownego. Czekam 100 sekund.")
  446.         sleep(100)
  447.       else
  448.         sleep(50)
  449.       end
  450.     else
  451.       napisz("Brak zgody na rozpoczecie cyklu. Proba:")
  452.       napisz(petla)
  453.       sleep(10)
  454.       petla=petla+1
  455.     end
  456.   end
  457. end
  458.  
  459. function nawiazpolaczenie()
  460.   if uruchom_modem()==true then
  461.     if polaczenie_z_baza(1, "Oczekuje na polaczenie", 5, 20)=="sygnal" then
  462.       return "2"
  463.     else
  464.       return "1"
  465.     end
  466.   else
  467.     return "0"
  468.   end
  469. end
  470.  
  471. function program()
  472.   ocenawstepna=nawiazpolaczenie()
  473.   if ocenawstepna=="0" then
  474.     print("Modem nieaktywny")
  475.   elseif ocenawstepna=="1" then
  476.     napisz("Brak polaczenia z baza")
  477.     raportuj()
  478.   elseif ocenawstepna=="2" then
  479.     parallel.waitForAny(cyklglowny, aktualizuj, raportuj)
  480.   else
  481.     print("Nieznany wynik funkcji program")
  482.   end
  483. end
  484. uruchom_modem()
  485. seriaglowna()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement