# aktualne miejsce odrodzenia gracza, zmienne w zależności od checkpointu, który zaliczymy
aktualnaPozycjaOdrodzenia = player.position()
# zmienna pomocnicza dzięki niej dany etap będzie tworzony raz w ramach jednej rozgrywki
czyEtap1 = False
czyEtap2 = False
czyEtap3 = False
# budujemy schody oraz pierwszą platformę ładującą etap 1
def nowyParkour():
# teleportujemy konstruktor w okolice gracza
builder.teleport_to(pos(5, 0, 0))
# obracamy na wschód
builder.face(EAST)
# buduje 70 stopniowe schodki w petli for
for i in range(70):
# konstruktor umieszcza blok schodów
builder.place(PURPUR_STAIRS)
# konstruktor przemieszcza się w przód, górę
builder.shift(1, 1, 0)
# oznaczamy bieżącą pozycję konstruktora
builder.mark()
builder.shift(2, 0, -4)
# konstruktor wypełnia przestrzeń blokami od znaku(mark) do obecnej pozycji
builder.fill(DIAMOND_BLOCK)
player.on_chat("start", nowyParkour)
# zdarzenie że po śmierci gracza -> powinien odrodzić się na danej platformie.
def smierc():
# krotka przerwa do poprawnego działania checkpointu
loops.pause(500) # 0.5s pauzy
# teleport gracza do poprzedniej zapisanej pozycji
player.teleport(aktualnaPozycjaOdrodzenia)
# przypisac funkcje do smierci gracza
player.on_died(smierc)
# petla sterujaca dzialaniem etapow i sytemu checkpointow
while True: # petla zawsze
if blocks.test_for_block(DIAMOND_BLOCK, pos(0, -1, 0)) and not czyEtap1:
# aktualizuje checkpoint
aktualnaPozycjaOdrodzenia = player.position()
# wylaczam budowanie etapu
czyEtap1 = True
# buduje etap 1
etap1i2(RIGHT_TURN, SLIME_BLOCK, GOLD_BLOCK)
elif blocks.test_for_block(GOLD_BLOCK, pos(0, -1, 0)) and not czyEtap2:
# aktualizuje checkpoint
aktualnaPozycjaOdrodzenia = player.position()
# wylaczam budowanie etapu2
czyEtap2 = True
# buduje etap 2
etap1i2(LEFT_TURN, MAGENTA_STAINED_GLASS_PANE, BEDROCK)
elif blocks.test_for_block(BEDROCK, pos(0, -1, 0)) and not czyEtap3:
# aktualizuje checkpoint
aktualnaPozycjaOdrodzenia = player.position()
# wylaczam budowanie etapu3
czyEtap3 = True
# buduje etap 3
etap3()
# funkcje budujaca etap1 i etap2
def etap1i2(obrot, blokToru, blokCheckpoint):
# teleport konstruktora pod platformę i przesunięcie
builder.teleport_to(pos(1, -4, 0))
builder.mark()
# ustawienie kierunku
builder.face(EAST)
# budowa odcinkow parkour 2x5
for kierunek in range(2):
for odcinek in range(5):
# przesuwamy konstruktor o losowa wartosc randint(3,8) - buduje platforme
builder.move(FORWARD, randint(3,8))
# tworze linie z wybranego bloku toru
builder.fill(blokToru)
# przesuwam konstruktor o loswa wartosc przerwy randint(2,3) - buduje przerwe
builder.move(FORWARD, randint(2,3))
builder.mark() # zaznaczam pozycje dla kolejnej platformy
# obrot konstruktora,
builder.turn(obrot)
# budowa checkpointu
builder.mark()
builder.shift(2, 0, -4)
builder.fill(blokCheckpoint)
# funkcja ładująca etap 3
def etap3():
# tworze kule szlamu ktora dziala jak trampolina
shapes.sphere(SLIME_BLOCK, pos(4, -30, 0), 1, ShapeOperation.REPLACE)
# ustawiam konstruktor
builder.teleport_to(pos(6, -32, 0))
builder.mark()
builder.face(EAST)
# ustawic pozycje dla konstruktora bo wrocimy w to samo miejsce zeby ustawic ogien
builder.set_origin()
builder.move(FORWARD, 65)
builder.fill(NETHERRACK)
# teleportuje sie z powrotem i ustawiam ogien
builder.teleport_to_origin()
builder.move(UP, 1)
for i in range(11):
builder.move(FORWARD, randint(3, 8))
builder.place(FIRE)
# buduje checkpoint
builder.mark()
builder.shift(2,0,-4)
builder.fill(MOSS_STONE)