Advertisement
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="", 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()
- napisz("Uruchamiam funkcje aktualizacji.")
- while true do
- repeat
- a5, b5, c5, d5, e5, f5=os.pullEvent("modem_message")
- until e5.rod=="K"
- rap.oka=e.oka
- rap.zgd=e.zgd
- rap.orp=e.orp
- sleep(rap.oka)
- end
- end
- function napisz(arg1)
- 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()
- 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)
- tablica = {numer=id, stan=aktywnosc, rodzaj=arg1.rodzaj, tekst=arg1.tekst}
- modem.transmit(1, id, tablica)
- end
- function raportuj()
- 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=rap.rod, nrd=rap.nrd, var=rap.var, kom=rap.kom}
- rap.pll=turtle.getFuelLevel()
- modem.transmit(1, id, tablica)
- sleep(rap.orp)
- end
- end
- function odpbazy(q1, q2)
- 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)
- 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)
- local odp=odpbazy(arg1.rodzaj, arg2)
- return odp
- end
- function czypracowac()
- 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
- print("funkcja sygnal ze zlym parametrem")
- program=0
- 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()
- rap.fno="ruch"
- if sygnal("dol")=="ceglanetheru" then
- napisz("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("Koniec linii.")
- else
- napisz("Nie jestem na linii. Nie mog isc.")
- rap.pro=1
- end
- rap.fno="N/A"
- end
- function wytnijpion()
- rap.fno="wytnij_pion"
- napisz("Zaczynam funkcj? wycinki.")
- local licz=0
- while (sygnal("przod")=="drewno") or (sygnal("gora")=="drewno") do
- turtle.dig()
- turtle.digUp()
- turtle.up()
- licz=licz+1
- napisz("Scialem: "..licz)
- end
- while turtle.down()==true do
- end
- turtle.dig()
- rap.fno=""
- napisz("Koniec funkcji wytnij_pion")
- end
- function posadzswierka()
- turtle.select(16)
- slot = turtle.getItemDetail()
- if (slot.name=="minecraft:sapling") and (slot.count>4) then
- 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
- print("Brak sadzonek")
- turtle.turnRight()
- turtle.forward()
- turtle.turnLeft()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- turtle.dig()
- turtle.forward()
- end
- turtle.select(1)
- end
- function wycinka()
- if sygnal("dol")=="obsydian" then
- print("Ustawiony do ciecia")
- turtle.dig()
- turtle.forward()
- wytnijpion()
- turtle.turnLeft()
- turtle.dig()
- turtle.forward()
- turtle.turnRight()
- wytnijpion()
- posadzswierka()
- else
- print("wywolano wycinke w zlym miejscu")
- program=0
- end
- end
- function zawroc()
- if sygnal("dol")=="szklo_czerwone" then
- turtle.turnRight()
- turtle.dig()
- turtle.forward()
- turtle.turnRight()
- else
- print("F:zawroc - Nie jestem ustawiony na polu zawracania")
- end
- end
- function powrot()
- program=1
- 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
- print("Koniec powrotu. Pole poprawne.")
- program=1
- else
- print("Powrot zakonczony niepoprawnie.")
- program=0
- end
- else
- print("Nie jestem ustawiony na starcie powrotu")
- program=0
- end
- end
- function seriawycinka()
- program=1
- if sygnal("dol")=="szklo_niebieskie" then
- turtle.dig()
- turtle.forward()
- repeat
- program=1
- ruch()
- wycinka()
- until (program==0) or (sygnal("dol")=="szklo_czerwone")
- else
- print("Nie jestem ustawiony na starcie serii wycinki.")
- program=0
- end
- end
- function 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
- print("F:czypusty. Rozladowano")
- return true
- else
- print("F:czypusty. Nie rozladowano!")
- return false
- end
- end
- function wysyp()
- if (sygnal("dol")=="szklo_niebieskie") and (sygnal("przod")=="skrzynia") then
- local licz=1
- repeat
- turtle.select(licz)
- turtle.drop()
- licz=licz+1
- until licz==17
- if czypusty()==true then
- print("F:wysyp. Material wysypany.")
- return true
- else
- print("F:wysyp. Wysypywanie nieskuteczne.")
- return false
- end
- else
- print("F:wysyp. Nie moge wysypac. Niewlasciwe pole.")
- return false
- end
- end
- function rozladunek()
- if sygnal("dol")=="szklo_czerwone" then
- 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
- 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
- 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
- print("F:rozladunek. Nie stoje na pozycji do ustawiania")
- end
- if (sygnal("dol")=="szklo_niebieskie") and sygnal("przod")=="skrzynia" then
- wysyp()
- turtle.turnLeft()
- turtle.turnLeft()
- else
- print("F:rozladunek - nie stoje na pozycji do wysypu")
- end
- end
- function tankuj()
- if czypusty()==true then
- if (sygnal("dol")=="szklo_zolte") and (sygnal("przod")=="skrzynia") then
- print("F:tankuj. Rozpoczynam tankowanie")
- turtle.select(1)
- local tank=1
- repeat
- turtle.suck()
- turtle.refuel()
- tank=tank+1
- until tank==16
- print("F:tankuj. Zakonczono tankowanie. Poziom paliwa: "..turtle.getFuelLevel())
- else
- print("F:tankuj. Nie ustawiony do tankowania.")
- end
- else
- print("F:tankuj. Inwentaz nie oprozniony")
- end
- end
- function tankowanie()
- if turtle.getFuelLevel()<2000 then
- if sygnal("dol")=="szklo_niebieskie" then
- 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
- 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
- repeat
- turtle.turnLeft()
- until sygnal("przod")=="skrzynia"
- tankuj()
- else
- print("F:tankowanie. Nie jestem ustawiony na pozycji wyjsciowej")
- end
- else
- print("F:tankowanie. Bak pelny. Nie ma potrzeby ustawiania")
- end
- end
- function ust_pobor_sadzonek()
- if sygnal("dol")=="szklo_zolte" then
- 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
- 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
- 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
- if sygnal("przod")~="skrzynia" then
- repeat
- turtle.turnLeft()
- until sygnal("przod")=="skrzynia"
- end
- else
- print("ERR! (F:ust_pobor_sadzonek). Nie znajduje sie na pozycji wyjsciowej")
- end
- end
- function czy_brac_sadzonki()
- if turtle.getItemCount(16)==0 then
- print("(F:czy_brac_sadzonki). Slot pusty, mozna brac")
- return "A"
- else
- local slot=turtle.getItemDetail(16)
- if slot.name~="minecraft:sapling" then
- print("(F:czy_brac_sadzonki). Slot zajety czyms innym")
- return "B"
- elseif (slot.name=="minecraft:sapling") and turtle.getItemCount(16)>41 then
- print("(F:czy_brac_sadzonki). Wystarczajaca ilosc sadzonek")
- return "C"
- else
- print("(F:czy_brac_sadzonki) Inne - mozna brac.")
- return "D"
- end
- end
- end
- function ladowanie_sadzonek()
- if (sygnal("dol")=="szklo_pomaranczowe") and (sygnal("przod")=="skrzynia") then
- turtle.select(16)
- local max=turtle.getItemSpace()
- print("Brakuje: "..max)
- turtle.suck(max)
- if turtle.getItemCount(16)==0 then
- print("F:ladowanie_sadzonek - slot pusty po ladowaniu")
- else
- local slot=turtle.getItemDetail(16)
- if (slot.name=="minecraft:sapling") and (slot.count>60) then
- print("F:ladowanie_sadzonek. Zaladowano. Jest OK")
- elseif (slot.name=="minecraft:sapling") and (slot.count<60) then
- print("F:ladowanie_sadzonek. Po zaladunku mala ilosc sadzonek")
- elseif slot.name~="minecraft:sapling" then
- print("F:ladowanie_sadzonek. W slocie zly przedmiot")
- print(slot.name)
- else
- print("F:ladowanie_sadzonek. Inny wynik nieznany funkcji")
- end
- end
- else
- print("F:ladowanie_sadzonek. Ustawiony na zlym slocie")
- end
- end
- function pelnaseria()
- seriawycinka()
- zawroc()
- powrot()
- zawroc()
- rozladunek()
- tankowanie()
- end
- function sadzonki()
- local warunek=0
- repeat
- ocena=czy_brac_sadzonki()
- if (ocena=="A") or (ocena=="D") then
- print("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
- print("F:sadzonki - slot zajety. Oprozniam")
- rozladunek()
- elseif ocena=="C" then
- print("F:sadzonki - nie ma potrzeby uzupelniania.")
- warunek=1
- else
- print("F:sadzonki- wynik funkcji ocen nieznany")
- warunek=1
- end
- until warunek==1
- end
- function zgodanaprace()
- local odp=odpbazy("P2", 10)
- if odp=="TAK" then
- print("Otrzymalem zgode na kolejny cykl")
- aktywnosc=1
- return true
- elseif odp=="NIE" then
- print("Otrzymalem rozkaz wstrzymania")
- aktywnosc=0
- return true
- elseif odp=="timer" then
- print("Czas minal")
- return false
- else
- print("Inny przebieg funkcji")
- return false
- end
- end
- function sprawdzgotowosc()
- repeat
- until zgodanaprace()==true
- if aktywnosc==1 then
- end
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement