Skocz do zawartości
  • 0

Scoreboard


kerpson

Pytanie

Siema, zrobiłem Scoreboard na pakietach, i mam pytanie. Czy będzie on dosyć wydajnie działać ? (task działa co 15sek), czy macie jakieś inne porady do zastosowania tego

 

 

Edytowane przez HeezQ
HeezQ

Zmieniam edytor na code.skript.pl

Notatka dodana przez HeezQ

Odnośnik do komentarza
Udostępnij na innych stronach

4 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Wysyłaj to asynchronicznie, zastanów sie czy zmiennej server nie lepiej dostarczyc w parametrze i czy nie da rady jakos niektorych zmiennych zainicjalizowac tylko raz, a nie tworzyc nowe za kazdym razem gdy wywołujesz komende, np. to:

        Scoreboard board = new Scoreboard();
        ScoreboardObjective obj = board.registerObjective(MessageUtil.colored("&9SAVE&FHC&8.EU"), IScoreboardCriteria.b);

i nie widze aby bylo tutaj cos unikalnego jak uzywanie nicku gracza w danym scoreboardzie, wiec ten caly scoreboard i pakiety moglbys tworzyc tylko raz i wysylac do kazdego gracza, zamiast za kazdym razem tworzyc aby wyslac do jednego gracza

 

tak samo remove i create (nw czy da sie to jakos zastapic bo nigdy nie uzywalem sidebara na pakietach) ale wydaje mi sie ze powinno jakos inaczej sie to update'owac, bo przez to moze skakac jakos dziwnie ten sidebar (bynajmniej ja tak podobnie mialem w proxy)

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
14 minut temu, yooniks napisał:

Wysyłaj to asynchronicznie, zastanów sie czy zmiennej server nie lepiej dostarczyc w parametrze i czy nie da rady jakos niektorych zmiennych zainicjalizowac tylko raz, a nie tworzyc nowe za kazdym razem gdy wywołujesz komende, np. to:


        Scoreboard board = new Scoreboard();
        ScoreboardObjective obj = board.registerObjective(MessageUtil.colored("&9SAVE&FHC&8.EU"), IScoreboardCriteria.b);

i nie widze aby bylo tutaj cos unikalnego jak uzywanie nicku gracza w danym scoreboardzie, wiec ten caly scoreboard i pakiety moglbys tworzyc tylko raz i wysylac do kazdego gracza, zamiast za kazdym razem tworzyc aby wyslac do jednego gracza

 

tak samo remove i create (nw czy da sie to jakos zastapic bo nigdy nie uzywalem sidebara na pakietach) ale wydaje mi sie ze powinno jakos inaczej sie to update'owac, bo przez to moze skakac jakos dziwnie ten sidebar (bynajmniej ja tak podobnie mialem w proxy)

Dzk, a co do tego, że skacze, to nie, wszystko działa prawidłowo, a scoreboard wysyłam do wszystkich graczy.

Masz rację, mógłbym go robić i tylko raz wysyłać, lecz i tak za każdym razem musiałbym edytować score dla niego, ponieważ cały czas zmienia się liczba graczy na drugim serwerze

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
10 minut temu, HotAngel2K17 napisał:

Dzk, a co do tego, że skacze, to nie, wszystko działa prawidłowo, a scoreboard wysyłam do wszystkich graczy.

Masz rację, mógłbym go robić i tylko raz wysyłać, lecz i tak za każdym razem musiałbym edytować score dla niego, ponieważ cały czas zmienia się liczba graczy na drugim serwerze

no niby tak, ale zakladam ze robisz cos takiego:

for (Player player : players) {
	packetSender.sendPacket(player);
}

i zamiast tego mozesz zrobic

