Skocz do zawartości
  • 0

Skrypt sprawdzający ilość godzin


Pytanie

Witam wszystkich bardzo serdecznie!

Czy jest ktoś w stanie napisać skrypt, który pozwala osobie z odpowiednimi uprawnieniami sprawdzać ile dany Gracz był online na serwerze w ciągu tygodnia? Dodatkowo chciałbym, aby skrypt posiadał funkcję przechowywania danych z ubiegłego tygodnia, obrazowo:

Graczy X był w tygodniu A online przez 10 godzin.
Gracz  X w tym tygodniu (tydzień B) był online przez 12 godzin.

Administrator po wpisaniu odpowiedniej komendy widziałby stan godzinowy z bieżącego tygodnia (tydzień B) oraz ubiegłego tygodnia (tydzień A). Okres liczenia godzin w danym tygodniu ma się skończyć standardowo, w niedzielę o 23:59. O północy miałby się rozpocząć nowy tydzień i nowy licznik.

 

Jest ktoś w stanie coś takiego zrobić? Na razie udało mi się wykombinować coś takiego

every 1 second in world "world":
	loop all players:
		if loop-player has permission "ekipa.info":
			add 1 to {sbnorma::%loop-player%}
		if {sbnorma::%loop-player%} is 60:
			add 1 to {mbnorma::%loop-player%}
			set {sbnorma::%loop-player%} to 0
		if {mbnorma::%loop-player%} is 60:
			add 1 to {hbnorma::%loop-player%}
			set {mbnorma::%loop-player%} to 0
every 7 days: (tutaj mam problem - żeby to się działo co niedzielę, a nie co 7 dni.) 
	loop all players:
		if loop-player has permission "ekipa.info":
			set {mbnorma::%loop-player%} to {munorma::%loop-player%}
			set {sbnorma::%loop-player%} to {sunorma::%loop-player%}
			set {hbnorma::%loop-player%} to {hunorma::%loop-player%} 
			set {mbnorma::%loop-player%} to 0
			set {sbnorma::%loop-player%} to 0
			set {hbnorma::%loop-player%} to 0
		
	
command /sprawdz [<player>]:
	trigger:
		if player has permission "admin.info":
			send "&aBieżący tydzień Gracza &c%arg 1%&a: %{hbnorma::%arg 1%}%h %{mbnorma::%arg 1%}%m %{sbnorma::%arg 1%}%s" to player
			send "&aUbiegły tydzień Gracza &c%arg 1%&a: %{hunorma::%arg 1%}%h %{munorma::%arg 1%}%m %{sunorma::%arg 1%}%s" to player
			

 

Edytowane przez Byialy
Odnośnik do komentarza
https://skript.pl/temat/43044-skrypt-sprawdzaj%C4%85cy-ilo%C5%9B%C4%87-godzin/
Udostępnij na innych stronach

6 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
1 godzinę temu, Byialy napisał:

Jest ktoś w stanie coś takiego zrobić?

No, powiem tak. Prosisz o coś cholernie trudnego, co trzeba właściwie robić na piechotę. Mimo wszystko chętnie dorzucę jedną cegiełkę od siebie do powstawania skryptu.

Przesyłam funkcję na sprawdzanie obecnego dnia tygodnia.

import:
	java.time.format.TextStyle
	java.time.LocalDate
	java.util.Locale
	
function getDayOfTheWeek() :: text:
    return "%LocalDate.of((now formatted as ""yyyy"" parsed as integer) , (now formatted as ""MM"" parsed as integer) and (now formatted as ""dd"" parsed as integer)).getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale(""en"", ""US""))%"

Wymagany dodatek skript-reflect.

Odnośnik do komentarza
https://skript.pl/temat/43044-skrypt-sprawdzaj%C4%85cy-ilo%C5%9B%C4%87-godzin/#findComment-269385
Udostępnij na innych stronach

  • 0
4 minuty temu, Byialy napisał:

Podany przez Ciebie kod umożliwia powstanie zdarzenia/warunku "every Sunday"? 

 

Nie, umożliwia jedynie pobranie nazwy obecnego dnia.

Odnośnik do komentarza
https://skript.pl/temat/43044-skrypt-sprawdzaj%C4%85cy-ilo%C5%9B%C4%87-godzin/#findComment-269397
Udostępnij na innych stronach

  • 0
13 minut temu, Byialy napisał:

Podany przez Ciebie kod umożliwia powstanie zdarzenia/warunku "every Sunday"? 

 

Jeżeli już to nie używałbym periodicalu 'every 7 days', gdyż ta pętla będzie rozpoczynała się po każdym starcie serwera. Innymi słowy, aby jakikolwiek kod się wykonał w takim periodicalu, serwer musi działać nieprzerwanie minimum przez 7 dni. Wszelkie wyłączenia serwera (planowane i nieplanowane (np. gdy serwer się wysypie)) oraz przeładowania skryptu zresetują odliczanie do zera.

Zrobiłbym to następująco:

# Kod wykonujący się każdorazowo co minutę
every 1 minute:

	# Sprawdzanie czy obecnie jest godzina 00:00
	now formatted as "HH:mm" is "00:00"
	
	# Sprawdzanie czy dzisiaj jest poniedziałek
	getDayOfTheWeek() is "Monday"
	
	# Twój dalszy kod operujący na zmiennych graczy (sumowanie czasu online itp.)
    # Tutaj również zmienna zawierająca czas online w tym tygodniu stawałaby się zmienną czasu online w zeszłym tygodniu

Natomiast jak liczyłbym czas online? Sprawdzał różnicę czasu między ostatnim wejściem na serwer, a wyjściem.

# Przykładowo:

on quit:
	add (difference between player's last login and now) to {czasOnline::obecnyTydzien::%player%}

Oczywiście należałoby sprawdzać czy gracz aby przypadkiem nie grał na przełomie niedzieli i poniedziałku. Jeżeli grałby, no to należałoby dodać różnicę między wejściem gracza na serwer, a godziną 00:00 do zmiennej z zeszłego tygodnia, a czas online od godziny 00:00 aż do czasu wyjścia do zmiennej z obecnego tygodnia.

Co do twojego pytania, kod powyżej to jedynie funkcja zwracająca obecny dzień tygodnia.

# Przykład użycia:

command /dzien:
	trigger:
		send "&fToday is &6%getDayOfTheWeek()%&f!" to sender

 

Edytowane przez Kormic
Odnośnik do komentarza
https://skript.pl/temat/43044-skrypt-sprawdzaj%C4%85cy-ilo%C5%9B%C4%87-godzin/#findComment-269399
Udostępnij na innych stronach

  • 0
Spoiler

on quit:
    add (difference between player's last login and now) to {czasOnline::obecnyTydzien::%player%}
every 1 minute:

    now formatted as "HH:mm" is "00:00"
    
    getDayOfTheWeek() is "Monday"
    loop all players:
        if loop-player has permission "ekipa.info":
            set {czasOnline::ubieglyTydzien::%loop-player%} to {czasOnline::obecnyTydzien::%loop-player%}
        
    
command /sprawdz [<player>]:
    trigger:
        if player has permission "admin.info":
            send "&aBieżący tydzień Gracza &c%arg 1%&a: %{czasOnline::obecnyTydzien::%arg 1%}%" to player
            send "&aUbiegły tydzień Gracza &c%arg 1%&a: %{czasOnline::ubieglyTydzien::%arg 1%}%" to player
            
import:
    java.time.format.TextStyle
    java.time.LocalDate
    java.util.Locale
    
function getDayOfTheWeek() :: text:
    return "%LocalDate.of((now formatted as ""yyyy"" parsed as integer) , (now formatted as ""MM"" parsed as integer) and (now formatted as ""dd"" parsed as integer)).getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale(""en"", ""US""))%"

Na chwilę obecną jest to. Myślę nad dopisaniem fragmentu o tym, że o północy wszystkie osoby, których normę sprawdzamy (skrypt ten ma służyć do kontroli normy Ekipy serwera) zostają wyrzucone z serwera. Co myślicie o takim rozwiązaniu? 

Odnośnik do komentarza
https://skript.pl/temat/43044-skrypt-sprawdzaj%C4%85cy-ilo%C5%9B%C4%87-godzin/#findComment-269402
Udostępnij na innych stronach

  • 0
11 minut temu, Byialy napisał:

Na chwilę obecną jest to. Myślę nad dopisaniem fragmentu o tym, że o północy wszystkie osoby, których normę sprawdzamy (skrypt ten ma służyć do kontroli normy Ekipy serwera) zostają wyrzucone z serwera. Co myślicie o takim rozwiązaniu? 

Nie bawiłbym się w wyrzucanie graczy, bo zrazisz ich tym do siebie i swojego serwera. Mimo wszystko dobrze byłoby, abyś zrobił to sprawdzanie czy grał na przełomie niedzieli i poniedziałku. Dałem ci mniej więcej instrukcję tego jak mógłbyś to zrobić (tak, wiem, że to jest dział "Zlecenia").

Odnośnik do komentarza
https://skript.pl/temat/43044-skrypt-sprawdzaj%C4%85cy-ilo%C5%9B%C4%87-godzin/#findComment-269403
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ę...