Skocz do zawartości
  • 0

nearest loop-block


fasdasdsaatrewq
 Udostępnij

Pytanie

Cześć, posiadam ową linijkę skryptu:

set {distance::%loop-player%} to distance between loop-player and a nearest loop-block

i chodzi głównie o tą cześć

a nearest loop-block

Chyba wiadomo o co chodzi...
Jeśli trzeba mogę udostępnić cały skrypt.
Pozdrawiam

Edytowane przez xNightPower_
Nieaktywny

Naprawiam formatowanie na ciemnym stylu, umieszczam kod w code.

Odnośnik do komentarza
Udostępnij na innych stronach

13 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
Teraz, fasdasdsaatrewq napisał:

Chyba wiadomo o co chodzi...

Nie, nie wiadomo o co chodzi. Nie wyjaśniłeś co w ogóle zleceniobiorca ma zrobić.

 

Teraz, fasdasdsaatrewq napisał:

Jeśli trzeba mogę udostępnić cały skrypt.

Wręcz powinieneś.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
19 minut temu, Kormic napisał:

Nie, nie wiadomo o co chodzi. Nie wyjaśniłeś co w ogóle zleceniobiorca ma zrobić.

 

Wręcz powinieneś.

Jakoś przed chwilą wiedizałeś o co chodzi?

To jest zbyt ciężkie do wytłumaczenia, ale ok:
Chce zrobić, aby wyświetlało mi odległość pomiędzy borderem, a graczem, czyli jako action bar...
 

if {distance::%loop-player%} < 25:
	set action bar of loop-player to "&dGranica Spawna &8» &e%{distance::%loop-player%}%"
if {distance::%loop-player%} < 15:
	set action bar of loop-player to "&dGranica Spawna &8» &c%{distance::%loop-player%}%"
if {distance::%loop-player%} < 5:
	set action bar of loop-player to "&dGranica Spawna &8» &4%{distance::%loop-player%}%"

I tutaj masz/cie cały kod:
 

every 1 seconds:
    loop all players:
        loop all blocks in radius 25 around the loop-player:
            if loop-block is furnace:
                set {distance::%loop-player%} to distance between loop-player and loop-block
                if {distance::%loop-player%} < 25:
                    set action bar of loop-player to "&dGranica Spawna &8» &e%{distance::%loop-player%}%"
                if {distance::%loop-player%} < 15:
                    set action bar of loop-player to "&dGranica Spawna &8» &c%{distance::%loop-player%}%"
                if {distance::%loop-player%} < 5:
                    set action bar of loop-player to "&dGranica Spawna &8» &4%{distance::%loop-player%}%"

I jakbyś(cie) mógł(ogli) zrobić tak, aby zamiast tych piecyków był worldborder
wracając...

Skrypt działa tak że gdy podchodze do "linii" piecyków, czyli do większej ilości to dzieje się to...
 

Spoiler

image.png

A gdy (p)odchodzę do 1 piecyka to wszystko działa dobrze..

Mam nadzieję, że dobrze wytłumaczyłem :)

Edytowane przez xNightPower_
Nieaktywny

Zamieniam link w obraz, który umieszczam w spoilerze.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
every 1 seconds:
	loop all players:
		loop all blocks in radius 25 around the loop-player:
			if loop-block is furnace:
				set {distance::%loop-player%} to distance between loop-player and loop-block
				if {distance::%loop-player%} < 25:
					set action bar of loop-player to "&dGranica Spawna &8» &e%{distance::%loop-player%}%"
				if {distance::%loop-player%} < 15:
					set action bar of loop-player to "&dGranica Spawna &8» &c%{distance::%loop-player%}%"
				if {distance::%loop-player%} < 5:
					set action bar of loop-player to "&dGranica Spawna &8» &4%{distance::%loop-player%}%"
				stop loop

 

Edytowane przez xAxee
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
27 minut temu, fasdasdsaatrewq napisał:

Jakoś przed chwilą wiedizałeś o co chodzi?

Miej na uwadze, że nie jestem jedyną osobą znającą się na Skript'cie na tym forum. Istnieje możliwość, że kto inny chciałby ci pomóc.

27 minut temu, fasdasdsaatrewq napisał:

I jakbyś(cie) mógł(ogli) zrobić tak, aby zamiast tych piecyków był worldborder

Niestety nie jest to możliwe. Skript nie posiada składni dotyczącej worldborderu, a z użyciem Javy w skript-reflect również tego nie zrobisz, gdyż nie ma sposobu na sprawdzenie dystansu do worldbordera.

27 minut temu, fasdasdsaatrewq napisał:

Skrypt działa tak że gdy podchodze do "linii" piecyków, czyli do większej ilości to dzieje się to...

Dzieje się tak dlatego, ponieważ wyświetlasz dystans dla wszystkich piecyków w promieniu 25 kratek od gracza. Dlatego też jeżeli w promieniu 25 kratek jest przykładowo 10 piecy to action bar (pasek akcji) zostanie wysłany 10 razy. Musisz wyznaczyć najbliższy blok względem gracza.

Skrypt:

every 1 seconds:
	loop all players:
		loop all blocks in radius 25 around loop-player:
			loop-block is furnace
			if {_t} is not set:
				set {_t} to loop-block
				continue
			distance between loop-player and loop-block is less than distance between loop-player and {_t}
			set {_t} to loop-block
		{_t} is not set:
			set action bar of loop-player to "&dGranica Spawna &8» &ePonad 25 kratek"
			continue
		set {_d} to distance between loop-player and loop-block
		if {_d} <= 25:
			set action bar of loop-player to "&dGranica Spawna &8» &e%{_d}%"
		if {_d} < 15:
			set action bar of loop-player to "&dGranica Spawna &8» &c%{_d}%"
		if {_d} < 5:
			set action bar of loop-player to "&dGranica Spawna &8» &4%{_d}%"

Mimo wszystko jestem pewien, że przez ten skrypt wskaźnik TPS poleci na łeb na szyję. Zapętlanie bloków co sekundę w promieniu 25 kratek od wszystkich graczy z pewnością nie będzie lekką operacją. Jeżeli już miałbym to zrobić, popróbowałbym z pętlą 'while', gdyż wszystko nie będzie obliczane w jednym momencie. Powinno to nieco odciążyć procesor.

on join:
	while player is online:
		loop all blocks in radius 25 around player:
			loop-block is furnace
			if {_t} is not set:
				set {_t} to loop-block
				continue
			distance between player and loop-block is less than distance between player and {_t}
			set {_t} to loop-block
		{_t} is not set:
			set action bar of player to "&dGranica Spawna &8» &ePonad 25 kratek"
		else:
			set {_d} to distance between player and loop-block
			if {_d} <= 25:
				set action bar of player to "&dGranica Spawna &8» &e%{_d}%"
			if {_d} < 15:
				set action bar of player to "&dGranica Spawna &8» &c%{_d}%"
			if {_d} < 5:
				set action bar of player to "&dGranica Spawna &8» &4%{_d}%"
		wait 1 second

 

Edytowane przez Kormic
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
2 minuty temu, xAxee napisał:

every 1 seconds:
	loop all players:
		loop all blocks in radius 25 around the loop-player:
			if loop-block is furnace:
				set {distance::%loop-player%} to distance between loop-player and loop-block
				if {distance::%loop-player%} < 25:
					set action bar of loop-player to "&dGranica Spawna &8» &e%{distance::%loop-player%}%"
				if {distance::%loop-player%} < 15:
					set action bar of loop-player to "&dGranica Spawna &8» &c%{distance::%loop-player%}%"
				if {distance::%loop-player%} < 5:
					set action bar of loop-player to "&dGranica Spawna &8» &4%{distance::%loop-player%}%"
				exit loop

 

Em... Dzięki  za chęci, ale problem nie został rozwiązany

Pokaże ci o co chodzi na przykładzie innego serwera:
 

Spoiler

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!


A potem jak odejdę to dzieje się to...

 

