Skocz do zawartości
  • 0

AntyCobweb


PravvyGaming

Pytanie

Witam chciałbym żeby anty cobweb miał  &6&lUsuwacz Pajęczyn jako blaze rod a lore &8x &7tym itemem usuniesz &fcobweby! i jak sie kliknie to wyświetla sie subtitle ze tak title "&7" with subtitle "&cUsunięto &4(ILOSĆ) &cpajęczyn" i jeszcze dzwięk level up i czas oczekiwania 30 sek i chciałbym też jakby odliczało to jak sie klika to żeby pisało tak title "&7" with subtitle "&cMusisz odczekać jeszcze &430 sekund!" i jeszcze jak będzie sie klikało wtedy jak sie będzie ładować to dzwięk villager no i żeby było takie białe coś ze sie regeneruje w slocie Pozdrawiam

Odnośnik do komentarza
https://skript.pl/temat/57479-antycobweb/
Udostępnij na innych stronach

7 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
command /usuwaczpajeczyn:
    trigger:
        if player's tool is blaze rod named "&6&lUsuwacz Pajęczyn" with lore "&8x &7tym itemem usuniesz &fcobweby!":
            if {cobweb_cooldown.%player%} is not set or {cobweb_cooldown.%player%} <= current time:
                set {cobweb_cooldown.%player%} to current time + 30 seconds
                play sound "ENTITY_PLAYER_LEVELUP" to player at volume 1 and pitch 1
                set {_cobwebs} to number of cobwebs in radius 5 of player
                remove all cobwebs in radius 5 of player
                show title "&7" with subtitle "&cUsunięto &4%{_cobwebs}% &cpajęczyn" to player for 2 seconds
                play sound "ENTITY_VILLAGER_NO" to player at volume 1 and pitch 1
            else:
                set {_timeleft} to difference between {cobweb_cooldown.%player%} and current time
                show title "&7" with subtitle "&cMusisz odczekać jeszcze &4%{_timeleft}% sekund!" to player for 2 seconds
                play sound "ENTITY_VILLAGER_NO" to player at volume 1 and pitch 1

 

Edytowane przez Procix94
Odnośnik do komentarza
https://skript.pl/temat/57479-antycobweb/#findComment-342330
Udostępnij na innych stronach

  • 0

@Procix94

Pana kod zawiera wiele błędów.

  1. Nie istnieje takie wyrażenie w Skript jak 'current time'. Myślę, że Panu chodziło po głowie użycie wyrażenia 'now'.
  2. Pan w zły sposób zapisuje efekt odtwarzania dźwięku. Najpierw należy podać opcjonalnie poziom głośności oraz wysokość dźwięku, a dopiero później adresatów. Odsyłam do dokumentacji.
  3. Nie może Pan po prostu usunąć wszystkich pajęczyn w zadanym promieniu. Należy pobrać listę bloków w promieniu r od gracza, przefiltrować ją, a następnie zapisane w niej bloki ustawić jako powietrze.
  4. Zapisywanie zmiennej {_cobwebs} jest powiązane z punktem 3. Należy to zrobić w ten sam sposób z tą różnicą, że przed wyrażeniem dopisujemy 'size of', aby pobrać wielkość tej listy bloków.
  5. Efekt wysyłający tytuł na ekranie gracza rozpoczyna się słowem 'send', nie 'show'.

Dodam również od siebie kilka uwag dotyczący zapisu pewnych rzeczy i ogólnego działania Pana skryptu.

  1. Zleceniodawca poprosił, aby przy klikaniu z "usuwaczem pajęczyn" w ręku pajęczyny były usuwane, a nie przy wpisywaniu komendy. Nietrudno zauważyć, że jest to niewygodne rozwiązanie.
  2. Jeśli Pan chce tworzyć cooldown, są prostsze sposoby.
    command /test:
    	executable by: players
    	trigger:
    		if {testCooldown::%uuid of player%} is set:
    			set {_cooldown} to 30 seconds
    			set {_timeElapsed} to difference between {testCooldown::%uuid of player%} and now
    			{_timeElapsed} < {_cooldown}
    			send "Wait %{_cooldown} - {_timeElapsed}%." to player
    			stop
    		set {testCooldown::%uuid of player%} to now
    		# Dalszy kod...

    Alternatywą jest skrypt AxCooldown autorstwa mojego dobrego kolegi xAxee.

  3. Nawiązując jeszcze do cooldownów, nie używa Pan list zmiennych, a powinien. Listę można w bardzo łatwy sposób zapętlić i ją modyfikować. Przykłady poniżej.

    % Zapętlanie listy cooldownów wszystkich graczy
    loop {testCooldown::*}:
    	# Dalszy kod...
        
    # Czyszczenie cooldownów wszystkich graczy
    clear {testCooldown::*}
  4. Nie ma sensu ustawiać poziomu głośności dźwięku i jego wysokości jako 1, gdyż są to domyślne wartości.

  5. Nie zaimplementował Pan systemu cooldownu przedmiotu wyświetlanego na nim w ekwipunku.

 

