Skocz do zawartości
  • 0

Problem z cooldown (wiadomoscia)


Pytanie

command /losuj:
    cooldown: 1 seconds
    trigger:
        chance of 75%:
        send "&aotrzymales nagrode"


jak zrobic zeby w tym skrypcie ktory jest u gory pisalo ze musisz odczekac np 10s zeby uzyc tego ponownie

GRIERIOR

Formatuję kod.

Notatka dodana przez GRIERIOR

Odnośnik do komentarza
https://skript.pl/temat/57367-problem-z-cooldown-wiadomoscia/
Udostępnij na innych stronach

11 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

dodałem wiadomość juz sam ale nie znalem "placeholdera" na czas ktory pozostal do odebrania nagrody dzieki 

 

3 godziny temu, makstale napisał:
cooldown message: Musisz odczekać %remaining time% sekund.

a dodałbyś jeszcze formatowanie tego bo obecnie pisze czas i seconds a wolałbym np 1 minutes - 1 m

Edytowane przez xSebix1
GRIERIOR

Łączę posty.

Notatka dodana przez GRIERIOR

Odnośnik do komentarza
https://skript.pl/temat/57367-problem-z-cooldown-wiadomoscia/#findComment-341701
Udostępnij na innych stronach

  • 0

Dodaj sobie gdzieś funkcję

function formatTimespan(t: timespan) :: string:
    set {_t} to "%{_t}%"
    replace all " seconds" or " second" with "s" in {_t}
    replace all " minutes" or " minute" with "m" in {_t}
    replace all " hours" or " hour" with "h" in {_t}
    replace all " days" or " day" with "d" in {_t}
    return {_t}

i wykonaj ją przy użyciu argumentu remaining time, nie wiem czy to zadziała ale wydaje mi sie to jedynym sposobem

Odnośnik do komentarza
https://skript.pl/temat/57367-problem-z-cooldown-wiadomoscia/#findComment-341710
Udostępnij na innych stronach

  • 0
W dniu 15.04.2024 o 23:26, CoFFeIN04 napisał:

Dodaj sobie gdzieś funkcję

function formatTimespan(t: timespan) :: string:
    set {_t} to "%{_t}%"
    replace all " seconds" or " second" with "s" in {_t}
    replace all " minutes" or " minute" with "m" in {_t}
    replace all " hours" or " hour" with "h" in {_t}
    replace all " days" or " day" with "d" in {_t}
    return {_t}

i wykonaj ją przy użyciu argumentu remaining time, nie wiem czy to zadziała ale wydaje mi sie to jedynym sposobem

Nie było mnie troche w domu ale nie działa
command /losujklucz:
    trigger:
    cooldown: 1 seconds
    cooldown message: &4ᴏᴊᴏᴊ &cᴍᴜꜱɪꜱᴢ ᴏᴅᴄᴢᴇᴋᴀᴄ &e&n%remaining time%&f &cᴘʀᴢᴇᴅ ᴘᴏɴᴏᴡɴʏᴍ ᴜᴢʏᴄɪᴇᴍ ᴛᴇᴊ ᴋᴏᴍᴇɴᴅʏ
function formatTimespan(t: timespan) :: string:
    set {_t} to "%{_t}%"
    replace all " seconds" or " second" with "s" in {_t}
    replace all " minutes" or " minute" with "m" in {_t}
    replace all " hours" or " hour" with "h" in {_t}
    replace all " days" or " day" with "d" in {_t}
    return {_t}
    trigger:
    chance of 75%
    send "&aOtrzymales Diament"
tak wygla teraz skrypt probowalem wiele razy ale zadna nie dziala 😧

Odnośnik do komentarza
https://skript.pl/temat/57367-problem-z-cooldown-wiadomoscia/#findComment-341785
Udostępnij na innych stronach

  • 0
2 minuty temu, xSebix1 napisał:

tak wygla teraz skrypt probowalem wiele razy ale zadna nie dziala

Funkcja powinna być poza definicją komendy, nie w jej środku. Odsyłam do artykułów objaśniających jak używać funkcji w Skript.
Przykładowy artykuł poniżej.

 

Odnosząc się do Pana wcześniejszego pytania, ostatnio na forum pojawiło się podobne pytanie o przekształcenie tekstu wyświetlanego przez %remaining time%. Sam próbowałem wstawić wywołanie funkcji zmieniającej tekst tej zmiennej, jednak skutkowało to nadpisywaniem przez Skripta tej wiadomości jej domyślną wartością ("Sorry, you're using this command [...]" czy jakoś tak).
Link do wcześniej wspomnianego wątku poniżej. 

 

