Skocz do zawartości
  • 0

Wykrycie EnderCrystala


Pytanie

Próbuję napisać skrypt który wykona się w przypadku, gdy gracz znajduje sie w pobliżu Ender Crystala (w sercu gildii z pluginu FunnyGuilds). Do tego celu próbuję zloopować bloki w pobliżu, ale loop nie wykrywa serca gildii.
Fragment mojego kodu:
 

loop all blocks in radius 3 around player:
	if loop-block is End Crystal:
		DALSZA CZĘŚĆ KODU

Próbowałem też bez skutku zamieniać frazę "End Crystal" na "Endercrystal". Wydaje mi się, że loop nie interpretuje EnderCrystala jako blok. Aby to sprawdzić, napisałem oddzielny kod:
 

command /test:
	trigger:
		loop all blocks in radius 3 around player:
			send "%loop-block%"

W wyniku przeprowadzonego eksperymentu (na wyjściu komendy send) nie otrzymałem nic poza obsidian, gravel, stone, air.

Czy ma ktoś jakieś pomysły jak to zrealizować?
Dodam, że odpadają pomysły pomysły typu -> On command "baza".

Edytowane przez jas123
Odnośnik do komentarza
https://skript.pl/temat/27264-wykrycie-endercrystala/
Udostępnij na innych stronach

11 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Hmm, dobra propozycja. Mógłbyś podać przykład kodu, który wykona się w przypadku, gdy gracz znajduje się w odległości nie większej jak 5 bloków od EnderCrystala?

Sprawdziłem też poniższy kod i również nie jest wykrywalny EnderCrystal:
 

loop all entities in radius 5 around player:
	send "%loop-entity%"

 

Edytowane przez jas123
Odnośnik do komentarza
https://skript.pl/temat/27264-wykrycie-endercrystala/#findComment-179944
Udostępnij na innych stronach

  • 0
2 godziny temu, jas123 napisał:

Hmm, dobra propozycja. Mógłbyś podać przykład kodu, który wykona się w przypadku, gdy gracz znajduje się w odległości nie większej jak 5 bloków od EnderCrystala?

To zależy ile takich regionów byś chciał. Jeżeli będzie ich niewiele to możesz loopować przy ruchu gracza wszystkie regiony w jego świecie. Sprawdzasz następnie odległość od środka regionu, a samym graczem. Jeżeli byłoby ich wiele, to możesz te regiony indeksować przykładowo chunkami. Czyli klucz to współrzędne chunki, a wartość to lista potencjalnych regionów, które na tym chunku się znajdują. Potencjalny region to region, który znajduje się w tym chunku w jakiś sposób.

Odnośnik do komentarza
https://skript.pl/temat/27264-wykrycie-endercrystala/#findComment-179951
Udostępnij na innych stronach

  • 0

Niezbyt dokładnie wyjaśniłem na początku założenia skryptu, mój błąd. Nie będę używał On any movement, lecz On place. Skrypt polega na tym, że gracz może używać apteczki, ale tylko przy sercu gildii. I właśnie do tego potrzebuję sposobu na wykrycie, czy gracz znajduje się przy EnderCrystalu
 

Mój kod:
 

on place of Emerald Ore:
	if player's tool is Emerald Ore named "&cApteczka" with lore "&bPostaw aby uleczyc sie":
		loop all entities in radius 5 around player:
			if loop-entity is End Crystal:
				set {_jestkrysztal.%player%} to true
		if {_jestkrysztal.%player%} is true:
			set block to air
			execute console command "heal %player%"
			send "&cPomyslnie uleczyles sie"
		else:
			send "&cUleczyc mozesz sie tylko przy sercu gildii"
			stop
			

Jednakże ten kod nie działa, gdyż nie wiem jak wykryć to, czy gracz znajduje się w odległości max 5 bloków od EnderCrystalu.  Zamienienie loop-block na loop-entity (tak jak wcześniej wspomniałeś) nadal nie spowodowało wykrycia EnderCrustalu. Prawdopodobnie Skript nie interpretuje End Crystal jako block lub entity, lub gdzieś popełniłem błąd w kodzie.

Edytowane przez jas123
Odnośnik do komentarza
https://skript.pl/temat/27264-wykrycie-endercrystala/#findComment-179952
Udostępnij na innych stronach

  • 0
on place emerald ore:
    if name of player's tool is "Apteczka":
        cancel the event
        loop entities in radius 5 around event-location:
            if "%loop-entity%" is "ender crystal":
                heal player
                send "&aZostales uleczony."
                remove 1 of player's tool from inventory of player
                stop
        send "&cMozesz sie uleczyc tylko przy sercu gildii."

 

Edytowane przez ThatsVylence
Odnośnik do komentarza
https://skript.pl/temat/27264-wykrycie-endercrystala/#findComment-180185
Udostępnij na innych stronach

  • 0
1 godzinę temu, neexipl napisał:

on place emerald ore:
    if name of player's tool is "Apteczka":
        cancel the event
        loop entities in radius 5 around event-location:
            if "%loop-entity%" is "ender crystal":
                heal player
                send "&aZostales uleczony."
                remove 1 of player's tool from inventory of player
                stop
        send "&cMozesz sie uleczyc tylko przy sercu gildii."

Niestety nie działa. A zależy mi na tym, aby sercem gildii był End Crystal. Jakieś inne pomysły?

Nieaktywny

Wstawiam w CODE.

Odnośnik do komentarza
https://skript.pl/temat/27264-wykrycie-endercrystala/#findComment-180190
Udostępnij na innych stronach

  • 0

Silnik: PaperSpigot 1.7.10
Wersja Skript: 2.1.2
Wersja SkQuery: 3.21.4
Wersja WildSkript: 1.6.1
Wersja FunnyGuilds: 3.9.9.1 Cleaned 
Podczas kompilacji, skrypt nie wywala błędów, poza zasugerowaniem zmiany Ender Crystal na End Crystal (czego dokonałem). Jednak gdy kładę Emerald Ore nazwaną Apteczka w pobliżu End Crystalu nic sie nie dzieje (nie wykonuje się komenda heal).

Napisałem też testowy skrypt, który ma na celu wykrycie bloków w pobliżu, jednak on też nie wykrywa End Crystala w pobliżu (skrypt jedynie zwraca mój nick). Oto kod:
 

on place of dirt:
	loop entities in radius 5 around event-location:
            send "%loop-entity%"

 

Edytowane przez jas123
Odnośnik do komentarza
https://skript.pl/temat/27264-wykrycie-endercrystala/#findComment-180195
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ę...