View difference between Paste ID: gDSCCwNW and dWDysD87
SHOW: | | - or go back to the newest paste.
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 rusz()
140-
  while (sygnal("przod")~="szklo" and sygnal("przod")~="skrzynia") do
140+
141
    if (sygnal("przod")=="lisc") or (sygnal("przod")=="snieg") then
142
      turtle.dig()
143
    else
144
      napisz("F:ruch - natrafilem na przeszkode")
145
      sleep(5)
146
    end
147-
  if (arg1=="rozladunek") or (arg1=="start") then
147+
148-
    if sygnal("dol")=="szklo_pomaranczowe" then
148+
149
end   
150
151
function obroc()
152
  while (sygnal("przod")~="szklo_zolte" and sygnal("przod")~="szklo_pomaranczowe" and sygnal("przod")~="obsydian" and sygnal("przod")~="skrzynia") do
153-
      obroc()          
153+
154
  end
155
end
156
157
function ustaw(arg1)
158
159
  if (arg1=="rozladunek") then
160
    if sygnal("dol")=="szklo_czerwone" then
161
      obroc()
162
      turtle.turnRight()
163
      rusz()
164
      rusz()
165
      turtle.turnLeft()
166
      rusz()
167-
      obroc()   
167+
      rusz()  
168
    elseif sygnal("dol")=="szklo_zolte" then
169
      obroc()
170
      turtle.turnLeft()
171-
    if arg1=="start" then
171+
172
      obroc()
173
    elseif sygnal("dol")=="szklo_niebieskie" then
174
      obroc()     
175
      turtle.turnLeft()
176
      rusz()
177-
    if sygnal("dol")=="szklo_pomaranczowe" then
177+
178
      rusz()
179
      rusz() 
180
    elseif sygnal("dol")=="szklo_purpurowe" then
181
      obroc()  
182
    else
183
      napisz("F:ustaw - wywolano funkcje w zlym miejscu")
184
    end
185
   
186
  elseif arg1=="tankuj" then
187
   if sygnal("dol")=="szklo_czerwone" then
188
      obroc()
189
      turtle.turnRight()
190
      rusz()
191
      rusz()
192
      turtle.turnLeft()
193
      rusz()
194
      rusz()  
195
      turtle.turnLeft()
196
      rusz()
197
    elseif sygnal("dol")=="szklo_zolte" then
198
      obroc()
199
    elseif sygnal("dol")=="szklo_niebieskie" then
200
      obroc()     
201
      turtle.turnLeft()
202
      rusz()
203
      turtle.turnRight()
204-
      napisz("F:ustaw = wywolano funkcje w zlym miejscu")  
204+
205-
    end  
205+
      rusz()   
206-
  elseif arg1=="sadzonki" then
206+
207-
    if sygnal("dol")=="szklo_pomaranczowe" then
207+
208
 elseif sygnal("dol")=="szklo_purpurowe" then
209
      obroc()
210
      turtle.turnLeft()
211
      rusz()
212
    else
213-
      obroc()    
213+
214
    end
215
  elseif arg1=="start" then
216
    if sygnal("dol")=="szklo_niebieskie" then
217
      obroc()
218
    elseif sygnal("dol")=="szklo_czerwone" then
219
      obroc()
220
      turtle.turnRight()
221
      rusz()
222
      rusz()
223
      rusz()
224
      turtle.turnRight()   
225
    elseif sygnal("dol")=="szklo_zolte" then
226
      obroc()
227
      turtle.turnLeft()
228
      rusz()
229
      turtle.turnRight()
230
      rusz()
231
      rusz()
232
      turtle.turnLeft()
233
      rusz()
234
      turtle.turnRight()
235
  elseif sygnal("dol")=="szklo_purpurowe" then
236
      obroc()
237
      turtle.turnLeft()
238
      turtle.turnLeft()
239
      rusz()
240
      rusz()
241
      turtle.turnLeft()
242
      rusz()
243
      turtle.turnRight()       
244
    else
245
      napisz("F:ustaw - wywolano funkcje w zlym miejscu")
246
    end
247
  
248
  else  
249
    napisz("F:ustaw - funkcja ze zlym parametrem")  
250
  end
251
252
end
253
254
function seria()
255
  local seria=rap.fno
256
  rap.fno="seria"
257
  if (sygnal("dol")=="szklo_niebieskie") or (sygnal("dol")=="szklo_pomaranczowe") or (sygnal("dol")=="szklo_purpurowe") or (sygnal("dol")=="szklo") then
258
    napisz("F: ruch - Jestem na linii. Zaczynam isc")
259
    rusz()
260
    while (sygnal("dol")=="ziemia") or (sygnal("dol")=="trawa") do
261
      rusz() 
262
    end 
263
    napisz("F: seria - Koniec linii.")
264
  else
265
    napisz("Nie jestem na linii. Nie mog isc.")
266
    rap.pro=1
267
  end
268
  rap.fno=seria
269
end
270
271
function zawroc()
272
  local zawroc=rap.fno
273
  rap.fno="zawroc"
274
  if sygnal("dol")=="szklo_purpurowe" then  
275
    napisz("F: zawroc - zawracam")
276
    turtle.turnRight()
277
    rusz()
278
    turtle.turnRight()
279
  elseif sygnal("dol")=="szklo_pomaranczowe" then  
280
    napisz("F: zawroc - zawracam")
281
    turtle.turnLeft()
282
    rusz()
283
    turtle.turnLeft()
284
  else
285
    napisz("F:zawroc - Nie jestem ustawiony na polu zawracania")
286
  end
287
  rap.fno=zawroc
288
end
289
290
function seriaglowna()
291
  seria()
292
  zawroc()
293
  seria()
294
  zawroc()
295
  seria()
296
  zawroc()
297
  seria()
298
end
299
300
function czypusty()
301
  local czypusty = rap.fno
302
  rap.fno="czypusty"
303
  local licz2=1
304
  local znaleziono=0
305
  repeat
306
    if turtle.getItemCount(licz2)>0 then
307
      znaleziono=1
308
    end   
309
    licz2=licz2+1
310
  until licz2==17
311
  if znaleziono==0 then
312
    napisz("F:czypusty. Rozladowano")
313
    return true
314
  else
315
    napisz("F:czypusty. Nie rozladowano!")
316
    return false
317
  end
318
  rap.fno=czypusty
319
end
320
321
function wysyp()
322
  local wysyp=rap.fno
323
  rap.fno="wysyp"
324
  if (sygnal("dol")=="szklo_niebieskie") and (sygnal("przod")=="skrzynia") then
325
    napisz("F: wysyp - zaczynam wysypywac")
326
    local licz=1
327
    repeat
328
      turtle.select(licz)
329
      turtle.drop()
330
      licz=licz+1
331
    until licz==17    
332
  else
333
    napisz("F:wysyp. Nie moge wysypac. Niewlasciwe pole.")
334
    return false
335
  end
336
  rap.fno=wysyp
337
end
338
339
function rozladunek()
340
  if czypusty()==true then
341
    napisz("F: rozladunek - nie ma potrzeby rozladunku")
342
  else    
343
    local rozladunek=rap.fno
344
    rap.fno="rozladunek"
345
    napisz("F: rozladunek - ustawiam do rozladunku")
346
    ustaw("rozladunek")  
347
    if (sygnal("dol")=="szklo_niebieskie") and sygnal("przod")=="skrzynia" then
348
      napisz("Ustawiony na polu rozladunku. Wywoluje funkcje wysyp()")
349
      wysyp()
350
      if czypusty()==false then
351
        rap.psp=1
352
        napisz("F:rozladunek - skrzynia pelna!")       
353
        ustaw("start")
354
      else
355
        rap.psp=0
356
        napisz("F:rozladunek - material rozladowany")
357
        ustaw("start")
358
      end
359
    else
360
      napisz("F:rozladunek - nie stoje na pozycji do wysypu")
361
    end
362
  end  
363
  rap.fno=rozladunek
364
end
365
366
function tankuj()
367
  local tankuj=rap.fno
368
  rap.fno="tankuj"
369
  if turtle.getFuelLevel()<rap.zpp then  
370
    if czypusty()==true then
371
      ustaw("tankuj")
372
      if (sygnal("dol")=="szklo_zolte") and (sygnal("przod")=="skrzynia") then
373
        napisz("F:tankuj. Rozpoczynam tankowanie")
374
        turtle.select(1)
375
        local tank=1
376
        repeat 
377
          turtle.suck()
378
          turtle.refuel()
379
          tank=tank+1
380
        until tank==10  
381
        if turtle.getFuelLevel()<rap.zpp then
382
          rap.ptp=1
383
          napisz("Zatankowano - skrzynia z paliwem pusta, niedobor paliwa")
384
        else
385
          rap.ptp=0
386
          napisz("Zatankowano - poziom paliwa OK")
387
        end    
388
      else
389
        napisz("F:tankuj. Nie ustawiony do tankowania.")          
390
      end
391
      ustaw("start")
392
    else
393
      napisz("F:tankuj. Inwentaz nie oprozniony")  
394
      ustaw("start")
395
    end
396
  else
397
    napisz("F: tankuj. Bak pelny, nie ma potrzeby tankowania")  
398
  end  
399
  rap.fno=tankuj
400
end
401
402
function gotowosc()
403
  turtle.select(16)
404
  local warunek=0
405
  local data=turtle.getItemDetail()
406
  napisz("Sprawdzam gotowosc. Paliwo zalecane to:")
407
  napisz(rap.zpp)
408
  if turtle.getFuelLevel()<rap.zpp then
409
    warunek=1
410
    napisz("F: gotowosc: brak paliwa")
411
  elseif turtle.getItemCount(1)>0 then
412
    warunek=1
413
    napisz("F: gotowosc: zajety slot 1")
414
  elseif turtle.getItemCount(4)>0 then
415
    napisz("F: gotowosc: zajety slot 4")
416
    warunek=1
417
  elseif turtle.getItemCount(8)>0 then
418
    napisz("F: gotowosc: zajety slot 8")
419
    warunek=1
420
  elseif turtle.getItemCount(16)>0 then
421
    if data["name"]~="minecraft:sapling" then
422
      napisz("F: gotowosc: zly przedmiot w slocie 16")
423
      warunek=1
424
    else
425
      print("")
426
    end
427
  else
428
    warunek=0
429
  end  
430
  turtle.select(1)
431
  return warunek
432
end
433
434
function cyklglowny()
435
  local petla=1
436
  while true do
437
    if rap.zgd==1 then
438
      rozladunek()
439
      tankuj()
440
      sadzonki()
441
      if gotowosc()==0 then
442
        print("tne!")
443
        sleep(5)
444
        seriawycinka()
445
        zawroc()
446
        powrot()
447
        zawroc()
448
        napisz("Koniec cyklu glownego. Czekam 100 sekund.")
449
        sleep(100)
450
      else
451
        sleep(50)
452
      end
453
    else
454
      napisz("Brak zgody na rozpoczecie cyklu. Proba:")
455
      napisz(petla)
456
      sleep(10)
457
      petla=petla+1
458
    end
459
  end
460
end
461
462
function nawiazpolaczenie()
463
  if uruchom_modem()==true then
464
    if polaczenie_z_baza(1, "Oczekuje na polaczenie", 5, 20)=="sygnal" then
465
      return "2"
466
    else
467
      return "1"
468
    end 
469
  else
470
    return "0"
471
  end
472
end
473
474
function program()
475
  ocenawstepna=nawiazpolaczenie()
476
  if ocenawstepna=="0" then
477
    print("Modem nieaktywny")
478
  elseif ocenawstepna=="1" then
479
    napisz("Brak polaczenia z baza")
480
    raportuj()
481
  elseif ocenawstepna=="2" then
482
    parallel.waitForAny(cyklglowny, aktualizuj, raportuj)
483
  else
484
    print("Nieznany wynik funkcji program")
485
  end
486
end
487
uruchom_modem()
488
seriaglowna()