Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem] Większy damage zza pleców


Rekomendowane odpowiedzi

Opublikowano

Pisze plugin, że gdy gracz uderzy drugiego gdy ten stoi do niego tyłem to odbiera mu 5 serc.

Mój kod:

	@EventHandler
	public void onHurt(EntityDamageByEntityEvent e) {
		if (e.getEntity() instanceof Player) {
			Player p = (Player)e.getEntity();
			Player a = (Player)e.getDamager();
			double v = p.getEyeHeight();
			if(v >= 90 && v <= 270) {
				e.setDamage(5.0);
			}
		}
	}	

Kliknij, aby przejść do prezentacji!
uMRdlxV.png

Opublikowano

uU to chyba nie tak musiał byś pobawić się z Vektorami przynajmniej ja bym tak to zrobił (lub z samą wartością Yaw podana w stopniach) lub wektorowo (a tu nawet nie mam pojęcia jak zacząć )

nie mam pojęcia jak to dokładnie wyliczyć musisz sam się pobawić z różnymi wartościami ewentualnie poszukać po internetach

ogólnie powinno to wyglądać tak pobierasz nasza wartość Yaw (Location getYaw) od atakującego i atakowanego po czym sprawdzasz kąt ale jak to wyliczyć czarna magia :P

Opublikowano

Mam taki kod tylko, że on też nie działa:

Vector playerVector = <player>.getLocation().getDirection();
Vector attackerVector = <attacker>.getLocation().getDirection();
float angle = Math.abs(playerVector.angle(attackerVector));
 
if(angle <= 40){
}

Kliknij, aby przejść do prezentacji!
uMRdlxV.png

Opublikowano

hm ja bym to zrobił nieco inaczej z tego co pamiętam (o ile dobrze pamiętam Yaw reprezentuje kąt w którą stronę patrzy gracz przy czym kąt 0 , 360 stanowią kierunek dodatniej osi Z " a tobie wystarczy samo get

 

tobie wystarczy pobranie Yaw z Location potem

YawAtakujacego =+ 90

YawObroncy =+ 90

if (YawObroncy >= YawAtakujacego -30 && YawObroncy <= YawAtakujacego +30) {

 teraz ten bonus za atak w plecy

 

zrobiłem to na szybko , powinno to dzialac na takiej zasadzie: najpierw dodaje 90 do kąta (kat jest podany od 1-360 , 0=360 ) abym mógł odjąć 30

potem sprawdzam czy atakujący patrzy się w tym samym kierunku co obronca +-30 stopni na boki nie wiem czy jest to poprawne :P

 

dalej bedzie blad :/ miedzy kątem 360 np 10

Opublikowano

głupia ja he he zawsze sobie życie utrudniam :)

popaczałem poszukałem i chyba cos mam ale nie tak ja ja chciałem to robić na osi Yaw , tylko ze za pomocą wektorów :) i działa to pewnie i kąt jest mierzony w sferycznym układzie  więc wartość jest zależna od Yaw i Pitch .

mozna to "pominąć" tworząc nowe 2 wektory , przy czym pitch = 0 , a yaw = wartościom pobranym od gracza

http://jd.bukkit.org/rb/apidocs/org/bukkit/util/Vector.html

http://www.euclideanspace.com/maths/algebra/vectors/angleBetween/

i ogólnie Vector.angle(AnotherVector) (return F) który będzie w radianach

metoda angle() z Vecotr

 

 

napisałem że to co było wcześniej działać nie będzie :)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...