Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- id=4
- id2=163621
- 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}
- 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
- rap.zpp=e5.zpp
- -- tu bylo sleep(e5.oka)
- end
- end
- function raportuj() --do raportowania parametrow (w tle)
- napisz("F: raportuj - Rozpoczynam raportowanie 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, psp=rap.psp, ptp=rap.ptp, psd=rap.psd, zpp=rap.zpp}
- 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)
- return true
- else
- print("Modem nie zostal otwarty")
- return false
- 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 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:hopper" then
- znaleziono="lej"
- 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"
- elseif (blok["name"]=="minecraft:stained_glass") and (blok.state["color"]=="lightBlue") then
- znaleziono="szklo_jasnoniebieskie"
- elseif blok["name"]=="minecraft:dirt" then
- znaleziono="ziemia"
- elseif blok["name"]=="minecraft:grass" then
- znaleziono="trawa"
- else
- znaleziono="inne"
- end
- return znaleziono
- end
- -- koniec czesci ogolnej
- function rusz()
- while turtle.forward()==false do
- if (sygnal("przod")=="lisc") or (sygnal("przod")=="snieg") then
- turtle.dig()
- else
- napisz("F:ruch - natrafilem na przeszkode")
- sleep(5)
- end
- end
- end
- function obroc()
- while (sygnal("przod")~="szklo_niebieskie" and sygnal("przod")~="obsydian") do
- turtle.turnLeft()
- end
- end
- --DO PRZEROBIENIA
- function seriaglowna()
- seria()
- zawroc()
- seria()
- zawroc()
- seria()
- zawroc()
- seria()
- end
- function czypusty() --funkcja sprawdza czy w inwentarzu robota znajduje sie jakikolwiek przedmiot
- 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_purpurowe") 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
- 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 czypusty()==true then
- napisz("F: rozladunek - nie ma potrzeby rozladunku")
- else
- napisz("F: rozladunek - ustawiam do rozladunku")
- ustaw("rozladunek")
- if (sygnal("dol")=="szklo_purpurowe") and sygnal("przod")=="skrzynia" then
- napisz("Ustawiony na polu rozladunku. Wywoluje funkcje wysyp()")
- wysyp()
- if czypusty()==false then
- rap.psp=1
- napisz("F:rozladunek - skrzynia pelna!")
- ustaw("start")
- else
- rap.psp=0
- napisz("F:rozladunek - material rozladowany")
- ustaw("start")
- end
- else
- napisz("F:rozladunek - nie stoje na pozycji do wysypu")
- end
- end
- rap.fno=rozladunek
- end
- function tankuj()
- local tankuj=rap.fno
- rap.fno="tankuj"
- if turtle.getFuelLevel()<rap.zpp then
- if czypusty()==true then
- if sygnal("dol")=="szklo_niebieskie" then
- napisz("F:tankuj. Rozpoczynam tankowanie")
- turtle.select(1)
- local tank=1
- repeat
- turtle.suckUp()
- turtle.refuel()
- tank=tank+1
- until tank==10
- if turtle.getFuelLevel()<rap.zpp then
- rap.ptp=1
- napisz("Zatankowano - skrzynia z paliwem pusta, niedobor paliwa")
- else
- rap.ptp=0
- napisz("Zatankowano - poziom paliwa OK")
- end
- else
- napisz("F:tankuj. Nie ustawiony do tankowania.")
- end
- else
- napisz("F:tankuj. Inwentaz nie oprozniony")
- end
- else
- napisz("F: tankuj. Bak pelny, nie ma potrzeby tankowania")
- end
- rap.fno=tankuj
- end
- function gotowosc()
- local warunek=0
- napisz("Sprawdzam gotowosc. Paliwo zalecane to:")
- napisz(rap.zpp)
- if turtle.getFuelLevel()<rap.zpp then
- warunek=1
- napisz("F: gotowosc: brak paliwa")
- elseif turtle.getItemCount(8)>0 then
- napisz("F: gotowosc: zajety slot 8")
- warunek=1
- elseif turtle.getItemCount(16)>0 then
- napisz("F: gotowosc: zajety slot 16")
- warunek=1
- else
- warunek=0
- end
- return warunek
- end
- function cyklglowny()
- local petla=1
- while true do
- if rap.zgd==1 then
- rozladunek_sadzonek()
- tankuj()
- if gotowosc()==0 then
- print("zbieram!")
- seriaglowna()
- ustaw("start")
- napisz("Koniec cyklu glownego.")
- else
- napisz("Brak gotowosci logistycznej. Czekam 50.")
- sleep(50)
- end
- else
- napisz("Brak zgody na rozpoczecie cyklu. Proba:")
- napisz(petla)
- sleep(10)
- petla=petla+1
- end
- end
- end
- function nawiazpolaczenie()
- if uruchom_modem()==true then
- if polaczenie_z_baza(1, "Oczekuje na polaczenie", 5, 20)=="sygnal" then
- return "2"
- else
- return "1"
- end
- else
- return "0"
- end
- end
- function program()
- ocenawstepna=nawiazpolaczenie()
- if ocenawstepna=="0" then
- print("Modem nieaktywny")
- elseif ocenawstepna=="1" then
- napisz("Brak polaczenia z baza")
- raportuj()
- elseif ocenawstepna=="2" then
- parallel.waitForAny(cyklglowny, aktualizuj, raportuj)
- else
- print("Nieznany wynik funkcji program")
- end
- end
- function zaladuj_dol()
- if sygnal("dol")=="skrzynia" then
- local licz=1
- repeat
- turtle.suckDown()
- licz=licz+1
- until licz==17
- else
- napisz("F: Zaladuj_dol - Nie stoje na skrzyni")
- end
- end
- function rozladuj_dol(arg1)
- napisz("F:rozladuj_dol - zaczynam")
- if sygnal("dol")=="skrzynia" then
- local licz=1
- if arg1=="wszystko" then
- repeat
- turtle.select(licz)
- turtle.dropDown()
- licz=licz+1
- until licz==17
- turtle.select(1)
- else
- repeat
- turtle.select(licz)
- if turtle.getItemCount()>0 then
- local slot=turtle.getItemDetail()
- if slot.name==arg1 then
- turtle.dropDown()
- end
- end
- licz=licz+1
- until licz==17
- end
- else
- napisz("F:rozladuj_dol - nie stoje na polu do rozladunku")
- end
- end
- function zaladuj_przod(arg1)
- napisz("F: zaladuj_przod - zaczynam")
- if sygnal("przod")=="skrzynia" then
- repeat
- until turtle.suck()==false
- local licz2=arg1+1
- while licz2<17 do
- turtle.select(licz2)
- turtle.drop()
- licz2=licz2+1
- end
- turtle.select(1)
- else
- napisz("Nie stoje na polu do zaladunku")
- end
- end
- function rozladuj_przod()
- napisz("F: rozladuj_przod - zaczynam")
- if sygnal("przod")=="skrzynia" then
- local licz=1
- repeat
- turtle.select(licz)
- turtle.drop()
- licz=licz+1
- until licz==17
- turtle.select(1)
- else
- napisz("F: rozladuj_przod - nie stoje przed skrzynia")
- end
- end
- function sprawdz_ekwipunek(arg1)
- local licz=1
- repeat
- turtle.select(licz)
- if turtle.getItemCount()>0 then
- local slot=turtle.getItemDetail()
- if slot.name~=arg1 then
- napisz("Zaladowano niewlasciwy przedmiot. Przerywam funkcje")
- return "NOK"
- end
- end
- licz=licz+1
- until licz==17
- napisz("Sprawdzono. Material OK")
- return "OK"
- end
- function zaladuj_paliwo()
- if sygnal("dol")~="szklo_niebieskie" then
- napisz("Nie jestem ustawiony na polu startowym")
- return
- end
- napisz("Uruchamiam funkcje zaladunku wegla")
- obroc()
- turtle.turnRight()
- napisz("Pobieram paliwo ze zbiornika")
- redstone.setOutput("left", true)
- zaladuj_przod(16)
- redstone.setOutput("left", false)
- napisz("Sprawdzam co pobrano")
- if sprawdz_ekwipunek("minecraft:coal")=="NOK" then
- napisz("Masakra!")
- return
- end
- turtle.up()
- turtle.up()
- turtle.up()
- turtle.up()
- turtle.turnLeft()
- turtle.turnLeft()
- local licz2=1
- repeat
- rusz()
- turtle.select(licz2)
- turtle.dropDown()
- licz2=licz2+1
- until licz2==11
- turtle.turnLeft()
- turtle.turnLeft()
- repeat
- rusz()
- licz2=licz2-1
- until licz2==1
- turtle.down()
- turtle.down()
- turtle.down()
- turtle.down()
- rozladuj_przod()
- end
- function zaladuj_drewno()
- if sygnal("dol")~="szklo_niebieskie" then
- napisz("Nie jestem ustawiony na polu do startowym")
- return
- end
- obroc()
- turtle.turnLeft()
- turtle.turnLeft()
- turtle.up()
- napisz("Pobieram drewno")
- zaladuj_przod(10)
- napisz("Sprawdzam co pobrano")
- if sprawdz_ekwipunek("minecraft:log")=="NOK" then
- napisz("Masakra")
- return
- end
- turtle.turnRight()
- turtle.up()
- turtle.up()
- turtle.turnRight()
- rusz()
- turtle.turnLeft()
- local licz2=1
- repeat
- rusz()
- turtle.select(licz2)
- turtle.dropDown()
- licz2=licz2+1
- until licz2==11
- turtle.turnLeft()
- turtle.turnLeft()
- repeat
- rusz()
- licz2=licz2-1
- until licz2==1
- turtle.turnRight()
- rusz()
- turtle.turnLeft()
- turtle.down()
- turtle.down()
- turtle.turnRight()
- rozladuj_przod("wszystko")
- turtle.turnLeft()
- turtle.down()
- end
- --program()
- uruchom_modem()
- tankuj()
- zaladuj_paliwo()
- zaladuj_drewno()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement