Skocz do zawartości
  • 0

Nie działający skrypt na topki


Pytanie

AO2KhuN.png

Sam w sobie skrypt dziala jednak zapetla jedna wartosc oraz zamiast nickow jest <none>

Kod:

on load:
    set {symbol} to " ---> "	
function createTop(t: string, i: integer) :: strings:
    set {_offlinePlayers::*} to all offline players
    loop {_offlinePlayers::*}:
        if {%{_t}%::%loop-value%} is set:
            add {%{_t}%::%loop-value%} to {_top::*}
            add loop-value to {_players::*}
    loop {_i} times:
        set {_max} to max({_top::*})
        loop {_top::*}:
            if loop-value-2 = {_max}:
                set {_index} to loop-index
                delete {_top::%{_index}%}
        add "%{_players::%{_index}%}%%{symbol}%%{_max}%" to {_return::*}
        delete {_players::%{_index}%}
    return {_return::*}
function getTop(t: string, list: strings) :: strings:
    loop {_list::*}:
        set {_split::*} to loop-value split at {symbol}
        add {_split::1} to {_players::*}
        add {_split::2} to {_top::*}
    if {_t} = "players":
        return {_players::*}
    else:
        return {_top::*}
on inventory click:
    if "%inventory name of player's current inventory%" is "&8[ &6Topki Serwerowe &8]":
        cancel event		

options:
	format: &7{TOP}. &f{NICK} &8» &6{VALUE}
command /top [<text>]:
	trigger:
		open chest with 1 rows named "&8[ &6Topki Serwerowe &8]" to player
		set {_topki::*} to createTop("coins", 8)
		set {_i} to diamond named "&eTop posiadanych coinsow"
		set {_line} to 1
		loop {_topki::*}:
			set {_list::*} to loop-value split at " ---> "
			set {_f} to "{@format}"
			replace all "{TOP}" with "%loop-index%" in {_f}
			replace all "{NICK}" with "%{_list::1}%" in {_f}
			replace all "{VALUE}" with "%{_list::2}%" in {_f}
			set line {_line} of lore of {_i} to colored {_f}
			add 1 to {_line}
		set player's current inventory's slot 0 to {_i}

Wersja skript: 2.2

Edytowane przez HeezQ
HeezQ

Wrzucam zdjęcie w link bezpośredni

Notatka dodana przez HeezQ

Odnośnik do komentarza
https://skript.pl/temat/34071-nie-dzia%C5%82aj%C4%85cy-skrypt-na-topki/
Udostępnij na innych stronach

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
Gość ZiemniaQ

Jeżeli robisz sobie to ręcznie to ta druga funkcja jest zbędna.

loop {_topki::*}:
	set {_list::*} to loop-value split at " ---> "

 

Ogólnie co do błędu to masz tylko jednego gracza na serwerze ze zmienną więc jest tylko jeden wynik. Dalsze wyniki topki będą wynosić null (none). Powtarzający się wynik '91970' związany jest ze zmienną, która nie jest czyszczona w kodzie funkcji, postaram się to poprawić w najbliższym czasie i opublikować kolejną wersję skryptu.

W twoim przypadku wystarczy sprawdzać czy dany wynik topki istnieje i jeżeli nie to wyświetlać jakiś tekst o braku:

on load:
    set {symbol} to " ---> "	
function createTop(t: string, i: integer) :: strings:
    set {_offlinePlayers::*} to all offline players
    loop {_offlinePlayers::*}:
        if {%{_t}%::%loop-value%} is set:
            add {%{_t}%::%loop-value%} to {_top::*}
            add loop-value to {_players::*}
    loop {_i} times:
        set {_max} to max({_top::*})
        loop {_top::*}:
            if loop-value-2 = {_max}:
                set {_index} to loop-index
                delete {_top::%{_index}%}
        add "%{_players::%{_index}%}%%{symbol}%%{_max}%" to {_return::*}
        delete {_players::%{_index}%}
    return {_return::*}

on inventory click:
    if "%inventory name of player's current inventory%" is "&8[ &6Topki Serwerowe &8]":
        cancel event		

options:
	format: &7{TOP}. &f{NICK} &8» &6{VALUE}
