Skocz do zawartości
  • 0

Czy dało by się zrobić, żeby skrypt odczytywał czas


Pytanie

 Chciałbym żeby skrypt o danych godzinach np. 12, 16, 20, rozdawał klucze z excellent crates i tu jest drugie pytanie. Jak wywołać komendę z innego pluginu, czyli z excellent crates. Chodzi mi o komendę "/crate key give [gracz] epicka"

Odnośnik do komentarza
https://skript.pl/temat/57431-czy-da%C5%82o-by-si%C4%99-zrobi%C4%87-%C5%BCeby-skrypt-odczytywa%C5%82-czas/
Udostępnij na innych stronach

Rekomendowane odpowiedzi

  • 0
2 godziny temu, micmit123 napisał:

Chciałbym żeby skrypt o danych godzinach np. 12, 16, 20

Niestety Skript nie posiada listenera zdarzenia czasu rzeczywistego, tak więc należy posiłkować się tzw. periodicalami, czyli fragmentami kodu wykonywanymi w pewnych chwilach czasu. Dodatkowo należy w owym periodicalu sprawdzać godzinę i minutę z użyciem wyrażenia 'formatted date'. Udostępniam przykład poniżej.

every 1 minute:
	set {_time} to now formatted as "HH:mm"
	if {_time} is "00:00":
		# ...
	else if {_time} is "12:00":
		# ...
	# Dalszy kod...

Oczywiście może Pan korzystać chociażby z zewnętrznych API w celu sprawdzania czasu rzeczywistego, jednakże w tym przypadku jest to rozwiązanie w zupełności wystarczające.

2 godziny temu, micmit123 napisał:

Jak wywołać komendę z innego pluginu, czyli z excellent crates. Chodzi mi o komendę "/crate key give [gracz] epicka"

Wystarczy, że Pan użyje instrukcji (efektu) 'command'. Jeśli Pan chce rozdać wszystkim graczom o danej godzinie klucze, musi pan zapętlić listę 'all players'.

Tak więc Pan w środku pętli po uprzednim sprawdzeniu godziny może wstawić %loop-player% w miejsce [gracz] w Pana komendzie.

EDIT:

@micmit123

Dodam, że możliwe jest użycie API pluginu ExcellentCrates. W mojej ocenie jest to lepsze rozwiązanie, gdyż unikamy wywoływania komendy przez konsolę.

Wiki: https://nightexpress.gitbook.io/excellentcrates/general/developer-api

Github: https://github.com/nulli0n/ExcellentCrates-spigot/blob/master/src/main/java/su/nightexpress/excellentcrates/CratesAPI.java

Podam przykład wykorzystania powyższego API.

import:
	su.nightexpress.excellentcrates.CratesAPI

on death of ender dragon:
	attacker is a player
	set {_keyManager} to cratesAPI.getKeyManager()
	set {_key} to {_keyManager}.getKeyById("legendary")
	{_keyManager}.give(attacker, {_key}, 1)
	send "Otrzymałeś legendarny klucz!" to attacker

 

Edytowane przez Kormic
  • 0

mam jeszcze jedno pytanie, można by było zrobić tak, że po zabiciu przez gracza enderdragona, skrypt czeka 1 dzień, po czym odradza go na nowo?

  • 0

Oczywiście może Pan korzystać chociażby z zewnętrznych API w celu sprawdzania czasu rzeczywistego, jednakże w tym przypadku jest to rozwiązanie w zupełności wystarczające.

Mógłbym zapytać jak z tej opcji skorzystać? Ponieważ inaczej jest wielkie opóźnienie, ponieważ sprawdza skrypt co minutę. Musiałbym reloadować skrypt punktualnie o równej minucie, a czasami mogłyby być zaplanowane restarty serwera nocą aby utrzymać jego bilans.

  • 0
1 godzinę temu, micmit123 napisał:

mam jeszcze jedno pytanie, można by było zrobić tak, że po zabiciu przez gracza enderdragona, skrypt czeka 1 dzień, po czym odradza go na nowo?

Problem prosty w rozwiązaniu, jednak samo rozwiązanie jest względnie niemiłe dla oka. Opiszę jak może Pan napisać taki skrypt.

Przy śmierci Ender Dragona należy zapisać do jakiejś zmiennej globalnej obecny czas systemowy serwera z wykorzystaniem wyrażenia 'now'.
Następnie, w periodicalu 'every 1 minute:' sprawdza Pan czy 'now' (czas obecny) jest większy od czasu zapisanego we wcześniej wspomnianej zmiennej (można wykorzystać zwykłe porównania takie jak 'is bigger than or equal to' czy też '>=', więcej informacji znajdzie Pan w dokumentacji).
Jeśli tak, może Pan zespawnować kolejnego smoka.

Może Pana zastanawiać dlaczego nie zaproponowałem użycia opóźnienia 'wait 24 hours'. Odpowiedź jest prosta - jeśli w ciągu tych 24 godzin serwer zostałby wyłączony, opóźnienie zostałoby anulowane, a po ponownym włączeniu serwera dalszy kod (następujący po opóźnieniu) nigdy nie zostałby wykonany.

Godzinę temu, micmit123 napisał:

