Nawo 59 Opublikowano 11 maja 2016 Udostępnij Opublikowano 11 maja 2016 Ten poradnik powinien powstać już dawno temu, gdyż forum było zalewane tego typu pytaniami (odnośnie skryptów na parkour), ale przedstawię go teraz . Zaznaczam, że poradnik jest dla średnio-zaawansowanych skrypterów i nie wyjaśniam większości rzeczy, które powinien owy skrypter rozumieć. MIERZENIE CZASU Na samym początku musimy wiedzieć, że liczenie czasu w Skript z dokładnością do jednej tysięcznej sekundy można zrobić, lecz będzie to bardzo, ale to bardzo lagujące a do tego potrzebna będzie dodatkowa zmienną, która nic nie zmieni ale dużo osób ceni w skryptach jak najmniejszą ilość owych zmiennych while {zmienna} is true: wait 0.001 seconds add 0.001 to {zmienna od czasu %player%} W kodzie tym widzimy po prostu śmietnik, lagujący śmietnik Dlatego też wraz z moim (byłym) przyjacielem przygotowałem specjalny addon mojego autorstwa - ,"Nawo" który liczy czas. Jak to działa? W skrypcie dajemy kod, który powoduje, że addon zapisze czas w jakim zostanie on wywołany do zmiennej - wygląda to tak: set {skrypt::%player%::time::start} to now in millis Musimy też zapisać do zmiennej czas w jakim chcemy przestać go liczyć, a robi się to tak: set {skrypt::%player%::time::end} to now in millis Dodatek do tych zmiennych zapisuje czas w liczbach naturalnych, później trzeba go obliczyć co się robi w ten sposób: set {_time} to converted time {skrypt::%player%::time::start} and {skrypt::%player%::time::end} Zwróćcie uwagę na zmienne w powyższym kodzie, Teraz natomiast zapisujemy ten czas jako numer co nie jest konieczne lecz czemu nie set {_time} to {_time} parsed as number Takim sposobem mamy już nasz czas wyrażony w liczbie naturalnej (bez przecinka) i wystarczy go podzielić przez 1000, lecz Skript nie zaakceptuje 3 miejsc po przecinku więc musimy wejść do konfiguracji Wchodzimy w config skripta i szukamy number accuracy: 1 w moim przypadku jest to linia 122. Teraz zmieniamy tą wartość na number accuracy: 3 Wszystko gotowe! TWORZENIE TOP 10 NA SCOREBOARD Koniec zabawy, czas na prawdziwy hardkor! Zobaczycie teraz gotowy kod a poniżej objaśnienie. Spoiler if {skrypt::top::%player%} is not set: set {skrypt::top::%player%} to 9999999 if {_time} is less than {skrypt::top::%player%}: set {skrypt::top::%player%} to {_time} set {_num} to size of {skrypt::top::*} loop {_num} times: loop {skrypt::top::*}: if {_v.%loop-number%} is not set: set {_v.%loop-number%} to loop-value set {_n.%loop-number%} to loop-index if loop-value is less than {_v.%loop-number%}: set {_v.%loop-number%} to loop-value set {_n.%loop-number%} to loop-index remove {_v.%loop-number%} from {skrypt::top::*} if {_n.1} or {_n.2} or {_n.3} or {_n.4} or {_n.5} or {_n.6} or {_n.7} or {_n.8} or {_n.9} or {_n.10} is "%player%": if {_n.1} is "%player%": send "&6Ustanowiles swoj najlepszy personalny rekord" broadcast "&3%player% &6ustanowil nowy rekord z czasem &3%({_time} / 1000)% sekund&6!" display board named "&3TOP10" to player if {_v.1} is set: set {_v.1} to {_v.1} parsed as number make score "%({_v.1} / 1000)% &e%{skrypt::nick::%{_n.1}%}%" in board of player to -1 if {_v.2} is set: set {_v.2} to {_v.2} parsed as number make score "%({_v.2} / 1000)% &7%{skrypt::nick::%{_n.2}%}%" in board of player to -2 if {_v.3} is set: set {_v.3} to {_v.3} parsed as number make score "%({_v.3} / 1000)% &6%{skrypt::nick::%{_n.3}%}%" in board of player to -3 if {_v.4} is set: set {_v.4} to {_v.4} parsed as number make score "%({_v.4} / 1000)% %{skrypt::nick::%{_n.4}%}%" in board of player to -4 if {_v.5} is set: set {_v.5} to {_v.5} parsed as number make score "%({_v.5} / 1000)% %{skrypt::nick::%{_n.5}%}%" in board of player to -5 if {_v.6} is set: set {_v.6} to {_v.6} parsed as number make score "%({_v.6} / 1000)% %{skrypt::nick::%{_n.6}%}%" in board of player to -6 if {_v.7} is set: set {_v.7} to {_v.7} parsed as number make score "%({_v.7} / 1000)% %{skrypt::nick::%{_n.7}%}%" in board of player to -7 if {_v.8} is set: set {_v.8} to {_v.8} parsed as number make score "%({_v.8} / 1000)% %{skrypt::nick::%{_n.8}%}%" in board of player to -8 if {_v.9} is set: set {_v.9} to {_v.9} parsed as number make score "%({_v.9} / 1000)% %{skrypt::nick::%{_n.9}%}%" in board of player to -9 if {_v.10} is set: set {_v.10} to {_v.10} parsed as number make score "%({_v.10} / 1000)% %{skrypt::nick::%{_n.10}%}%" in board of player to -10 move display of player to sidebar wait 1 tick else: send "&6Ustanowiles swoj najlepszy rekord z czasem &3%({_time} / 1000)% sekund&6!" loop {_num} times: set {skrypt::top::%{_n.%loop-number%}%} to {_v.%loop-number%} Zacznijmy od pierwszych linii kodu, a dokładnie od 1 do 4. Służą one kolejno do sprawdzania czy zmienna przechowująca najlepszy czas gracza ma wartość, a jeżeli nie to nadaje mu tą wartość jak największą (musimy pamiętać, że wszystkie zmienne mają wartości w milisekundach, czyli nie mają przecinka), kolejne dwie linie sprawdzają czy obliczony czas z pierwszej części tego poradnika jest mniejszy od aktualnie najlepszego (najmniejszego) czasu gracza ze zmiennej {skrypt::top::%player%} if {skrypt::top::%player%} is not set: set {skrypt::top::%player%} to 9999999 if {_time} is less than {skrypt::top::%player%}: set {skrypt::top::%player%} to {_time} Kolejne linie (od 5 do 14) to zwykłe sortowanie zmiennych z poradnika @piratjsk z tym, że kod jest uproszczony a zamiast sortować od najmniejszego do największego - robi to na odwrót. set {_num} to size of {skrypt::top::*} loop {_num} times: loop {skrypt::top::*}: if {_v.%loop-number%} is not set: set {_v.%loop-number%} to loop-value set {_n.%loop-number%} to loop-index if loop-value is less than {_v.%loop-number%}: set {_v.%loop-number%} to loop-value set {_n.%loop-number%} to loop-index remove {_v.%loop-number%} from {skrypt::top::*} Teraz zaczyna się część odpowiedzialna za wyświetlanie czasu. Spoiler if {_n.1} or {_n.2} or {_n.3} or {_n.4} or {_n.5} or {_n.6} or {_n.7} or {_n.8} or {_n.9} or {_n.10} is "%player%": if {_n.1} is "%player%": send "&6Ustanowiles swoj najlepszy personalny rekord" broadcast "&3%player% &6ustanowil nowy rekord z czasem &3%({_time} / 1000)% sekund&6!" display board named "&3TOP10" to player if {_v.1} is set: set {_v.1} to {_v.1} parsed as number make score "%({_v.1} / 1000)% &e%{skrypt::nick::%{_n.1}%}%" in board of player to -1 if {_v.2} is set: set {_v.2} to {_v.2} parsed as number make score "%({_v.2} / 1000)% &7%{skrypt::nick::%{_n.2}%}%" in board of player to -2 if {_v.3} is set: set {_v.3} to {_v.3} parsed as number make score "%({_v.3} / 1000)% &6%{skrypt::nick::%{_n.3}%}%" in board of player to -3 if {_v.4} is set: set {_v.4} to {_v.4} parsed as number make score "%({_v.4} / 1000)% %{skrypt::nick::%{_n.4}%}%" in board of player to -4 if {_v.5} is set: set {_v.5} to {_v.5} parsed as number make score "%({_v.5} / 1000)% %{skrypt::nick::%{_n.5}%}%" in board of player to -5 if {_v.6} is set: set {_v.6} to {_v.6} parsed as number make score "%({_v.6} / 1000)% %{skrypt::nick::%{_n.6}%}%" in board of player to -6 if {_v.7} is set: set {_v.7} to {_v.7} parsed as number make score "%({_v.7} / 1000)% %{skrypt::nick::%{_n.7}%}%" in board of player to -7 if {_v.8} is set: set {_v.8} to {_v.8} parsed as number make score "%({_v.8} / 1000)% %{skrypt::nick::%{_n.8}%}%" in board of player to -8 if {_v.9} is set: set {_v.9} to {_v.9} parsed as number make score "%({_v.9} / 1000)% %{skrypt::nick::%{_n.9}%}%" in board of player to -9 if {_v.10} is set: set {_v.10} to {_v.10} parsed as number make score "%({_v.10} / 1000)% %{skrypt::nick::%{_n.10}%}%" in board of player to -10 move display of player to sidebar wait 1 tick else: send "&6Ustanowiles swoj najlepszy rekord z czasem &3%({_time} / 1000)% sekund&6!" loop {_num} times: set {skrypt::top::%{_n.%loop-number%}%} to {_v.%loop-number%} zmienne wartości (np {_v.1} to najmniejsza wartość a {_v.10} to największa, oczywiście w top10) są odpowiedzialne za przechowywanie czasów, natomiast zmienne od nick'ów graczy to {_n.1} do {_n.10} W takim razie co robi zmienna {skrypt::nick::%{_n.4}%} ? A no przechowuje nazwy graczy z wyświetlaniem też dużych liter. Aby to działało należy w swoim skrypcie umieścić następujący kod: on join: set {skrypt::nick::%player%} to uncolored nickname of player Zmienne mamy już omówione, czas na omówienie mechaniki if {_n.1} or {_n.2} or {_n.3} or {_n.4} or {_n.5} or {_n.6} or {_n.7} or {_n.8} or {_n.9} or {_n.10} is "%player%": sprawdza, czy gracz kwalifikuje się do top 10 (czy pobił kogoś kto był w topce) if {_n.1} is "%player%": send "&6Ustanowiles swoj najlepszy personalny rekord" broadcast "&3%player% &6ustanowil nowy rekord z czasem &3%({_time} / 1000)% sekund&6!" sprawdza, czy gracz ustanowił najlepszy czas - a jeżeli tak to wysyła wiadomości rodem z serwera XamJump Spoiler display board named "&3TOP10" to player if {_v.1} is set: set {_v.1} to {_v.1} parsed as number make score "%({_v.1} / 1000)% &e%{skrypt::nick::%{_n.1}%}%" in board of player to -1 if {_v.2} is set: set {_v.2} to {_v.2} parsed as number make score "%({_v.2} / 1000)% &7%{skrypt::nick::%{_n.2}%}%" in board of player to -2 if {_v.3} is set: set {_v.3} to {_v.3} parsed as number make score "%({_v.3} / 1000)% &6%{skrypt::nick::%{_n.3}%}%" in board of player to -3 if {_v.4} is set: set {_v.4} to {_v.4} parsed as number make score "%({_v.4} / 1000)% %{skrypt::nick::%{_n.4}%}%" in board of player to -4 if {_v.5} is set: set {_v.5} to {_v.5} parsed as number make score "%({_v.5} / 1000)% %{skrypt::nick::%{_n.5}%}%" in board of player to -5 if {_v.6} is set: set {_v.6} to {_v.6} parsed as number make score "%({_v.6} / 1000)% %{skrypt::nick::%{_n.6}%}%" in board of player to -6 if {_v.7} is set: set {_v.7} to {_v.7} parsed as number make score "%({_v.7} / 1000)% %{skrypt::nick::%{_n.7}%}%" in board of player to -7 if {_v.8} is set: set {_v.8} to {_v.8} parsed as number make score "%({_v.8} / 1000)% %{skrypt::nick::%{_n.8}%}%" in board of player to -8 if {_v.9} is set: set {_v.9} to {_v.9} parsed as number make score "%({_v.9} / 1000)% %{skrypt::nick::%{_n.9}%}%" in board of player to -9 if {_v.10} is set: set {_v.10} to {_v.10} parsed as number make score "%({_v.10} / 1000)% %{skrypt::nick::%{_n.10}%}%" in board of player to -10 move display of player to sidebar Wyświetla scoreboard, omówmy sobie to trochę: Kod ten po kolei wyświetla kolejne linie top, jeżeli są one dostępne if {_v.1} is set itp, a jeżeli tak to zapisuje te zmienne wartości jako numer set {_v.1} to {_v.1} parsed as number (na wszelki wypadek) a następnie wyświetla wynik dzieląc go przez 1000 (trzeba stosować dzielenie czasu przez 1000 przy każdym wyświetlaniu go w wiadomości czy na bossbarze etc) else: send "&6Ustanowiles swoj najlepszy rekord z czasem &3%({_time} / 1000)% sekund&6!" loop {_num} times: set {skrypt::top::%{_n.%loop-number%}%} to {_v.%loop-number%} Na końcu kod, który wyświetla wiadomość o pobiciu swojego rekordu gdy czas gracza nie kwalifikuje się do top10 a także przywracanie każdemu graczowi zmiennych najlepszego czasu, które zostały usunięte podczas sortowania zmiennych Gotowa topka wygląda tak: To tyle, po prostu trzeba to zrozumieć, możliwości są nieograniczone, ja podałem tylko przykładowe zmienne, przykładowe wiadomości i wszystko inne... Możemy zrobić top20, top15, wyświetlać poszczególne wiadomości dla zajęcia poszczególnego miejsca, całkowicie zmienić wygląd tego scoreboardu etc... Wystarczy tylko zrozumieć mój sposób i pokombinować DODATEK "NAWO" LINK DO DODATKUSKAN Norbi, boleknowak, Szokon i 2 innych 5 Odnośnik do komentarza https://skript.pl/temat/11650-czas-z-dok%C5%82adno%C5%9Bci%C4%85-do-11000-sekundy-top-10-czas%C3%B3w-na-scoreboard/ Udostępnij na innych stronach Więcej opcji udostępniania...
Nawo 59 Opublikowano 12 maja 2016 Autor Udostępnij Opublikowano 12 maja 2016 Apdejt Gdyby ktoś coś jeszcze chciał widzieć w tym poradniku to pisać Odnośnik do komentarza https://skript.pl/temat/11650-czas-z-dok%C5%82adno%C5%9Bci%C4%85-do-11000-sekundy-top-10-czas%C3%B3w-na-scoreboard/#findComment-83746 Udostępnij na innych stronach Więcej opcji udostępniania...
_CookieMonster_ 48 Opublikowano 12 maja 2016 Udostępnij Opublikowano 12 maja 2016 *Musk wybuh*. Ten dodatek tylko to dodaje? Poradnik świetny, lubię placki. Odnośnik do komentarza https://skript.pl/temat/11650-czas-z-dok%C5%82adno%C5%9Bci%C4%85-do-11000-sekundy-top-10-czas%C3%B3w-na-scoreboard/#findComment-83753 Udostępnij na innych stronach Więcej opcji udostępniania...
Nawo 59 Opublikowano 12 maja 2016 Autor Udostępnij Opublikowano 12 maja 2016 5 minut temu, TheDircikPL napisał: *Musk wybuh*. Ten dodatek tylko to dodaje? Poradnik świetny, lubię placki. No tak, ten dodatek tylko liczy czas Odnośnik do komentarza https://skript.pl/temat/11650-czas-z-dok%C5%82adno%C5%9Bci%C4%85-do-11000-sekundy-top-10-czas%C3%B3w-na-scoreboard/#findComment-83754 Udostępnij na innych stronach Więcej opcji udostępniania...
BestSky 2 Opublikowano 13 maja 2016 Udostępnij Opublikowano 13 maja 2016 Świetny poradnik daję LIKE Odnośnik do komentarza https://skript.pl/temat/11650-czas-z-dok%C5%82adno%C5%9Bci%C4%85-do-11000-sekundy-top-10-czas%C3%B3w-na-scoreboard/#findComment-83803 Udostępnij na innych stronach Więcej opcji udostępniania...
Szokon 2 Opublikowano 17 maja 2016 Udostępnij Opublikowano 17 maja 2016 Długo tego szukałem. Łap lajka Nawo 1 Odnośnik do komentarza https://skript.pl/temat/11650-czas-z-dok%C5%82adno%C5%9Bci%C4%85-do-11000-sekundy-top-10-czas%C3%B3w-na-scoreboard/#findComment-84007 Udostępnij na innych stronach Więcej opcji udostępniania...
Or nej 0 Opublikowano 18 maja 2016 Udostępnij Opublikowano 18 maja 2016 dzięki działa Odnośnik do komentarza https://skript.pl/temat/11650-czas-z-dok%C5%82adno%C5%9Bci%C4%85-do-11000-sekundy-top-10-czas%C3%B3w-na-scoreboard/#findComment-84106 Udostępnij na innych stronach Więcej opcji udostępniania...
Nawo 59 Opublikowano 1 lipca 2016 Autor Udostępnij Opublikowano 1 lipca 2016 O 11.05.2016 o 21:13, Nawo napisał: Gitara siema Odnośnik do komentarza https://skript.pl/temat/11650-czas-z-dok%C5%82adno%C5%9Bci%C4%85-do-11000-sekundy-top-10-czas%C3%B3w-na-scoreboard/#findComment-85912 Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi