Skocz do zawartości
  • 0

Spawn moba na wyznaczonych kordach


Pytanie

Czesc! Za nic nie wiem jak zrobic skrypt który będzie respił moba na danych kordach co jakiś czas. Robie bossy na serwerze i chce aby sie iron golem respil na danych kordach.

 

Da sie jakoś to zmienic zeby po uzyciu komendy nie respilo sie przy graczu tylko na kordach? 

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/
Udostępnij na innych stronach

13 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
15 minut temu, Xyntegi_ok napisał:

Da sie jakoś to zmienic zeby po uzyciu komendy nie respilo sie przy graczu tylko na kordach? 

Jak najbardziej. Z racji faktu, iż to jest zlecenie, podam od razu gotowy kod.

command /rboss:
	permission: op
	trigger:
		set {_location} to location (100, 100, 100) in world "world"
		spawn iron golem at {_location}:
			set health of golem to {@hpboss}
			set name of golem to "&c&lBOSS"
		send title "&a%player% zrespił bossa" with subtitle "&6Na kordach %location of player%" to all players for 5 seconds
		wait second
		broadcast "&a%player% zrespił bossa na kordach (100, 100, 100)"

Teraz wyjaśnię dlaczego kod wygląda tak, a nie inaczej.

  1. Pierwsza linijka wyzwalacza (trigger) jest opisana w dokumentacji Skripta.
  2. Każde przywołanie bytu możemy wykorzystać do otwarcia sekcji, która pozwala na wykonywanie operacji na tym bycie (możemy się odwoływać do bytu po jego typie lub po 'entity'). Dzięki takiemu zabiegowi unikamy korzystania ze "śliskiego" wyrażenia 'last spawned entity'.
  3. Wysyłanie 'title' zostało dodane w wersji 2.3, więc korzystanie z SkRayFall (wnioskuję po składni) jest w tym przypadku zbędne.

Można pokusić się o ustawienie lokalizacji w opcji/opcjach (sekcja 'options'):

options:
	golemLocation:
		coords: 100, 100, 100
		world: world

# [...]

trigger:
	set {_location} to location {@golemLocation.coords} in world "{@golemLocation.world}"
	# [...]

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344184
Udostępnij na innych stronach

  • 0
3 godziny temu, Kormic napisał:

Jak najbardziej. Z racji faktu, iż to jest zlecenie, podam od razu gotowy kod.

command /rboss:
	permission: op
	trigger:
		set {_location} to location (100, 100, 100) in world "world"
		spawn iron golem at {_location}:
			set health of golem to {@hpboss}
			set name of golem to "&c&lBOSS"
		send title "&a%player% zrespił bossa" with subtitle "&6Na kordach %location of player%" to all players for 5 seconds
		wait second
		broadcast "&a%player% zrespił bossa na kordach (100, 100, 100)"

Teraz wyjaśnię dlaczego kod wygląda tak, a nie inaczej.

  1. Pierwsza linijka wyzwalacza (trigger) jest opisana w dokumentacji Skripta.
  2. Każde przywołanie bytu możemy wykorzystać do otwarcia sekcji, która pozwala na wykonywanie operacji na tym bycie (możemy się odwoływać do bytu po jego typie lub po 'entity'). Dzięki takiemu zabiegowi unikamy korzystania ze "śliskiego" wyrażenia 'last spawned entity'.
  3. Wysyłanie 'title' zostało dodane w wersji 2.3, więc korzystanie z SkRayFall (wnioskuję po składni) jest w tym przypadku zbędne.

Można pokusić się o ustawienie lokalizacji w opcji/opcjach (sekcja 'options'):

options:
	golemLocation:
		coords: 100, 100, 100
		world: world

# [...]

trigger:
	set {_location} to location {@golemLocation.coords} in world "{@golemLocation.world}"
	# [...]

Pozdrawiam.

Dziękuje ślicznie, da sie jeszcze naprawić ten błąd? FSx6Ex3.png

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344191
Udostępnij na innych stronach

  • 0
30 minut temu, Xyntegi_ok napisał:

Dziękuje ślicznie, da sie jeszcze naprawić ten błąd?

Jak sam błąd mówi, opóźnienia nie mogą być używane w sekcji przywołującej moba. Tak więc jeśli wstawiła do niej Pani jakieś opóźnienie, proszę je usunąć.

