W razie błędów daj znać, proszę:
on first join:
set {ochrona::czas::%player%} to now
while player is online:
if {ochrona::czas::%player%} is not set:
exit loop
if difference between {ochrona::czas::%player%} and now is greater than or equal to 10 minutes:
clear {ochrona::czas::%player%}
remove player from {ochrona::gracze::*}
send "&cTwoja poczatkowa ochrona sie skonczyla, miej sie na bacznosci i powodzenia!" to player
exit loop
wait 1 second
on join:
if {ochrona::czas::%player%} is not set:
stop
while player is online:
if {ochrona::czas::%player%} is not set:
exit loop
if difference between {ochrona::czas::%player%} and now is greater than or equal to 10 minutes:
remove player from {ochrona::gracze::*}
clear {ochrona::czas::%player%}
send "&cTwoja poczatkowa ochrona sie skonczyla, miej sie na bacznosci i powodzenia!" to player
exit loop
wait 1 second
command /ochronawylacz:
trigger:
if {ochrona::czas::%player%} is not set:
send "&cNie posiadasz ochrony poczatkowej!" to player
stop
clear {ochrona::czas::%player%}
send "&cWylaczyles swa poczatkowa ochrone, miej sie na bacznosci i powodzenia!" to player
on damage of player:
if attacker is not a player:
stop
if {ochrona::czas::%victim%} is not set:
stop
cancel event
send "&cTen gracz posiada poczatkowa ochrone!" to attacker
Status użytkownik sam sobie ustala, mógłbyś to co najwyżej zrobić poprzez nadawanie roli "Online" gdy gracz dołącza na serwer, a gdy wyjdzie, to nadaje "Offline".
Rolę wymaganą do użycia danej komendy definiujesz poprzez 'roles', które umieszczasz nad 'trigger:', przykładowo:
discord command .test:
roles: Wlasciciel
trigger:
Natomiast logi możesz zapisywać w logach serwera Minecraft, przykładowo:
discord command .test:
roles: Wlasciciel
trigger:
log "%now% - %event-user% uzyl komendy .test na kanale %event-channel%!" to "discord/komendy"
Nie mam 100% pewności co do %event-user%, lecz raczej wszystko powinno dobrze działać.
Chyba nadszedł czas na odświeżenie i dopieszczenie tego tematu... zatem:
Jak zdefiniować komendę:
każdą komendę musimy rozpocząć od początku nowej linijki
pierwszym słowem w owej linijce zawsze jest 'command', po nim występuje opcjonalnie ukośnik a za nim nazwa naszej komendy
na końcu danej linijki stawiamy dwukropek - jako rozpoczęcie nowej sekcji (w tym przypadku komendy)
poniżej dwa przykłady tworzące komendę '/poradnik'
command poradnik:
command /poradnik:
jak wiadomo - po każdym dwukropku następna linia musi być poprzedzona o jedno wcięcie więcej
'wcięcie' ustalamy zawsze w drugiej linijce każdego wydarzenia, funkcji czy tak jak w tym przypadku - komendy. Wcięcie składa się z dowolnej liczby spacji lub tabulatorów (przy czym najczęściej wykorzystywanym i najbardziej przejrzystym jest jeden tabulator (klawisz TAB).
Wcięć nie wolno mieszać w pojedynczej sekcji skryptu - jeżeli w drugiej linijce użyliśmy jednego taba, tak we wszystkich kolejnych musi to być jeden tab (a nie powiedzmy 4 spacje)
Każda komenda posiada konfigurację (ale o tym będzie później) - zakończeniem konfiguracji jest słowo 'trigger' (poprzedzone dwukropkiem) - oznacza ono część właściwą komendy - czyli wykonywany kod (+przykład użycia wcięcia - jednego taba)
command /poradnik:
[wcięcie] trigger:
command /poradnik:
trigger:
po słowie trigger, możemy rozpocząć pisanie kodu, poniżej pokażę przykład z wysyłaniem wiadomości do gracza (lub konsoli), który wykonał komendę. Skorzystam z efektu 'send "wiadomość"'
command /poradnik:
[wcięcie] trigger:
[wcięcie] [wcięcie] send "Pierwsza komenda"
command /poradnik:
trigger:
send "Pierwsza komenda"
Argumenty komendy - rodzaje, definiowanie:
jak wiadomo - w większości komend możemy korzystać z argumentów - każdy argument (poza ostatnim) oddzielony jest od siebie (i nazwy komendy) spacjami
aby do komendy dodać argument musimy w pierwszej linijce, zaraz po nazwie wpisać typ argumentu w nawiasach ostrych '<typ argumentu>' (przy korzystaniu z argumentów należy pamiętać o tym, że dwukropek wędruje na koniec linijki - za wszystkie argumenty)
'typy argumentów' - czyli wartości które przyjmuje argument rozpisane są w każdej dokumentacji w zakładce 'Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!'. Wymuszają one na graczu wprowadzenie odpowiedniej wartości - np. tekstu, liczby, nicku gracza lub koloru. Zazwyczaj korzystamy z czterech typów:
string (lub text) - tekst
number - liczba
integer (lub int) - liczba całkowita
player / offline player - nick gracza online lub offline
w przykładzie poniżej podam komendę z jednym argumentem o typie 'string':
command /poradnik <string>:
powyżej nasz pierwszy argument jest jednocześnie ostatnim, zatem będzie zwracał wszystko co w nim wpiszemy
dodawanie kolejnych argumentów jest proste - wystarczy postawić spację i wpisać kolejny typ:
command /poradnik <string> <integer> <string>:
powyżej mamy trzy argumenty - tekst, liczbę całkowitą oraz drugi tekst - należy pamiętać, że pierwszy tekst zwróci nam tylko jedno słowo, liczba tylko jedną liczbę, a ostatni argument wszystko pozostałe
w powyższych przykładach stworzone argumenty są obowiązkowe do podania - gdy tego nie zrobimy - komenda zwróci błąd
istnieje opcja tworzenia argumentów opcjonalnych - tj. takich, gdzie podanie argumentu nie jest potrzebne - wystarczy typ argumentu wpisać dodatkowo w nawiasy kwadratowe '[<typ argumentu>]'
opcjonalne argumenty używamy z reguły na końcu - na początku wstawiamy te wymagane
command /poradnik <string> <integer> [<string>] [<number>]:
dla każdego argumentu możemy ustawić 'domyślną wartość' - należy jednak pamiętać by była ona zgodna z podanym typem
po zdefiniowanym typie argumentu wstawiamy znak równości, a za nim naszą domyślną wartość '<typ argumentu=wartość>'- będzie ona używana w momencie gdy gracz wykona komendę nie podając danego argumentu, przykładowo:
command /poradnik <integer=10>:
liczbę całkowitą (oraz zwykłe liczby) zapisujemy bezpośrednio po znaku równości - zgodnie ze składnią skripta
command /poradnik <string="domyślny tekst">:
tekst w argumencie zapisujemy dodatkowo w cudzysłowach - zgodnie ze składnią skripta
Argumenty komendy - użycie:
myślę że warto zacząć od wyjaśnienia iż 'argument komendy' jest wyrażaniem ('expression') i można z niego korzystać tak jak ze wszystkich innych wyrażeń - tj. pobierać jego wartość, wykonywać na nim działania matematyczne itp.
odwołujemy się do niego wpisując słowo 'argument' (w skrócie: arg) o ile argument jest jeden lub 'argument-numer' (w skrócie: arg-numer) gdy trzeba odnieść się do konkretnego argumentu
stwórzmy zatem komendę z opcjonalnym argumentem tekstowym i wyślijmy jego treść do gracza po wpisaniu komendy
command /poradnik [<string>]:
trigger:
send "%argument%"
słowo 'argument' zostało umieszczone w procentach - co powoduje wyświetlenie wartości owego argumentu (wyrażenia) w tekście, który wysyłamy do gracza
jeżeli w argumencie podamy wiadomość - zostanie ona do nas wysłana
jeżeli jednak jej nie podamy - naszym oczom ukaże się błąd '<none>'
'<none>' (czyli skriptowa wersja słowa 'null') oznacza iż nasz argument (nasze wyrażenie) jest puste - nie zawiera żadnej wartości (w tym przypadku - wysłaliśmy pustą komendę bez argumentu)
można temu zapobiec ustawiając domyślną wartość argumentu:
command /poradnik [<string="nie podałeś argumentu">]:
trigger:
send "%argument%"
lub robiąc to ręcznie w kodzie używając warunku sprawdzającego czy wyrażenie (argument) ma wartość - 'argument is set' lub 'argument is not set':
command /poradnik [<string>]:
trigger:
if argument is set:
send "%argument%"
else:
send "nie podałeś argumentu"
oczywiście jak już wyżej napisałem - na argumentach można dowolnie operować
zróbmy więc komendę, która sprawdzi czy podany argument jest zgodny z daną wartością i wyślijmy odpowiednią wiadomość:
niech komenda sprawdza kolor z pierwszego argumentu, i w tym kolorze wysyła liczbę z drugiego argumentu, jeżeli kolor nie będzie zgodny z dwoma wybranymi (powiedzmy zielony i czerwony) to wyślijmy poprawne użycie komendy:
command /kolor [<string>] [<integer=10000>]:
trigger:
#sprawdzamy czy argument pierwszy został wpisany, jeżeli nie - wysyłamy wiadomość z odpowiednim użyciem
if argument-1 is not set:
send "poprawne użycie to /kolor <czerwony/zielony> <liczba>"
else:
#sprawdzamy czy argument pierwszy to "czerwony"
if argument-1 is "czerwony":
#wysyłamy liczbę z argumentu drugiego w kolorze czerownym
send "&c %argument-2%"
#sprawdzamy czy argument pierwszy to "zielony"
else if argument-1 is "zielony":
#wysyłamy zieloną liczbę
send "&a %argument-2%"
#jeżeli argument nie jest ani "czerwony" ani "zielony" to wysyłamy ponownie poprawne użycie
else:
send "poprawne użycie to /kolor <czerwony/zielony> <liczba>"
Konfiguracja komendy:
w każdej komendzie jak już wyżej wspomniałem możemy dodać konfigurację - czyli kilka opcji mieszczących się między 'pierwszą linijką komendy' a słowem 'trigger'
każda opcja konfiguracyjna kończy się dwukropkiem a zaraz za nim wpisywana jest jej wartość
poniżej wypiszę i objaśnię wszystkie opcje:
'aliases' - aliasy komend, czyli opcja dla tych, którzy chcą by jedna komenda mogła mieć kilka nazw, wypisujemy je po dwukropku oddzielając przecinkiem
aliases: poradnik, poradniczek, help, pomoc
'permission' - permisja wymagana do użycia komendy - zaleca się, aby permisja była w formacie 'nazwa komendy.nazwa permisji'
permission: poradnik.uzycie
permission: poradnik.*
'permission message' - czyli wiadomość wysyłana do gracza, gdy komenda zostanie odrzucona z powodu braku powyższej permisji
permission message: Potrzebujesz permisji 'poradnik.uzycie' aby skorzystać z tej komendy
'executable by' - opcja która narzuca kto może korzystać z komendy - tylko gracze; tylko konsola; gracze i konsola, dostępne wartości: 'players', 'players and console', 'console'
executable by: players
executable by: console
executable by: players and console
'description' - opis komendy (wyświetlany m.in w domyślnym /help)
description: Ta komenda wyświetla poradnik o pisaniu komend
'usage' - poprawne użycie komendy
usage: /kolor <czerwony|zielony> [liczba]
'cooldown' - opóźnienie pomiędzy użyciami komendy (wymagane jest podanie typu Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!, np. '10 minutes' lub '1 day')
cooldown: 10 minutes
'cooldown bypass' - permisja, która pozwala pominąć opóźnienie
cooldown bypass: poradnik.cooldown.bypass
'cooldown message' - wiadomość jaką otrzyma gracz, gdy nie odczeka czasu ustawionego wyżej
można korzystać z wyrażeń:
'remaining time' - pozostały czas do następnego użycia
cooldown message: Kolejny raz komendy możesz użyć za %remaining time%
'elapsed time' - czas, który upłynął od ostatniego użycia
cooldown message: Od ostatniego użycia minęło dopiero %elapsed time%
'last usage date' - data ostatniego użycia
cooldown message: Ostatni raz użyłeś tej komendy %the last usage date%
'cooldown time' - czyli ustawiony wyżej czas pomiędzy użyciami
cooldown message: Pomiędzy użyciami tej komendy musisz odczekać %cooldown time%
'bypass permission' - ustawiona wyżej permisja, która pozwala pominąć opóźnienie
cooldown message: Nie posiadasz permisji %bypass permission%, musisz odczekać aż upłynie czas
'cooldown storage' - zmienna, w której przechowywana będzie data zakończenia cooldownu. Gdy ją ustawimy cooldown nie zresetuje się po wyłączeniu serwera.
cooldown storage: {cooldown::poradnik::%name of player%}
zbiorowe użycie w komendzie, przykładowo:
command /poradnik <string="domyślna wiadomość">:
executable by: players
permission: poradnik.użycie
permission message: Musisz posiadać permisję poradnik.użycie aby wykonać tą komendę
cooldown: 15 seconds
cooldown message: &cMusisz odczekać %cooldown time% pomiędzy użyciami tej komendy, pozostało jeszcze %remaining time%
trigger:
send argument
Nasłuchiwanie komend:
tworzenie własnych komend to nie wszystko, mamy przecież też masę innych dodawanych przez różne pluginy, skrypty czy silniki, poniżej znajduje się krótkie wyjaśnienie jak nasłuchiwać ich użycia, jak się do nich odwoływać i jak je blokować:
zacznijmy zatem od najważniejszego - event (wydarzenie) 'on command'
wykonuje się ono z momencie wysłania przez gracza (lub konsolę) komendy
aby go użyć zaczynamy od początku nowej linii wpisujemy jego nazwę i stawiamy dwukropek otwierając nową sekcję
on command:
możemy z tego wydarzenia pobrać trzy wyrażenia:
'sender' - czyli gracz lub konsola, który wykonał komendę
'command' - czyli nazwę komendy która została wykonana (!jeżeli komenda została użyta poprzez alias, to wyrażenie zwróci nam alias, a nie główną komendę)
'arguments' - czyli wpisane argumenty komendy lub '<none>' gdy ich nie będzie
'full command' - czyli cała wpisana wartość (komenda + argumenty)
można przerwać wykonywanie komendy (tj. anulując wydarzenie) wpisując 'cancel event'
przykładowe użycie - blokujemy używanie komendy /poradnik wszystkim graczom
on command:
#sprawdzamy czy komenda to "poradnik"
if command is "poradnik":
#sprawdzamy czy wysyłający komendę to gracz - jeżeli tak - blokujemy komendę
if sender is a player:
#blokujemy komendę
cancel event
W takim wypadku spróbuj tak jak ci napisałem w edytowanym poście wyżej, tylko widocznie musisz nieco zwiększyć czas oczekiwania. Tylko pamiętaj, aby nie był to zbyt długi delay, gdyż jeżeli podczas niego serwer przestanie działać, to elytra nigdy nie zostanie wydropnięta.
Cóż, można ewentualnie tak spróbować, ale raczej to nie zadziała, gdyż już wtedy go fizycznie nie będzie:
on death of ender dragon:
wait 5 seconds
drop 1 elytra at victim
W takim wypadku spróbuj zamienić pierwszą część skryptu (pierwszy event) na to:
on death of ender dragon:
set {_loc} to location of the victim
add 30 to y-coordinate of {_loc}
drop 1 elytra at {_loc}
set glowing of last dropped item to true
Teraz elytra będzie dropiła 30 kratek wyżej niż będzie smok, powinno być lepiej. Jeśli nadal nie będzie dobrze, to zwiększ wartość.
EDIT:
Ewentualnie możesz zamiast 'add 30 to y-coordinate of {_loc}' dać 'wait 3 seconds'.
bLife jest zaawansowanym, a jednocześnie innowacyjnym systemem żyć.
Skrypt zawiera urozmaicony config, który pozwala dowolnie edytować kod.
bLife wprowadza do gry system żyć, który za zginięcie zabiera jedno wirtualne życie. Podczas gdy gracz zginie z jednym życiem, zostaje ukarany karą ustawioną w configu.
Życia można zdobywać kupując je w sklepie pod komendą /zycie. Dla Administracji jest komenda /dodajzycie <gracz> <ilosc>, która nadaje życia podanemu graczowi.
Wymagania:
Skript min 2.2,
Skript-mirror,
SkQuery (nie jestem pewien, ale raczej wymagany jest SkQuery lime),
Vault,
Tuske,
Coś obsługującego ekonomię - może być to Essentials czy Saneeconomy.
Kod: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!
Jest to wersja beta, w której mogą być błędy - jeśli napotkacie na takowe, to prosiłbym o jak najszybsze ich zgłoszenie
Skrypt powstał z uwagi na to, iż wiele osób tworzyło zlecenia dotyczące właśnie takiego skryptu.
Niecały rok temu na forum pojawił się skrypt o nazwie DiscordSK i za pomocą bota łączył serwer z discordem.
Tutaj link:
Myślę, że to ci się przyda.
EDIT:
Nawet jeżeli nie znajdziesz tam dokładnej odpowiedzi to zapewne będziesz mógł się zainspirować/zasugerować tamtejszymi rozwiązaniami.
on death of ender dragon:
set {respawn::czas::enderdragon} to now
set {respawn::miejsce::enderdragon} to event-location
wait 1 hour
spawn a ender dragon at {respawn::miejsce::enderdragon}
clear {respawn::miejsce::enderdragon}
clear {respawn::enderdragon}
on load:
if difference between {respawn::czas::enderdragon} and now is greater than or equal to 1 hour:
spawn a ender dragon at {respawn::miejsce::enderdragon}
clear {respawn::miejsce::enderdragon}
clear {respawn::czas::enderdragon}
Uzupełnij sobie w event'cie 'on load' koordynaty oraz świat.
EDIT:
Wprowadziłem małą poprawkę. Już nie trzeba podawać koordynatów.