Skocz do zawartości
  • 0

Gdzie zapisać zmienna która potrzebuje tylko na chwilę?


Pytanie

Załóżmy że robię komendę tpa. Gracz wpisuje tpa i teraz przez 5 sekund nie może się ruszać. Więc w evencie any move muszę sprawdzić czy gracz przypadkiem się nie rusza. Jak to zrobić aby było to wydajne  i ekonomiczne? 

Odnośnik do komentarza
https://skript.pl/temat/49305-gdzie-zapisa%C4%87-zmienna-kt%C3%B3ra-potrzebuje-tylko-na-chwil%C4%99/
Udostępnij na innych stronach

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Sprawdzanie czy gracz się rusza powinno być asynchroniczne(asynchroniczne zadanie), to poprawi wydajność.

Można to niby sprawdzać również w tasku, ale jak kto woli.

Sposobów jest kilka, ale ja zawsze używam jednego.

W pluginie funnyguilds jest to fajnie zrobione:

cache.setTeleportation(Bukkit.getScheduler().runTaskTimer(FunnyGuilds.getInstance(), () -> {
            if (!player.isOnline()) {
                cache.getTeleportation().cancel();
                cache.setTeleportation(null);
                return;
            }
            
            if (!LocationUtils.equals(player.getLocation(), before)) {
                cache.getTeleportation().cancel();
                player.sendMessage(messages.baseMove);
                cache.setTeleportation(null);
                player.getInventory().addItem(items);
                return;
            }

            if (timeCounter.getAndIncrement() > time) {
                cache.getTeleportation().cancel();
                player.sendMessage(messages.baseTeleport);
                player.teleport(guild.getHome());
                cache.setTeleportation(null);
            }
        }, 0L, 20L));

Czyli zwykły task co sekundę, który będzie się powtarzał przez ilość sekund, za każdym razem sprawdzenie czy gracz jest online i czy się nie ruszył, a jak odczeka czas to go tepnie na home

Odnośnik do komentarza
https://skript.pl/temat/49305-gdzie-zapisa%C4%87-zmienna-kt%C3%B3ra-potrzebuje-tylko-na-chwil%C4%99/#findComment-306236
Udostępnij na innych stronach

  • 0
56 minut temu, kerpson napisał:

Sprawdzanie czy gracz się rusza powinno być asynchroniczne(asynchroniczne zadanie), to poprawi wydajność.

Można to niby sprawdzać również w tasku, ale jak kto woli.

Sposobów jest kilka, ale ja zawsze używam jednego.

W pluginie funnyguilds jest to fajnie zrobione:


cache.setTeleportation(Bukkit.getScheduler().runTaskTimer(FunnyGuilds.getInstance(), () -> {
            if (!player.isOnline()) {
                cache.getTeleportation().cancel();
                cache.setTeleportation(null);
                return;
            }
            
            if (!LocationUtils.equals(player.getLocation(), before)) {
                cache.getTeleportation().cancel();
                player.sendMessage(messages.baseMove);
                cache.setTeleportation(null);
                player.getInventory().addItem(items);
                return;
            }

            if (timeCounter.getAndIncrement() > time) {
                cache.getTeleportation().cancel();
                player.sendMessage(messages.baseTeleport);
                player.teleport(guild.getHome());
                cache.setTeleportation(null);
            }
        }, 0L, 20L));

Czyli zwykły task co sekundę, który będzie się powtarzał przez ilość sekund, za każdym razem sprawdzenie czy gracz jest online i czy się nie ruszył, a jak odczeka czas to go tepnie na home

Skoro sprawdza co sekunde to nie będzie błędu że jak się ruszy w pewnym momencie to nie wykryje? 

Odnośnik do komentarza
https://skript.pl/temat/49305-gdzie-zapisa%C4%87-zmienna-kt%C3%B3ra-potrzebuje-tylko-na-chwil%C4%99/#findComment-306242
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ę...