Jeśli jednak Pani nic nie zmieniała w kodzie, proszę podać:

  • wersję Skripta,
  • listę zainstalowanych dodatków do Skripta wraz z ich wersjami,
  • wersję serwera.

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344192
Udostępnij na innych stronach

  • 0
16 minut temu, Kormic napisał:

Jak sam błąd mówi, opóźnienia nie mogą być używane w sekcji przywołującej moba. Tak więc jeśli wstawiła do niej Pani jakieś opóźnienie, proszę je usunąć.

Jeśli jednak Pani nic nie zmieniała w kodzie, proszę podać:

  • wersję Skripta,
  • listę zainstalowanych dodatków do Skripta wraz z ich wersjami,
  • wersję serwera.

Pozdrawiam.

Już działa, ale mam kolejny problem dlaczego nie działa mi hp bossa? Ani sie nie pokazuje, a jak już sie pokaze to boss ma tylko 50/50000

 

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344198
Udostępnij na innych stronach

  • 0
2 minuty temu, Xyntegi_ok napisał:

Już działa, ale mam kolejny problem dlaczego nie działa mi hp bossa? Ani sie nie pokazuje, a jak już sie pokaze to boss ma tylko 50/50000

Napiszę gotowe rozwiązanie, tak będzie prościej.

options:
	golemBoss:
		coords: -50, -34, -50
		world: world
		health: 5000
		name: &c&lBOSS

command /rboss:
	permission: op
	trigger:
		set {_location} to location {@golemBoss.coords} in world "{@golemBoss.world}"
		spawn iron golem at {_location}:
			set health of golem to {@golemBoss.hpboss}
			set name of golem to "{@golemBoss.name}"
		send title "" with subtitle "" to all players for 5 seconds
		wait second
		broadcast ""
		
on damage:
	name of victim contains "{@golemBoss.name}"
	set name of victim to "&c&lBOSS &6%health of victim%/{@golemBoss.health}"

on death:
	name of victim contains "{@golemBoss.name}"
	attacker is a player
	execute attacker command "tuwpiszswojakomendenadaniesvipa"
	send "&a%attacker% zabił bossa!" to all players

Błędem było użycie nieistniejącej opcji '{@hpboss}'. Prawidłową nazwa w przypadku Pani kodu byłaby '{@golemLocation.hpboss}'. Ponadto, kod ustawiający punkty zdrowia golema nie był przypisany do sekcji przywołującej go - kwestia źle zrobionego wcięcia w kodzie.

Poprawiłem kod tak, aby wykorzystywał wszystkie opcje z sekcji 'options', ponieważ u Pani część z nich była nieużywana.

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344200
Udostępnij na innych stronach

  • 0
10 minut temu, Kormic napisał:

Napiszę gotowe rozwiązanie, tak będzie prościej.

options:
	golemBoss:
		coords: -50, -34, -50
		world: world
		health: 5000
		name: &c&lBOSS

command /rboss:
	permission: op
	trigger:
		set {_location} to location {@golemBoss.coords} in world "{@golemBoss.world}"
		spawn iron golem at {_location}:
			set health of golem to {@golemBoss.hpboss}
			set name of golem to "{@golemBoss.name}"
		send title "" with subtitle "" to all players for 5 seconds
		wait second
		broadcast ""
		
on damage:
	name of victim contains "{@golemBoss.name}"
	set name of victim to "&c&lBOSS &6%health of victim%/{@golemBoss.health}"

on death:
	name of victim contains "{@golemBoss.name}"
	attacker is a player
	execute attacker command "tuwpiszswojakomendenadaniesvipa"
	send "&a%attacker% zabił bossa!" to all players

Błędem było użycie nieistniejącej opcji '{@hpboss}'. Prawidłową nazwa w przypadku Pani kodu byłaby '{@golemLocation.hpboss}'. Ponadto, kod ustawiający punkty zdrowia golema nie był przypisany do sekcji przywołującej go - kwestia źle zrobionego wcięcia w kodzie.

Poprawiłem kod tak, aby wykorzystywał wszystkie opcje z sekcji 'options', ponieważ u Pani część z nich była nieużywana.

Pozdrawiam.

Naprawde przepraszam za kłopot ale ja na skryptach to sie znam bardzo słabo, mam kolejny błąd. Linijka 13, undefined option {@golemBoss.hpboss}. Jak w options dodam hpboss: 5000 to znowu nie działa i nie pokazuj 5000 hp tylko 50/5000.

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344204
Udostępnij na innych stronach

  • 0
