kerpson 549 Opublikowano 20 lipca 2019 Udostępnij Opublikowano 20 lipca 2019 (edytowane) 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 20 lipca 2019 przez HeezQ Zmieniam edytor na code.skript.pl Notatka dodana przez HeezQ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 yooniks 347 Opublikowano 20 lipca 2019 Udostępnij Opublikowano 20 lipca 2019 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) kerpson 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 kerpson 549 Opublikowano 20 lipca 2019 Autor Udostępnij Opublikowano 20 lipca 2019 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 Więcej opcji udostępniania...
0 yooniks 347 Opublikowano 20 lipca 2019 Udostępnij Opublikowano 20 lipca 2019 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 Więcej opcji udostępniania...
0 kerpson 549 Opublikowano 20 lipca 2019 Autor Udostępnij Opublikowano 20 lipca 2019 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 Więcej opcji udostępniania...
Pytanie
kerpson 549
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
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