Skocz do zawartości
  • 0

Pytanie do effektu: shoot


Pytanie

6 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
6 minut temu, judosmok napisał:

Czy da się używając shoot wystrzelić strzałę czy cokolwiek żeby leciała do osoby która na zaatakuje?

Jak najbardziej. Wyjaśnię w kilku krokach jak można taki skrypt napisać.

  1. Nasłuchujemy do listenera zdarzenia 'on damage:'. Sprawdzamy czy ofiara (victim) to gracz.
  2. Zapisujemy do jakiejś zmiennej lokalnej (na przykład {_v}) wektor zaczynający się w lokalizacji zaatakowanego i kończący się w lokalizacji atakującego. Tutaj przyda się te wyrażenie z dokumentacji.
  3. Normalizujemy ów wektor (zmniejszamy jego moduł (długość) do 1). Powinniśmy tak zrobić, gdyż obrażenia zadawane przez strzałę zależą od jej prędkości, a bez normalizacji mielibyśmy sytuację, że im dalej stałby atakujący, tym szybciej strzała wędrowałaby w jego kierunku (a więc zadawałaby więcej obrażeń).
  4. Możemy przemnożyć (ale nie musimy) ten wektor przez jakąś stałą, aby zmienić prędkość strzały.
    Niestety, Skript nie wspiera mnożenia wektorów przez skalar. Jesteśmy zmuszeni więc stworzyć wektor o identycznych współrzędnych (np. 'set {_scalarVector} to vector 0.8, 0.8, 0.8').
    Gdy już stworzyliśmy sobie taki wektor, możemy go przemnożyć przez nasz wektor z punktu 3 i zapisać wynik tego mnożenia (który jest rzecz jasna wektorem) do jakiejś zmiennej lokalnej. Najprościej jest posłużyć się tym wyrażeniem.
  5. Finalnie, możemy użyć efektu 'shoot'. Na końcu musimy dodać nasz wektor, aby Skript wiedział w jakim kierunku ma zostać wystrzelona strzała.
Odnośnik do komentarza
https://skript.pl/temat/57457-pytanie-do-effektu-shoot/#findComment-342154
Udostępnij na innych stronach

  • 0

Nie wiem czy zrozumiałem dobrze, ale wyszło mi coś takiego
 

            set {_loc1} to location of victim
            set {_loc2} to location of attacker
            set {_v} to vector between {_loc1} and {_loc2}
            set {_v} to normalized {_v}
            set {_scalarVector} to vector 0.8, 0.8, 0.8
            set {_cel} to {_v}*{_scalarVector}
            shoot an arrow from victim {_cel}

nie mam jak sprawdzić,
ale jak zrobiłem reload to nie było błędów
powiesz czy to dobrze zrobiłem, czy źle zrozumiałem?

Odnośnik do komentarza
https://skript.pl/temat/57457-pytanie-do-effektu-shoot/#findComment-342168
Udostępnij na innych stronach

  • 0
9 minut temu, judosmok napisał:

nie mam jak sprawdzić,
ale jak zrobiłem reload to nie było błędów
powiesz czy to dobrze zrobiłem, czy źle zrozumiałem?

Jeśli kod został zawarty w listenerze zdarzenia 'on damage:' i sprawdzono czy obaj uczestnicy zdarzenia (victim i attacker) to gracze, to prawie bezbłędnie Pan to napisał, bardzo ładnie.

Jedyny błąd to pojedynczy znak mnożenia. Jeśli chcemy przemnożyć dwa wektory przez siebie (a więc wszystkie współrzędne pierwszego przez odpowiadające współrzędne drugiego), należy użyć podwójnego znaku mnożenia '**'. W razie niepewności ponownie odsyłam do dokumentacji.

Odnośnik do komentarza
https://skript.pl/temat/57457-pytanie-do-effektu-shoot/#findComment-342169
Udostępnij na innych stronach

  • 0

Tylko przy odpaleniu serwer napisało że ta funkcja zostanie niedługo usunięta:
 

Cytat

This expression was deprecated in favor of the arithmetic expression, and will be removed in the future. Please use that instead. E.g. 'vector(2, 4, 1) + vector(5, 2, 3)'
Line: set {_cel} to {_v}**{_scalarVector}

 

Odnośnik do komentarza
https://skript.pl/temat/57457-pytanie-do-effektu-shoot/#findComment-342173
Udostępnij na innych stronach

  • 0
2 godziny temu, judosmok napisał:

Tylko przy odpaleniu serwer napisało że ta funkcja zostanie niedługo usunięta:
 

 

Faktycznie. Zapomniałem, że te wyrażenia zostały przeznaczone do usunięcia w wersji 2.8.0. Miło widzieć, że twórcy faktycznie chcą uczynić wektory w Skript wektorami w sensie matematycznym, a nie ich marnymi imitacjami. Być może jednak w najnowszej wersji jest już możliwy iloczyn skalara z wektorem (nie mylić z iloczynem skalarnym).

Nie rozumiem jednak dlaczego Skript sugeruje dodanie tych wektorów. Zakładam, że twórcy tylko jedną taką wskazówkę dla dodawania. Nam rzecz jasna zależy na operacji iloczynu skalara i wektora.

Niech Pan w takim razie spróbuje napisać tę instrukcję na dwa poniższe sposoby i po zapisaniu zmiennej {_cel} wyświetli ją na czacie.

# 1. sposób (o ile można dokonać przemnożenia współrzędnych wektora przez skalar):
set {_cel} to 0.8 * {_v}
# Powyższa linijka powinna zwrócić wektor, którego moduł jest równy 80% modułu wektora {_v}
# Moduł wektora: https://docs.skriptlang.org/expressions.html#ExprVectorLength

# 2. sposób (o ile wystarczy pojedynczy znak mnożenia):
set {_cel} to {_scalarVector} * {_v}

Mam duże wątpliwości co do drugiego, gdyż matematycznie jest to operacja niedopuszczalna - mowa o mnożeniu macierzowym, gdzie ilość kolumn w pierwszej macierzy jest różna od ilości wierszy w drugiej macierzy (przy założeniu, że to są wektory wierszowe). Niemniej jednak warto to przetestować.

Edytowane przez Kormic
Odnośnik do komentarza
https://skript.pl/temat/57457-pytanie-do-effektu-shoot/#findComment-342175
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ę...