Próbuję od paru dni zrobić skrypt który sprawdzałby czy na danym chunku znajduje się blok danego typu. Jeżeli takiego bloku nie ma na chunku gracz może go normalnie postawić, w przeciwnym wypadku próba postawienia drugiego bloku jest blokowana lub poprzedni jest usuwany. Przejżałem tematy i znalazłem podobny temat a w nim prawie idealny skrypt do tego co potrzebuję napisany przez xAxee:
on place:
if event-block is mob spawner:
set {_s} to false
loop {SP::*}:
if loop-value is chunk of event-block:
set {_s} to true
if {_s} is true:
cancel event
send "&7Jest ograniczenie!"
else:
set {SP::%location of event-block%} to chunk of event-block
on break:
if event-block is mob spawner:
delete {SP::%location of event-block%}
Problem w tym, że działa on na event zniszczenia bloku przez gracza oraz, że nie sprawdza obecności tego bloku na bierząco za każdym razem tylko dowiaduje się o obecności tego bloku ze zmiennej ale tym sposobem skrypt nie zalicza bloków które zostały postawione zanim uruchomiono go pierwszy raz a ze względu na konieczność użycia eventu break przy zniszczeniu tego bloku w inny sposób niż wykopanie, czyl np. za pomocą tnt nie da się już postawić tego bloku wogóle nawet jeśli go tam niema.
Chciałbym zmodyfikować to jakoś, żeby skrypt nie musiał robić nic przy niszczeniu bloku i żeby sprawdzanie czy w chunku znajduje się już taki blok odbywało się na nowo za każdą próbą postawienia tego bloku. Rozumiem tyle, że najpierw skrypt przelatuje przez wszystkie zmienne {SP::*} a potem sprawdza nie "czy na danym chunku znajduje się blok" ale "czy istnieje zmienna {SP::*} dla której w miejscu '*' znajduje się lokalizacja chunka postawionego bloku, jeśli tak to anuluje event jeśli nie to tworzy tą zmienną i nie da się już więcej postawić tego bloku a przy zniszczeniu bloku ją usuwa". (btw. Nie rozumiem natomiast czemu nie działa tak samo jeśłi zrobimy tak:)
Spoiler
on place:
if event-block is mob spawner:
loop {SP::*}:
if loop-value is chunk of event-block:
cancel event
send "&7Jest ograniczenie!" #nie wiem czemu tutaj w kodzie pokazuje 2 taby za mało
else:
set {SP::%location of event-block%} to chunk of event-block
on break:
if event-block is mob spawner:
delete {SP::%location of event-block%}
Natomiast moje ostateczne pytanie jest, czy da się zrobić coś w rodzaju tego co by działało:
on place:
if event-block is mob spawner:
loop blocks within chunk of event-block: #tu wywala błąd
if loop-block is event-block:
cancel event
send "&7Jest ograniczenie!"
"Czy da się wogóle jakoś zrobić loop wszystkich bloków w chunku a sprawdzić if'em cz w danym chunku znajduje się jakiś blok i wykonać akcję jeśli taki blok się tam znajduje i inną akcję jeżeli nie, czy jest wogóle coś takiego w skripcie?"
Pytanie
Szkło 0
Próbuję od paru dni zrobić skrypt który sprawdzałby czy na danym chunku znajduje się blok danego typu. Jeżeli takiego bloku nie ma na chunku gracz może go normalnie postawić, w przeciwnym wypadku próba postawienia drugiego bloku jest blokowana lub poprzedni jest usuwany. Przejżałem tematy i znalazłem podobny temat a w nim prawie idealny skrypt do tego co potrzebuję napisany przez xAxee:
on place: if event-block is mob spawner: set {_s} to false loop {SP::*}: if loop-value is chunk of event-block: set {_s} to true if {_s} is true: cancel event send "&7Jest ograniczenie!" else: set {SP::%location of event-block%} to chunk of event-block on break: if event-block is mob spawner: delete {SP::%location of event-block%}Problem w tym, że działa on na event zniszczenia bloku przez gracza oraz, że nie sprawdza obecności tego bloku na bierząco za każdym razem tylko dowiaduje się o obecności tego bloku ze zmiennej ale tym sposobem skrypt nie zalicza bloków które zostały postawione zanim uruchomiono go pierwszy raz a ze względu na konieczność użycia eventu break przy zniszczeniu tego bloku w inny sposób niż wykopanie, czyl np. za pomocą tnt nie da się już postawić tego bloku wogóle nawet jeśli go tam niema.
Chciałbym zmodyfikować to jakoś, żeby skrypt nie musiał robić nic przy niszczeniu bloku i żeby sprawdzanie czy w chunku znajduje się już taki blok odbywało się na nowo za każdą próbą postawienia tego bloku. Rozumiem tyle, że najpierw skrypt przelatuje przez wszystkie zmienne {SP::*} a potem sprawdza nie "czy na danym chunku znajduje się blok" ale "czy istnieje zmienna {SP::*} dla której w miejscu '*' znajduje się lokalizacja chunka postawionego bloku, jeśli tak to anuluje event jeśli nie to tworzy tą zmienną i nie da się już więcej postawić tego bloku a przy zniszczeniu bloku ją usuwa". (btw. Nie rozumiem natomiast czemu nie działa tak samo jeśłi zrobimy tak:)
on place: if event-block is mob spawner: loop {SP::*}: if loop-value is chunk of event-block: cancel event send "&7Jest ograniczenie!" #nie wiem czemu tutaj w kodzie pokazuje 2 taby za mało else: set {SP::%location of event-block%} to chunk of event-block on break: if event-block is mob spawner: delete {SP::%location of event-block%}Natomiast moje ostateczne pytanie jest, czy da się zrobić coś w rodzaju tego co by działało:
on place: if event-block is mob spawner: loop blocks within chunk of event-block: #tu wywala błąd if loop-block is event-block: cancel event send "&7Jest ograniczenie!""Czy da się wogóle jakoś zrobić loop wszystkich bloków w chunku a sprawdzić if'em cz w danym chunku znajduje się jakiś blok i wykonać akcję jeśli taki blok się tam znajduje i inną akcję jeżeli nie, czy jest wogóle coś takiego w skripcie?"
Edytowane przez SzkłoOdnośnik do komentarza
https://skript.pl/temat/34500-jak-sprawdzi%C4%87-czy-na-chunku-znajduje-si%C4%99-blok/Udostępnij na innych stronach
8 odpowiedzi na to pytanie
Rekomendowane odpowiedzi