Skocz do zawartości
  • 0

System slyszalnosci gracza


Gość Usunięty#10777

Pytanie

Gość Usunięty#10777

Potrzebuję systemu słyszalności gracza, tj. zombie widzą gracza z dalszej odległości, gdy biegnie niż gdy idzie, i z krótszej odległości gdy kuca niż gdy idzie/stoi.

on sneak toggle:
	player is not sneaking:
		set {detectability::%player%} to 0
	player is sneaking:
		set {detectability::%player%} to 1
on sprint toggle:
	player is not sprinting:
		set {detectability::%player%} to 2
	player is sprinting:
		set {detectability::%player%} to 1
		
every tick:
	loop all players:
		if {detectability::%loop-player%} is 1:
			execute loop-player command "/entitydata @e[name=Zombie,r=40] {Attributes:[{Name:""generic.followRange"",Base:25.0}]}"
		if {detectability::%loop-player%} is 2:
			execute loop-player command "/entitydata @e[name=Zombie,r=40] {Attributes:[{Name:""generic.followRange"",Base:45.0}]}"
		if {detectability::%loop-player%} is 0:
			execute loop-player command "/entitydata @e[name=Zombie,r=40] {Attributes:[{Name:""generic.followRange"",Base:5.0}]}"

Pierwsza część ustawia zmienne wedlug stanu gracza w jakim obecnie jest (bieg/marsz/skradanie)

Druga część używa komend by zmieniać zasięg widzenia mobów.

Ale pojawił się problem, jeśli gracza zobaczy zombie z dalekiej odległosci i zacznie isc w jego kierunku, a gracz wtedy kucnie, to zombie nagle zatrzymuje się, bo nie widzi już gracza. Jest to nierealistyczne, chciałbym, aby zombie, które już zauważyły gracza pozostawały przy swoim zasięgu widzenia.

Jakieś pomysły?

Odnośnik do komentarza
https://skript.pl/temat/35270-system-slyszalnosci-gracza/
Udostępnij na innych stronach

5 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
W dniu 18.10.2019 o 21:36, Aberforth napisał:

can't understand this condition

sw. Ziemniak podał ci tylko wyrażenie które to umożliwia zrobić. Musisz postawić entity i Playera iwg. 

Odnośnik do komentarza
https://skript.pl/temat/35270-system-slyszalnosci-gracza/#findComment-226672
Udostępnij na innych stronach

  • 0
Gość Usunięty#10777
on sneak toggle:
	player is not sneaking:
		wait 7 seconds
		set {detectability::%player%} to 0
		set level progress of player to 0.2
		stop
	player is sneaking:
		wait 7 seconds
		set {detectability::%player%} to 1
		set level progress of player to 0.6
		stop
on sprint toggle:
	player is not sprinting:
		wait 7 seconds
		set {detectability::%player%} to 2
		set level progress of player to 0.9
		stop
	player is sprinting:
		wait 7 seconds
		set {detectability::%player%} to 1
		set level progress of player to 0.6
		stop
	
every tick:
	loop all players:
		if {detectability::%loop-player%} is 1:
			execute console command "/execute %loop-player% ~ ~ ~ entitydata @e[type=Zombie,r=50] {Attributes:[{Name:""generic.followRange"",Base:40.0}]}"
		if {detectability::%loop-player%} is 2:
			execute console command "/execute %loop-player% ~ ~ ~ entitydata @e[type=Zombie,r=50] {Attributes:[{Name:""generic.followRange"",Base:60.0}]}"
		if {detectability::%loop-player%} is 0:
			execute console command "/execute %loop-player% ~ ~ ~ entitydata @e[type=Zombie,r=50] {Attributes:[{Name:""generic.followRange"",Base:7.0}]}"

Napisalem taki kod ktory daje akceptowalne rezultaty. Moze ktos jednak ma jakis pomysl ktory by to zoptymalizowal? Ten loop bedzie lagowal przy wielu graczach, i robi spam w konsoli.

Rozwiazan alternatywnych tez wyslucham.

Edytowane przez Aberforth
Odnośnik do komentarza
https://skript.pl/temat/35270-system-slyszalnosci-gracza/#findComment-227902
Udostępnij na innych stronach

  • 0
W dniu 4.11.2019 o 19:50, Aberforth napisał:

on sneak toggle:
	player is not sneaking:
		wait 7 seconds
		set {detectability::%player%} to 0
		set level progress of player to 0.2
		stop
	player is sneaking:
		wait 7 seconds
		set {detectability::%player%} to 1
		set level progress of player to 0.6
		stop
on sprint toggle:
	player is not sprinting:
		wait 7 seconds
		set {detectability::%player%} to 2
		set level progress of player to 0.9
		stop
	player is sprinting:
		wait 7 seconds
		set {detectability::%player%} to 1
		set level progress of player to 0.6
		stop
	
every tick:
	loop all players:
		if {detectability::%loop-player%} is 1:
			execute console command "/execute %loop-player% ~ ~ ~ entitydata @e[type=Zombie,r=50] {Attributes:[{Name:""generic.followRange"",Base:40.0}]}"
		if {detectability::%loop-player%} is 2:
			execute console command "/execute %loop-player% ~ ~ ~ entitydata @e[type=Zombie,r=50] {Attributes:[{Name:""generic.followRange"",Base:60.0}]}"
		if {detectability::%loop-player%} is 0:
			execute console command "/execute %loop-player% ~ ~ ~ entitydata @e[type=Zombie,r=50] {Attributes:[{Name:""generic.followRange"",Base:7.0}]}"

Napisalem taki kod ktory daje akceptowalne rezultaty. Moze ktos jednak ma jakis pomysl ktory by to zoptymalizowal? Ten loop bedzie lagowal przy wielu graczach, i robi spam w konsoli.

Rozwiazan alternatywnych tez wyslucham.

Jeżeli to opóźnienie 7 sekund nie jest ci jakoś bardzo potrzebne to je wykasuj, bo nie dość że będzie obciążać znacznie serwer to jeszcze przez nie cały system się posypie.
 

Jest taki event jak on target, on wykonuje się wtedy, gdy jak sama nazwa wskazuje mob bierze na celownik gracza. Jeśli pobierzesz namierzanego gracza oraz namierzającego moba to będziesz mógł sprawdzić odległości pomiędzy nimi, przyrównać zmienne itp - a gdy już będziesz pewien że mob nie powinien słyszeć gracza to blokujesz wyrażenie zwykłym cancel event. Wtedy mozesz wywalić to całe every tick i nie będziesz miał spamu w konsoli.

 

Odnośnik do komentarza
https://skript.pl/temat/35270-system-slyszalnosci-gracza/#findComment-228983
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ę...