Skocz do zawartości
  • 0

Skrypt na TOP czasu


Legal

Pytanie

Witam serdecznie, znalazłem skrypt od PanaMarudy na Top czasu online, jednakże topka wyświetla tylko godziny, chciałbym aby znajdowały się również dni i minuty, jest szansa jakoś to dodać? Lub czy posiadacie taki skrypt już gotowy? :/ 

 

Jest: (x godz.)

Chciałbym: (x Dni x godz. x min.)

 

function getUnixFromTimespan(t: timespan) :: number:
	set {_} to unix date of 0
	add {_t} to {_}
	set {_return} to unix timestamp of {_}
	return {_return}

on disconnect:
	set {time::%name of player%} to (getUnixFromTimespan(time played of player) / 3600)

command /top [<string>]:
	trigger:
		set {_offline::*} to all offline players
		loop all players:
			set {time::%name of loop-player%} to (getUnixFromTimespan(time played of loop-player) / 3600)
		send "&fTopka czasu online:"
		send createTop("time", 10, {_offline::*}, "&f   &f[index]. &f[player]&f: &e[value] h")

 

Odnośnik do komentarza
https://skript.pl/temat/43309-skrypt-na-top-czasu/
Udostępnij na innych stronach

12 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • -2

Podałeś niekompletny kod.

 

Sprawdź ten podany powyżej, co prawda zmieniłbym every 1 second na coś w stylu every 1 minute, ale skrypt wygląda jakby miał dobrze działać

Edytowane przez CoFFeIN04
Odnośnik do komentarza
https://skript.pl/temat/43309-skrypt-na-top-czasu/#findComment-270938
Udostępnij na innych stronach

  • -2
Teraz, Legal napisał:

Dlaczego niekompletny? Skoro kod działa i pokazuje godziny... ale chciałbym, aby pokazywał dodatkowo dni i minuty.

Okej, chodzi mi o to, że nie ma funkcji createTop. W każdym razie, spróbuj zrobić tak jak wysłałem powyżej. 

Odnośnik do komentarza
https://skript.pl/temat/43309-skrypt-na-top-czasu/#findComment-270941
Udostępnij na innych stronach

  • 0
Teraz, CoFFeIN04 napisał:

Okej, chodzi mi o to, że nie ma funkcji createTop. W każdym razie, spróbuj zrobić tak jak wysłałem powyżej. 

Napisał, że to jest skrypt od Pana Marudy na top online graczy.

 

Teraz, Legal napisał:

Dlaczego niekompletny? Skoro kod działa i pokazuje godziny... ale chciałbym, aby pokazywał dodatkowo dni i minuty.

W takim wypadku należałoby zmienić kod funkcji createTop, a bez zgody autora wolałbym mimo wszystko tego nie robić, bo nie mam zamiaru grzebać w czyimś kodzie bez jego zgody. Sprawdź czy skrypt nie ma możliwości ustawienia tego, jeżeli nie, to pisz do autora, być może ci ją przerobi.

Odnośnik do komentarza
https://skript.pl/temat/43309-skrypt-na-top-czasu/#findComment-270944
Udostępnij na innych stronach

  • 0

Tutaj jest funkcja:

 

function createTop(name: string, size: number, list: objects, format: string="[PLAYER] - [VALUE]") :: strings:
    set {_index} to 1
    loop {_list::*}:
        if {%{_name}%::%loop-value%} is set:
            if {%{_name}%::%loop-value%} is a number:
                set {_top::%{_index}%} to {%{_name}%::%loop-value%}
                set {_players::%{_index}%} to "%loop-value%"
                add 1 to {_index}
    if {_size} > (size of {_players::*}):
        set {_size} to (size of {_players::*})
    loop {_size} times:
        loop {_top::*}:
            if {_max} is not set:
                set {_max} to loop-value-2
                set {_index} to loop-index
            else:
                if loop-value-2 > {_max}:
                    set {_max} to loop-value-2
                    set {_index} to loop-index
        set {_var} to {_format}
        replace "[PLAYER]" with {_players::%{_index}%} in {_var}
        replace "[INDEX]" with "%loop-number%" in {_var}
        replace "[VALUE]" with "%{_max}%" in {_var}
        add {_var} to {_return::*}
        delete {_players::%{_index}%}, {_top::%{_index}%}, {_max} and {_index}

    return {_return::*}

 

No to poczekam na PanaMarude, może zerknie tutaj i pomoże :/

Chodzi bardziej o to, aby było top 10 czasu online, a nie sprawdzenie kto ile czasu ma :/

 

Zaktualizowałem sobie funkcję do 4.3.0 i ogólnie wszystkie topki mi działają, ewentualnie wkradło mi się jakieś <none>, ale mniejsza... wszystko segreguje się dobrze, lecz właśnie topka czasu wygląda tak:

(PaperSpigot 1.12.2), Skript najnowszy

 

bnoauFD.png

 

Jak to naprawić i jak ustawić, aby było po polsku ładnie :/ 

 

11 godzin temu, PanMaruda napisał:

trzeba chyba zmienną wyczyścić - wklej sobie to do kodu, przeładuj skrypt, usuń z powrotem i przeładuj jeszcze raz.



on load:
 delete {time::*}

 

co do polskich nazw - musisz topkę pobrać do zmiennej, zmienną zapętlić i podmienić każdą angielską nazwę czasu na polski odpowiednik, dam ci początek bo na telefonie jestem i ciężej się pisze:



set {_top::*} to cretetop...
loop {_top::*}:
  set {_} to loop-value
  replace all "days" with "dni" in {_}
  replace all "day" with "dzień" in {_}
  replace all "hours"...
  hour...
  minutes...
  minute...
  seconds...
  second...
  replace all "and" with "i" in {_}
  
  send {_}
  

 

Super, sprawdzę później jak będę w domu, dzięki Ci bardzo za poświęcony czas ;) Miłego dniocha.

 

Teraz to cały skrypt się zbugował... Wyświetla wszystkim ten sam czas gry, nie segreguje się, gracz <none> nawet się wkradł :/

Odnośnik do komentarza
https://skript.pl/temat/43309-skrypt-na-top-czasu/#findComment-270945
Udostępnij na innych stronach

  • 3

Zaktualizuj skrypt bo widzę że jest to stary skrypt Pana Marudy i jeżeli chcesz te godziny i minuty to do zmiennych zapisuj po prostu time span a nie unix 

on disconnect:
	set {time::%name of player%} to time played of player

command /top [<string>]:
	trigger:
		set {_offline::*} to all offline players
		loop all players:
			set {time::%name of loop-player%} to time played of loop-player
		send "&fTopka czasu online:"
		send createTop("time", 10, {_offline::*}, "&f   &f[index]. &f[player]&f: &e[value]")

 

Edytowane przez xAxee
Odnośnik do komentarza
https://skript.pl/temat/43309-skrypt-na-top-czasu/#findComment-270947
Udostępnij na innych stronach

  • 0

dokładnie tak jak ci xAxee podał: jego kod i aktualizacja do 4.2.0

 

jeżeli masz ostatnią wersję 4.3.0 (i spełnione wymagania) to kod może wyglądać nawet tak:

on disconnect:
	set {time::%name of player%} to time played of player

command /top [<string>]:
	trigger:
		loop all players:
			set {time::%name of loop-player%} to time played of player
		send "&fTopka czasu online:"
		send createTop("time", 10, "&f   &f[index]. &f[player]&f: &e[value]")

 

Edytowane przez PanMaruda
Odnośnik do komentarza
https://skript.pl/temat/43309-skrypt-na-top-czasu/#findComment-270953
Udostępnij na innych stronach

  • 1
8 godzin temu, Legal napisał:

 

bnoauFD.png

Jak to naprawić i jak ustawić, aby było po polsku ładnie :/ 

trzeba chyba zmienną wyczyścić - wklej sobie to do kodu, przeładuj skrypt, usuń z powrotem i przeładuj jeszcze raz.

on load:
 delete {time::*}

 