Odnośnik do komentarza
https://skript.pl/temat/57367-problem-z-cooldown-wiadomoscia/#findComment-341787
Udostępnij na innych stronach

  • 0
13 godzin temu, Kormic napisał:

Funkcja powinna być poza definicją komendy, nie w jej środku. Odsyłam do artykułów objaśniających jak używać funkcji w Skript.
Przykładowy artykuł poniżej.

 

Odnosząc się do Pana wcześniejszego pytania, ostatnio na forum pojawiło się podobne pytanie o przekształcenie tekstu wyświetlanego przez %remaining time%. Sam próbowałem wstawić wywołanie funkcji zmieniającej tekst tej zmiennej, jednak skutkowało to nadpisywaniem przez Skripta tej wiadomości jej domyślną wartością ("Sorry, you're using this command [...]" czy jakoś tak).
Link do wcześniej wspomnianego wątku poniżej. 

 

dalej tego nie rozumiem i nie pojmę tego w kilka godzin lub dni a poprostu nie możesz napisać tego skryptu a wtedy będę mniej więcej wiedział co źle robię i będę miał wzór na przyszłe formatowanie albo dodawanie poprawnie funkcji

tak czyś jak dziękuję za chęć pomocy :)

Edytowane przez xSebix1
Odnośnik do komentarza
https://skript.pl/temat/57367-problem-z-cooldown-wiadomoscia/#findComment-341796
Udostępnij na innych stronach

  • 0
54 minuty temu, xSebix1 napisał:

dalej tego nie rozumiem i nie pojmę tego w kilka godzin lub dni a poprostu nie możesz napisać tego skryptu a wtedy będę mniej więcej wiedział co źle robię i będę miał wzór na przyszłe formatowanie albo dodawanie poprawnie funkcji

tak czyś jak dziękuję za chęć pomocy :)

Nie od razu Rzym zbudowano. Każda nauka wymaga praktyki i czasu, każdy tak zaczynał. Nikt na tym forum nie jest wyjątkiem od tej zasady, wliczając Pana.

Niemniej jednak mogę pomóc w zrozumieniu jak należy skonstruować taki mechanizm cooldownu. Udostępniam przykładowy kod poniżej.

function cooldownMessage(time: timespan, cooldown: timespan) :: text:
	set {_remainingTime} to "%difference between {_cooldown} and {_time}%"
	replace all ("minutes" and "minute") in {_remainingTime} with "m"
	replace all ("seconds" and "second") in {_remainingTime} with "s"
	replace all " and" in {_remainingTime} with ","
	return "Odczekaj %{_remainingTime}%."

command /komenda:
	executable by: players
	trigger:
		if {cooldowns::komenda::%player%} is set:
			set {_cooldownTime} to 10 seconds
			set {_t} to difference between {cooldowns::komenda::%player%} and now
			if {_t} is less than {_cooldownTime}:
				send cooldownMessage({_t}, {_cooldownTime}) to player
				stop
		set {cooldowns::komenda::%player%} to now
		# Dalsza część kodu (kod w tym miejscu wykona się tylko wtedy, gdy gracz już nie ma cooldownu (lub nigdy go nie miał))

Wyjaśnię krok po kroku działanie powyższego skryptu. Czas wykonania komendy zapisujemy do zmiennej {cooldowns::komenda::%player%}. Może się ona całkowicie inaczej nazywać, ważne aby to była lista.

  1. Komenda ma narzucony warunek możliwego jej wykonania tylko przez graczy. Zapobiega to próbie użycia jej przez konsolę.
  2. W sekcji "trigger" komendy sprawdzamy czy zmienna ma ustawioną wartość - to znaczy czy gracz jej kiedykolwiek wcześniej użył. Jeśli nie, warunek nie jest spełniony, i przechodzimy do ostatniej linijki (a więc zapisujemy obecny czas do zmiennej gracza i wykonuje się dalszy kod komendy).
  3. Jeśli jednak warunek "if {cooldowns::komenda::%player%} is set:" jest spełniony (a więc gracz już kiedyś wcześniej użył komendy), sprawdzamy różnicę czasu między czasem obecnym a czasem w zmiennej gracza (to znaczy kiedy gracz ostatnio użył ów komendy). Warto zauważyć, że jest to czas od ostatniego użycia komendy.
  4. W przypadku gdy ta różnica czasu jest mniejsza niż nasz cooldown (w powyższym przykładzie jest to 10 sekund), wysyłamy graczowi informację ile musi odczekać, aby mógł ponownie wykonać komendę. Sama wiadomość jest tworzona przez naszą funkcję cooldownMessage([...]), która zwraca wiadomość o tym jak długo musi gracz czekać. Tak więc wywołujemy ją i po jej wywołaniu zatrzymujemy skrypt (instrukcja "stop"), aby reszta komendy się nie wykonała.
  5. Sama funkcja pobiera dwa argumenty - czas od ostatniego użycia komendy i czas cooldownu. Te dwie informacje wystarczą aby obliczyć czas pozostały do końca cooldownu (odpowiednik %remaining time%).
  6. Wynik różnicy tych czasów jest zapisywany jako tekst do zmiennej {_remainingTime}, aby można było na niej dokonać operacji zamiany pewnych fraz (na przykład "minutes" na "m").
  7. Mając czas pozostały do oczekiwania na możliwość ponownego użycia komendy, zamieniamy "minutes", "seconds" i " and" odpowiednio na "m", "s" i " ,". Ostatnia operacja jest po to, aby zastąpić spójnik "and" przecinkiem.
  8. Finalnie, gdy już mamy sformatowaną zmienną {_remainingTime} według naszych potrzeb, zwracamy ją w funkcji, co pozwala wysłać wiadomość graczowi.