Poniżej znajduje się moja propozycja wykonania zlecenia. Proszę uprzejmie. Wszystko powinno być w porządku, choć kodu nie testowałem.

Wymagany jedynie Skript w wersji 2.8.0 lub wyższej. U góry może Pan sobie ustawić:

  • zasięg działania usuwacza (sugeruję nie ustawiać go zbyt dużego, aby nie lagował serwera),
  • permisję wymaganą do jego użycia
  • cooldown usuwacza.
options:
	cobwebRemoverRadius: 3
	cobwebRemoverPermission: server.commands.cobwebremover
	cobwebRemoverCooldown: 30 seconds
	
function translateSecondsCooldown(t: timespan) :: text:
	set {_tText} to "%{_t}%"
	replace all "seconds" with "sekund" in {_tText}
	return {_tText}

command /usuwaczpajeczyn:
	permission: {@cobwebRemoverPermission}
	permission message: &cNie możesz użyć tej komendy.
	executable by: players
	trigger:
		set {_cobwebRemover} to blaze rod named "&6&lUsuwacz Pajęczyn" with lore "&8x &7tym itemem usuniesz &fcobweby!"
		give {_cobwebRemover} to player
				
on right click:
	player's tool is blaze rod named "&6&lUsuwacz Pajęczyn" with lore "&8x &7tym itemem usuniesz &fcobweby!"
	if {cobwebRemover::cooldown::%uuid of player%} is set:
		set {_cooldown} to {@cobwebRemoverCooldown}
		set {_timeElapsed} to difference between {cobwebRemover::cooldown::%uuid of player%} and now
		{_timeElapsed} < 30 seconds
		play sound "ENTITY_VILLAGER_NO" to player
		set {_remainingTime} to {_cooldown} - {_timeElapsed}
		send "&cMusisz odczekać jeszcze &4%translateSecondsCooldown({_remainingTime})%!" to player
		stop
	set {cobwebRemover::cooldown::%uuid of player%} to now
	set cooldown of player's tool for player to {@cobwebRemoverCooldown}
	play sound "ENTITY_PLAYER_LEVELUP" to player
	set {_cobwebs::*} to (all blocks in radius {@cobwebRemoverRadius} of player) where [input is cobweb]
	set {_cobwebs::*} to air
	send title "&7" with subtitle "&cUsunięto &4%size of {_cobwebs::*}% &cpajęczyn" to player for 2 seconds

 

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57479-antycobweb/#findComment-342336
Udostępnij na innych stronach

  • 0
17 godzin temu, PravvyGaming napisał:

wszystko jest gitara ale nie usuwa cobwebów

Sprawdziłem skrypt i błędne okazały się być dwie rzeczy.

  1. Skript nie wspiera operacji arytmetycznych na wartościach typu 'timespan', a więc muszę użyć 'difference between [...]' zamiast odejmowania. Co prawda różnica żadna, ale i tak zdziwiłem się (problem może wynikać z testów na nieco starszym serwerze).
  2. Próba ustawienia listy bloków {_cobwebs::*} jako powietrze kończyła się nadpisywaniem wartości listy, nie zmianą bloków. Również jest to dziwne zachowanie, aczkolwiek rozumiem, że dla Skripta jest to przypadek niejednoznaczny (nie sposób określić czy mowa o nadpisaniu listy, czy też ustawieniu bloków w niej).

Poprawiłem skrypt i przetestowałem go. Wszystko już powinno działać u Pana jak należy.
Muszę na koniec powiedzieć, że nie podoba mi się podwójne pobranie tej samej listy bloków, ale dopiero po uczynieniu tego skrypt zaczął działać należycie.

options:
	cobwebRemoverRadius: 3
	cobwebRemoverPermission: server.commands.cobwebremover
	cobwebRemoverCooldown: 30 seconds
	
function translateSecondsCooldown(t: timespan) :: text:
	set {_tText} to "%{_t}%"
	replace all "seconds" with "sekund" in {_tText}
	return {_tText}

command /usuwaczpajeczyn:
	permission: {@cobwebRemoverPermission}
	permission message: &cNie możesz użyć tej komendy.
	executable by: players
	trigger:
		set {_cobwebRemover} to blaze rod named "&6&lUsuwacz Pajęczyn" with lore "&8x &7tym itemem usuniesz &fcobweby!"
		give {_cobwebRemover} to player
				
