Skocz do zawartości
  • 0

Cooldown na dany przedmiot


Pytanie

6 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
1 minutę temu, zKacpeQ napisał:

Jak zrobić cooldown na dany przedmiot w skrypcie?

Chce żeby np. diamentowy miecz miał cooldown na tepanie pereł czy coś i na tym czymś (ss niżej) jest napisany cooldown

Nie widzę zrzutu ekranu, więc nie wiem czego tyczy się druga część pytania.

Co do samej implementacji cooldownu w Skript, jest ona dość prosta. Przy użyciu przedmiotu należy zapisywać czas użycia go w zmiennej przypisanej do gracza, aby przy kolejnych próbach sprawdzać czy odstęp czasu między obecną chwilą a ostatnim użyciem przedmiotu jest większy niż zadany przez nas okres czasu. Jeśli nie, wysyłamy graczowi wiadomość informująca o konieczności odczekania.

Rzecz jasna moim celem nie jest rzucanie na głęboką wodę, więc pokażę prosty przykład kodu wprowadzającego taki cooldown. Można go wstawić wszędzie tam gdzie go potrzebujemy.

# [...]
if {itemCooldown::%uuid of player%} is set:
	difference between {itemCooldown::%uuid of player%} and now is smaller than 5 seconds
	send "&6Odczekaj chwilę." to player
	stop
set {itemCooldown::%uuid of player%} to now
# [...]

Powyższy fragment sprawdza czy upłynęło co najmniej 5 sekund od ostatniej akcji, a więc cooldown wynosi 5 sekund. Tak jak wspomniałem wcześniej, ten kod się nada niemalże do wszystkiego, niekoniecznie tylko do cooldownu na przedmiot.
Przykładowe wykorzystanie tego kodu można znaleźć tutaj.

Jednym z wyjątków będzie cooldown komendy, ponieważ twórcy Skripta wykonali ukłon w stronę graczy i umożliwili dodawanie go w bardzo prosty i przyjemny sposób. Na ten temat i kilka innych rozpisał się mój dobry przyjaciel, @PanMaruda, w tym temacie.

Po więcej informacji odsyłam do dokumentacji Skripta.

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57950-cooldown-na-dany-przedmiot/#findComment-344271
Udostępnij na innych stronach

  • 0

Nie jestem przekonany, czy sprawdzi się to w tym przypadku, tym bardziej, że nigdy tego efektu nie testowałem, ale można się również przyjrzeć:

https://docs.skriptlang.org/docs.html?search=#ExprItemCooldown

Odnośnik do komentarza
https://skript.pl/temat/57950-cooldown-na-dany-przedmiot/#findComment-344273
Udostępnij na innych stronach

  • 0
16 minut temu, CoFFeIN04 napisał:

Nie jestem przekonany, czy sprawdzi się to w tym przypadku, tym bardziej, że nigdy tego efektu nie testowałem, ale można się również przyjrzeć:

https://docs.skriptlang.org/docs.html?search=#ExprItemCooldown

Działa to ale nie w pełni, potrzeba do tego jeszcze to przy wykonywaniu kodu

if player has player's tool on cooldown:
        stop

Inaczej tamten kod zadziała tylko na takie minecraftowe przedmioty jak miecz czy łuk, a nie na skriptowe które wykonują coś mniej normalnego

Edytowane przez Fendi
Odnośnik do komentarza
https://skript.pl/temat/57950-cooldown-na-dany-przedmiot/#findComment-344275
Udostępnij na innych stronach

  • 0
Godzinę temu, Fendi napisał:

W tym przypadku dostaniesz w wiadomości zwrotnej informacje ile czasu zostało do ponownego użycia

Te funkcję można lepiej napisać. Wiem, jestem czepialski, ale skoro funkcja znajduje się w dziale z poradnikami, powinna ona obsłużyć możliwie dużo przypadków.