2 minuty temu, Xyntegi_ok napisał:

Naprawde przepraszam za kłopot ale ja na skryptach to sie znam bardzo słabo, mam kolejny błąd. Linijka 13, undefined option {@golemBoss.hpboss}.

Ach tak, moje niedopatrzenie. Zapomniałem, że zmieniłem nazwę opcji. Proszę podmienić skrypt na poniższy.

options:
	golemBoss:
		coords: -50, -34, -50
		world: world
		health: 5000
		name: &c&lBOSS

command /rboss:
	permission: op
	trigger:
		set {_location} to location {@golemBoss.coords} in world "{@golemBoss.world}"
		spawn iron golem at {_location}:
			set max health of golem to {@golemBoss.health}
			heal golem
			set name of golem to "{@golemBoss.name}"
		send title "" with subtitle "" to all players for 5 seconds
		wait second
		broadcast ""
		
on damage:
	name of victim contains "{@golemBoss.name}"
	set name of victim to "{@golemBoss.name} &6%health of victim%/{@golemBoss.health}"

on death:
	name of victim contains "{@golemBoss.name}"
	attacker is a player
	execute attacker command "tuwpiszswojakomendenadaniesvipa"
	send "&a%attacker% zabił bossa!" to all players

Możliwe, że linijka z leczeniem golema będzie zbędna, gdyż ustawienie jego maksymalnej ilości punktów życia przy przywoływaniu już samo w sobie go leczy w 100%.

4 minuty temu, Xyntegi_ok napisał:

Jak w options dodam hpboss: 5000 to znowu nie działa i nie pokazuj 5000 hp tylko 50/5000.

Tu też moje niedopatrzenie - nie zauważyłem, że ustawia Pani ilość punktów życia golema, a nie ich maksymalną ilość. To już poprawiłem w kodzie wyżej.

Proszę ustawić ilość punktów życia golema w opcjach na przykładowo 5000 i sprawdzić czy działa. Jeśli nie, oznacza to, że najprawdopodobniej doświadczyła Pani limitu punktów życia jaką mogą posiadać wszystkie byty w grze. Jeśli mnie pamięć nie myli, można tę wartość zmienić w pliku spigot.yml.

Innym rozwiązaniem jest przemnożenie zadawanych obrażeń golemowi przez (maksymalna dopuszczalna ilość punktów życia na serwerze w pliku spigot.yml) / (żądana maksymalna ilość punktów życia golema), dzięki czemu graczom będzie wydawało się, że golem faktycznie ma tyle punktów życia. Przykład poniżej.

on damage:
	name of victim contains "{@golemBoss.name}"
	set damage to damage * (2048 / {@golemBoss.health})
	set name of victim to "{@golemBoss.name} &6%health of victim%/{@golemBoss.health}"

2048 to przykładowa maksymalna ilość punktów życia dopuszczalna z pliku spigot.yml.

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344206
Udostępnij na innych stronach

  • 0
7 minut temu, Kormic napisał:

Ach tak, moje niedopatrzenie. Zapomniałem, że zmieniłem nazwę opcji. Proszę podmienić skrypt na poniższy.

options:
	golemBoss:
		coords: -50, -34, -50
		world: world
		health: 5000
		name: &c&lBOSS

command /rboss:
	permission: op
	trigger:
		set {_location} to location {@golemBoss.coords} in world "{@golemBoss.world}"
		spawn iron golem at {_location}:
			set max health of golem to {@golemBoss.health}
			heal golem
			set name of golem to "{@golemBoss.name}"
		send title "" with subtitle "" to all players for 5 seconds
		wait second
		broadcast ""
		
on damage:
	name of victim contains "{@golemBoss.name}"
	set name of victim to "{@golemBoss.name} &6%health of victim%/{@golemBoss.health}"

on death:
	name of victim contains "{@golemBoss.name}"
	attacker is a player
	execute attacker command "tuwpiszswojakomendenadaniesvipa"
	send "&a%attacker% zabił bossa!" to all players

Możliwe, że linijka z leczeniem golema będzie zbędna, gdyż ustawienie jego maksymalnej ilości punktów życia przy przywoływaniu już samo w sobie go leczy w 100%.

