Skiuel 18 Opublikowano 28 czerwca 2021 Udostępnij Opublikowano 28 czerwca 2021 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 Więcej opcji udostępniania...
0 kerpson 551 Opublikowano 28 czerwca 2021 Udostępnij Opublikowano 28 czerwca 2021 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 Więcej opcji udostępniania...
0 Skiuel 18 Opublikowano 28 czerwca 2021 Autor Udostępnij Opublikowano 28 czerwca 2021 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 Więcej opcji udostępniania...
0 kerpson 551 Opublikowano 28 czerwca 2021 Udostępnij Opublikowano 28 czerwca 2021 wykryje gdyż zapisujesz lokalizację początkową podczas wpisania komendy i porównujesz z lokacją gracza co sekundę Odnośnik do komentarza https://skript.pl/temat/49305-gdzie-zapisa%C4%87-zmienna-kt%C3%B3ra-potrzebuje-tylko-na-chwil%C4%99/#findComment-306244 Udostępnij na innych stronach Więcej opcji udostępniania...
Pytanie
Skiuel 18
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