Skocz do zawartości
  • 0

problem z resetowaniem zmiennej %player%


Pytanie

witam zmienna {opu::%player%} ma opóźniać komende /bonus dla nowych graczy automatycznie resetuje się ale nie dam rady jej zresetować dla obecnych graczy, jej wartość dla obecnych wynosi <none>

oto kod 

 

Odnośnik do komentarza
https://skript.pl/temat/43703-problem-z-resetowaniem-zmiennej-player/
Udostępnij na innych stronach

8 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
11 minut temu, michal1250 napisał:

witam zmienna {opu::%player%} ma opóźniać komende /bonus dla nowych graczy automatycznie resetuje się ale nie dam rady jej zresetować dla obecnych graczy, jej wartość dla obecnych wynosi <none>

oto kod 

Pamiętasz jak obiecałem ci, że jeżeli będziesz starał się to zrobić to dostaniesz mój sposób? Ponieważ widzę jak z tym walczysz, to nie widzę problemu, aby się nim z tobą podzielić.

Oto on:

command /test:
	trigger:
		# Sprawdzamy czy zmienna jest ustawiona, jeżeli tak to sprawdzamy różnicę, jeżeli nie, to cały warunek jest pomijany, a zmienna zostaje ustawiona w linijce nr 14
		if {cooldown::%player%} is set:
		
			# Sprawdzamy różnicę między czasem w zmiennej a czasem obecnym
			if difference between {cooldown::%player%} and now is less than 24 hours:
			
				# Jeżeli jest mniejszy niż 24 godziny, wysyłamy do gracza wiadomość i zatrzymujemy skrypt
				send "&cNie możesz jeszcze użyć tej komendy!" to player
				stop
				
		# Ustawiamy czas obecny do zmiennej gracza, aby móc w przyszłości kontrolować cooldown
		set {cooldown::%player%} to now
		
		# Dalszy kod

Powinien ci pomóc rozwiązać wszelkie problemy z twoim kodem. Dzięki niemu linijka 11. w twoim kodzie jest całkowicie zbędna.

Co do twojego skryptu mam jeszcze parę uwag:

  1. W linijce 16. niepotrzebny jest 'wait 1 second'.
  2. W linijce 251. nie powinieneś ustawiać ostatniego odbioru przez gracza nagrody jako czasu obecnego. Z moim sposobem powinno tam się znaleźć:
    clear {opu::%player%}
  3. Komenda /bonusinfo używa zmiennej lokalnej {_slown}, która nigdzie nie jest ustawiona. Należy pamiętać o tym, że zmienne lokalne są czyszczone po dojściu do końca kodu, w którym się znajdują.
  4. Komenda /bonusset jest dziwnie skonstruowana. Z tego co widzę w kodzie wyżej to zmienna {log.%player%} nalicza ile razy gracz wszedł na serwer, a w tej komendzie ustawiasz wartość tego jako tekst, przez co dodawanie będzie niemożliwe. Jeżeli już to ta komenda powinna posiadać jedynie argument [<integer=1>] (należy pamiętać, że nawiasy kwadratowe oznaczają opcjonalność, więc można nie podać liczby, a i tak skrypt zapisze wartość, której nie będzie; dlatego też należy dodać do argumentu domyślną wartość, która będzie przyznana do argumentu w przypadku niepodania go) i wtedy zapisujemy do zmiennej wartość argumentu 1.
Edytowane przez Kormic
Odnośnik do komentarza
https://skript.pl/temat/43703-problem-z-resetowaniem-zmiennej-player/#findComment-273715
Udostępnij na innych stronach

  • 0
on first join:
    add 1 to {log.%player%}
    set {opu::%player%} to now

zamień powyższą na:

on join:
	if {opu::%player%} is not set:
		set {opu::%player%} to now
	if {log.%player%} is not set:
		set {log.%player%} to 1

on first join nie będzie działać, jeśli gracz już był na serwerze

Edytowane przez CoFFeIN04
Odnośnik do komentarza
https://skript.pl/temat/43703-problem-z-resetowaniem-zmiennej-player/#findComment-273716
Udostępnij na innych stronach

  • 0
Godzinę temu, Kormic napisał:

Pamiętasz jak obiecałem ci, że jeżeli będziesz starał się to zrobić to dostaniesz mój sposób? Ponieważ widzę jak z tym walczysz, to nie widzę problemu, aby się nim z tobą podzielić.

Oto on:



command /test:
	trigger:
		# Sprawdzamy czy zmienna jest ustawiona, jeżeli tak to sprawdzamy różnicę, jeżeli nie, to cały warunek jest pomijany, a zmienna zostaje ustawiona w linijce nr 14
		if {cooldown::%player%} is set:
		
			# Sprawdzamy różnicę między czasem w zmiennej a czasem obecnym
			if difference between {cooldown::%player%} and now is less than 24 hours:
			
				# Jeżeli jest mniejszy niż 24 godziny, wysyłamy do gracza wiadomość i zatrzymujemy skrypt
				send "&cNie możesz jeszcze użyć tej komendy!" to player
				stop
				
		# Ustawiamy czas obecny do zmiennej gracza, aby móc w przyszłości kontrolować cooldown
		set {cooldown::%player%} to now
		
		# Dalszy kod

Powinien ci pomóc rozwiązać wszelkie problemy z twoim kodem. Dzięki niemu linijka 11. w twoim kodzie jest całkowicie zbędna.