packetSender.sendPacket(players);
    private void sendPacket(List<Player> players) {
        Scoreboard board = new Scoreboard();
        ScoreboardObjective obj = board.registerObjective(MessageUtil.colored("&9SAVE&FHC&8.EU"), IScoreboardCriteria.b);
       
        PacketPlayOutScoreboardObjective removepacket = new PacketPlayOutScoreboardObjective(obj, 1);
        PacketPlayOutScoreboardObjective createpacket = new PacketPlayOutScoreboardObjective(obj, 0);
        PacketPlayOutScoreboardDisplayObjective display = new PacketPlayOutScoreboardDisplayObjective(1, obj);
       
        Server s = Server.get("megahc");
        obj.setDisplayName(MessageUtil.colored("&9SAVE&FHC&8.EU"));
        ScoreboardScore s1 = new ScoreboardScore(board, obj, " ");
        ScoreboardScore s2 = new ScoreboardScore(board, obj, MessageUtil.colored(" &7Serwer: &eMegaHC"));
        ScoreboardScore s3 = new ScoreboardScore(board, obj, MessageUtil.colored(" &7Online graczy: &e" + s.getCount()));
        ScoreboardScore s4 = new ScoreboardScore(board, obj, MessageUtil.colored(" &7Status serwera: " + (s.getStatus() ? "&aWlaczony" : "&cWylaczony")));
        ScoreboardScore s5 = new ScoreboardScore(board, obj, " ");
       
        s2.setScore(-2);
        s3.setScore(-3);
        s4.setScore(-4);
       
        PacketPlayOutScoreboardScore p1 = new PacketPlayOutScoreboardScore(s1);
        PacketPlayOutScoreboardScore p2 = new PacketPlayOutScoreboardScore(s2);
        PacketPlayOutScoreboardScore p3 = new PacketPlayOutScoreboardScore(s3);
        PacketPlayOutScoreboardScore p4 = new PacketPlayOutScoreboardScore(s4);
        PacketPlayOutScoreboardScore p5 = new PacketPlayOutScoreboardScore(s5);
       
        players.forEach(p -> {
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(removepacket);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(createpacket);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(display);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(p1);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(p2);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(p3);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(p4);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(p5);
        }
                        
    }

i juz unikasz zbednego tworzenia obiektow dla kazdego oddzielnie skoro i tak wysylasz to samo

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
2 minuty temu, yooniks napisał:

no niby tak, ale zakladam ze robisz cos takiego:


for (Player player : players) {
	packetSender.sendPacket(player);
}

i zamiast tego mozesz zrobic


packetSender.sendPacket(players);

    private void sendPacket(List<Player> players) {
        Scoreboard board = new Scoreboard();
        ScoreboardObjective obj = board.registerObjective(MessageUtil.colored("&9SAVE&FHC&8.EU"), IScoreboardCriteria.b);
       
        PacketPlayOutScoreboardObjective removepacket = new PacketPlayOutScoreboardObjective(obj, 1);
        PacketPlayOutScoreboardObjective createpacket = new PacketPlayOutScoreboardObjective(obj, 0);
        PacketPlayOutScoreboardDisplayObjective display = new PacketPlayOutScoreboardDisplayObjective(1, obj);
       
        Server s = Server.get("megahc");
        obj.setDisplayName(MessageUtil.colored("&9SAVE&FHC&8.EU"));
        ScoreboardScore s1 = new ScoreboardScore(board, obj, " ");
        ScoreboardScore s2 = new ScoreboardScore(board, obj, MessageUtil.colored(" &7Serwer: &eMegaHC"));
        ScoreboardScore s3 = new ScoreboardScore(board, obj, MessageUtil.colored(" &7Online graczy: &e" + s.getCount()));
        ScoreboardScore s4 = new ScoreboardScore(board, obj, MessageUtil.colored(" &7Status serwera: " + (s.getStatus() ? "&aWlaczony" : "&cWylaczony")));
        ScoreboardScore s5 = new ScoreboardScore(board, obj, " ");
       
        s2.setScore(-2);
        s3.setScore(-3);
        s4.setScore(-4);
       
        PacketPlayOutScoreboardScore p1 = new PacketPlayOutScoreboardScore(s1);
        PacketPlayOutScoreboardScore p2 = new PacketPlayOutScoreboardScore(s2);
        PacketPlayOutScoreboardScore p3 = new PacketPlayOutScoreboardScore(s3);
        PacketPlayOutScoreboardScore p4 = new PacketPlayOutScoreboardScore(s4);
        PacketPlayOutScoreboardScore p5 = new PacketPlayOutScoreboardScore(s5);
       
        players.forEach(p -> {
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(removepacket);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(createpacket);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(display);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(p1);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(p2);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(p3);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(p4);
        	((CraftPlayer) p).getHandle().playerConnection.sendPacket(p5);
        }
                        
    }

i juz unikasz zbednego tworzenia obiektow dla kazdego oddzielnie skoro i tak wysylasz to samo

no w sumie racja. Z góry bardzo ci dziękuję za poradę, na przyszłość zapamiętam

Odnośnik do komentarza
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ę...