piratjsk 700 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 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 .skqPierwszy 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: EfektyWszystkie 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żeniadeclare 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ść>" KomentarzeKaż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.0declare 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 logikiTeraz 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 playerscustom expression logic for "answer to life": set expression value to 42custom 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 expressionDokł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. ZaczynamyTworzymy 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-entitydeclare 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 falsePowyż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 ThisFuckingFanatically, ShroN, Norbi i 6 innych 9 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 Więcej opcji udostępniania...
herhor67 916 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 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 Więcej opcji udostępniania...
Norbi 1337 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 Nie nie rozumiem. Chodzi o to, że można tworzyć własne efekty ? Odnośnik do komentarza https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35169 Udostępnij na innych stronach Więcej opcji udostępniania...
piratjsk 700 Opublikowano 9 listopada 2014 Autor Udostępnij Opublikowano 9 listopada 2014 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 .skqdeclare effect "nowy efekt dla %player%" # plik .skcustom 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 playerEdit: 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 Więcej opcji udostępniania...
7331galaxy 1 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 Troche chaotycznie napisane.I tak nie będe używał SkQuery w najbliższyym czasie, ale się przyda. ^^ Odnośnik do komentarza https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35175 Udostępnij na innych stronach Więcej opcji udostępniania...
boleknowak 961 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 Fajne. Nie wiedziałem że takie coś się da zrobić XD tylko szkoda że nie rozumiem xdA mogę np. zrobić takie coś?command /cos: trigger: nowa funkcja dla graczai ta nowa funkcja dla gracza to np. send "siema" to playerMogę ? 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 Więcej opcji udostępniania...
piratjsk 700 Opublikowano 9 listopada 2014 Autor Udostępnij Opublikowano 9 listopada 2014 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 playerMogę ? 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 Więcej opcji udostępniania...
tropereks 780 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 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 Więcej opcji udostępniania...
Adamek 182 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 Szczerze powiedziawszy... wolę Jave :u No ale jak ktoś javy nie ogarnia... no to może, ale nie widze w tym sensu :u Pozdrowionka Odnośnik do komentarza https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35201 Udostępnij na innych stronach Więcej opcji udostępniania...
ToNy 548 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 Bardzo proste rzeczy, myślę że już większość to ogarnęła :P Odnośnik do komentarza https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35203 Udostępnij na innych stronach Więcej opcji udostępniania...
herhor67 916 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 OK. to drugie ogarniam :)Czyli np. plik .skqdeclare 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 Więcej opcji udostępniania...
piratjsk 700 Opublikowano 9 listopada 2014 Autor Udostępnij Opublikowano 9 listopada 2014 OK. to drugie ogarniam :)Czyli np. plik .skqdeclare 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 Więcej opcji udostępniania...
herhor67 916 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 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 wszystkichcustom 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 wszystkichoczywiś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 Więcej opcji udostępniania...
piratjsk 700 Opublikowano 9 listopada 2014 Autor Udostępnij Opublikowano 9 listopada 2014 custom effect logic forto 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 wszystkichoczywiście osobno plik .skq taki jak dałeś powyżejtak. 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 Więcej opcji udostępniania...
PanNiedzwiadek 173 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 Nic nie kumam :( Mogę zastąpić event on command:na np.on com:??? Odnośnik do komentarza https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35275 Udostępnij na innych stronach Więcej opcji udostępniania...
tropereks 780 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 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 wszystkichale 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 Więcej opcji udostępniania...
piratjsk 700 Opublikowano 9 listopada 2014 Autor Udostępnij Opublikowano 9 listopada 2014 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 Więcej opcji udostępniania...
tropereks 780 Opublikowano 9 listopada 2014 Udostępnij Opublikowano 9 listopada 2014 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 Więcej opcji udostępniania...
piratjsk 700 Opublikowano 9 listopada 2014 Autor Udostępnij Opublikowano 9 listopada 2014 To dopisz ze bez tego nie będzie działać i ze nie można w ten sposób zrobić eventuPo 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 Więcej opcji udostępniania...
Nieaktywny Opublikowano 12 listopada 2014 Udostępnij Opublikowano 12 listopada 2014 Napisałem plugin DragonControleSkriptAPI i użyłem też twojego poradnika podmieniłem zmienne (tam wiem w java mogłem użyć "ASCII") i lepiej się lata. Odnośnik do komentarza https://skript.pl/temat/4165-skquery-skquery-addons-w%C5%82asne-efekty-i-wyra%C5%BCenia/#findComment-35790 Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi