Skocz do zawartości

pyraTop REBORN - skrypt na tworzenie topki


Rekomendowane odpowiedzi

INFO! Skrypt jak i jego opis został początkowo stworzony i opublikowany przez ZiemniaQ'a. Jako że nie zawsze działał poprawnie, a dodatkowo został porzucony to postanowiłem go poprawić i udostępnić. Link do oryginalnego tematu: https://skript.pl/temat/33308-pyratop-skrypt-na-tworzenie-topki/

 

Opis:

  • Skrypt automatycznie posegreguje podaną mu listę zmiennych w kolejności malejącej.

Instalacja:

  • Skrypt zapisujemy w nowym lub istniejącym już pliku tekstowym w końcówką .sk w folderze pluginu Skript, dla przykładu: /plugins/Skript/scripts/pyraTop.sk
  • Następnie należy wyłączyć i włączyć serwer ponownie lub skorzystać z komendy /sk reload <nazwa_pliku>
  • Po wykonaniu jednej z tych czynności skrypt będzie gotowy do użycia globalnie tj. funkcje i zmienne będą działać we wszystkich innych skryptach na serwerze.

Korzystanie:

  • Pierwszym warunkiem jaki należy spełnić jest posiadanie zmiennej w formacie {nazwa::nick_gracza}. W miejscu nazwy może się znajdować cokolwiek: wykopany_stone, zabojstwa, smierci , przepisNaZiemniakiZGrilla itp
  • Gdy już posiadamy naszą zmienną, korzystamy z funkcji, która wygeneruje nam naszą listę z topką:
    set {_lista::*} to createTop("nazwa", 5)

    gdzie:

    • {_lista::*} to zmienna, do której zostanie zapisana topka

    • pierwszym argumentem funkcji jest tekst zawierający nazwę naszej zmiennej

    • drugim argumentem jest liczba, która oznacza ilość miejsc w topce jaka zostanie wygenerowana

  • Powyższy sposób daje nam już gotową listę, którą możemy zapętlić i wyświetlić powiedzmy na chacie, jednak jest ona ograniczona do pewnego formatu, który tutaj objaśnię:
    • Na samej górze skryptu znajdują się trzy opcje - przedrostki i przyrostki dla nicku oraz indeksu. Służą one zmianie wyglądu zwracanej topki, która w czystej postaci wygląda tak:
      [indeks][nick gracza][wynik gracza]
      
      Przykład:
      1PanMaruda100
      2ZiemniaQ98
    • Dzięki tej funkcji możemy dodać odstępy, kolory i całe inne formatowanie pomiędzy poszczególne fragmenty, co da nam domyślnie taki efekt:
      <indexPrefix>[index]<namePrefix>[nick gracza]<nameSuffix>[wynik gracza]
      
      options:
        indexPrefix: &8
        namePrefix: . &5 
        nameSuffix: &7: &d

      fS5NZaZ.png

Zastosowanie:

  • Wygenerowane topki można umieszczać wszędzie i nie ma tu żadnego ograniczenia, mogą to być: listy na chacie, przedmioty w GUI, hologramy, tabliczki, lore, strony internetowe itp.
  • Chciałbym poinformować że nie jest to najwydajniejszy sposób na segregowanie zmiennej, więc w połączeniu ze Skriptem oraz obszerną listą (+200 wyników) ta funkcja może doprowadzić do spadku wydajności tj. znacznego obciążenia procesora. Zalecam używanie jej jednorazowo np. podczas startu serwera lub automatycznie co pewien czas. Moim zdaniem nie powinna być wykonywana na każde życzenie gracza.

Przykłady:

  • Spoiler
    • Skrypt wygeneruje top 3 (lub podaną w argumencie ilość) najlepszych górników, i wyświetli wszystko na chacie osobie która wywołała komendę.
      
      on mine:
      	if {bloki::%player%} is set
      		add 1 to {bloki::%player%}
      	else
      		set {bloki::%player%} to 1
      
      command /topka [<integer=3>]:
        	trigger:
      		set {_top::*} to createTop("bloki", arg 1)
      
      		send "&9&lNajlepsi górnicy:"
      		send {_top::*}
    • Skrypt policzy ilość znaków w każdej wiadomości gracza, a następnie po wpisaniu komendy wygeneruje topkę i wyświetli ją graczowi w GUI (wymagane TuSKe)
      
      on chat:
      	if {chat::%player%} is set:
      		add (length of message) to {chat::%player%}
      	else:
      		set {chat::%player%} to (length of message)
              
      command /topka [<integer=10>]:
        	trigger:
      		set {_top::*} to createTop("chat", arg 1)
      
      		open virtual chest inventory with (rounded up ((size of {_top::*}) / 9)) rows named "Topka chatu" to player
      		loop (size of {_top::*}) times:
      			format gui slot (loop-number - 1) of player with 1 of potato named {_top::%loop-number%}

     

Wymagania:

  • plugin Skript w wersji 2.2 lub wyższej
  • (zalecane) silnik Spigot lub Paper w wersji 1.9 i wyższe

Download:

 

