Skocz do zawartości
  • 0

Tor lotu pocisku?


Gość Usunięty#10777

Pytanie

Gość Usunięty#10777

Witam. Załóżmy, że chcę wystrzelić strzałę od gracza w kierunku w którym się patrzy.

on rightclick:
	shoot arrow from player

Teraz, chciałbym aby strzała nie leciała idealnie, tylko za każdym razem losowo zbaczała nieco na boki lub góra/dół. Jak to zrobić?

Odnośnik do komentarza
https://skript.pl/temat/38696-tor-lotu-pocisku/
Udostępnij na innych stronach

15 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Potrzebna nam prosta manipulacja wektorem.

shoot arrow from player

korzysta z wektora, który w silniku gier, nazywałby się czymś w stylu Vector3.forward, czyli po prostu kierunek, w którym patrzy gracz.
Do wektorów możemy po prostu dodawać wartości, dzięku czemu bardzo łatwo jest osiągnąć upragniony efekt.
W spoilerze przykład wektora w przestrzeni 3D, czyli taki z jakiego będziemy teraz korzystać.

Spoiler

Create a Vector3 position by angle differences - Stack Overflow

A więc nasz kod może wyglądać tak:

set {_arrowvector} to location of player
set {_arrowspreadyaw} to random integer between -5 and 5
set {_arrowspreadpitch} to random integer between -5 and 5
add {_arrowspread} to yaw of {_arrowvector}
add {_arrowspread} to pitch of {_arrowvector}
shoot arrow from {_arrowvector}

Chciałbym zaznaczyć, że wcale nie testowałem tego kodu, więc może nie działać - ale głównie przez błędy składni czy zły syntax, logika kodu jest jak najbardziej okej.
Tutaj wyjaśnienie wartości yaw i pitch:
 

Spoiler

What is yaw and pitch? | Bukkit Forums

 

Edytowane przez PanNiedzwiadek
Odnośnik do komentarza
https://skript.pl/temat/38696-tor-lotu-pocisku/#findComment-243958
Udostępnij na innych stronach

  • 0
2 godziny temu, Aberforth napisał:

Zastosowałem kod, strzała pojawia się w pozycji gracza i upada w dół na ziemię. Próbowałem zwiększyć jej prędkość, taki sam rezultat.

no bo ten kod nie działa, zamiary może pan powyżej miał dobre, ale wykonanie średnie.

To może ja to teraz wytłumaczę to tak po 'skriptowemu':

  • #zacznijmy od tego samego - pobieramy położenie gracza do zmiennej
    set {_loc} to location of player
    
    #teraz dodajemy ten rozrzut i coś czego powyżej zabrakło - zastosowanie go w późniejszych działaniach
    #moim zdaniem wahania od -5 do 5 będą za duże, bardziej bym proponował coś -0.5 do 0.5
    #losujemy liczbę i dodajemy ją do kątów yaw i pitch w zmiennej
    add (random number between -0.5 and 0.5) to yaw of {_loc}
    add (random number between -0.5 and 0.5) to pitch of {_loc}
    
    #mamy kąty, mamy dla nich rozrzut - teraz kolej na stworzenie wektora, który w skript ma swój osobny obiekt
    set {_v} to vector from yaw (yaw of {_loc}) and pitch (pitch of {_loc})
    
    #mamy wektor więc teraz tylko strzelamy strzałą czy innym entity w jego kierunku
    shoot an arrow from {_loc} with speed 4 {_v}

     



 

Odnośnik do komentarza
https://skript.pl/temat/38696-tor-lotu-pocisku/#findComment-244025
Udostępnij na innych stronach

  • 0
Gość Usunięty#10777
26 minut temu, PanMaruda napisał:

no bo ten kod nie działa, zamiary może pan powyżej miał dobre, ale wykonanie średnie.

To może ja to teraz wytłumaczę to tak po 'skriptowemu':

  • 
    #zacznijmy od tego samego - pobieramy położenie gracza do zmiennej
    set {_loc} to location of player
    
    #teraz dodajemy ten rozrzut i coś czego powyżej zabrakło - zastosowanie go w późniejszych działaniach
    #moim zdaniem wahania od -5 do 5 będą za duże, bardziej bym proponował coś -0.5 do 0.5
    #losujemy liczbę i dodajemy ją do kątów yaw i pitch w zmiennej
    add (random number between -0.5 and 0.5) to yaw of {_loc}
    add (random number between -0.5 and 0.5) to pitch of {_loc}
    
    #mamy kąty, mamy dla nich rozrzut - teraz kolej na stworzenie wektora, który w skript ma swój osobny obiekt
    set {_v} to vector from yaw (yaw of {_loc}) and pitch (pitch of {_loc})
    
    #mamy wektor więc teraz tylko strzelamy strzałą czy innym entity w jego kierunku
    shoot an arrow from {_loc} with speed 4 {_v}

     



 

Nie zwraca błędu, ale nie działa (strzały w ogóle się nie pojawiają)

Odnośnik do komentarza
https://skript.pl/temat/38696-tor-lotu-pocisku/#findComment-244029
Udostępnij na innych stronach

  • 0
19 godzin temu, Aberforth napisał:

Nie zwraca błędu, ale nie działa (strzały w ogóle się nie pojawiają)

