Skocz do zawartości
  • 0

Skrypt sprawdzający ilość godzin


Byialy
 Udostępnij

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

 Udostępnij

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

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