Odstępy czasowe

Z wiki.skript.pl
Przejdź do nawigacji Przejdź do wyszukiwania

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.

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")"%"