Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[PORADNIK] Jak zrobić top 10 czasów na scoreboard w skript jak na serwerach parkour?


Markovsky

Rekomendowane odpowiedzi

Opublikowano

<p>

<span style="font-size:14px;">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 <img alt=":)" data-emoticon="" src="https://skript.pl/uploads/emoticons/15.png"title=":)">. Zaznaczam, że poradnik jest dla średnio-zaawansowanych skrypterów i nie wyjaśniam większości rzeczy, które powinien owy skrypter rozumieć.</span>

</p>

 

<p>

<strong><span style="font-size:28px;">MIERZENIE CZASU</span></strong><br>

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 

</p>

 

<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln">while {zmienna} is true:

wait 0.001 seconds

add 0.001 to {zmienna od czasu %player%}</span></pre>

 

<p>

W kodzie tym widzimy po prostu śmietnik, lagujący śmietnik 

</p>

 

<p>

Dlatego też wraz z moim (byłym) przyjacielem przygotowałem specjalny addon mojego autorstwa - ,"<strong>Nawo"</strong> 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:

</p>

 

<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln">set {skrypt::%player%::time::start} to now in millis</span></pre>

 

<p>

Musimy też zapisać do zmiennej czas w jakim chcemy przestać go liczyć, a robi się to tak:

</p>

 

<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln">set {skrypt::%player%::time::end} to now in millis</span></pre>

 

<p>

Dodatek do tych zmiennych zapisuje czas w liczbach naturalnych, później trzeba go obliczyć co się robi w ten sposób:

</p>

 

<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln">set {_time} to converted time {skrypt::%player%::time::start} and {skrypt::%player%::time::end}</span></pre>

 

<p>

Zwróćcie uwagę na zmienne w powyższym kodzie,

</p>

 

<p>

Teraz natomiast zapisujemy ten czas jako numer co nie jest konieczne lecz czemu nie <img alt=":)" data-emoticon="" src="https://skript.pl/uploads/emoticons/15.png"title=":)">

</p>

 

<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln">set {_time} to {_time} parsed as number</span></pre>

 

<p>

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 <img alt=":)" data-emoticon="" src="https://skript.pl/uploads/emoticons/15.png"title=":)">

</p>

 

<p>

Wchodzimy w config skripta i szukamy <strong><span style="font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:16.8px;text-indent:0px;text-transform:none;white-space:pre;word-spacing:0px;float:none;background-color:rgb(248,238,199);">number accuracy: 1</span></strong>  w moim przypadku jest to linia 122.<br>

Teraz zmieniamy tą wartość na  <span style="font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:16.8px;text-indent:0px;text-transform:none;white-space:pre;word-spacing:0px;float:none;background-color:rgb(248,238,199);">number accuracy: 3</span><br>

Wszystko gotowe!

</p>

 

<p>

<strong><span style="font-size:28px;">TWORZENIE TOP 10 NA SCOREBOARD</span></strong><br>

Koniec zabawy, czas na prawdziwy hardkor! Zobaczycie teraz gotowy kod a poniżej objaśnienie.

</p>

 

<div class="ipsSpoiler" data-ipsspoiler="">

<div class="ipsSpoiler_header">

<span>Spoiler</span>

</div>

 

<div class="ipsSpoiler_contents">

<pre class="ipsCode prettyprint lang-html prettyprinted">

 

<span class="pln">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%}</span></pre>

</div>

</div>

 

<p>

Zacznijmy od pierwszych linii kodu, a dokładnie od <strong>1</strong> do <strong>4</strong>. 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 <u>{skrypt::top::%player%}</u>

</p>

 

<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln">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}</span></pre>

 

<p>

Kolejne linie (od 5 do 14) to zwykłe sortowanie zmiennych z <a href="https://skript.pl/temat/6-skript-sortowanie-listy-zmiennych-tworzymy-top-5/"rel="">poradnika</a> <a contenteditable="false" data-ipshover="" data-ipshover-target="https://skript.pl/profile/4-piratjsk/?do=hovercard" data-mentionid="4" href="https://skript.pl/profile/4-piratjsk/" rel="">@piratjsk</a><em> </em>z tym, że kod jest uproszczony a zamiast sortować od najmniejszego do największego - robi to na odwrót.

</p>

 

<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln"> 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::*}</span></pre>

 

<p>

Teraz zaczyna się część odpowiedzialna za wyświetlanie czasu.

</p>

 