co do polskich nazw - musisz topkę pobrać do zmiennej, zmienną zapętlić i podmienić każdą angielską nazwę czasu na polski odpowiednik, dam ci początek bo na telefonie jestem i ciężej się pisze:

set {_top::*} to cretetop...
loop {_top::*}:
  set {_} to loop-value
  replace all "days" with "dni" in {_}
  replace all "day" with "dzień" in {_}
  replace all "hours"...
  hour...
  minutes...
  minute...
  seconds...
  second...
  replace all "and" with "i" in {_}
  
  send {_}
  

 

Edytowane przez PanMaruda
Odnośnik do komentarza
https://skript.pl/temat/43309-skrypt-na-top-czasu/#findComment-270984
Udostępnij na innych stronach

  • 0
12 godzin temu, PanMaruda napisał:

trzeba chyba zmienną wyczyścić - wklej sobie to do kodu, przeładuj skrypt, usuń z powrotem i przeładuj jeszcze raz.


on load:
 delete {time::*}

 

co do polskich nazw - musisz topkę pobrać do zmiennej, zmienną zapętlić i podmienić każdą angielską nazwę czasu na polski odpowiednik, dam ci początek bo na telefonie jestem i ciężej się pisze:


set {_top::*} to cretetop...
loop {_top::*}:
  set {_} to loop-value
  replace all "days" with "dni" in {_}
  replace all "day" with "dzień" in {_}
  replace all "hours"...
  hour...
  minutes...
  minute...
  seconds...
  second...
  replace all "and" with "i" in {_}
  
  send {_}
  

 

 

 

Mógłbyś mi dokończyć ten kod? Byłbym wdzięczny ponieważ coś mi nie chce wyjść to ehh

 

Aktualnie wszystko działa już, jedynie brakuje mi tych dni godzin itd.

 

Kod wygląda teraz tak:

 

on join:
	if {time::%name of player%} is not set:
		set {time::%name of player%} to 0

on disconnect:
	set {time::%name of player%} to time played of player


command /topki:
	trigger:
		open chest with 6 rows named "TEST" to player
		wait 3 tick
		format slot 16 of player with clock named "Czas gry" with lore createTop("time", 10, "&f   &f[index]. &f[player]&f: &e[value]") to be unstealable

command /top [<string>]:
	trigger:
		loop all players:
			set {time::%name of loop-player%} to time played of player
		send "&fTopka czasu online:"
		send createTop("time", 10, "&f   &f[index]. &f[player]&f: &e[value]")


function createTop(name: string, size: integer, format: string="[P] - [V]") :: strings:
    set {_indices::*} to all indices of {%{_name}%::*}
    set {_index} to 1
    if {_size} = 0:
        return ""
    if {_size} < 0:
        set {_reversed} to true
        set {_size} to ({_size} * (-1))
    loop {_indices::*}:
        if {%{_name}%::%loop-value%} = number or timespan or date:
            set {_values::%{_index}%} to {%{_name}%::%loop-value%}
            set {_indexes::%{_index}%} to "%loop-value%"
            add 1 to {_index}
    if {_size} > (size of {_indexes::*}):
        set {_size} to (size of {_indexes::*})
    loop {_size} times:
        loop {_values::*}:
            if {_max} is not set:
                set {_max} to loop-value-2
                set {_index} to loop-index
            else:
                if {_reversed} is not true:
                    if loop-value-2 > {_max}:
                        set {_max} to loop-value-2
                        set {_index} to loop-index
                else:
                    if loop-value-2 < {_max}:
                        set {_max} to loop-value-2
                        set {_index} to loop-index
        set {_var} to {_format}
        replace "[VALUE]" and "[V]" with "%{_max}%" in {_var}
        replace "[INDEX]" and "[I]" with "%loop-number%" in {_var}
        replace "[PLAYER]" and "[P]" with {_indexes::%{_index}%} in {_var}
        add {_var} to {_return::*}
        delete {_indexes::%{_index}%}, {_values::%{_index}%}, {_max} and {_index}
    return {_return::*}

 