command /top [<text>]:
	trigger:
		open chest with 1 rows named "&8[ &6Topki Serwerowe &8]" to player
		set {_topki::*} to createTop("coins", 8)
		set {_i} to diamond named "&eTop posiadanych coinsow"
		loop {_topki::*}:
			set {_list::*} to loop-value split at " ---> "
			set {_f} to "{@format}"
			replace all "{TOP}" with "%loop-index%" in {_f}
  			if {_list::1} is set: 
				replace all "{NICK}" with "%{_list::1}%" in {_f}
				replace all "{VALUE}" with "%{_list::2}%" in {_f}
			else:
				replace all "{NICK}" with "Brak" in {_f}
				replace all "{VALUE}" with "Wyników" in {_f}
  			delete {_list::*} #Tak na wszelki wypadek
			set line (loop-index parsed as integer) of lore of {_i} to colored {_f} #numer pętli oszczędzi ci dodatkowych zmiennych i liczenia linijek
		set player's current inventory's slot 0 to {_i}

To powinno zadziałać.

Odnośnik do komentarza
https://skript.pl/temat/34071-nie-dzia%C5%82aj%C4%85cy-skrypt-na-topki/#findComment-219375
Udostępnij na innych stronach

  • 0
12 godzin temu, LuckyPotato napisał:

Jeżeli robisz sobie to ręcznie to ta druga funkcja jest zbędna.


loop {_topki::*}:
	set {_list::*} to loop-value split at " ---> "

 

Ogólnie co do błędu to masz tylko jednego gracza na serwerze ze zmienną więc jest tylko jeden wynik. Dalsze wyniki topki będą wynosić null (none). Powtarzający się wynik '91970' związany jest ze zmienną, która nie jest czyszczona w kodzie funkcji, postaram się to poprawić w najbliższym czasie i opublikować kolejną wersję skryptu.

W twoim przypadku wystarczy sprawdzać czy dany wynik topki istnieje i jeżeli nie to wyświetlać jakiś tekst o braku:


on load:
    set {symbol} to " ---> "	
function createTop(t: string, i: integer) :: strings:
    set {_offlinePlayers::*} to all offline players
    loop {_offlinePlayers::*}:
        if {%{_t}%::%loop-value%} is set:
            add {%{_t}%::%loop-value%} to {_top::*}
            add loop-value to {_players::*}
    loop {_i} times:
        set {_max} to max({_top::*})
        loop {_top::*}:
            if loop-value-2 = {_max}:
                set {_index} to loop-index
                delete {_top::%{_index}%}
        add "%{_players::%{_index}%}%%{symbol}%%{_max}%" to {_return::*}
        delete {_players::%{_index}%}
    return {_return::*}

on inventory click:
    if "%inventory name of player's current inventory%" is "&8[ &6Topki Serwerowe &8]":
        cancel event		

options:
	format: &7{TOP}. &f{NICK} &8» &6{VALUE}
command /top [<text>]:
	trigger:
		open chest with 1 rows named "&8[ &6Topki Serwerowe &8]" to player
		set {_topki::*} to createTop("coins", 8)
		set {_i} to diamond named "&eTop posiadanych coinsow"
		loop {_topki::*}:
			set {_list::*} to loop-value split at " ---> "
			set {_f} to "{@format}"
			replace all "{TOP}" with "%loop-index%" in {_f}
  			if {_list::1} is set: 
				replace all "{NICK}" with "%{_list::1}%" in {_f}
				replace all "{VALUE}" with "%{_list::2}%" in {_f}
			else:
				replace all "{NICK}" with "Brak" in {_f}
				replace all "{VALUE}" with "Wyników" in {_f}
  			delete {_list::*} #Tak na wszelki wypadek
			set line (loop-index parsed as integer) of lore of {_i} to colored {_f} #numer pętli oszczędzi ci dodatkowych zmiennych i liczenia linijek
		set player's current inventory's slot 0 to {_i}

To powinno zadziałać.

tak samo jest

Odnośnik do komentarza
https://skript.pl/temat/34071-nie-dzia%C5%82aj%C4%85cy-skrypt-na-topki/#findComment-219396
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
Odpowiedz na pytanie...

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