on right click:
	player's tool is blaze rod named "&6&lUsuwacz Pajęczyn" with lore "&8x &7tym itemem usuniesz &fcobweby!"
	if {cobwebRemover::cooldown::%uuid of player%} is set:
		set {_cooldown} to {@cobwebRemoverCooldown}
		set {_timeElapsed} to difference between {cobwebRemover::cooldown::%uuid of player%} and now
		{_timeElapsed} < 30 seconds
		play sound "ENTITY_VILLAGER_NO" to player
		set {_remainingTime} to difference between {_cooldown} and {_timeElapsed}
		send "%{_cooldown}% %{_timeElapsed}% %{_remainingTime}%" to player
		send "%{_remainingTime}%"
		send "&cMusisz odczekać jeszcze &4%translateSecondsCooldown({_remainingTime})%!" to player
		stop
	set {cobwebRemover::cooldown::%uuid of player%} to now
	set cooldown of player's tool for player to {@cobwebRemoverCooldown}
	play sound "ENTITY_PLAYER_LEVELUP" to player
	set {_cobwebs} to size of ((all blocks in radius {@cobwebRemoverRadius} of player) where [block input is cobweb])
	set (all blocks in radius {@cobwebRemoverRadius} of player) where [block input is cobweb] to air
	send title "&7" with subtitle "&cUsunięto &4%{_cobwebs}% &cpajęczyn" to player for 2 seconds

 

Edytowane przez Kormic
Odnośnik do komentarza
https://skript.pl/temat/57479-antycobweb/#findComment-342369
Udostępnij na innych stronach

  • 0
Gość Usunięty#46786
9 godzin temu, Kormic napisał:

Sprawdziłem skrypt i błędne okazały się być dwie rzeczy.

  1. Skript nie wspiera operacji arytmetycznych na wartościach typu 'timespan', a więc muszę użyć 'difference between [...]' zamiast odejmowania. Co prawda różnica żadna, ale i tak zdziwiłem się (problem może wynikać z testów na nieco starszym serwerze).
  2. Próba ustawienia listy bloków {_cobwebs::*} jako powietrze kończyła się nadpisywaniem wartości listy, nie zmianą bloków. Również jest to dziwne zachowanie, aczkolwiek rozumiem, że dla Skripta jest to przypadek niejednoznaczny (nie sposób określić czy mowa o nadpisaniu listy, czy też ustawieniu bloków w niej).

Poprawiłem skrypt i przetestowałem go. Wszystko już powinno działać u Pana jak należy.
Muszę na koniec powiedzieć, że nie podoba mi się podwójne pobranie tej samej listy bloków, ale dopiero po uczynieniu tego skrypt zaczął działać należycie.

options:
	cobwebRemoverRadius: 3
	cobwebRemoverPermission: server.commands.cobwebremover
	cobwebRemoverCooldown: 30 seconds
	
function translateSecondsCooldown(t: timespan) :: text:
	set {_tText} to "%{_t}%"
	replace all "seconds" with "sekund" in {_tText}
	return {_tText}

command /usuwaczpajeczyn:
	permission: {@cobwebRemoverPermission}
	permission message: &cNie możesz użyć tej komendy.
	executable by: players
	trigger:
		set {_cobwebRemover} to blaze rod named "&6&lUsuwacz Pajęczyn" with lore "&8x &7tym itemem usuniesz &fcobweby!"
		give {_cobwebRemover} to player
				
on right click:
	player's tool is blaze rod named "&6&lUsuwacz Pajęczyn" with lore "&8x &7tym itemem usuniesz &fcobweby!"
	if {cobwebRemover::cooldown::%uuid of player%} is set:
		set {_cooldown} to {@cobwebRemoverCooldown}
		set {_timeElapsed} to difference between {cobwebRemover::cooldown::%uuid of player%} and now
		{_timeElapsed} < 30 seconds
		play sound "ENTITY_VILLAGER_NO" to player
		set {_remainingTime} to difference between {_cooldown} and {_timeElapsed}
		send "%{_cooldown}% %{_timeElapsed}% %{_remainingTime}%" to player
		send "%{_remainingTime}%"
		send "&cMusisz odczekać jeszcze &4%translateSecondsCooldown({_remainingTime})%!" to player
		stop
	set {cobwebRemover::cooldown::%uuid of player%} to now
	set cooldown of player's tool for player to {@cobwebRemoverCooldown}
	play sound "ENTITY_PLAYER_LEVELUP" to player
	set {_cobwebs} to size of ((all blocks in radius {@cobwebRemoverRadius} of player) where [block input is cobweb])
	set (all blocks in radius {@cobwebRemoverRadius} of player) where [block input is cobweb] to air
	send title "&7" with subtitle "&cUsunięto &4%{_cobwebs}% &cpajęczyn" to player for 2 seconds

 

ale usuwa wszystkie bloki a ma tylko cobweby

Odnośnik do komentarza
https://skript.pl/temat/57479-antycobweb/#findComment-342381
Udostępnij na innych stronach

  • 0
20 minut temu, dzojtix napisał:

ale usuwa wszystkie bloki a ma tylko cobweby

Ależ skrypt usuwa jedynie pajęczyny w zadanym promieniu, przecież go przetestowałem i działa tak jak Zleceniodawca sobie zażyczył.

Jeśli Panu nie działa (choć nie Pan zlecił napisanie skryptu), proszę podać wersję Skript, wszystkie dodatki do niego zainstalowane na serwerze oraz wersję serwera.

Odnośnik do komentarza
https://skript.pl/temat/57479-antycobweb/#findComment-342382
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ę...