Skocz do zawartości
  • 0

Jak zrobić funkcje żeby czekał skrypt?


Pytanie

Hej, nie wiem jak zrobić taką funkcję która działa na takiej samej zasadzie jak wait() w pythonie. Chyba że jest inne rozwiązanie na to, co mi nie działa. Mianowicie dodałem coś, w stylu że jak użyje się komendy spawn to wydaje dźwięk eksplozji. Natomiast nie działa, a konsola pokazuje mi że gracz jest zbyt daleko by usłyszeć dźwięk.

Odnośnik do komentarza
https://skript.pl/temat/57403-jak-zrobi%C4%87-funkcje-%C5%BCeby-czeka%C5%82-skrypt/
Udostępnij na innych stronach

7 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
28 minut temu, micmit123 napisał:

Hej, nie wiem jak zrobić taką funkcję która działa na takiej samej zasadzie jak wait() w pythonie. Chyba że jest inne rozwiązanie na to, co mi nie działa. Mianowicie dodałem coś, w stylu że jak użyje się komendy spawn to wydaje dźwięk eksplozji. Natomiast nie działa, a konsola pokazuje mi że gracz jest zbyt daleko by usłyszeć dźwięk.

Ciekawe pytanie Pan zadał z tą funkcją wait(). Podaję przykładowy kod poniżej jak mógłby taki mechanizm działać.

function wait(t: timespan) :: boolean:
	wait {_t}
	return true
	
command /test:
	trigger:
		wait(10 ticks) is true
		# Dalszy kod...

To byłoby rozwiązanie najbliższe temu, które Pana interesuje. Niemniej jednak muszę rozczarować - powyższy kod nie zadziała wedle Pana oczekiwań. Skript zignoruje opóźnienie umieszczone wewnątrz kodu funkcji i przejdzie dalej w kodzie wywołującym ową funkcję nie zważając na zwracaną wartość przez nią. W konsekwencji warunek w komendzie /test sprawdzi '<none> is true', co oczywiście zwróci fałsz, a więc dalszy kod się nie wykona. Dla eksperymentu można sprawdzić, że w przypadku wariantu "wait(x) is not false" wszystko poza samym opóźnieniem działałoby bez zarzutów.

Można poszukiwać rozwiązania przy pomocy dodatku skript-reflect udostępniającego wszelkie biblioteki Javy do użytku (oraz sekcje, bardzo przydatne narzędzie), ale i tam poszukiwania najprawdopodobniej okażą się bezowocne.

Konkluzja jest taka - najlepiej używać wbudowanych opóźnień w Skript. Odsyłam do dokumentacji Skripta w razie wątpliwości.


Jeśli chodzi o Pana drugi problem z dźwiękiem eksplozji, zakładam, że Pan używa w tym celu listeneru zdarzenia 'on command "spawn":'. Musi mieć Pan na względzie to, że te zdarzenie jest wywoływane przed faktycznym wykonaniem komendy, czego głównym atutem jest możliwość anulowania zdarzenia.

W tej sytuacji proponuję dodać zwykłe opóźnienie 'wait 1 tick:' przed wydaniem dźwięku eksplozji. Nie jest to rozwiązanie idealne, gdyż najlepiej byłoby zmodyfikować samą komendę /spawn i odtworzyć graczowi dźwięk po teleportacji, jednak zakładam, że Pan ma ją (komendę /spawn) zaimplementowaną przy pomocy któregoś z pluginów.

Odnośnik do komentarza
https://skript.pl/temat/57403-jak-zrobi%C4%87-funkcje-%C5%BCeby-czeka%C5%82-skrypt/#findComment-341846
Udostępnij na innych stronach

  • 0

Dziękuje za odpowiedź. Skorzystam z drugiej opcji. Natomiast nie do końca wiem gdzie wstawić funkcję 'wait 1 tick:' Mój kod wygląda tak:

 

Z góry dziękuje :)

Edytowane przez micmit123
Odnośnik do komentarza
https://skript.pl/temat/57403-jak-zrobi%C4%87-funkcje-%C5%BCeby-czeka%C5%82-skrypt/#findComment-341885
Udostępnij na innych stronach

  • 0
52 minuty temu, micmit123 napisał:

Dziękuje za odpowiedź. Skorzystam z drugiej opcji. Natomiast nie do końca wiem gdzie wstawić funkcję 'wait 1 tick:'