Tu też moje niedopatrzenie - nie zauważyłem, że ustawia Pani ilość punktów życia golema, a nie ich maksymalną ilość. To już poprawiłem w kodzie wyżej.

Proszę ustawić ilość punktów życia golema w opcjach na przykładowo 5000 i sprawdzić czy działa. Jeśli nie, oznacza to, że najprawdopodobniej doświadczyła Pani limitu punktów życia jaką mogą posiadać wszystkie byty w grze. Jeśli mnie pamięć nie myli, można tę wartość zmienić w pliku spigot.yml.

Innym rozwiązaniem jest przemnożenie zadawanych obrażeń golemowi przez (maksymalna dopuszczalna ilość punktów życia na serwerze w pliku spigot.yml) / (żądana maksymalna ilość punktów życia golema), dzięki czemu graczom będzie wydawało się, że golem faktycznie ma tyle punktów życia. Przykład poniżej.

on damage:
	name of victim contains "{@golemBoss.name}"
	set damage to damage * (2048 / {@golemBoss.health})
	set name of victim to "{@golemBoss.name} &6%health of victim%/{@golemBoss.health}"

2048 to przykładowa maksymalna ilość punktów życia dopuszczalna z pliku spigot.yml.

Pozdrawiam.

Dziękuje bardzo! Wszystko działa, jeszcze jedno pytanko, da rade zrobić komende która po wpisaniu po prostu tego bossa zabije?

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344208
Udostępnij na innych stronach

  • 0
Godzinę temu, Xyntegi_ok napisał:

Dziękuje bardzo! Wszystko działa, jeszcze jedno pytanko, da rade zrobić komende która po wpisaniu po prostu tego bossa zabije?

Jeżeli na serwerze nie występuje wiele golemów, poniższa komenda powinna wystarczyć. Proszę ją dodać do wyżej wysłanego przeze mnie kodu.

command /killboss [<text>]:
	permission: server.command.killboss
	permission message: &6Nie posiadasz wystarczających uprawnień do wykonania tej komendy.
	trigger:
		kill all golems where [name of entity input contains "{@golemBoss.name}"]

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344211
Udostępnij na innych stronach

  • 0
Godzinę temu, Kormic napisał:

Jeżeli na serwerze nie występuje wiele golemów, poniższa komenda powinna wystarczyć. Proszę ją dodać do wyżej wysłanego przeze mnie kodu.

command /killboss [<text>]:
	permission: server.command.killboss
	permission message: &6Nie posiadasz wystarczających uprawnień do wykonania tej komendy.
	trigger:
		kill all golems where [name of entity input contains "{@golemBoss.name}"]

Pozdrawiam.

A jakbym chciała zmienić jeszcze golems na blaze, i pokazuje mi błąd w całej linijce to jak to zrobić?

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344221
Udostępnij na innych stronach

  • 0
7 minut temu, Xyntegi_ok napisał:

A jakbym chciała zmienić jeszcze golems na blaze, i pokazuje mi błąd w całej linijce to jak to zrobić?

Nie rozumiem. O to chodzi?

command /killboss [<text>]:
	permission: server.command.killboss
	permission message: &6Nie posiadasz wystarczających uprawnień do wykonania tej komendy.
	trigger:
		kill all blazes where [name of entity input contains "{@golemBoss.name}"]

Błędów przy przeładowaniu skryptu brak, więc wszystko powinno być w porządku. Liczba mnoga w przypadku słowa 'blazes' nie ma znaczenia, nawet 'blaze' zadziała.

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344222
Udostępnij na innych stronach

  • 0
12 godzin temu, Kormic napisał:

Nie rozumiem. O to chodzi?

command /killboss [<text>]:
	permission: server.command.killboss
	permission message: &6Nie posiadasz wystarczających uprawnień do wykonania tej komendy.
	trigger:
		kill all blazes where [name of entity input contains "{@golemBoss.name}"]

Błędów przy przeładowaniu skryptu brak, więc wszystko powinno być w porządku. Liczba mnoga w przypadku słowa 'blazes' nie ma znaczenia, nawet 'blaze' zadziała.

Dobrze dziekuje, wszystko działa. Do zamknięcia

Odnośnik do komentarza
https://skript.pl/temat/57933-spawn-moba-na-wyznaczonych-kordach/#findComment-344232
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ę...