Wydaje mi się, że wyjaśniłem to tak szczegółowo jak tylko potrafiłem. Niemniej jednak i tak zachęcam do lektury wcześniejszych artykułów - pomogą one Panu w nauce Skripta.

W ramach Pana edukacji zostawiłem strukturę kodu tak prostą jak to tylko możliwe, aby mógł Pan samemu poeksperymentować i dodać to co jest potrzebne.

Odnośnik do komentarza
https://skript.pl/temat/57367-problem-z-cooldown-wiadomoscia/#findComment-341799
Udostępnij na innych stronach

  • 0
W dniu 20.04.2024 o 11:49, Kormic napisał:

Nie od razu Rzym zbudowano. Każda nauka wymaga praktyki i czasu, każdy tak zaczynał. Nikt na tym forum nie jest wyjątkiem od tej zasady, wliczając Pana.

Niemniej jednak mogę pomóc w zrozumieniu jak należy skonstruować taki mechanizm cooldownu. Udostępniam przykładowy kod poniżej.

function cooldownMessage(time: timespan, cooldown: timespan) :: text:
	set {_remainingTime} to "%difference between {_cooldown} and {_time}%"
	replace all ("minutes" and "minute") in {_remainingTime} with "m"
	replace all ("seconds" and "second") in {_remainingTime} with "s"
	replace all " and" in {_remainingTime} with ","
	return "Odczekaj %{_remainingTime}%."

command /komenda:
	executable by: players
	trigger:
		if {cooldowns::komenda::%player%} is set:
			set {_cooldownTime} to 10 seconds
			set {_t} to difference between {cooldowns::komenda::%player%} and now
			if {_t} is less than {_cooldownTime}:
				send cooldownMessage({_t}, {_cooldownTime}) to player
				stop
		set {cooldowns::komenda::%player%} to now
		# Dalsza część kodu (kod w tym miejscu wykona się tylko wtedy, gdy gracz już nie ma cooldownu (lub nigdy go nie miał))

Wyjaśnię krok po kroku działanie powyższego skryptu. Czas wykonania komendy zapisujemy do zmiennej {cooldowns::komenda::%player%}. Może się ona całkowicie inaczej nazywać, ważne aby to była lista.

  1. Komenda ma narzucony warunek możliwego jej wykonania tylko przez graczy. Zapobiega to próbie użycia jej przez konsolę.
  2. W sekcji "trigger" komendy sprawdzamy czy zmienna ma ustawioną wartość - to znaczy czy gracz jej kiedykolwiek wcześniej użył. Jeśli nie, warunek nie jest spełniony, i przechodzimy do ostatniej linijki (a więc zapisujemy obecny czas do zmiennej gracza i wykonuje się dalszy kod komendy).
  3. Jeśli jednak warunek "if {cooldowns::komenda::%player%} is set:" jest spełniony (a więc gracz już kiedyś wcześniej użył komendy), sprawdzamy różnicę czasu między czasem obecnym a czasem w zmiennej gracza (to znaczy kiedy gracz ostatnio użył ów komendy). Warto zauważyć, że jest to czas od ostatniego użycia komendy.
  4. W przypadku gdy ta różnica czasu jest mniejsza niż nasz cooldown (w powyższym przykładzie jest to 10 sekund), wysyłamy graczowi informację ile musi odczekać, aby mógł ponownie wykonać komendę. Sama wiadomość jest tworzona przez naszą funkcję cooldownMessage([...]), która zwraca wiadomość o tym jak długo musi gracz czekać. Tak więc wywołujemy ją i po jej wywołaniu zatrzymujemy skrypt (instrukcja "stop"), aby reszta komendy się nie wykonała.
  5. Sama funkcja pobiera dwa argumenty - czas od ostatniego użycia komendy i czas cooldownu. Te dwie informacje wystarczą aby obliczyć czas pozostały do końca cooldownu (odpowiednik %remaining time%).
  6. Wynik różnicy tych czasów jest zapisywany jako tekst do zmiennej {_remainingTime}, aby można było na niej dokonać operacji zamiany pewnych fraz (na przykład "minutes" na "m").
  7. Mając czas pozostały do oczekiwania na możliwość ponownego użycia komendy, zamieniamy "minutes", "seconds" i " and" odpowiednio na "m", "s" i " ,". Ostatnia operacja jest po to, aby zastąpić spójnik "and" przecinkiem.
  8. Finalnie, gdy już mamy sformatowaną zmienną {_remainingTime} według naszych potrzeb, zwracamy ją w funkcji, co pozwala wysłać wiadomość graczowi.

