Odstępy czasowe
Tworzenie cooldownów polegających na użyciu periodicalu nie są opłacalne, wręcz są one zagrażające dla wydajności serwera i bardzo go obciążają zakładając dużą liczbę graczy na serwerze, dlatego aby zapobiec temu i dodatkowo napisać działający cooldown dla komend, wydarzeń i efektów należy wykorzystać zmienne i wyrażenia. Można również pomóc sobie skryptem AxCooldown który służy do zarządzania cooldownem autorstwa xAxee.
Spis treści
Cooldown w kodzie
Na początku należy napisać, co ma wywoływać kod. Przykład rzucanego TNT z cooldownem:
on rightclick on tnt: if player's tool is tnt of unbreaking 10 named "&cRzucane TNT":
Zdarzenie on rightclick: wywołuje się wtedy, kiedy gracz naciśnie prawy przycisk myszy. Skript sprawdza, czy gracz trzyma TNT o nazwie &cRzucane TNT. Teraz należy użyć dwóch zmiennych:
- zmiennej tymczasowej
- zmiennej przypisanej do gracza
Zmienna tymczasowa pozwoli nam na określenie ile upłynęło czasu od ostatniego rzutu TNT i czasu obecnego określanego wyrażeniem %now%. Zmienne tymczasowe nie obciążają serwera, ponieważ zostają one automatycznie usuwane po zakończeniu sekcji kodu.
set {_czas} to difference between {tntrzut::%player%} and now if {_czas} isn't less than 10 seconds: #kod set {tntrzut::%player%} to now else: send "Poczekaj 10 sekund"
Jeżeli zmienna tymczasowa nie jest mniejsza niż <timespan>, w tym przypadku 10 sekund to kod powinien się wykonać. W innym przypadku gracz otrzyma wiadomość "Poczekaj 10 sekund". Po wykonaniu części kodu ustawiamy zmienną {tntrzut::%player%} na %now% czyli teraz.
Cooldown w komendzie
Skript od pewnej wersji posiada wspomaganie do cooldownów w komendach. Aby go użyć, starczy dodać w sekcji komendy cooldown: <timespan> możemy również użyć cooldown message: <text>, które wyświetli wiadomość, gdy cooldown nie minął.
np:
command /prezent [<text>]: cooldown: 1 day cooldown message: Jeszcze nie mozesz uzyc tej komendy trigger: add (diamond or iron ingot or gold ingot) to player send "&7Odebrano"
AxCooldown - Opis funkcji
Skrypt posiada wiele funkcji które ułatwiaja korzystanie z cooldownu. Wszystkie funkcje:
Funkcjia | Opis | Typ zwracanej wartości | Przykład zwracanej wartości |
---|---|---|---|
createCooldown(%string%, %time span%)
|
Tworzy cooldown | --- | --- |
deleteCooldown(%string%)
|
Usuwa cooldown | --- | --- |
setCooldown(%player%, %boolean%)
|
Ustawia graczowi cooldown na true / false | --- | --- |
getCooldown(%player%, %string%)
|
Zwraca czy cooldown gracza już minął | boolean | true
|
getCooldownBoolean(%player%, %string%)
|
Zwraca czy cooldown gracza już minął | boolean | true
|
getCooldownDate(%player%, %string%)
|
Zwraca date wygaśnięcia cooldownu | date | 28.12.19 15:00
|
getCooldownTime(%player%, %string%)
|
Zwraca czas wygaśnięcia cooldownu | time span | 12 second
|
getCooldownText(%player%, %string%)
|
Zwraca przetłumaczony czas wygaśnięcia cooldownu | Text | 12 sekund
|
AxCooldown - Wykorzystanie
Wzór ogólny:
on load: createCooldown(<cooldown name>, <time>) <zdarzenie/komenda/interwał>: if getCooldown(<player>, <cooldown name>) is true: setCooldown(<player>, <cooldown name>) #kod else: send getCooldownText(<player>, <cooldown name>)
Przykład i opisanie
Napoczątku musimy stworzyć nasz cooldown, najlepiej w evencie on load:
on load: createCooldown("Komendy", 3 second)
Nastepnie w naszym kodzie musimy sprawdzić czy Cooldown juz minął:
on command: if getCooldown(player, "Komendy") is true:
Następnie ustawiamy cooldown gracza, i wysyłamy wiadomość gdy nasza funkcja zwróciła wartość false
on command: if getCooldown(player, "Komendy") is true: setCooldown(player, "Komendy") else: cancel event send "&7Nie mozesz uzyc jeszcze komendy przez: &c%getCooldownText(player, "Komendy")"%"
Całość powinna wyglądać tak:
on load: createCooldown("Komendy", 5 second) on command: if getCooldown(player, "Komendy") is true: setCooldown(player, "Komendy") else: cancel event send "&7Nie mozesz uzyc jeszcze komendy przez: &c%getCooldownText(player, "Komendy")"%"