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

Jak stworzyć topkę w autorskim pluginie


Rekomendowane odpowiedzi

Opublikowano

Witam, chcę we własnym pluginie stworzyć TOP 10. Jak to zrobić (co dodać do tej części kodu?):

if(cmd.getName().equalsIgnoreCase("top")){
	User u = User.get(p.getName());
	for(User u1 : UserUtils.getUsers()){
		int l = u1.getKill();
		
	}
	p.sendMessage(ChatColor.GRAY + "----------------------");
	p.sendMessage(ChatColor.BLUE + "TOP 10:");
	p.sendMessage(ChatColor.BLUE + "  1 miejsce");
	p.sendMessage(ChatColor.BLUE + "  2 miejsce");
	p.sendMessage(ChatColor.BLUE + "  3 miejsce");
	p.sendMessage(ChatColor.BLUE + "  4 miejsce");
	p.sendMessage(ChatColor.BLUE + "  5 miejsce");
	p.sendMessage(ChatColor.BLUE + "  6 miejsce");
	p.sendMessage(ChatColor.BLUE + "  7 miejsce");
	p.sendMessage(ChatColor.BLUE + "  8 miejsce");
	p.sendMessage(ChatColor.BLUE + "  9 miejsce");
	p.sendMessage(ChatColor.BLUE + "  10 miejsce");
	p.sendMessage(ChatColor.GRAY + "----------------------");
}
Opublikowano

Wytłumacz mi jedno..

Stworzyłeś obiekt, utilsy i inne bzdety a nie wiesz jak zrobić TOPke? ;_:.

 

Lista, comperator oparty o ranking i masz wynik.

784091427630431250239.png

Regulamin sygnatur

Opublikowano

Jeśli nadal nie rozumiesz co masz zrobić, ba nawet nie potrafisz użyć google w celu analizy co to comperator..

To jakim cudem ty w ogóle stworzyłeś podstawy tego pluginu? :_:

 

Możesz też użyć jakiegoś rakowego sortowania, które oparte jest na zasadzie wstawiania do zmiennej pomocniczej. 

784091427630431250239.png

Regulamin sygnatur

Opublikowano

wtedy musiałby używać tego tree mapa od początku do przechowywania userów, + sortowanie po wartościach zjada ciut więcej, ale to nie powinno być widocznie.

A jak będzie od początku... to nie zadziała, bo jak gracz zmieni ilość punktów to sortowanie w mapce się nie odświeży.

 

 

@OldisPL No widzisz, nie potrafię. Mógłbyś dopisać coś co ułatwiłoby mi dalsze pisanie, bo z tego "Lista, comperator oparty o ranking i masz wynik." to ja ch*** zrozumiałem.

Zaimplementuj do swojej kasy usera interface: "Comparable" (wpisz w google po przykłady)

i wtedy tworzysz listę graczy robisz Collections.sort(taLista) i jest posortowane, i tak za każdym razem.

 

Ale to może lagować jak userów będzie dużo, więc jak w komendzie, to warto robić to async, tylko tutaj trzeba uważać... więc jak jeszcze nie rozumiesz wątków to rób normlanie.

1438614356923701010629.png

 

Opublikowano
        List<User> users = UserUtils.getUsers();
        Collections.sort(users, new Comparator<User>() {
            @Override
            public int compare(User t, User t1) {
                return t1.getKill() - t.getKill();
            }
        });
        int i=1;
        for(User u : users){
            if(i > 2){
                break;
            }
            p.sendMessage("Miejsce: " + i + " " + u);
            i++;
        }

Jeśli nie chcesz nigdzie indziej sortować userów to nie musisz robić osobnej klasy ale w przypadku jak chcesz to robić wkilku miejscach jest to przydatne :)

 

@Czaromirus

 

 

 

Wytłumacz mi jedno..

Stworzyłeś obiekt, utilsy i inne bzdety a nie wiesz jak zrobić TOPke? ;_:.

 

Lista, comperator oparty o ranking i masz wynik.

 
może nie wie co to jest comparator i tyle? to że zna obiekty w jakimś tam stopniu to nie znaczy że musi wszystko umieć...
 
 
 
 

 

wtedy musiałby używać tego tree mapa od początku do przechowywania userów, + sortowanie po wartościach zjada ciut więcej, ale to nie powinno być widocznie.

A jak będzie od początku... to nie zadziała, bo jak gracz zmieni ilość punktów to sortowanie w mapce się nie odświeży.

 

 

@OldisPL No widzisz, nie potrafię. Mógłbyś dopisać coś co ułatwiłoby mi dalsze pisanie, bo z tego "Lista, comperator oparty o ranking i masz wynik." to ja ch*** zrozumiałem.

Zaimplementuj do swojej kasy usera interface: "Comparable" (wpisz w google po przykłady)

i wtedy tworzysz listę graczy robisz Collections.sort(taLista) i jest posortowane, i tak za każdym razem.

 

Ale to może lagować jak userów będzie dużo, więc jak w komendzie, to warto robić to async, tylko tutaj trzeba uważać... więc jak jeszcze nie rozumiesz wątków to rób normlanie.

 

 

wtedy musiałby używać tego tree mapa od początku do przechowywania userów, + sortowanie po wartościach zjada ciut więcej, ale to nie powinno być widocznie.

A jak będzie od początku... to nie zadziała, bo jak gracz zmieni ilość punktów to sortowanie w mapce się nie odświeży.

 

 

@OldisPL No widzisz, nie potrafię. Mógłbyś dopisać coś co ułatwiłoby mi dalsze pisanie, bo z tego "Lista, comperator oparty o ranking i masz wynik." to ja ch*** zrozumiałem.

Zaimplementuj do swojej kasy usera interface: "Comparable" (wpisz w google po przykłady)

i wtedy tworzysz listę graczy robisz Collections.sort(taLista) i jest posortowane, i tak za każdym razem.

 

Ale to może lagować jak userów będzie dużo, więc jak w komendzie, to warto robić to async, tylko tutaj trzeba uważać... więc jak jeszcze nie rozumiesz wątków to rób normlanie.

 

 

hmm a zamiast na chama w komendzie sortować nie lepiej zrobić taska który co 5sekund np albo co ileś tam sam to sortuje a my tylko sie odwołujemy w komendzie do tej listy? (tak wiem w moim przykładzie nie robiłem tego)

Co ja tutaj robie...

Opublikowano

 

        List<User> users = UserUtils.getUsers();
        Collections.sort(users, new Comparator<User>() {
            @Override
            public int compare(User t, User t1) {
                return t1.getKill() - t.getKill();
            }
        });
        int i=1;
        for(User u : users){
            if(i > 2){
                break;
            }
            p.sendMessage("Miejsce: " + i + " " + u);
            i++;
        }

Jeśli nie chcesz nigdzie indziej sortować userów to nie musisz robić osobnej klasy ale w przypadku jak chcesz to robić wkilku miejscach jest to przydatne :)

 

@Czaromirus

 

 

Wytłumacz mi jedno..

Stworzyłeś obiekt, utilsy i inne bzdety a nie wiesz jak zrobić TOPke? ;_:.

 

Lista, comperator oparty o ranking i masz wynik.

może nie wie co to jest comparator i tyle? to że zna obiekty w jakimś tam stopniu to nie znaczy że musi wszystko umieć...

 

 

@GotoFinal

 

 

 

wtedy musiałby używać tego tree mapa od początku do przechowywania userów, + sortowanie po wartościach zjada ciut więcej, ale to nie powinno być widocznie.

A jak będzie od początku... to nie zadziała, bo jak gracz zmieni ilość punktów to sortowanie w mapce się nie odświeży.

 