Edytowane przez TakiJakTy
TakiJakTy

Usuwam formatowanie.

Notatka dodana przez TakiJakTy

Odnośnik do komentarza
https://skript.pl/temat/36021-pyratop-reborn-skrypt-na-tworzenie-topki/
Udostępnij na innych stronach

3 minuty temu, PanMaruda napisał:

Skrypt automatycznie posegreguje podaną mu listę zmiennych w kolejności malejącej.

*Ustawi liste graczy na posegregowaną i sformatowaną inną, podaną mu liste wyników

14 minut temu, PanMaruda napisał:

jako że nie zawsze działał poprawnie, a dodatkowo został porzucony

Nie został porzucony... Tylko ZiemniaQ usunął konto :kappalul:.

Ogólnie wiem, że struktura i działanie nie zostało wymyślone przez ciebie, ale lepiej by było, aby tylko segregowało podaną mu listę.(Czyli żeby tylko przesuwało indexy, a nie dodawało ten format iwg).

Odnośnik do komentarza
https://skript.pl/temat/36021-pyratop-reborn-skrypt-na-tworzenie-topki/#findComment-230775
Udostępnij na innych stronach

42 minuty temu, xAxee napisał:

*Ustawi liste graczy na posegregowaną i sformatowaną inną, podaną mu liste wyników

To jest treść z tamtego posta, ja jedynie skopiowałem i edytowałem co trzeba.

42 minuty temu, xAxee napisał:

Nie został porzucony... Tylko ZiemniaQ usunął konto.

Dla mnie jest to równoznaczne, nie ma go = projekt porzucony.

42 minuty temu, xAxee napisał:

Ogólnie wiem, że struktura i działanie nie zostało wymyślone przez ciebie, ale lepiej by było, aby tylko segregowało podaną mu listę.(Czyli żeby tylko przesuwało indexy, a nie dodawało ten format iwg).

No tak, tylko że mamy dwie wartości - nick gracza i wynik, przy czym to nick jest indeksem. 

Nie mogę "poprzesuwać indeksów" (czyt. nicków) bo to nic nie da. Skript i tak je sobie poukłada po swojemu (bodajże alfabetycznie) więc topka nie będzie miała sensu.
Mogę nadpisać indeksy liczbami w kolejności, ale wtedy właśnie stracę nicki graczy.

Może ja nie widzę twojego sposobu myślenia, może jestem zbyt głupi, ale póki co dla mnie pozostają dwa rozwiązania:

  1. tak jak ZiemniaQ - mogę zostawić funkcję która będzie rozbijać topkę na nicki i wartości, potem zwracać je osobno i tak dalej. Tylko że to wprowadza niepotrzebne zamieszanie w kodzie, skrypt się wydłuża, komplikuje, ludzie się gubią. Trzy listy, więcej pętli, większe obciążenie procesora - najlepiej tego unikać.
  2. tak jak zrobiłem ja - zwracam (jedną) posegregowaną listę z gotowym formatowaniem, które przecież użytkownik może sobie prosto dostosować (fakt, będzie jednolite dla wszystkich, ale moim zdaniem to wciąż lepsze). Tym sposobem można wysłać topkę jedną linijką kodu.

 

 

Edit:

Zawsze można też zamienić miejscami indeks z wartością zmiennej i wtedy zamiast {smierci::Maruda} = 10, będzie {smierci::10} = Maruda, tylko że wartości będą się nakładać na siebie, a cała topka zwróci się w odwrotnej kolejności (rosnącej, bo Skript tak sobie ułoży indeksy)

Edytowane przez PanMaruda
Odnośnik do komentarza
https://skript.pl/temat/36021-pyratop-reborn-skrypt-na-tworzenie-topki/#findComment-230778
Udostępnij na innych stronach

Witam, a jak w takim GUI używając Twojej funkcji utworzyć głowki graczy?
Mam tutaj skrypcik, ale działać nie chce
 

command /topkakopania:
	trigger:
		play sound "entity.chicken.egg" with volume 1 at player
		set {_topsmierciog::*} to createTop("smierciog", 9)
		wait 2 tick
		open virtual chest inventory with 5 rows named "&f&lTopka &6&lKiroksiewicz" to player
		wait 2 tick
		set {_smiercigraczy} to 0
		send "%{_topsmierciog::*}%" to player
		loop (size of {_topsmierciog::*}) times:
			add 1 to {_smiercigraczy}
			if {_smiercigraczy} is 1:
				format gui slot (loop-number - 1) of player with (skull of (loop-value) parsed as offline player) named "&6&l%(loop-number)% TOP SMIERCI!!" with lore "%{_topsmierciog::%loop-number%}%"
			else:
				format gui slot (loop-number - 1) of player with (skull of (loop-value) parsed as offline player) named "&6&l%(loop-number)% TOP SMIERCI" with lore "%{_topsmierciog::%loop-number%}%"
		stop	

 

Edytowane przez kiroxtv
Odnośnik do komentarza
https://skript.pl/temat/36021-pyratop-reborn-skrypt-na-tworzenie-topki/#findComment-231428
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ę...