Czyli prawdopodobnie "shoot an arrow" w teorii jest poprawne, ale jednak nie do końca.
Często tak jest w Skript niestety, musisz teraz polecieć metodą prób i błędów jak dla mnie.

Być może w którymś miejscu nie można umieścić zmiennej, itp.

Odnośnik do komentarza
https://skript.pl/temat/38696-tor-lotu-pocisku/#findComment-244164
Udostępnij na innych stronach

  • 0

jedyne czego ten kod wymaga to Skript 2.2-dev28

ja sprawdzałem na PaperSpigocie 1.15.2 (v201) i ostatnim Skripcie - wszystko działa bez najmniejszego problemu

 

jedyne co bym ewentualnie zmienił to faktycznie większy rozrzut (powiedzmy na 3), większą prędkość i punkt z którego strzelamy na wyższy, bo aktualnie strzały lecą z okolic nóg

set {_loc} to location of player
add (random number between -3.5 and 3.5) to yaw of {_loc}
add (random number between -3.5 and 3.5) to pitch of {_loc}
set {_v} to vector from yaw (yaw of {_loc}) and pitch (pitch of {_loc})
shoot an arrow from (head location of player) with speed 7 {_v}
#ale to nie jest żadna zmiana, która coś zmienia w mechanice - raczej ci kod od niej nie zadziała magicznie

 

Odnośnik do komentarza
https://skript.pl/temat/38696-tor-lotu-pocisku/#findComment-245143
Udostępnij na innych stronach

  • 0
Gość Usunięty#10777
2 godziny temu, PanMaruda napisał:

jedyne czego ten kod wymaga to Skript 2.2-dev28

ja sprawdzałem na PaperSpigocie 1.15.2 (v201) i ostatnim Skripcie - wszystko działa bez najmniejszego problemu

 

jedyne co bym ewentualnie zmienił to faktycznie większy rozrzut (powiedzmy na 3), większą prędkość i punkt z którego strzelamy na wyższy, bo aktualnie strzały lecą z okolic nóg


set {_loc} to location of player
add (random number between -3.5 and 3.5) to yaw of {_loc}
add (random number between -3.5 and 3.5) to pitch of {_loc}
set {_v} to vector from yaw (yaw of {_loc}) and pitch (pitch of {_loc})
shoot an arrow from (head location of player) with speed 7 {_v}
#ale to nie jest żadna zmiana, która coś zmienia w mechanice - raczej ci kod od niej nie zadziała magicznie

 

Sprawdzałem na Spigocie 1.15.2 z najnowszym skriptem, i z jakiegoś powodu nie działa. Nie wyrzuca jednak błędów. Na pewno nie są potrzebne żadne dodatki?

Odnośnik do komentarza
https://skript.pl/temat/38696-tor-lotu-pocisku/#findComment-245189
Udostępnij na innych stronach

  • 0
3 godziny temu, Aberforth napisał:

Czy ktoś może podlinkować silnik i wersję skripta z którymi im to działa?

Bo sprawdziłem już kilka opcji i jakoś dalej skript nie reaguje.

Zrób testowy serwer na localhoście.
Wgraj tylko:
Silnik np. PaperSpigot np. #260  https://papermc.io/downloads
Skripta np. wersję 2.4.1 https://github.com/SkriptLang/Skript/releases/tag/2.4.1
Dodatków nie trzeba, Skript obsługuje wektory bez problemu.

Wrzuć plik.sk tam gdzie trzeba.
Szybki restarcik.
Sprawdź czy działa.

Odnośnik do komentarza
https://skript.pl/temat/38696-tor-lotu-pocisku/#findComment-245336
Udostępnij na innych stronach

  • 0
Gość Usunięty#10777
16 godzin temu, Turas napisał:

Zrób testowy serwer na localhoście.
Wgraj tylko:
Silnik np. PaperSpigot np. #260  https://papermc.io/downloads
Skripta np. wersję 2.4.1 https://github.com/SkriptLang/Skript/releases/tag/2.4.1
Dodatków nie trzeba, Skript obsługuje wektory bez problemu.

Wrzuć plik.sk tam gdzie trzeba.
Szybki restarcik.
Sprawdź czy działa.

Nie działa. Sprawdziłem dokładnie te wersje które podlinkowałeś. Zawsze wszystko robiłem na 1.12, teraz dopiero przenoszę się na 1.15. Coś się zmieniło w ostatnich wersjach o czym mogę nie wiedzieć? Nie wiem jak to wyjaśnić, pierwszy raz się spotykam z takim problemem.

Odnośnik do komentarza
https://skript.pl/temat/38696-tor-lotu-pocisku/#findComment-245423
Udostępnij na innych stronach

  • 0
Gość Usunięty#10777

Udalo mi sie rozwiazac problem.

on right click with iron ingot:
	set {_yaw} to yaw of player
	set {_pitch} to pitch of player
	add (random number between -3.5 and 3.5) to {_yaw}
	add (random number between -3.5 and 3.5) to {_pitch}
	set {_v} to vector from yaw {_yaw} and pitch {_pitch}
	shoot an arrow from (head location of player) with speed 7 {_v}

Nadal jednak wydaje mi sie to dziwne, ze niektorym poprzednia wersja dzialala, a mi nie.

Odnośnik do komentarza
https://skript.pl/temat/38696-tor-lotu-pocisku/#findComment-246447
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ę...