@OldisPL No widzisz, nie potrafię. Mógłbyś dopisać coś co ułatwiłoby mi dalsze pisanie, bo z tego "Lista, comperator oparty o ranking i masz wynik." to ja ch*** zrozumiałem.

Zaimplementuj do swojej kasy usera interface: "Comparable" (wpisz w google po przykłady)

i wtedy tworzysz listę graczy robisz Collections.sort(taLista) i jest posortowane, i tak za każdym razem.

 

Ale to może lagować jak userów będzie dużo, więc jak w komendzie, to warto robić to async, tylko tutaj trzeba uważać... więc jak jeszcze nie rozumiesz wątków to rób normlanie.

 

wtedy musiałby używać tego tree mapa od początku do przechowywania userów, + sortowanie po wartościach zjada ciut więcej, ale to nie powinno być widocznie.

A jak będzie od początku... to nie zadziała, bo jak gracz zmieni ilość punktów to sortowanie w mapce się nie odświeży.

 

@OldisPL No widzisz, nie potrafię. Mógłbyś dopisać coś co ułatwiłoby mi dalsze pisanie, bo z tego "Lista, comperator oparty o ranking i masz wynik." to ja ch*** zrozumiałem.

Zaimplementuj do swojej kasy usera interface: "Comparable" (wpisz w google po przykłady)

i wtedy tworzysz listę graczy robisz Collections.sort(taLista) i jest posortowane, i tak za każdym razem.

 

Ale to może lagować jak userów będzie dużo, więc jak w komendzie, to warto robić to async, tylko tutaj trzeba uważać... więc jak jeszcze nie rozumiesz wątków to rób normlanie.

hmm a zamiast na chama w komendzie sortować nie lepiej zrobić taska który co 5sekund np albo co ileś tam sam to sortuje a my tylko sie odwołujemy w komendzie do tej listy? (tak wiem w moim przykładzie nie robiłem tego)

Nie lepiej sortować po każdej zmianie w topce asynchronicznie a w komendzie odwoływać się do posortowanej listy?
Opublikowano

 

        List<User> users = UserUtils.getUsers();
        Collections.sort(users, new Comparator<User>() {
            @Override
            public int compare(User t, User t1) {
                return t1.getKill() - t.getKill();
            }
        });
        int i=1;
        for(User u : users){
            if(i > 2){
                break;
            }
            p.sendMessage("Miejsce: " + i + " " + u);
            i++;
        }

Jeśli nie chcesz nigdzie indziej sortować userów to nie musisz robić osobnej klasy ale w przypadku jak chcesz to robić wkilku miejscach jest to przydatne :)

 

@Czaromirus

 

 

Wytłumacz mi jedno..

Stworzyłeś obiekt, utilsy i inne bzdety a nie wiesz jak zrobić TOPke? ;_:.

 

Lista, comperator oparty o ranking i masz wynik.

może nie wie co to jest comparator i tyle? to że zna obiekty w jakimś tam stopniu to nie znaczy że musi wszystko umieć...

 

 

@GotoFinal

 

 

 

wtedy musiałby używać tego tree mapa od początku do przechowywania userów, + sortowanie po wartościach zjada ciut więcej, ale to nie powinno być widocznie.

A jak będzie od początku... to nie zadziała, bo jak gracz zmieni ilość punktów to sortowanie w mapce się nie odświeży.

 

@OldisPL No widzisz, nie potrafię. Mógłbyś dopisać coś co ułatwiłoby mi dalsze pisanie, bo z tego "Lista, comperator oparty o ranking i masz wynik." to ja ch*** zrozumiałem.

Zaimplementuj do swojej kasy usera interface: "Comparable" (wpisz w google po przykłady)

i wtedy tworzysz listę graczy robisz Collections.sort(taLista) i jest posortowane, i tak za każdym razem.

 

Ale to może lagować jak userów będzie dużo, więc jak w komendzie, to warto robić to async, tylko tutaj trzeba uważać... więc jak jeszcze nie rozumiesz wątków to rób normlanie.

 

