Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- id=2
- id2=163621
- rap={wyd="tartak", fun="drwal", nse=2, orp=5, oka=2, zgd=0, 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=""}
- program=1
- aktywnosc=0
- P1={rodzaj="P1", tekst="Czy baza aktywna?"}
- P2={rodzaj="P2", tekst="Czy pracowac?"}
- function aktualizuj() --do aktualizowania parametrow (w tle)
- napisz("Uruchamiam funkcje aktualizacji.")
- while true do
- repeat
- a5, b5, c5, d5, e5, f5=os.pullEvent("modem_message")
- until e5.rod=="K"
- rap.oka=e5.oka
- rap.zgd=e5.zgd
- rap.orp=e5.orp
- sleep(rap.oka)
- end
- end
- function raportuj() --do raportowania parametrow (w tle)
- while true do
- 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}
- rap.pll=turtle.getFuelLevel()
- modem.transmit(1, id, tablica)
- sleep(rap.orp)
- end
- end
- function napisz(arg1) --do komentowania w ramach funkcji
- 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
- print(arg1)
- modem.transmit(1, id, tablica)
- end
- function uruchom_modem() - uruchamia modem, zwraca true jesli otwarty na kanale id
- modem=peripheral.wrap("right")
- modem.open(id)
- if modem.isOpen(id)==true then
- rap.fnn="W1"
- rap.fno="uruchom_modem"
- napisz("Modem otwarty na kanale"..id)
- else
- print("Modem nie zostal otwarty")
- end
- end
- function wyslij(arg1) --(raczej do usuniecia)
- tablica = {numer=id, stan=aktywnosc, rodzaj=arg1.rodzaj, tekst=arg1.tekst}
- modem.transmit(1, id, tablica)
- end
- function odpbazy(q1, q2) -- do niczego nie powinno teraz sluzyc, ewentualnie zostawic
- os.startTimer(q2)
- repeat
- a1, b1, c1, d1, e1, f1 = os.pullEvent()
- until ((a1=="modem_message") and (q1==e1.rodzaj)) or (a1=="timer")
- if (a1=="modem_message") and (q1==e1.rodzaj) then
- return e1.tekst
- elseif a1=="timer" then
- return a1
- end
- end
- 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).
- rap.fnn="W2"
- rap.fno="polaczenie_z_baza"
- local warunek=0
- local licz=0
- napisz("Polaczenie_z_baza(): Wysylam pytanie numer:")
- napisz(arg1)
- repeat
- 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}
- modem.transmit(1, id, tablica)
- napisz("Polaczenie_z_baza(): proba: "..licz)
- os.startTimer(arg3)
- repeat
- a1, b1, c1, d1, e1, f1 = os.pullEvent()
- if ((a1=="modem_message") and (e1.nrd==1) and (e1.rod=="P") and (e1.var==id2)) then
- warunek=1
- else
- warunek=0
- end
- until (warunek==1) or (a1=="timer")
- licz=licz+1
- until (warunek==1) or (licz==arg4)
- if warunek==1 then
- napisz("Otrzymalem wiadomosc zwrotna!")
- return e1.kom
- elseif a1=="timer" then
- napisz("polaczenie_z_baza: Uplynal czas oczekiwania.")
- return a1
- else
- napisz("Nieznany wynik funkcji.")
- end
- end
- function sluchaj(arg1, arg2) --przy obecnej koncepcji niepotrzebne, ew. do wykorzystania pozniej
- local odp=odpbazy(arg1.rodzaj, arg2)
- return odp
- end
- function czypracowac() --do wyrzucenia, operujemy na zmiennych
- local odp=sluchaj(P2, 10)
- if odp=="TAK" then
- print("Mozna pracowac!")
- return odp
- elseif odp=="NIE" then
- print("Koniec pracy")
- return odp
- else
- print("Inny komunikat")
- end
- end
- function sygnal(kierunek)
- if kierunek=="przod" then
- czyjest, blok=turtle.inspect()
- elseif kierunek=="gora" then
- czyjest, blok=turtle.inspectUp()
- elseif kierunek=="dol" then
- czyjest, blok=turtle.inspectDown()
- else
- napisz("F: sygnal - funkcja sygnal ze zlym parametrem")
- end
- if czyjest==false then
- znaleziono="nic"
- elseif blok["name"]=="minecraft:log" then
- znaleziono="drewno"
- elseif blok["name"]=="minecraft:sapling" then
- znaleziono="sadzonka"
- elseif blok["name"]=="minecraft:glass" then
- znaleziono="szklo"
- elseif blok["name"]=="minecraft:chest" then
- znaleziono="skrzynia"
- elseif blok["name"]=="minecraft:leaves" then
- znaleziono="lisc"
- elseif blok["name"]=="minecraft:snow_layer" then
- znaleziono="snieg"
- elseif blok["name"]=="minecraft:nether_brick" then
- znaleziono="ceglanetheru"
- elseif blok["name"]=="minecraft:stone" then
- znaleziono="kamien"
- elseif blok["name"]=="minecraft:lit_pumpkin" then
- znaleziono="lampion"
- elseif blok["name"]=="minecraft:obsidian" then
- znaleziono="obsydian"
- elseif (blok["name"]=="minecraft:stained_glass") and (blok.state["color"]=="blue") then
- znaleziono="szklo_niebieskie"
- elseif (blok["name"]=="minecraft:stained_glass") and (blok.state["color"]=="red") then
- znaleziono="szklo_czerwone"
- elseif (blok["name"]=="minecraft:stained_glass") and (blok.state["color"]=="purple") then
- znaleziono="szklo_purpurowe"
- elseif (blok["name"]=="minecraft:stained_glass") and (blok.state["color"]=="yellow") then
- znaleziono="szklo_zolte"
- elseif (blok["name"]=="minecraft:stained_glass") and (blok.state["color"]=="orange") then
- znaleziono="szklo_pomaranczowe"
- else
- znaleziono="inne"
- end
- return znaleziono
- end
- function ruch()
- local ruch=rap.fno
- rap.fno="ruch"
- if sygnal("dol")=="ceglanetheru" then
- napisz("F: ruch - Jestem na linii. Zaczynam isc")
- while sygnal("dol")=="ceglanetheru" do
- if (sygnal("przod")=="lisc") or (sygnal("przod")=="snieg") then
- turtle.dig()
- end
- turtle.suck()
- turtle.forward()
- end
- napisz("F: ruch - Koniec linii.")
- else
- napisz("Nie jestem na linii. Nie mog isc.")
- rap.pro=1
- end
- rap.fno=ruch
- end
- function wytnijpion()
- local wytnijpion = rap.fno
- rap.fno="wytnij_pion"
- napisz("Zaczynam funkcje wytnijpion.")
- local licz=0
- while (sygnal("przod")=="drewno") or (sygnal("gora")=="drewno") do
- turtle.dig()
- turtle.digUp()
- turtle.up()
- licz=licz+1
- napisz("Scialem pionow:")
- napisz(licz)
- end
- napisz("F: wytnijpion - zjezdzam w dol")
- while turtle.down()==true do
- end
- turtle.dig()
- napisz("Koniec funkcji wytnij_pion")
- rap.fno=wytnijpion
- end
- function posadzswierka()
- local posadzswierka=rap.fno
- rap.fno="posadzswierka"
- turtle.select(16)
- slot = turtle.getItemDetail()
- if (slot.name=="minecraft:sapling") and (slot.count>4) then
- napisz("F:posadzswierka - zaczynam sadzic na 4 polach")
- turtle.digUp()
- turtle.up()
- turtle.placeDown()
- turtle.dig()
- turtle.forward()
- turtle.placeDown()
- turtle.turnRight()
- turtle.dig()
- turtle.forward()
- turtle.placeDown()
- turtle.turnRight()
- turtle.dig()
- turtle.forward()
- turtle.placeDown()
- turtle.turnLeft()
- turtle.turnLeft()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.digDown()
- turtle.down()
- else
- napisz("F: posadzswierka - Brak sadzonek. Ide dalej")
- turtle.turnRight()
- turtle.forward()
- turtle.turnLeft()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- end
- turtle.select(1)
- rap.fno=posadzswierka
- end
- function wycinka()
- local wycinka=rap.fno
- rap.fno="wycinka"
- if sygnal("dol")=="obsydian" then
- napisz("F: wycinka - Ustawiony do ciecia. Zaczynam wycinke.")
- turtle.dig()
- turtle.forward()
- wytnijpion()
- turtle.turnLeft()
- turtle.dig()
- turtle.forward()
- turtle.turnRight()
- wytnijpion()
- posadzswierka()
- else
- napisz("F: wycinka - wywolano wycinke w zlym miejscu")
- end
- rap.fno=wycinka
- end
- function zawroc()
- local zawroc=rap.fno
- rap.fno="zawroc"
- if sygnal("dol")=="szklo_czerwone" then
- napisz("F: zawroc - zawracam")
- turtle.turnRight()
- turtle.dig()
- turtle.forward()
- turtle.turnRight()
- else
- napisz("F:zawroc - Nie jestem ustawiony na polu zawracania")
- end
- rap.fno=zawroc
- end
- function powrot()
- local powrot=rap.fno
- rap.fno="powrot"
- napisz("F: powrot - Zaczynam funkcje powrot")
- if sygnal("dol")=="szklo_purpurowe" then
- while (sygnal("dol")=="szklo_purpurowe") or (sygnal("dol")=="kamien") or (sygnal("dol")=="lampion") do
- turtle.suck()
- if (sygnal("przod")=="lisc") or (sygnal("przod")=="snieg") then
- turtle.dig()
- end
- turtle.forward()
- end
- if sygnal("dol")=="szklo_czerwone" then
- napisz("Koniec powrotu. Pole poprawne.")
- else
- napisz("F: powrot - Powrot zakonczony niepoprawnie.")
- end
- else
- napisz("F: powrot - Nie jestem ustawiony na starcie powrotu")
- end
- rap.fno=powrot
- end
- function seriawycinka()
- local seriawycinka=rap.fno
- rap.fno="seriawycinka"
- napisz("Zaczynam funkcje seriawycinka")
- if sygnal("dol")=="szklo_niebieskie" then
- turtle.dig()
- turtle.forward()
- repeat
- ruch()
- wycinka()
- until sygnal("dol")=="szklo_czerwone"
- else
- napisz("F: seriawycinka - Nie jestem ustawiony na starcie serii wycinki.")
- end
- rap.fno=seriawycinka
- end
- function czypusty()
- local czypusty = rap.fno
- rap.fno="czypusty"
- local licz2=1
- local znaleziono=0
- repeat
- if turtle.getItemCount(licz2)>0 then
- znaleziono=1
- end
- licz2=licz2+1
- until licz2==17
- if znaleziono==0 then
- napisz("F:czypusty. Rozladowano")
- return true
- else
- napisz("F:czypusty. Nie rozladowano!")
- return false
- end
- rap.fno=czypusty
- end
- function wysyp()
- local wysyp=rap.fno
- rap.fno="wysyp"
- if (sygnal("dol")=="szklo_niebieskie") and (sygnal("przod")=="skrzynia") then
- napisz("F: wysyp - zaczynam wysypywac")
- local licz=1
- repeat
- turtle.select(licz)
- turtle.drop()
- licz=licz+1
- until licz==17
- if czypusty()==true then
- napisz("F:wysyp. Material wysypany.")
- return true
- else
- napisz("F:wysyp. Wysypywanie nieskuteczne.")
- return false
- end
- else
- napisz("F:wysyp. Nie moge wysypac. Niewlasciwe pole.")
- return false
- end
- rap.fno=wysyp
- end
- function rozladunek()
- local rozladunek=rap.fno
- rap.fno="rozladunek"
- if sygnal("dol")=="szklo_czerwone" then
- napisz("Pole czerwone. Ustawiam do rozladunku")
- if sygnal("przod")~="szklo" then
- repeat
- turtle.turnLeft()
- until sygal("przod")=="szklo"
- end
- turtle.turnRight()
- turtle.dig()
- turtle.forward()
- turtle.turnLeft()
- elseif sygnal("dol")=="szklo_zolte" then
- napisz("Pole zolte. Ustawiam do rozladunku.")
- if sygnal("przod")~="skrzynia" then
- repeat
- turtle.turnLeft()
- until sygnal("przod")=="skrzynia"
- end
- turtle.turnLeft()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.turnRight()
- elseif sygnal("dol")=="szklo_niebieskie" then
- if sygnal("przod")~="skrzynia" then
- repeat
- turtle.turnLeft()
- until sygnal("przod")=="skrzynia"
- end
- elseif sygnal("dol")=="szklo_pomaranczowe" then
- napisz("Pole pomaranczowe. Ustawiam do rozladunku")
- if sygnal("przod")~="skrzynia" then
- repeat
- turtle.turnLeft()
- until sygnal("przod")=="skrzynia"
- end
- turtle.turnRight()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.turnLeft()
- else
- napisz("F:rozladunek. Nie stoje na pozycji do ustawiania")
- end
- if (sygnal("dol")=="szklo_niebieskie") and sygnal("przod")=="skrzynia" then
- napisz("Ustawiony na polu rozladunku. Wywoluje funkcje wysyp()")
- wysyp()
- turtle.turnLeft()
- turtle.turnLeft()
- else
- napisz("F:rozladunek - nie stoje na pozycji do wysypu")
- end
- rap.fno=rozladunek
- end
- function tankuj()
- local tankuj=rap.fno
- rap.fno="tankuj"
- if czypusty()==true then
- if (sygnal("dol")=="szklo_zolte") and (sygnal("przod")=="skrzynia") then
- napisz("F:tankuj. Rozpoczynam tankowanie")
- turtle.select(1)
- local tank=1
- repeat
- turtle.suck()
- turtle.refuel()
- tank=tank+1
- until tank==16
- napisz("F:tankuj. Zakonczono tankowanie. Poziom paliwa:")
- napisz(turtle.getFuelLevel())
- else
- napisz("F:tankuj. Nie ustawiony do tankowania.")
- end
- else
- napisz("F:tankuj. Inwentaz nie oprozniony")
- end
- rap.fno=tankuj
- end
- function tankowanie()
- local tankowanie=rap.fno
- rap.fno="tankowanie"
- if turtle.getFuelLevel()<2000 then
- if sygnal("dol")=="szklo_niebieskie" then
- napisz("Pole niebiesie. Ustawiam do tankowania")
- repeat
- turtle.turnLeft()
- until sygnal("przod")=="skrzynia"
- turtle.turnRight()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.turnLeft()
- tankuj()
- elseif sygnal("dol")=="szklo_czerwone" then
- napisz("Pole czerwone. Ustawiam do tankowania")
- repeat
- turtle.turnLeft()
- until sygnal("dol")=="szklo"
- turtle.turnRight()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.turnLeft()
- tankuj()
- elseif sygnal("dol")=="szklo_zolte" then
- napisz("Pole wlasciwe do tankowania")
- repeat
- turtle.turnLeft()
- until sygnal("przod")=="skrzynia"
- tankuj()
- else
- napisz("F:tankowanie. Nie jestem ustawiony na pozycji wyjsciowej")
- end
- else
- napisz("F:tankowanie. Bak pelny. Nie ma potrzeby ustawiania")
- end
- rap.fno=tankowanie
- end
- function ust_pobor_sadzonek()
- local ust_pobor_sadzonek=rap.fno
- rap.fno="ust_pobor_sadzonek"
- if sygnal("dol")=="szklo_zolte" then
- napisz("Pole zolte. Ustawiam do poboru sadzonek.")
- if sygnal("przod")~="skrzynia" then
- repeat
- turtle.turnLeft()
- until sygnal("przod")=="skrzynia"
- end
- turtle.turnLeft()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.turnRight()
- elseif sygnal("dol")=="szklo_niebieskie" then
- napisz("Szklo niebieskie. Ustawiam do poboru sadzonek")
- if sygnal("przod")~="skrzynia" then
- repeat
- turtle.turnLeft()
- until sygnal("przod")=="skrzynia"
- end
- turtle.turnLeft()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.turnRight()
- elseif sygnal("dol")=="szklo_czerwone" then
- napisz("Pole czerwone. Ustawiam do poboru sadzonek")
- if sygnal("przod")~="szklo" then
- repeat
- turtle.turnLeft()
- until sygnal("przod")=="szklo"
- end
- turtle.turnLeft()
- turtle.dig()
- turtle.forward()
- turtle.turnRight()
- elseif sygnal("dol")=="szklo_pomaranczowe" then
- napisz("Pole wlasciwe do poboru sadzonek")
- if sygnal("przod")~="skrzynia" then
- repeat
- turtle.turnLeft()
- until sygnal("przod")=="skrzynia"
- end
- else
- napisz("ERR! (F:ust_pobor_sadzonek). Nie znajduje sie na pozycji wyjsciowej")
- end
- rap.fno=ust_pobor_sadzonek
- end
- function czy_brac_sadzonki() --ocenia czy mamy sadzonki w slocie 16, zwraca wariant postepowania
- local czy_brac_sadzonki=rap.fno
- rap.fno="czy_brac_sadzonki"
- if turtle.getItemCount(16)==0 then
- napisz("(F:czy_brac_sadzonki). Slot pusty, mozna brac")
- return "A"
- else
- local slot=turtle.getItemDetail(16)
- if slot.name~="minecraft:sapling" then
- napisz("(F:czy_brac_sadzonki). Slot zajety czyms innym")
- return "B"
- elseif (slot.name=="minecraft:sapling") and turtle.getItemCount(16)>41 then
- napisz("(F:czy_brac_sadzonki). Wystarczajaca ilosc sadzonek")
- return "C"
- else
- napisz("(F:czy_brac_sadzonki) Inne - mozna brac.")
- return "D"
- end
- end
- rap.fno=czy_brac_sadzonki
- end
- function ladowanie_sadzonek()
- local ladowanie_sadzonek=rap.fno
- rap.fno="ladowanie sadzonek"
- if (sygnal("dol")=="szklo_pomaranczowe") and (sygnal("przod")=="skrzynia") then
- turtle.select(16)
- local max=turtle.getItemSpace()
- napisz("F: ladowanie_sadzonek - Na polu sadzonki. Uzupelniam sadzonki...")
- turtle.suck(max)
- if turtle.getItemCount(16)==0 then
- rap.pro=3
- napisz("F:ladowanie_sadzonek -Problem! Slot pusty po ladowaniu")
- else
- local slot=turtle.getItemDetail(16)
- if (slot.name=="minecraft:sapling") and (slot.count>60) then
- napisz("F:ladowanie_sadzonek. Zaladowano. Jest OK")
- elseif (slot.name=="minecraft:sapling") and (slot.count<60) then
- rap.pro=4
- napisz("F:ladowanie_sadzonek. Problem! Po zaladunku mala ilosc sadzonek")
- elseif slot.name~="minecraft:sapling" then
- rap.pro=5
- napisz("F:ladowanie_sadzonek. Problem! W slocie zly przedmiot")
- napisz(slot.name)
- else
- rap.pro=6
- napisz("F:ladowanie_sadzonek. Inny wynik nieznany funkcji")
- end
- end
- else
- rap.pro=7
- napisz("F:ladowanie_sadzonek. Ustawiony na zlym polu")
- end
- rap.fno=ladowanie_sadzonek
- end
- function sadzonki()
- local sadzonki=rap.fno
- rap.fno="sadzonki"
- local warunek=0
- repeat
- ocena=czy_brac_sadzonki()
- if (ocena=="A") or (ocena=="D") then
- napisz("F:sadzonki - ustawiam i pobieram")
- warunek=1
- ust_pobor_sadzonek()
- ladowanie_sadzonek()
- turtle.turnRight()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.turnRight()
- elseif ocena=="B" then
- napisz("F:sadzonki - slot zajety. Oprozniam")
- rozladunek()
- elseif ocena=="C" then
- napisz("F:sadzonki - nie ma potrzeby uzupelniania.")
- warunek=1
- else
- napisz("F:sadzonki- wynik funkcji ocen nieznany")
- warunek=1
- end
- until warunek==1
- rap.fno=sadzonki
- end
- function cykl()
- seriawycinka()
- zawroc()
- powrot()
- zawroc()
- rozladunek()
- tankowanie()
- sadzonki()
- end
- function wylaczone()
- uruchom_modem()
- while true do
- raportuj()
- turtle.forward()
- turtle.back()
- end
- end
- uruchom_modem()
- parallel.waitForAny(aktualizuj, raportuj)
- function polaczenie()
- polaczenie_z_baza("P", "1", 3, 144)
- end
Add Comment
Please, Sign In to add comment