Skocz do zawartości

pyraRTP - generowanie losowych współrzędnych


Rekomendowane odpowiedzi

Przedstawiam funkcję, która tworzy losowe punkty zawierające się w wybranym obszarze. Zwraca gotową lokalizację:

  • Pierwsza wersja, funkcja generuje lokalizację z dwóch przeciwległych współrzędnych prostokąta:
    Spoiler


    
    function getRandomLoc(xmin: integer=-1000, xmax: integer=1000, zmin: integer=-1000, zmax: integer=1000, world: text="world") :: location:
    	while {_return} is not set:
    		set {_x} to random integer between {_xmin} and {_xmax}
    		set {_z} to random integer between {_zmin} and {_zmax}
    		set {_loc} to highest block at location at {_x}, 0, {_z} in world ({_world} parsed as world)
    		if block at {_loc} != lava or water:
    			add 1 to y-loc of {_loc}
    			if (block at {_loc}) and (block above block at {_loc}) != lava:
    				set {_return} to {_loc}
    	return {_return}

    Argumenty funkcji:

    • Współrzędne x oraz z, pomiędzy którymi będzie wygenerowana lokalizacja:
      • 1. minimalna x (liczba całkowita, domyślnie: -1000)
      • 2. maksymalna x (liczba całkowita, domyślnie: +1000)
      • 3. minimalna z (liczba całkowita, domyślnie: -1000)
      • 4. maksymalna z (liczba całkowita, domyślnie: +1000)
    • Nazwa świata, w którym zostanie wygenerowana:
      • 5. (tekst, domyślnie: world)

     

 

 

  • Druga wersja, funkcja generuje lokalizację wewnątrz okręgu o zadanym środku i promieniu:
    Spoiler
    
    function getRandomRoundLoc(x: integer=0, z: integer=0, radius: integer=1000, world: text="world") :: location:
    	while {_return} is not set:
    		set {_dist} to random integer between 0 and {_radius}
    		set {_angle} to random number between 0 and 360
    		set {_newX} to {_x} + (sin({_angle}) * {_dist})
    		set {_newZ} to {_z} + (cos({_angle}) * {_dist})
    		set {_loc} to highest block at location at {_newX}, 0, {_newZ} in world ({_world} parsed as world)
    		if block at {_loc} != lava or water:
    			add 1 to y-loc of {_loc}
    			if (block at {_loc}) and (block above block at {_loc}) != lava:
    				set {_return} to {_loc}
    	return {_return}

    Argumenty funkcji:

    • Współrzędne x oraz z środka okrędu:
      • 1. współrzędna x (liczba całkowita, domyślnie: 0)
      • 2. współrzędna z (liczba całkowita, domyślnie: 0)
    • Promień okręgu:
      • 3. (liczba całkowita, domyślnie: 1000)
    • Nazwa świata, w którym zostanie wygenerowana:
      • 4. (tekst, domyślnie: world)

     

 

Przykłady użycia:

  • Komenda /rtp z użyciem domyślnych argumentów:
command /rtp [<text>]:
	trigger:
		teleport player to getRandomLoc()
		#lub
		teleport player to getRandomRoundLoc()
  • Komenda /rtp z użyciem własnych argumentów:
command /rtp [<text>]:
	trigger:
		teleport player to getRandomLoc(0, 100, 0, 100, "Spawn")
		#lub
		teleport player to getRandomRoundLoc(100, -6443, 5000, "Survival")

 

Wymagania:

Skript w wersji przynajmniej 2.2 dev 34

Edytowane przez ZiemniaQ
Funkcja generująca lokalizację wewnątrz okręgu.
Odnośnik do komentarza
https://skript.pl/temat/34573-pyrartp-generowanie-losowych-wsp%C3%B3%C5%82rz%C4%99dnych/
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
Dodaj odpowiedź do tematu...

×   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ę...