Skocz do zawartości
  • 0

skrypt na warp problem


Nolnico

Pytanie

dobry wieczór jestem początkującym (skripterem) i chciałbym się dowiedziec dlaczego po uzyciu skryptku poniżej wraza "poczekaj 3 sekundy na teleportacje" się powtarza i nie teleportuje gracza na dany warp
Skrypt:

command /warp [<text>] [<text>]:
    trigger:
        if arg 1 is not set:
            send "&8[&9NB&8] &9» &4Błąd &cwpisz warp na który chcesz być przeleportowany"

        if arg 1 is "poczekalnia":
            send "&8[&9NB&8] &9» &7poczekaj &e3 sekundy &7na &eteleportacje &7i nie ruszaj się!"
            wait 3 seconds
            execute player command "warp poczekalnia"
            stop

 

Bardzo prosiłbym o pomoc

 

Odnośnik do komentarza
https://skript.pl/temat/54345-skrypt-na-warp-problem/
Udostępnij na innych stronach

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Gdyż zrobiłeś nieskończoną pętlę :D 

Zrobiłeś komendę /warp poczekalnia

to nadpisało essentialską komendę, a później wykonujesz z poziomu gracza znowu komendę /warp poczekalnia

dlatego występuje tylko napis, ponieważ skrypt wykonuje za gracza komendę którą wpisał :D 

Odnośnik do komentarza
https://skript.pl/temat/54345-skrypt-na-warp-problem/#findComment-329819
Udostępnij na innych stronach

  • 0
2 minuty temu, knugi napisał:

Gdyż zrobiłeś nieskończoną pętlę :D 

Zrobiłeś komendę /warp poczekalnia

to nadpisało essentialską komendę, a później wykonujesz z poziomu gracza znowu komendę /warp poczekalnia

dlatego występuje tylko napis, ponieważ skrypt wykonuje za gracza komendę którą wpisał :D 

 

czyli mógłbyś mi wyjaśnić co powinienem zrobić aby to naprawić ? 

Odnośnik do komentarza
https://skript.pl/temat/54345-skrypt-na-warp-problem/#findComment-329820
Udostępnij na innych stronach

  • 0

Jasne, z góry zakładam że posiadasz warpy z jakiegoś pluginu, essentials lub innego i chcesz założyć cooldown na daną komendę.

Możesz to zrobić w dwojaki sposób.

1. Ustawić to w configu essentialsa, lub innego pluginu jeżeli wspiera.

2. Jeżeli koniecznie chcesz to zrobić w skrypcie to nie możesz nadpisać komendy.

Żeby nie nadpisywać komend, tylko operować na nich to najlepiej skorzystać z eventu on command

on wywołuje się wtedy gdy gracz wpisze komendę.

Później skrypt musi wiedzieć jaką komendą chcesz operować, w tym przypadku warp, więc piszesz warunek

if command is "warp":

gdy już to mamy, to trzeba przemyśleć jedną kwestię, gracz wpisze warp bez żadnego argumentu to bez sensu żeby miał cooldown, ale jak to zrobić.

Trzeba sprawdzić czy gracz wprowadził jakiś argument:

if arguments is set:

Teraz już mamy pewność że chciał do jakiegoś warpu się teleportować.

Teraz możemy zabrać się za robienie cooldownu, Najpierw trzeba anulować event, aby nie nastąpiła teleportacja

cancel event

Teraz robimy kodzik na cooldown i sprawdzanie pozycji:

			cancel event
			send "Nie ruszaj sie przez 3 sekundy!"
			set {_loc::*} to x-location of player, y-location of player and z-location of player
			loop 3 times:
				if {_stop} is set:
					send "Ruszyles sie!"
					stop
				if difference between x-location of player and {_loc::1} is larger than 0.5:
					set {_stop} to true
				if difference between y-location of player and {_loc::2} is larger than 0.5:
					set {_stop} to true
				if difference between z-location of player and {_loc::3} is larger than 0.5:
					set {_stop} to true
				wait 1 seconds

I dobrze by było doprowadzić do teleportacji i anulować event, lecz gdy wpiszemy uncancel event to wywali Skript błąd, że nie można po użyciu delay.

Wtedy trzeba zrobić taki myk, zapisać zmienną, wykonać jeszcze raz komendę, sprawdzić czy zmienna jest ustawiona, zmienną usunąć i zatrzymać kod.

Całość by wyglądała w ten sposób:

on command:
	if command is "warp":
		if arguments is set:
			if {ctpwarp::%player%} is true:
				clear {ctpwarp::%player%}
				stop
			cancel event
			send "Nie ruszaj sie przez 3 sekundy!"
			set {_loc::*} to x-location of player, y-location of player and z-location of player
			loop 3 times:
				if {_stop} is set:
					send "Ruszyles sie!"
					stop
				if difference between x-location of player and {_loc::1} is larger than 0.5:
					set {_stop} to true
				if difference between y-location of player and {_loc::2} is larger than 0.5:
					set {_stop} to true
				if difference between z-location of player and {_loc::3} is larger than 0.5:
					set {_stop} to true
				wait 1 seconds
			set {ctpwarp::%player%} to true
			execute player command "warp %arguments%"

 

Odnośnik do komentarza
https://skript.pl/temat/54345-skrypt-na-warp-problem/#findComment-329821
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Nieaktywny
Odpowiedz na pytanie...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

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