<div class="ipsSpoiler" data-ipsspoiler="">

<div class="ipsSpoiler_header">

<span>Spoiler</span>

</div>

 

<div class="ipsSpoiler_contents">

<pre class="ipsCode prettyprint lang-html prettyprinted">

 

<span class="pln"> 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%}</span></pre>

</div>

</div>

 

<p>

zmienne wartości (np <em>{_v.1}</em> to najmniejsza wartość a <em>{_v.10} </em>to największa, oczywiście w top10) są odpowiedzialne za przechowywanie czasów, natomiast zmienne od nick'ów graczy to <em>{_n.1}</em> do <em>{_n.10}</em>

</p>

 

<p>

W takim razie co robi zmienna <em>{skrypt::nick::%{_n.4}%} </em>? 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:

</p>

 

<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln">on join:

set {skrypt::nick::%player%} to uncolored nickname of player</span></pre>

 

<p>

<span style="font-size:20px;">Zmienne mamy już omówione, czas na omówienie mechaniki <img alt=":)" data-emoticon="" src="https://skript.pl/uploads/emoticons/15.png"title=":)"></span>

</p>

 

<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln">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%":</span></pre>

 

<p>

sprawdza, czy gracz kwalifikuje się do top 10 (czy pobił kogoś kto był w topce)

</p>

 

<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln"> if {_n.1} is "%player%":

send "&6Ustanowiles swoj najlepszy personalny rekord"

broadcast "&3%player% &6ustanowil nowy rekord z czasem &3%({_time} / 1000)% sekund&6!"</span></pre>

 

<p>

sprawdza, czy gracz ustanowił najlepszy czas - a jeżeli tak to wysyła wiadomości rodem z serwera <em>XamJump</em>

</p>

 

<div class="ipsSpoiler" data-ipsspoiler="">

<div class="ipsSpoiler_header">

<span>Spoiler</span>

</div>

 

<div class="ipsSpoiler_contents">

<pre class="ipsCode prettyprint lang-html prettyprinted">

 

<span class="pln"> 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</span></pre>

</div>

</div>

 

<p>

Wyświetla scoreboard, omówmy sobie to trochę:

</p>

 

<p>

Kod ten po kolei wyświetla kolejne linie top, jeżeli są one dostępne <em>if {_v.1} is set</em> itp, a jeżeli tak to zapisuje te zmienne wartości jako numer <em>set {_v.1} to {_v.1} parsed as number</em> (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)

</p>

 

<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln"> 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%}</span></pre>

 

<p>

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 <a href="https://skript.pl/temat/6-skript-sortowanie-listy-zmiennych-tworzymy-top-5/"rel="">sortowania zmiennych</a>

</p>

 

<p>

Gotowa topka wygląda tak:

</p>

 

<p>

<img alt="maxresdefault.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="515" src="https://skript.pl/uploads/monthly_2016_05/maxresdefault.jpg.bed2920393cd279cb89cbf5d0c8a2b03.jpg">

</p>

 

<p>

<span style="font-size:20px;">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ć <img alt=":)" data-emoticon="" src="https://skript.pl/uploads/emoticons/15.png"title=":)"> </span>

</p>

 

<p>

<strong><span style="font-size:28px;">DODATEK "NAWO"</span></strong>

</p>

 

<p>

<span style="font-size:14px;"><a href="https://www.dropbox.com/s/2e6icb7zc4f3fds/Nawo.jar?dl=0"rel="external nofollow">LINK DO DODATKU</a></span><br>

<a href="https://www.virustotal.com/pl/file/fec4d25f228368cd51138b442e5f3d95c94699f11b3e7437a5462eb13955b2d3/analysis/1462993551/"rel="external nofollow">SKAN</a>

</p>

Opublikowano

Największą bekę miałem że dałeś odnośniki do skript.pl a  stronka od 16.06 już nie działa .... ciekawe kogo to poradnik ? xD

4.png

Opublikowano

Największą bekę miałem że dałeś odnośniki do skript.pl a  stronka od 16.06 już nie działa .... ciekawe kogo to poradnik ? xD

To kod z mojego poradnika ze skript.pl, myślałem, że po wklejeniu kodu będzie tu wszystko działać...

Opublikowano

Bardziej czytelna wersja:

 

 

 

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 15.png. 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 15.png

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 15.png

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 15.png

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:

up...d0c8a2b03.jpg

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ć 15.png 

DODATEK "NAWO"

LINK DO DODATKU
SKAN

 

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...