Skocz do zawartości

[SkQuery] skQuery Addons - Własne efekty i wyrażenia


Rekomendowane odpowiedzi

Tworzenie dodatku dla Skript w Skript?


Wielu skrypterów używało zmiennych i niestandardowych komend aby tworzyć skomplikowane i łatwo rozszerzalne skrypty. Niestety, dla wielu korzystanie z komend jest niewygodne i uciążliwe. Autorzy kilku dodatków (w tym skQuery, WildSkript, a nawet samego Skript) próbowali (i w większości im się to nie udało) wprowadzić system, który mógłby zastąpić korzystanie z komend zachowując piękno składni Skript. Dzięki wprowadzeniu niestandardowych wyrażeń i efektów możesz stworzyć swój mini-dodatek do Skript bez jakiejkolwiek wiedzy na temat Javy.
 
 
Krok 1: Tworzenie pliku .skq
Pierwszy krok na drodze do stworzenie nowych efektów i wyrażeń polega na stworzeniu w folderze /scripts/ pliku z rozszerzeniem .skq. Jeśli nazwę pliku zaczniesz od - nie zostanie on, tak jak w przypadku zwykłego skryptu, załadowany.
 
Dodaj jedną lub więcej poniższych linii kodu do utworzonego pliku:
 
Efekty
Wszystkie elementy są formatowane tak jak to można odczytać z oficjalnej dokumentacji, co oznacza, że możesz użyć %<typ>% wewnątrz składni aby skorzystać z parametrów.
 
declare effect "<składnia Twojego efektu>"
 
Wyrażenia
declare expression "<składnia Twojego wyrażenia>" as "<typ wartości, którą zwraca Twoje wyrażenie>"
 
declare loopable expression "<sładnia>" as "<typ>"
 
declare property "<składnia>" as "<typ>" for "<typ obiektu, dla którego jest ta właściwość>"
 
Komentarze
Każda linia zaczynająca się -- będzie odczytana jako komentarz i zignorowana.
 
Plik example.sqk, do którego będę się niżej odwoływał zawiera następujący kod: 

-- Test 1.0
declare effect "my custom effect"
declare expression "answer to life" as "number"
declare loopable expression "cool people" as "text"
declare property "%number% decrementation" as "number" for "number"

 

Należy także zwrócić uwgaę, że gdy uruchomisz swój serwer, plik .skq zostanie deaktywwany (w nazwie zostanie dodany -) i w folderze /scripts/ znajdzejsz nowy plik .skqc. Jeśli nie udostępniasz źródła, NIGDY NIE UDOSTĘPNIAJ PLIKU .SQK. Jeśli chcesz zmienić zawartość pliku .skq musisz usunąć - z początku jego nazwy.
 
Krok 2: Dodawanie logiki
Teraz w pliku .sk musisz dodać logikę (kod) do Twojego nowego efektu/wyrażenia. Zakładając, że doszedłeś już tak daleko, zakładam, że rozumiesz, że będę tu tworzył implementację pliku exapmle.skq. Obowiązują tu zwykłe zasady Skript, niestandardowe elementy mogą być stosowane w tworzonej logice.

custom effect logic for "my custom effect":
    give 1 diamond to all players
    wait 10 seconds
    ban all players
custom expression logic for "answer to life":
    set expression value to 42
custom expression logic for "cool people":
    set expression value to "w00tmast3r", "MostFunGuy", "Nfell2009", "Njolbrim"
custom property logic for "%number% decrementation" of "number":
    set expression value to number origin expression - number expression 1

 

Podstawowe wyrażenia: lekka dokumentacja

# Dotyczy wszystkich przypadków gdy chcemy uzyskać wartość wyrażenia zdefiniowanego w składni tworząc logikę elementu
# Loopable (zapętlanie) dotyczy tylko wyrażeń, które zwracają wiele wartości (teksty, gracze, bloki, itp.)
# Type (typ) dotyczy typu, który oczekujesz, że zwróci wyrażenie (liczba, przedmiot, gracz, mob, itd.)
%type% [loopable] expression( |-)%number%
 
# Dotyczy tylko wyrażeń i własności (properties), określa to czym chcesz, żeby była wartość wyrażenia
[custom] expression ([return] value|output)
 
# Dotyczy tylko własnośći (properties), to samo co wyrażenie ale odnosi się do właściciela własności (np. player's sack, cheese of {_var})
%type% origin expression

Dokładniej opisująca i tłumacząca zagadnienie wersja poradnika:

Co chcemy zrobić?
Stworzyć własne efekty i wyrażenia dzięki nowej funkcji skQuery.
 
Zaczynamy
Tworzymy w folderze /scripts/ plik z rozszerzeniem .skq np "miniaddon.skq".
Jeśli nazwę pliku zaczniemy od myślnika "-" to plik nie zostanie wczytany (dokładnie tak jak wygląda to w przypadków zwykłych skryptów). 

W utworzonym pliku wpisujemy:
Jeśli chcemy utworzyć nowy efekt:
declare effect "<składnia Twojego efektu>"
-- np.:
declare effect "zabij adminow"

 
Jeśli chcemy utworzyć wyrażenie:
declare expression "<składnia Twojego wyrażenia>" as "<typ wartości, którą zwraca Twoje wyrażenie>"
-- np.:
declare expression "moje wyrazenie" as "boolean"
 
declare loopable expression "<sładnia>" as "<typ>"
-- to wyrażenie będzie zwracało kilka wartości i będzie je można zapętlać
-- np.:
declare loopable expression "pobliskie krowy" as "entity"
# w kodzie skryptu będzie można użyć pętli:
loop pobliskie krowy:
   ignite loop-entity
   kill loop-entity


declare property "<składnia>" as "<typ>" for "<typ obiektu, dla którego jest ta właściwość>"
-- to wyrażenie odwoływać będzie się do jakiegoś konkretnego typu
-- np.:
declare property "miejsce w rankingu" as "integer" for "player"

# w skryptach będziemy go używać w następujący sposób (np.):
send "miejsce w rankingu gracza %player-arg% to %miejsce w rankingu of player-arg%"


 
Parametry:
Podczas definiowania efektów i wyrażeń można użyć wyrażeń w samej składni, mianowicie np.:
declare effect "daj jablko dla %player%"
declare expression "%player% ma super zbroje" as "boolean"
i później w implementacji możemy pobrać wartość, która została wprowadzona w miejsce %player%.
Oczywiście zamiast player może być każdy inny typ (np. world, number, item, entity, itd.).
 
Komentarze:
Komentarze tworzymy zaczynając linię od dwóch myślników, np.:
-- to jest komentarz i ta linijka nie ma żadnego wpływu na działanie naszego mini-dodatku
 
Ważne:
Gdy uruchomimy serwer plik .skq zostanie "skomentowany" (na początku jego nazwy zostanie dodany myślnik) i w folderze /scripts/ zostanie automatycznie stworzony plik z rozszerzeniem .skqc.
Jeśli chcesz edytować plik .skq to musisz z jego nazwy usunąć myślnik, edytować plik i ponownie uruchomić serwer lub ewentualnie wykonać jego reload.
 
Implementacja stworzonych elementów
Żeby nasze efekty i wyrażenia coś robiły/zwracały musimy w zwykłym pliku .sk np. "miniaddon.sk" wpisać następujący kod:
 
W logice efektów i wyrażeń możemy używać następujących wyrażeń odwołujących się do zdefiniowanych parametrów:
# w efektach, wyrażeniach i własnościach (property)
# loopable tylko dla parametrów zwracających wiele wartości (teksty, gracze, itemy, liczby itp.)
# type to typ wyrażenia, do którego się odwołujesz (np. player, block, item, world itd.)
%type% [loopable] expression( |-)%number%
 
# tylko w wyrażeniach i własnościach (property)
# zapisujemy do tego wyrażenia to co ma zwracać nasze nowe wyrażenie/własność
[custom] expression ([return] value|output)
 
# tylko w własnościach (property)
# zwraca obiekt, do którego tworzymy naszą własność
# type to typ tego obiektu
%type% origin expression
 
Dla zdefiniowanych (w pliku .skq) efektów:
# efekt bez parametrów: 
custom effect logic for "zabij adminów":
    loop all players:
        loop-player is op
        kill loop-player
   broadcast "Wszyscy admini online zostali zabici."
 
# efekt z jednym parametrem:
custom effect logic for "daj jablko dla %player%":
    set {_p} to player expression 1
    if {_p} is op:
        give {_p} 5 gold apples
        send "dostales 5 zlotych jablek" to {_p}
    else:
        give {_p} 5 apples
        send "dostales 5 jablek" to {_p}
 
Dla zdefiniowanych wyrażeń:
custom expression logic for "moje wyrazenie":
    set expression value to true
 
# loopable expression:
custom expression logic for "pobliskie krowy":
    loop cows in radius 5 around player:
        add loop-cow to {_krowy:: *}
    set expression value to {_krowy:: *}
 
custom property logic for "miejsce w rankingu" of "player":
    set {_p} to player origin expression
    # kod na obliczanie miejsca w rankingu
  set expression value to {_miejsce}
 
custom expression logic for "%player% ma super zbroje":
    set {_p} to player expression 1
    set {_v} to 0
    if chestplate of {_p} is diamond chestplate named "super klata":
        add 1 to {_v}
    if boots of {_p} is diamond boots named "super kapcie":
        add 1 to {_v}
    if leggings of {_p} is diamond leggings named "super gatki":
        add 1 to {_v}
    if helmet of {_p} is diamond helmet named "super beret":
        add 1 to {_v}
    if {_v} is 4:
        set expression value to true
    else:
       set expression value to false

Powyższy poradnik opisuje funkcje dodane w najnowszej wersji dev skQuery, możliwej do pobrania z oficjalnej strony dodatku http://skquery.net.

Źródło: http://dev.bukkit.org/bukkit-plugins/skript/forum/tutorials/72019

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/
Udostępnij na innych stronach

Katastrofa. Nikt tego nie ogarnie (oprócz ciebie xD). No ale się rozpisałeś.

może jakiś przykład?

czyli np. zamiast

{ser.%player%}

jest

cheese of player ? Bo tak to trochę dziwne ;_; czy do takiego cheese of player nie trzeba czegoś jak np, vault do money i Multiverse do world?

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35168
Udostępnij na innych stronach

Katastrofa. Nikt tego nie ogarnie (oprócz ciebie xD). No ale się rozpisałeś.

Przecież jest tu wszystko ładnie, po polsku opisane, są nawet podane przykłady. Więc jeśli ktoś wykaże się choć niewielką inteligencją to powinien bez problemu, chociażby na zasadzie edytowania przykładu zrozumieć jak się tego używa.

 

Nie nie rozumiem. Chodzi o to, że można tworzyć własne efekty ?

Tak. Można tworzyć własne efekty i wyrażenia, np.:

-- plik .skq

declare effect "nowy efekt dla %player%"

 

# plik .sk

custom effect logic for "nowy efekt dla %player%":

    give 1 apple to player expression 1

    kick player expression 1 due to "dostales jablko dzieki nowej funkcji skQuery"

 

# i w skrypcie np.:

command /test:

    trigger:

        nowy efekt dla player

Edit: Hmm.. ok. Skoro macie problemy, żeby to zrozumieć to napiszę później taką bardziej syntetyczną, myślę, że łatwiejszą do zrozumienia wersję tego poradnika.

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35171
Udostępnij na innych stronach

Fajne. Nie wiedziałem że takie coś się da zrobić XD tylko szkoda że nie rozumiem xd

A mogę np. zrobić takie coś?

command /cos:    trigger:	    nowa funkcja dla graczai ta nowa funkcja dla gracza to np. send "siema" to player

Mogę ? XD

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35181
Udostępnij na innych stronach

Dodałem w pierwszym poście, na dole, w spojlerze, mam nadzieję, że bardziej zrozumiałą dla Was wersję poradnika.
 

Troche chaotycznie napisane.

Moim zdanie jest napisane jasno i przejrzyście, a na pewno nie chaotycznie. Ale cóż najwyraźniej myślę i odbieram niektóre rzeczy inaczej niż część użytkowników tego forum.
 