Brakuje obsługi dni, tygodni i lat. W dodatku zamiana przy spójniku "and" tworzy brzydką przerwę na 3 spacje. Kod sam w sobie można skrócić, ponieważ słowo kluczowe 'else' jest niepotrzebne, co jest związane z tym, iż zwracanie wartości kończy wykonywanie funkcji.

Poniżej pokazałem co mam na myśli.

function dodajCD(p: player, v: text, t: text, s: timespan) :: boolean:
	# [...]
	send "%{_t}% %{_s}%" to {_p}
	return false
set {cooldown::%{_v}%::%{_p}%} to now
return true

 

11 minut temu, Fendi napisał:

Działa to ale nie w pełni, potrzeba do tego jeszcze to przy wykonywaniu kodu

if player has player's tool on cooldown:
        stop

Inaczej tamten kod zadziała tylko na takie minecraftowe przedmioty jak miecz czy łuk, a nie na skriptowe które wykonują coś mniej normalnego

Dziwnie to wytłumaczyłeś i zdaje się, że niepoprawnie.

@CoFFeIN04 Owszem, można użyć wbudowanych w Minecraft'cie cooldownów, ale trzeba się liczyć z pewnymi konsekwencjami - podążając za przykładem z początku wątku, cooldown będzie obowiązywał dla wszystkich diamentowych mieczy w ekwipunku gracza, a nie tylko dla tego konkretnego diamentowego miecza. Mówiąc ogólniej, działa ona na dany typ przedmiotu, nie na konkretny przedmiot.

Dla potwierdzenia można zajrzeć do kodu źródłowego Skripta (ściślej mówiąc, klasy ExprItemCooldown) i zauważyć, że te wyrażenie przy ustawianiu go wykorzystuje metodę HumanEntity#setCooldown(org.bukkit.Material material, int ticks).

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57950-cooldown-na-dany-przedmiot/#findComment-344277
Udostępnij na innych stronach

  • 0
6 minut temu, Kormic napisał:

Brakuje obsługi dni, tygodni i lat.

Myślę, że nawet osoba początkująca wzorując się na godzinach minutach i sekundach potrafiła by to dodać ;)

8 minut temu, Kormic napisał:

W dodatku zamiana przy spójniku "and" tworzy brzydką przerwę na 3 spacje

A tego chyba nie zauważyłem bo sam używam bardziej rozbudowanej wersji, ale chyba poprawiłem już.

10 minut temu, Kormic napisał:

Kod sam w sobie można skrócić, ponieważ słowo kluczowe 'else' jest niepotrzebne, co jest związane z tym, iż zwracanie wartości kończy wykonywanie funkcji.

Już bardziej się przyczepić nie dało ;s. Widocznie rok temu miałem taki humor żeby wcisnąć tam sobie else. Usunięcie tego i skasowanie jednej linijki nic, ale to absolutnie nic nie zmieni. A wręcz jest korzystne dla początkujących w skripcie gdzie if i else jest łatwiejsze do wyczytania.

13 minut temu, Kormic napisał:

Dziwnie to wytłumaczyłeś i zdaje się, że niepoprawnie.

Dlaczego? item cooldown sprawia, że nie użyjesz zwykłych przedmiotów.

A autor prosi o

1 godzinę temu, zKacpeQ napisał:

cooldown na tepanie pereł czy coś

Perły które lecą z miecza (zakładam, że na right/left clicku) nie jest czymś normalnym więc ta składnia nie wystarczy.

on right click:
	player's tool is diamond sword
	name of player's tool is "Teleportujacy miecz"
	if player has player's tool on cooldown:
        	stop
	set item cooldown of player's tool for player to 10 seconds
	#kod na wystrzelenie perły

Specjalnie wszedłem na minecrafta aby to przetestować.

Odnośnik do komentarza
https://skript.pl/temat/57950-cooldown-na-dany-przedmiot/#findComment-344279
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ę...