Wydaje mi się, że wyjaśniłem to tak szczegółowo jak tylko potrafiłem. Niemniej jednak i tak zachęcam do lektury wcześniejszych artykułów - pomogą one Panu w nauce Skripta.

W ramach Pana edukacji zostawiłem strukturę kodu tak prostą jak to tylko możliwe, aby mógł Pan samemu poeksperymentować i dodać to co jest potrzebne.

Raz dziala i pisze ojoj musisz odczekac jeszcze (czas) przed ponowym uzyciem
a raz pisze you are using this command to often jakos tak 

Odnośnik do komentarza
https://skript.pl/temat/57367-problem-z-cooldown-wiadomoscia/#findComment-341870
Udostępnij na innych stronach

  • 0
9 minut temu, xSebix1 napisał:

Raz dziala i pisze ojoj musisz odczekac jeszcze (czas) przed ponowym uzyciem
a raz pisze you are using this command to often jakos tak 

Jak sam Pan widzi, nigdzie w przykładowym kodzie nie dodałem takiej funkcji. W celu upewnienia się przed chwilą uruchomiłem swój serwer i jestem w stanie spokojnie wpisywać komendę 4 razy na sekundę, a jedyna wiadomość wysyłana do mnie to "Odczekaj x.".
Wynika z tego, że Pan po swojej stronie ma jakieś zabezpieczenie powstrzymujące graczy przed zbyt częstym wpisywaniem komend.

command /cooldowntest:
	trigger:
		send "Test." to sender

Niech Pan przetestuje powyższy kod poprzez jak najczęstsze wpisywanie tej komendy. Może Pan sobie zmienić jej nazwę, ona nie gra roli. Jeśli i w tym przypadku pojawi się wiadomość o zbyt częstym używaniu komendy, moja teza się potwierdzi.

Odnośnik do komentarza
https://skript.pl/temat/57367-problem-z-cooldown-wiadomoscia/#findComment-341871
Udostępnij na innych stronach

  • 0
26 minut temu, Kormic napisał:

Jak sam Pan widzi, nigdzie w przykładowym kodzie nie dodałem takiej funkcji. W celu upewnienia się przed chwilą uruchomiłem swój serwer i jestem w stanie spokojnie wpisywać komendę 4 razy na sekundę, a jedyna wiadomość wysyłana do mnie to "Odczekaj x.".
Wynika z tego, że Pan po swojej stronie ma jakieś zabezpieczenie powstrzymujące graczy przed zbyt częstym wpisywaniem komend.

command /cooldowntest:
	trigger:
		send "Test." to sender

Niech Pan przetestuje powyższy kod poprzez jak najczęstsze wpisywanie tej komendy. Może Pan sobie zmienić jej nazwę, ona nie gra roli. Jeśli i w tym przypadku pojawi się wiadomość o zbyt częstym używaniu komendy, moja teza się potwierdzi.

Dziala pokazuje sie ojoj musisz odczekac jeszcze (czas) przed ponownym uzyciem

Odnośnik do komentarza
https://skript.pl/temat/57367-problem-z-cooldown-wiadomoscia/#findComment-341874
Udostępnij na innych stronach

  • 0
10 minut temu, xSebix1 napisał:

Dziala pokazuje sie ojoj musisz odczekac jeszcze (czas) przed ponownym uzyciem

Nie rozumiem. Wszystko jest już w porządku? Czy przetestował Pan kod komendy /cooldowntest w taki sposób jak zaproponowałem?

Odnośnik do komentarza
https://skript.pl/temat/57367-problem-z-cooldown-wiadomoscia/#findComment-341875
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Nieaktywny
Odpowiedz na pytanie...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...