Skocz do zawartości

Rekomendowane odpowiedzi

Siema

Funkcja jaką przedstawię pozwoli na odliczanie od jakiejś daty do aktualnej

Można użyć do pokazania pozostałego czasu do startu edycji, czy do rozdania czegoś.

Wymaga Skript-Reflect: KLIK

Funkcja:

function odliczanie(l: timespan) :: string:
    set {_czas} to {_l} after now
    set {_x} to difference between {_czas} and now 
    set {_x} to {_x}.getTicks()/20
    set {_hour} to floor(mod({_x}, 86400) / 3600)
    set {_min} to floor(mod({_x}, 3600) / 60)
    set {_sec} to floor(mod({_x}, 60) / 1)
    if {_sec} < 10:
        set {_sec} to "0%{_sec}%"
    if {_min} < 10:
        set {_min} to "0%{_min}%"
    if {_hour} < 10:
        set {_hour} to "0%{_hour}%"    
    return "%{_hour}%:%{_min}%:%{_sec}%"

Przykłady:

Odliczanie do rozdania diamentu, czas odliczania 1 minuta

command /odliczanie:
    trigger:
        set {_odliczanie} to 1 minute after now
        while difference between {_odliczanie} and now is bigger than 1 second:
            wait second
            send "&eDarmowe itemy za: &e%odliczanie(difference between {_odliczanie} and now)%" to all players
        give diamond to all players

Pokazanie czasu na scoreboardzie za ile gracz może się zrespić po dedzie. (Wymaga placeholder api oraz skript-placeholders)

on placeholderapi placeholder request for the prefix "xxx":
    if the identifier is "odliczanie":
        if {ded::%player's uuid%} is set:
            set the result to odliczanie(difference between {ded::%player's uuid%} and now)
		
on death of player:
    set {ded::%victim's uuid%} to 10 seconds after now
    wait 10 seconds
    delete {ded::%victim's uuid%}

W pluginie: %xxx_odliczanie%

(Skrypt ten nie zadziała dokładnie jak opisałem, jest to jego część która jest potrzebna do odliczania)

 

Czas oczekiwania ustalamy poprzez

1 minute after now

 

To wszystko ;)

Odnośnik do komentarza
https://skript.pl/temat/57951-odliczanie-w-skript/
Udostępnij na innych stronach

@Fendi

Metoda Timespan#getTicks ze Skripta jest przestarzała i została ona przeznaczona do usunięcia w ciągu najbliższych kilku aktualizacji. Zamiast niej należy korzystać z metody Timespan#getAs, która pobiera jako parametr zagnieżdżony w tej klasie enum TimePeriod. Dzięki temu będziesz mógł od razu pobrać ilość sekund bez konieczności dzielenia przez 20.

import:
	ch.njol.skript.util.Timespan$TimePeriod
    
# [...]
set {_s} to {_timespan}.getAs(TimePeriod.SECOND)

Zastanawiające jest jednak mnożenie w kodzie źródłowym metody Timespan#getAs. Na moje oko tam powinno być dzielenie, bo im większą jednostkę czasu podamy, tym wyższy wynik otrzymamy, co nie ma sensu. To jednak już zostawiam Tobie do przetestowania. Najwyżej użyjesz TimePeriod.MILLISECOND, bo mnożenie przez 1 niczego nie zmieni.

Obliczenia czasu można by nieco uprościć gdyby wykorzystywać na bieżąco nowo obliczone wartości, ale tak też może być.

Na koniec dodam, że do dopełniania zerami początków jednocyfrowych liczb można wykorzystać metodę String#format lub klasę DecimalFormat. Nie ma potrzeby implementowania tego na piechotę.

return String.format("%02d:%02d:%02d", {_hours}, {_minutes}, {_seconds})
# Lub:
set {_df} to new DecimalFormat("00")
return "%{_df}.format({_hours})%:%{_df}.format({_minutes})%:%{_df}.format({_seconds})%"

Jak widać, String#format zapewnia bardziej zwięzły zapis, ale wykorzystanie klasy DecimalFormat też jest jak najbardziej prawidłowe.

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57951-odliczanie-w-skript/#findComment-344283
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
Dodaj odpowiedź do tematu...

×   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ę...