wtedy musiałby używać tego tree mapa od początku do przechowywania userów, + sortowanie po wartościach zjada ciut więcej, ale to nie powinno być widocznie.

A jak będzie od początku... to nie zadziała, bo jak gracz zmieni ilość punktów to sortowanie w mapce się nie odświeży.

 

@OldisPL No widzisz, nie potrafię. Mógłbyś dopisać coś co ułatwiłoby mi dalsze pisanie, bo z tego "Lista, comperator oparty o ranking i masz wynik." to ja ch*** zrozumiałem.

Zaimplementuj do swojej kasy usera interface: "Comparable" (wpisz w google po przykłady)

i wtedy tworzysz listę graczy robisz Collections.sort(taLista) i jest posortowane, i tak za każdym razem.

 

Ale to może lagować jak userów będzie dużo, więc jak w komendzie, to warto robić to async, tylko tutaj trzeba uważać... więc jak jeszcze nie rozumiesz wątków to rób normlanie.

hmm a zamiast na chama w komendzie sortować nie lepiej zrobić taska który co 5sekund np albo co ileś tam sam to sortuje a my tylko sie odwołujemy w komendzie do tej listy? (tak wiem w moim przykładzie nie robiłem tego)

Nie lepiej sortować po każdej zmianie w topce asynchronicznie a w komendzie odwoływać się do posortowanej listy?

 

 

 

Nie lepiej bo przykładowo ma 200graczy na serwie i nagle padnie u niego 50 osób i odpali mu sie 50 tasków, ch** że są asyncem i tak zabierają zasoby ram/procek a odpalenie 50 już coś zabierze lepiej odpalić Jednego taska który chodzi cały czas jest "mniej kosztowny" niż cały czas nowy przy updatowaniu jego zmienny

Co ja tutaj robie...

Opublikowano

@bartzz

@dekros123

Ja tylko podałem proste rozwiązanie bo autor tematu i tak dopiero się uczy więc nie ogarnie tego od razu.

 

Zamulanie cały czas 1 wątkiem który będzie sporo czasu pracował... no nie wiem.

Do komendy to bym stworzył leniwą i asynchorniczną wartość, kiedy wpisujesz komendę od topki to jeśli już jest... wyświetla, jak nie, odpala się task async który generuje topkę, zapisuje w jakiejś zmiennej, i wyświetla...

I miał też zmienną np zapisującą ilość zmian w punktach (mniej lub bardziej sprytnie) i jak przekroczy jakiś próg i ktoś wpiszę komendę... znowu wygeneruje się nowa topka w async.

 

Ale... jak by to miało działać cały czas, np tablista... to warto pomyśleć o własnej kolekcji - podobnej do Array list, tylko wymagałoby to też stworzenia specjalnego obiektu.

A działanie jest proste... kiedy gracz X zdobywa Y pkt, pobiera się z tego specjalnego obiektu jego aktualną pozycje w rankingu, wtedy porównujemy obiekt nad i pod jego pozycją, szukając zmian, jak coś się zmieniło, to zamieniamy je miejscami i ręcznie sortujemy.

 

O coś takiego: :D

https://gist.github.com/GotoFinal/b1e2fd110678f455882782d05d13a290

I przykład na ideone: http://ideone.com/hl1TEj (kod wygląda jak g****o, ale musiałem się zmieścić w limicie znaków :D)

 

Działa chyba całkiem sprawnie, tylko stety/niestety wymaga używania tej metody .update(), ale za to jej używanie jest dosyć proste,dodając obiekt do mapki otrzymujemy coś w rodzaju jego kontrolera, gdzie właśnie jest metoda .update .getObject oraz .getPosition().

No I są fajne gotowe metody do tworzenia stron, topek etc :D te getRange itd.

Po wklejeniu kodu z gista może wymagać biblioteki fastutils, ale spokojnie mozna usunąć te metody które tego używają.

1438614356923701010629.png

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...