Skocz do zawartości
  • 0

Timer


TeZetYT

Pytanie

Witam. Nie wiem jaki sposób na zrobienie timera na action barze wybrać, bo nie podoba mi się używanie while ani podobnych rzeczy, które lagują a czasem crashują serwer. Czy mógłby ktoś polecić najlepszy sposób na to? W miarę optymalny i bez błędów? Z góry dziękuję bardzo.

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

2 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
import:
    org.bukkit.Bukkit
    org.bukkit.scheduler.BukkitRunnable

on load:
    set {time} to 60
    set {countdown_finished} to false

every second:
    if {time} is less than or equal to 0:
        if {countdown_finished} is false:
            broadcast "Czas upłynął!"
            set {countdown_finished} to true
        cancel all tasks
    else:
        loop all players:
            send action bar "Pozostały czas: %{time}% sekund" to loop-player
        remove 1 from {time}

wymaga dodatku skript-reflect

ewentualnie pozostaje napisanie pluginu

Edytowane przez _MicX_
Odnośnik do komentarza
https://skript.pl/temat/58473-timer/#findComment-346026
Udostępnij na innych stronach

  • 0

@_MicX_

A na co jest potrzebny w tym kodzie skript-reflect? Nie wykorzystuje on w jakikolwiek sposób kolejkowania zadań z Bukkit, pomimo tego co sugeruje sekcja import.
Ponadto, jakie zastosowanie w tym kodzie ma instrukcja cancel all tasks? Jest ona częścią składni wprowadzonej przez SkBee, a skrypt nie tworzy jakichkolwiek opóźnianych zadań.

@TeZetYT

Nieważne z którego rozwiązania się skorzysta, różnice w wydajności dla przeciętnego zjadacza chleba są marginalne. Jeśli ktoś mi nie wierzy, proszę samemu sprawdzić i ewentualnie spróbować mnie wyprowadzić z błędu.

Pokażę rozwiązanie wykorzystujące pętlę while wykorzystującą generowanie UUID, co zapobiega powstawaniu wielu instancji pętli działających jednocześnie.

command /test:
	trigger:
		set {-whileLoopUUID} and {_localLoopUUID} to random uuid
		set {_countdown} to 10
		send "While loop has started!" to console
		while {_countdown} > 0:
			if {_localLoopUUID} != {-whileLoopUUID}:
				send "While loop has been stopped!" to console
				stop
			send "%{_countdown}%..." to console
			wait 1 second
			subtract 1 from {_countdown}
		send "End of countdown!" to console

Nadmienię, że wykorzystuję tzw. memory variables (czy też RAM variables), czyli zmienne, które są przechowywane tylko w pamięci RAM i nie są zapisywane kiedykolwiek na dysku (najczęściej definiowane w pliku konfiguracyjnym Skript jako te zaczynające się myślnikiem). Tym samym, przy wyłączeniu serwera ich wartości są tracone. W naszym przypadku jest to pożądane działanie, bo nie potrzebujemy tej informacji między kolejnymi uruchomieniami serwera.
Bez ustawienia odpowiedniego wzorca zapisywanych zmiennych w pliku variables.csv (baza danych default w pliku config.sk) Skript ostrzeże nas o zarezerwowaniu myślnika na początku nazw zmiennych, a sam myślnik nie będzie miał żadnego wpływu na zapis na dysku. Dlatego też powinien on wyglądać jak niżej:

default:
		# The default "database" is a simple text file, with each variable on a separate line and the variable's name, type, and value separated by commas.
		# This is the last database in this list to catch all variables that have not been saved anywhere else.
		# You can modify this database freely, but make sure to know what you're doing if you don't want to loose any variables.
		
		type: CSV
		
		pattern: (?!-).*
		
		file: ./plugins/Skript/variables.csv
		
		backup interval: 2 hours
		
		backups to keep: -1

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/58473-timer/#findComment-346027
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ę...