Mógłbym zapytać jak z tej opcji skorzystać? Ponieważ inaczej jest wielkie opóźnienie, ponieważ sprawdza skrypt co minutę. Musiałbym reloadować skrypt punktualnie o równej minucie, a czasami mogłyby być zaplanowane restarty serwera nocą aby utrzymać jego bilans.

Namyśliłem się i stwierdziłem, że mój pomysł był dość głupi. Jeśli Pan oczekuje pomiaru czasu z dokładnością do sekundy, proszę zmienić periodical na 'every 1 second:'. W przypadku samego pomiaru i sprawdzania czasu nie powinno to obciążać serwera.

  • 0
Godzinę temu, micmit123 napisał:

dziendobry, mam sprawe. Rozdaje kluczy z wielkim opoznieniem. Pewnie przez strefy czasowe, lecz czy dalo by sie to rozwiazac?

Niech Pan pokaże swój kod i powie w jakiej strefie czasowej znajduje się Pana serwer. Sama godzina bez strefy czasowej również wystarczy.

Jeśli Pan chce szybko sprawdzić jaki jest obecny czas systemowy serwera, proszę użyć poniższej komendy.

command /getrealtime:
	trigger:
		send "%now%" to sender

 

  • 0
2 godziny temu, Kormic napisał:

Niech Pan pokaże swój kod i powie w jakiej strefie czasowej znajduje się Pana serwer. Sama godzina bez strefy czasowej również wystarczy.

Jeśli Pan chce szybko sprawdzić jaki jest obecny czas systemowy serwera, proszę użyć poniższej komendy.

command /getrealtime:
	trigger:
		send "%now%" to sender

 

juz widze w czym problem, zegar spoznia sie o 2 min. Dlatego czy jest mozliwosc, ze gracz dostanie klucz, kiedy na JEGO komputerze wybije np. 14?

  • 0
Godzinę temu, micmit123 napisał:

juz widze w czym problem, zegar spoznia sie o 2 min. Dlatego czy jest mozliwosc, ze gracz dostanie klucz, kiedy na JEGO komputerze wybije np. 14?

Ciekawe skąd wynika opóźnienie dwóch minut. Gdy Pan powiedział o wielkim opóźnieniu, założyłem, że Pan mówi o opóźnieniu rzędu godziny.

Odpowiadając na Pana pytanie - bez zewnętrznych API nie jest to możliwe. Musiałby Pan do takiego API wysyłać zapytania z IP gracza, aby otrzymać jego strefę czasową. Pytanie brzmi czy gra jest warta świeczki.

Musiałbym jednak zobaczyć Pana kod, aby dokonać diagnozy problemu.

  • 0
4 minuty temu, micmit123 napisał:

dzien dobry, wydawalo mi sie najpierw, ze jest koszmarne opoznienie. Mozliwe ze zle wpisalem poprostu komende.

Kod generalnie wygląda dobrze, ale jest związany z nim jeden krytyczny problem. Gracze mogą otrzymać do 60 kluczy na minutę, gdyż Pan nie sprawdza godziny z dokładnością do sekundy, a jedynie z dokładnością do minuty.

Niech Pan dorzuci do formatu 'now' sekundy (a więc ":ss") i powinno być wszystko w porządku.

Drugie możliwe rozwiązanie jest takie, że Pan sprawdza co minutę, ale po rozdaniu kluczy ustawia Pan jakąś zmienną globalną. Jeśli ta zmienna jest ustawiona, rozdanie kluczy nie następuję.
Dopiero gdy będzie następna minuta, owa zmienna zostanie wyczyszczona.

  • 0
36 minut temu, micmit123 napisał:

dzien dobry, dziekuje za odpowiedz. Niestety rozwiazanie jest nadal wadliwe. Zamiast 1, rozdaje po 2-3 klucze.

Pan sprawdza czy godzina to na przykład "12:00:00", tak? Dziwnym zjawiskiem jest w takim razie to, że gracze dostają 2-3 klucze.

Gdyby Pan mógł pokazać kod, byłbym w stanie więcej wywnioskować.

  • 0

jeszcze jedno pytanie. Jak wywolac komende title dla wszystkich? probowalem przez execute console command, execute player command. Szukalem na forum i nic. Chodzi o to, ze chcialbym zeby w if sie to pojawilo.

  • 0
2 minuty temu, micmit123 napisał:

jeszcze jedno pytanie. Jak wywolac komende title dla wszystkich? probowalem przez execute console command, execute player command. Szukalem na forum i nic. Chodzi o to, ze chcialbym zeby w if sie to pojawilo.

Możesz to zrobić za pomocą 

send title "Twoj title" to all players

:D

  • 0
30 minut temu, micmit123 napisał:

niestety nie działa @Hiri12

Co konkretnie nie działa? Jest to przykład wyjęty żywcem z SkriptHub'a ze zmienioną trescią title... Może sprobój tak:

send title "Twoj title" with subtitle "Podtytul" to all players

 

Edytowane przez Hiri12
  • 0
8 minut temu, micmit123 napisał:

@Hiri12 Wypisuje błąd  Nieprawidłowe użycie cudzysłowu

Może Pan podać cały kod wraz z linijką w której występuje błąd? Nie koniecznie wiem co może być źle w tym skrypcie...

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ę...