Fajne. Nie wiedziałem że takie coś się da zrobić XD tylko szkoda że nie rozumiem xd
A mogę np. zrobić takie coś?

command /cos:    trigger:	    nowa funkcja dla graczai ta nowa funkcja dla gracza to np. send "siema" to player
Mogę ? XD

 

Nom.

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35197
Udostępnij na innych stronach

No :)

Dzięki ze napisałeś poradnik, gdyż o tym kompletnie nie miałem pojęcia, oraz chyba jako, jedyny użytkownik zrozumiałem za pierwszym razem pierwsza wersje.

Jak dla mnie przejrzyście

~ tapatalk

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35200
Udostępnij na innych stronach

OK. to drugie ogarniam :)

Czyli np. plik .skq

declare effect "zabij wszystkich":

  kill all players

 

plik .sk

 

command /zabij:

  trigger:
  zabij wszystkich

 

czy to zadziała :?

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35222
Udostępnij na innych stronach

OK. to drugie ogarniam :)

Czyli np. plik .skq

declare effect "zabij wszystkich":

  kill all players

 

plik .sk

 

command /zabij:

  trigger:

  zabij wszystkich

 

czy to zadziała :?

nie. powinno być tak:

-- plik .skq:

declare effect "zabij wszystkich":

 

# plik .sk:

custom effect logic for "zabij wszystkich":

    kill all players

 

# plik .sk:

command /zabij:
    trigger:
        zabij wszystkich
Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35224
Udostępnij na innych stronach

nie. powinno być tak:

-- plik .skq:

declare effect "zabij wszystkich":

 

# plik .sk:

custom effect logic for "zabij wszystkich":

    kill all players

 

# plik .sk:

command /zabij:

    trigger:

        zabij wszystkich

custom effect logic for
to jest normalna składnia od skQuery?

Aha, a czy oba fragmenty .sk mogą być w 1 pliku?

custom effect logic for "zabij wszystkich":    kill all playerscommand /zabij:    trigger:        zabij wszystkich
oczywiście osobno plik .skq taki jak dałeś powyżej
Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35243
Udostępnij na innych stronach

custom effect logic for
to jest normalna składnia od skQuery?

tak.

Aha, a czy oba fragmenty .sk mogą być w 1 pliku?

custom effect logic for "zabij wszystkich":    kill all playerscommand /zabij:    trigger:        zabij wszystkich
oczywiście osobno plik .skq taki jak dałeś powyżej

tak.

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35249
Udostępnij na innych stronach

nie. powinno być tak:

-- plik .skq:

declare effect "zabij wszystkich":

# plik .sk:

custom effect logic for "zabij wszystkich":

kill all players

# plik .sk:

command /zabij:

trigger:

zabij wszystkich

ale po co/dlaczego/czemu deklarować to w pliku *.skq?

o tym też warto napisać :|

~ tapatalk

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35280
Udostępnij na innych stronach

ale po co/dlaczego/czemu deklarować to w pliku *.skq?

o tym też warto napisać :|

Bo w innym przypadku nie będzie to działać.

 

Mogę zastąpić event 

on command:
na np.

on com:
???

Nie. Można tworzyć tylko nowe wyrażenia i efekty, nie zdarzenia (eventy).

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35282
Udostępnij na innych stronach

Bo w innym przypadku nie będzie to działać.

Nie. Można tworzyć tylko nowe wyrażenia i efekty, nie zdarzenia (eventy).

To dopisz ze bez tego nie będzie działać i ze nie można w ten sposób zrobić eventu

~ tapatalk

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35283
Udostępnij na innych stronach

To dopisz ze bez tego nie będzie działać i ze nie można w ten sposób zrobić eventu

Po co?  Jest napisane przecież wyraźnie, że można tworzyć tylko efekty i wyrażenia, i że trzeba w tym celu zdeklarować je w pliku z rozszerzeniem .skq. Zakładam, że użytkownicy tego forum nie są totalnymi idiotami i wystarczy o danej rzeczy napisać jeden raz.

//Czas pokaże ~Tropereks

Odnośnik do komentarza
https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35285
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ę...