Untitled

mail@pastecode.io avatar
unknown
python
2 years ago
4.0 kB
5
Indexable
# 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)