Fendi 190 Opublikowano 27 lipca 2024 Udostępnij Opublikowano 27 lipca 2024 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 Cytuj Odnośnik do komentarza https://skript.pl/temat/57951-odliczanie-w-skript/ Udostępnij na innych stronach Więcej opcji udostępniania...
Kormic 1951 Opublikowano 27 lipca 2024 Udostępnij Opublikowano 27 lipca 2024 @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. Fendi 1 Cytuj Odnośnik do komentarza https://skript.pl/temat/57951-odliczanie-w-skript/#findComment-344283 Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ą.