Spoiler

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!


Nie myślcie, że jestem aż tak szalony, że chcę robić sektory w skripcie, tylko próbuje zrobić granicę.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
function checkBorder(p: player):
	loop all blocks in radius 25 around {_p}:
		if loop-block is furnace:
			if {_dis} is not set:
				set {_dis} to distance between {_p} and loop-block
			if {_dis} > (distance between {_p} and loop-block):
				set {_dis} to distance between {_p} and loop-block
	if {_dis} < 25:
		send action bar "&dGranica Spawna &8» &e%{_dis}%" to {_p}
	if {_dis} < 15:
		send action bar "&dGranica Spawna &8» &c%{_dis}%" to {_p}
	if {_dis} < 5:
		send action bar "&dGranica Spawna &8» &4%{_dis}%" to {_p}
every 1 seconds:
	loop all players:
		checkBorder(loop-player)

Niestety nie do borderu bo border nie jest blokiem 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
9 minut temu, Kormic napisał:

Miej na uwadze, że nie jestem jedyną osobą znającą się na Skript'cie na tym forum. Istnieje możliwość, że kto inny chciałby ci pomóc.

Niestety nie jest to możliwe. Skript nie posiada składni dotyczącej worldborderu, natomiast z użyciem Javy w skript-reflect również tego nie zrobisz, gdyż nie ma sposobu na sprawdzenie dystansu do worldbordera.

Dzieje się tak dlatego, ponieważ wyświetlasz dystans dla wszystkich piecyków w promieniu 25 kratek od gracza. Dlatego też jeżeli w promieniu 25 kratek jest przykładowo 10 piecy to action bar (pasek akcji) zostanie wysłany 10 razy. Musisz wyznaczyć najbliższy blok względem gracza.

Skrypt:



every 1 seconds:
	loop all players:
		loop all blocks in radius 25 around loop-player:
			loop-block is furnace
			if {_t} is not set:
				set {_t} to loop-block
				continue
			distance between loop-player and loop-block is less than distance between loop-player and {_t}
			set {_t} to loop-block
		{_t} is not set:
			set action bar of loop-player to "&dGranica Spawna &8» &ePonad 25 kratek"
			continue
		set {_d} to distance between loop-player and loop-block
		if {_d} <= 25:
			set action bar of loop-player to "&dGranica Spawna &8» &e%{_d}%"
		if {_d} < 15:
			set action bar of loop-player to "&dGranica Spawna &8» &c%{_d}%"
		if {_d} < 5:
			set action bar of loop-player to "&dGranica Spawna &8» &4%{_d}%"

Mimo wszystko jestem pewien, że przez ten skrypt wskaźnik TPS poleci na łeb na szyję. Zapętlanie bloków co sekundę w promieniu 25 kratek od wszystkich graczy z pewnością nie będzie lekką operacją. Jeżeli już miałbym to zrobić, popróbowałbym z pętlą 'while', gdyż wszystko nie będzie obliczane w jednym momencie. Powinno to nieco odciążyć procesor.



on join:
	while player is online:
		loop all blocks in radius 25 around player:
			loop-block is furnace
			if {_t} is not set:
				set {_t} to loop-block
				continue
			distance between player and loop-block is less than distance between player and {_t}
			set {_t} to loop-block
		{_t} is not set:
			set action bar of player to "&dGranica Spawna &8» &ePonad 25 kratek"
			continue
		set {_d} to distance between player and loop-block
		if {_d} <= 25:
			set action bar of player to "&dGranica Spawna &8» &e%{_d}%"
		if {_d} < 15:
			set action bar of player to "&dGranica Spawna &8» &c%{_d}%"
		if {_d} < 5:
			set action bar of player to "&dGranica Spawna &8» &4%{_d}%"
		wait 1 second

 

Co do twojego skryptu nie rozumiem czemu się to wyświetla, skoro jak dla mnie jest poprawny, ale proszę:

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

 

6 minut temu, xAxee napisał:


function checkBorder(p: player):
	loop all blocks in radius 25 around {_p}:
		if loop-block is furnace:
			if {_dis} is not set:
				set {_dis} to distance between {_p} and loop-block
			if {_dis} > (distance between {_p} and loop-block):
				set {_dis} to distance between {_p} and loop-block
	if {_dis} < 25:
		send action bar "&dGranica Spawna &8» &e%{_dis}%" to {_p}
	if {_dis} < 15:
		send action bar "&dGranica Spawna &8» &c%{_dis}%" to {_p}
	if {_dis} < 5:
		send action bar "&dGranica Spawna &8» &4%{_dis}%" to {_p}
every 1 seconds:
	loop all players:
		checkBorder(loop-player)

Niestety nie do borderu bo border nie jest blokiem 

Oj.. nie.. znowu te funkcje :(...
korzystam z wersji Skript 2.3.5
i tu masz errory:
 

Spoiler

[ERROR] 'checkBorder(p: player)' is not a text (odpychanie.sk, line 1: function checkBorder(p: player):')

[ERROR] 'checkBorder(loop-player)' is not a boolean (yes/no) (odpychanie.sk, line 16: checkBorder(loop-player)')

 

xAxee

Łączę posty

Notatka dodana przez xAxee

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
4 minuty temu, fasdasdsaatrewq napisał:

Co do twojego skryptu nie rozumiem czemu się to wyświetla, skoro jak dla mnie jest poprawny, ale proszę:

Powodem jest zbyt stara wersja Skripta. Aby to zadziałało, musiałbyś posiadać wersję Skripta minimum 2.2-dev37.

Podaj wersję serwera i silnik serwera, a będę w stanie wybrać możliwie najlepszy Skript dla twojego serwera.

EDIT:

Poprawiłem w drugim skrypcie niewielki błąd, mianowicie zamiast bloku 'else' użyłem 'continue'.

Edytowane przez Kormic
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Teraz, Kormic napisał:

Powodem jest zbyt stara wersja Skripta. Aby to zadziałało, musiałbyś posiadać wersję Skripta minimum 2.2-dev37.

Podaj wersję serwera i silnik serwera, a będę w stanie wybrać możliwie najlepszy Skript dla twojego serwera.

Spigot 1.8.8 - bazowany na hostingu server.pro

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
2 minuty temu, fasdasdsaatrewq napisał:

Oj.. nie.. znowu te funkcje :(...
korzystam z wersji Skript 2.3.5
i tu masz errory:
 

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! Pokaż ukrytą zawartość

 

No można wywalić funkcje ale najlepiej gdybyś pobrał odpowiednią najnowszą wersje skripta na serwer

every 1 seconds:
	loop all players:
		set {_p} to loop-player
		loop all blocks in radius 25 around {_p}:
			if loop-block is furnace:
				if {_dis} is not set:
					set {_dis} to distance between {_p} and loop-block
				if {_dis} > (distance between {_p} and loop-block):
					set {_dis} to distance between {_p} and loop-block
		if {_dis} < 25:
			set action bar of {_p} to "&dGranica Spawna &8» &e%{_dis}%"
		if {_dis} < 15:
			set action bar of {_p} to "&dGranica Spawna &8» &c%{_dis}%"
		if {_dis} < 5:
			set action bar of {_p} to "&dGranica Spawna &8» &4%{_dis}%"

 

Edytowane przez xAxee
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Teraz, fasdasdsaatrewq napisał:

Spigot 1.8.8 - bazowany na hostingu server.pro

Skript 2.3.5 nie jest przeznaczony na wersję 1.8.8. Najnowsza dostępna wersja Skripta na 1.8.8 to 2.2.

Możesz opcjonalnie spróbować z forkiem Matocolotoe, który wprowadza Skripta 2.5 na 1.8.

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Nie zapomnij o (opcjonalnie - kopii zapasowej skryptów i zmiennych) usunięciu folderu Skript po starym pluginie i ponownym włączeniu serwera, aby nowy Skript na nowo utworzył folder.

Odnośnik do komentarza
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

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

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