W tym przypadku wystarczy dodać opóźnienie przed odtworzeniem dźwięku.

Chciałbym jeszcze dopowiedzieć odnośnie dwóch rzeczy.

  1. Po pierwsze, 'wait %timespan%' nie jest funkcją, a efektem (ogólniej można nazwać ją instrukcją). Funkcja to obiekt przyjmujący opcjonalnie pewne argumenty, możliwy do wywołania w każdym miejscu innego kodu.
  2. Po drugie, zalecam używać instrukcji 'play sound' zamiast wywoływać komendę 'playsound'. Dodałem załącznik, aby Pan mógł zapoznać się z tym efektem.

Listę dźwięków możliwych do odtworzenia znajdzie Pan chociażby w dokumentacji Spigot. Listę wszystkich dźwięków w Minecraft znajdzie Pan tutaj.

Tak więc wystarczy napisać linijkę odtwarzającą dźwięk w poniższy sposób.

play sound "ENTITY_GENERIC_EXPLODE" to player

Jeśli Pan chce, może Pan również zmienić głośność odtwarzanego dźwięku. Wszelkie informacje znajdują się w dokumentacji Skripta.

Odnośnik do komentarza
https://skript.pl/temat/57403-jak-zrobi%C4%87-funkcje-%C5%BCeby-czeka%C5%82-skrypt/#findComment-341887
Udostępnij na innych stronach

  • 0

Okej, dziękuje. Mam jeszcze jedną prośbę. Jestem trochę nowy odnośnie wydaje mi się że javy. Mam takie pytanie, czy mógłby pan wysłać gotową instrukcję on command? Wydaje mi się że zrozumiałem co trzeba tu zrobić, lecz pan jest profesjonalistą, więc na pewno lepiej go napisze niż ja. 

Z góry dziękuje :))

Edytowane przez micmit123
Odnośnik do komentarza
https://skript.pl/temat/57403-jak-zrobi%C4%87-funkcje-%C5%BCeby-czeka%C5%82-skrypt/#findComment-341900
Udostępnij na innych stronach

  • 0
2 godziny temu, micmit123 napisał:

Okej, dziękuje. Mam jeszcze jedną prośbę. Jestem trochę nowy odnośnie wydaje mi się że javy. Mam takie pytanie, czy mógłby pan wysłać gotową instrukcję on command? Wydaje mi się że zrozumiałem co trzeba tu zrobić, lecz pan jest profesjonalistą, więc na pewno lepiej go napisze niż ja. 

Z góry dziękuje :))

Javy tutaj Pan nie uświadczy, gdyż dopiero po zainstalowaniu dodatku skript-reflect pojawia się możliwość korzystania z dobrodziejstw przeróżnych bibliotek Javy i silnika serwera. Niemniej jednak z całego serca polecam ten dodatek, ponieważ w odpowiednich rękach staje się niezwykle potężnym narzędziem, które poszerza horyzonty Skripta.

Wracając do meritum - Pan dobrze napisał listener zdarzenia 'on command'. Wystarczy, że Pan zamieni linijkę odtwarzającą dźwięk za pomocą komendy na linijkę, którą Panu podałem. Do tego wystarczy dodać opóźnienie przed odtwarzaniem dźwięku, aby dźwięk się odtworzył po, nie przed teleportacją gracza.

Aby nie być gołosłownym, podam Panu strukturę skryptu w formie pseudokodu (ściślej mówiąc, marnej próby przetłumaczenia Skripta na język polski).

gdy gracz wpisze komendę "spawn":
	odczekaj 1 tick
	odtwórz graczowi dźwięk "ENTITY_GENERAL_EXPLODE"

Może Pan to uznać za złośliwość z mojej strony, ale uspokajam. Robię tak, bo jestem przeciwny powierzaniu innym gotowego kodu - zwyczajnie brak w tym jakiejkolwiek wartości dydaktycznej, nauki.
W ten sposób Pan już powinien być w stanie dojść do odpowiedzi (we wcześniejszych postach podałem wszystkie potrzebne instrukcje, wystarczy je wstawić w odpowiednie miejsca w powyższym pseudokodzie).

Edytowane przez Kormic
Odnośnik do komentarza
https://skript.pl/temat/57403-jak-zrobi%C4%87-funkcje-%C5%BCeby-czeka%C5%82-skrypt/#findComment-341902
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...