Co do twojego skryptu mam jeszcze parę uwag:

  1. W linijce 16. niepotrzebny jest 'wait 1 second'.
  2. W linijce 251. nie powinieneś ustawiać ostatniego odbioru przez gracza nagrody jako czasu obecnego. Z moim sposobem powinno tam się znaleźć:
    
    
    clear {opu::%player%}
  3. Komenda /bonusinfo używa zmiennej lokalnej {_slown}, która nigdzie nie jest ustawiona. Należy pamiętać o tym, że zmienne lokalne są czyszczone po dojściu do końca kodu, w którym się znajdują.
  4. Komenda /bonusset jest dziwnie skonstruowana. Z tego co widzę w kodzie wyżej to zmienna {log.%player%} nalicza ile razy gracz wszedł na serwer, a w tej komendzie ustawiasz wartość tego jako tekst, przez co dodawanie będzie niemożliwe. Jeżeli już to ta komenda powinna posiadać jedynie argument [<integer=1>] (należy pamiętać, że nawiasy kwadratowe oznaczają opcjonalność, więc można nie podać liczby, a i tak skrypt zapisze wartość, której nie będzie; dlatego też należy dodać do argumentu domyślną wartość, która będzie przyznana do argumentu w przypadku niepodania go) i wtedy zapisujemy do zmiennej wartość argumentu 1.

dzięki użyłem tego kodu i opóźnienie świetnie działa tylko chciałem aby podczas zbyt częstego powtarzania tej komendy pokazywało za ile można jej użyć i coś mi nie działa 


      

 if {cooldown::%player%} is set:

            if difference between {cooldown::%player%} and now is less than 24 hours:
                set {_cos.%player%} to difference between {cooldown::%player%} and {_jeszcze.%player%}
            
                add {cooldown::%player%} to {_jeszcze.%player%}
                wait 1 tick
                add 86400 second to {_jeszcze.%player%}
                # Jeżeli jest mniejszy niż 24 godziny, wysyłamy do gracza wiadomość i zatrzymujemy skrypt
                send "&cNie możesz jeszcze użyć tej komendy! %{_cos.%player%}%" to player
                stop

 

Edytowane przez xNightPower_
Nieaktywny

Umieszczam kod w code.

Odnośnik do komentarza
https://skript.pl/temat/43703-problem-z-resetowaniem-zmiennej-player/#findComment-273742
Udostępnij na innych stronach

  • 0
Teraz, michal1250 napisał:

dzięki użyłem tego kodu i opóźnienie świetnie działa tylko chciałem aby podczas zbyt częstego powtarzania tej komendy pokazywało za ile można jej użyć i coś mi nie działa 

 

        if {cooldown::%player%} is set:

            if difference between {cooldown::%player%} and now is less than 24 hours:
                set {_cos.%player%} to difference between {cooldown::%player%} and {_jeszcze.%player%}
            
                add {cooldown::%player%} to {_jeszcze.%player%}
                wait 1 tick
                add 86400 second to {_jeszcze.%player%}
                # Jeżeli jest mniejszy niż 24 godziny, wysyłamy do gracza wiadomość i zatrzymujemy skrypt
                send "&cNie możesz jeszcze użyć tej komendy! %{_cos.%player%}%" to player
                stop

Musisz wysłać różnicę między {_jeszcze.%player%} a {cooldown::%player%}. Wtedy otrzymasz czas pozostały do ponownego odbioru.

Odnośnik do komentarza
https://skript.pl/temat/43703-problem-z-resetowaniem-zmiennej-player/#findComment-273744
Udostępnij na innych stronach

  • 0
8 minut temu, Kormic napisał:

Musisz wysłać różnicę między {_jeszcze.%player%} a {cooldown::%player%}. Wtedy otrzymasz czas pozostały do ponownego odbioru.

jeśli dobrze rozumiem to chodzi o 

send "&cNie możesz jeszcze użyć tej komendy! %{_cos::%player%}%" to player

mam taką linijkę i wyświetla wartość zmiennej jak <none>

Odnośnik do komentarza
https://skript.pl/temat/43703-problem-z-resetowaniem-zmiennej-player/#findComment-273751
Udostępnij na innych stronach

  • 0
Teraz, michal1250 napisał:

jeśli dobrze rozumiem to chodzi o 

send "&cNie możesz jeszcze użyć tej komendy! %{_cos::%player%}%" to player

mam taką linijkę i wyświetla wartość zmiennej jak <none>

Nie, źle to robisz.

Niech stracę, pokażę ci.

set {_zmienna} to {cooldown::%player%}
add 24 hours to {_zmienna}
send "Musisz odczekać jeszcze %difference between {_zmienna} and {cooldown::%player%}%!"

Już rozumiesz? Jeżeli chcesz przetłumaczyć ten czas na polski, musisz utworzyć funkcję, która będzie przyjmowała typ 'timespan', będzie zmieniała go na tekst, w tekście będzie zamieniała angielski czas na polskie odpowiedniki i na końcu zwróci tekst.

Brzmi zagmatwanie, wiem. Jeżeli mimo wszystko chciałbyś to osiągnąć, mogę ci pokazać jak to zrobić.

Tutaj masz mały wstęp do funkcji: https://wiki.skript.pl/Funkcje

Odnośnik do komentarza
https://skript.pl/temat/43703-problem-z-resetowaniem-zmiennej-player/#findComment-273753
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ę...