Skocz do zawartości
  • 0

Pomoc z hollow sphere


xSebixx1

Pytanie

6 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
W dniu 12.06.2026 o 21:52, xSebixx1 napisał:

Chciałem, stworzyć kule bez srodka, ale jak używam loop blocks around, to zazwyczaj nie jest rowna wsensie ze po 1 stronie jest inna i po 2 inna ma któs na to jakis pomysl?

Trzeba mieć na uwadze to, że wyrażenie `blocks around %location% in radius %number%` bierze pod uwagę wszystkie bloki, których środki są odległe o nie więcej niż zadany promień. W konsekwencji, jeśli zadana lokacja do zapętlania bloków nie leży w środku bloku, powstała sfera (czyli, jak to ująłeś, kula pusta w środku) nie będzie symetryczna. Jednym z możliwych rozwiązań jest wykorzystanie `location of block at %location%` jako środka sfery, którą chcesz utworzyć. Wtedy masz gwarancję symetrii.

Inny sposób stworzenia sfery to wykorzystanie promienia wodzącego, który wskazuje miejsce utworzenia bloku. Tworzysz wektor o długości promienia sfery, którego yaw (obrót lewo/prawo) i pitch (obrót góra/dół) są modyfikowane z pewnym krokiem, dostosowanym do promienia sfery (im większy promień, tym mniejszy musi być krok, ponieważ powstaną dziury w powierzchni). Przykład implementacji takiego rozwiązania podałem poniżej.

set {_r} to 5
set {_centerLoc} to location(100, 100, 100, "world")
set {_rotationStep} to 10

set {_v} to vector(0, -{_r}, 0)
loop ceil(180 / {_rotationStep}) times:
	loop ceil(360 / {_rotationStep}) times:
		set block at {_centerLoc} ~ {_v} to obsidian
		add {_rotationStep} to yaw of {_v}
	remove {_rotationStep} from pitch of {_v}

Nie jest to optymalne rozwiązanie, ponieważ ustawia ono te same bloki wielokrotnie, szczególnie bliżej "spodu" i "szczytu" sfery. Dobrze napisany kod powinien brać to pod uwagę i modyfikować `yaw` ze zmiennym krokiem. Niemniej jednak, jest to i tak lepsze rozwiązanie niż zapętlanie wszystkich bloków, włącznie z tymi wewnątrz sfery.
Mogłem także użyć wektorów sferycznych, ale uznałem składnię zwykłych wektorów za czytelniejszą.

Pozdrawiam.

Edytowane przez Kormic
1. Zapomniałem, że pitch = 90 oznacza spoglądanie prosto w dół, dlatego należy zmniejszać pitch, aby wektor stopniowo się "podnosił". 2. Zmieniłem '+' na '~', ponieważ Skript nie wspiera dodawania lokalizacji i wektorów.
Odnośnik do komentarza
https://skript.pl/temat/59131-pomoc-z-hollow-sphere/#findComment-347782
Udostępnij na innych stronach

  • 0
17 godzin temu, xSebixx1 napisał:

Chciałem, stworzyć kule bez srodka, ale jak używam loop blocks around, to zazwyczaj nie jest rowna wsensie ze po 1 stronie jest inna i po 2 inna ma któs na to jakis pomysl?

ale używasz around w nawiązaniu od czego? bo twoja lokacja jezeli jest lekko krzywa to i kula bedzie krzywa

dlatego najlepiej wez sobie around (location of block at player) bo blok krzywy nie bedzie

Edytowane przez Fendi
Odnośnik do komentarza
https://skript.pl/temat/59131-pomoc-z-hollow-sphere/#findComment-347783
Udostępnij na innych stronach

  • 0
3 godziny temu, Fendi napisał:

ale używasz around w nawiązaniu od czego? bo twoja lokacja jezeli jest lekko krzywa to i kula bedzie krzywa

dlatego najlepiej wez sobie around (location of block at player) bo blok krzywy nie bedzie