Odnośnik do komentarza
https://skript.pl/temat/43309-skrypt-na-top-czasu/#findComment-271108
Udostępnij na innych stronach

  • 2
function translate(return: text) :: text:
    set {_ang::*} to ("years" and "year", "months", "month", "days", "day", "hours" ,  "hour", "minutes" ,  "minute", "seconds", "second", "and")
    set {_pl::*} to ("lata" and "rok", "miesiecy", "miesiac", "dni", "dzien", "godzin", "godzina", "minut", "minuta", "sekund", "sekunda", "i")
    loop {_ang::*}:
        replace all loop-value with {_pl::%loop-index%} in {_return}
    return {_return}
function translateList(r: texts) :: texts:
	loop {_r::*}:
		add translate(loop-value) to {_return::*}
	return {_return::*}
function createTop(name: string, size: integer, format: string="[P] - [V]") :: strings:
    set {_indices::*} to all indices of {%{_name}%::*}
    set {_index} to 1
    if {_size} = 0:
        return ""
    if {_size} < 0:
        set {_reversed} to true
        set {_size} to ({_size} * (-1))
    loop {_indices::*}:
        if {%{_name}%::%loop-value%} = number or timespan or date:
            set {_values::%{_index}%} to {%{_name}%::%loop-value%}
            set {_indexes::%{_index}%} to "%loop-value%"
            add 1 to {_index}
    if {_size} > (size of {_indexes::*}):
        set {_size} to (size of {_indexes::*})
    loop {_size} times:
        loop {_values::*}:
            if {_max} is not set:
                set {_max} to loop-value-2
                set {_index} to loop-index
            else:
                if {_reversed} is not true:
                    if loop-value-2 > {_max}:
                        set {_max} to loop-value-2
                        set {_index} to loop-index
                else:
                    if loop-value-2 < {_max}:
                        set {_max} to loop-value-2
                        set {_index} to loop-index
        set {_var} to {_format}
        replace "[VALUE]" and "[V]" with "%{_max}%" in {_var}
        replace "[INDEX]" and "[I]" with "%loop-number%" in {_var}
        replace "[PLAYER]" and "[P]" with {_indexes::%{_index}%} in {_var}
        add {_var} to {_return::*}
        delete {_indexes::%{_index}%}, {_values::%{_index}%}, {_max} and {_index}
    return {_return::*}

on join:
	if {time::%name of player%} is not set:
		set {time::%name of player%} to time played of player
on disconnect:
	set {time::%name of player%} to time played of player


command /topki [<text>]:
	trigger:
		open chest with 6 rows named "TEST" to player
		wait 3 tick
		format slot 16 of player with clock named "Czas gry" with lore translateList(createTop("time", 10, "&f   &f[index]. &f[player]&f: &e[value]")) to be unstealable

command /top [<text>]:
	trigger:
		loop all players:
			set {time::%name of loop-player%} to time played of loop-player
		send "&fTopka czasu online:"
		send translateList(createTop("time", 10, "&f   &f[index]. &f[player]&f: &e[value]"))

 

Odnośnik do komentarza
https://skript.pl/temat/43309-skrypt-na-top-czasu/#findComment-271112
Udostępnij na innych stronach

  • 0

@xAxee miejmy tylko nadzieję że funkcja z argumentami w funkcji zadziała poprawnie - a z reguły nie chcą działać i skript dostaje pierdolca XD
 

także w razie gdyby ci się autorze pojawił błąd w którejś linijce z tym kodem

translateList(createTop("time", 10, "&f   &f[index]. &f[player]&f: &e[value]"))

to trzeba go będzie rozpisać osobno:

set {_list::*} to createTop("time", 10, "&f   &f[index]. &f[player]&f: &e[value]")
set {_trans::*} ro translateList({_list::*})

#dopiero tutaj wstawiasz listę {_trans::*} do efektu (np. send albo do lore w gui)
send {_trans::*}

 

Odnośnik do komentarza
https://skript.pl/temat/43309-skrypt-na-top-czasu/#findComment-271117
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...