Uzywałem around loc of player, ale i tak zmienilem na przykład który dał kormic bo spełnia on moje oczekiwania

Odnośnik do komentarza
https://skript.pl/temat/59131-pomoc-z-hollow-sphere/#findComment-347784
Udostępnij na innych stronach

  • 0
3 godziny temu, xSebixx1 napisał:

Uzywałem around loc of player, ale i tak zmienilem na przykład który dał kormic bo spełnia on moje oczekiwania

może i działa, ale zamiast loc of player uzycie location of block at player jest duzo prostsze niz dodawanie dodatkowej matematyki

chyba ze nie działa, to whatever

 

Ale to raczej wina tego

Bo loc of player moze dac kordy: 10.340, 30, 15.670

A loc of block at player da kordy: 10.5, 30. 15.5

Co będzie równe

 

Odnośnik do komentarza
https://skript.pl/temat/59131-pomoc-z-hollow-sphere/#findComment-347785
Udostępnij na innych stronach

  • 0
13 godzin temu, Fendi napisał:

może i działa, ale zamiast loc of player uzycie location of block at player jest duzo prostsze niz dodawanie dodatkowej matematyki

Fendi, mam podejrzenie graniczące z pewnością, że nie przeczytałeś mojego posta. W pierwszym akapicie podałem instrukcję, którą można wykorzystać, tę samą co ty.

Ta dodatkowa matematyka to opis rozsądniejszego sposobu tworzenia sfery, bez konieczności zapętlania bloków wewnątrz niej.

Odnośnik do komentarza
https://skript.pl/temat/59131-pomoc-z-hollow-sphere/#findComment-347787
Udostępnij na innych stronach

  • 0
5 godzin temu, Kormic napisał:

Fendi, mam podejrzenie graniczące z pewnością, że nie przeczytałeś mojego posta. W pierwszym akapicie podałem instrukcję, którą można wykorzystać, tę samą co ty.

Ta dodatkowa matematyka to opis rozsądniejszego sposobu tworzenia sfery, bez konieczności zapętlania bloków wewnątrz niej.

okej, męczy mnie czytanie calego bloku takiego tekstu

skoro podales zaawansowaną matematyke w <code> sądziłem że tylko o tym się rozpisywales, bo z jakiego innego powodu pokazywać dodatkowo dużo bardziej zaawansowany kod

 

Można też dać inną odpowiedź

import:
    com.sk89q.worldedit.WorldEdit
    com.sk89q.worldedit.bukkit.BukkitAdapter
    com.sk89q.worldedit.math.BlockVector3
    com.sk89q.worldedit.function.pattern.BlockPattern
    org.bukkit.Material

function kula(l: location, block: text, radius: number):
    set {_mat} to Material.matchMaterial({_block})
    set {_world} to BukkitAdapter.adapt(world of {_l})
    set {_x} to floor(x-coordinate of {_l})
    set {_y} to floor(y-coordinate of {_l})
    set {_z} to floor(z-coordinate of {_l})
    set {_center} to BlockVector3.at({_x}, {_y}, {_z})
    set {_state} to BukkitAdapter.adapt({_mat}.createBlockData())
    set {_pattern} to new BlockPattern({_state})
    set {_session} to WorldEdit.getInstance().newEditSession({_world})
    {_session}.makeSphere({_center}, {_pattern}, {_radius}, false)
    {_session}.close()

command /kulafawe <text> <number>:
    permission: op
    trigger:
        kula(location of player, arg-1, arg-2)
        
on tab complete of "/kulafawe":
    set tab completions for position 1 to all blocks

Z fawe, skript-reflectem i skbee

Od razu przez api to stworzyc.

Albo dla prostoty 

on right click
	execute player command "//hsphere dirt 5"

 

Edytowane przez Fendi
Odnośnik do komentarza
https://skript.pl/temat/59131-pomoc-z-hollow-sphere/#findComment-347788
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ę...