TheSrebrny80pl Napisano 3 Sierpnia 2017 Zgłoś Udostępnij Napisano 3 Sierpnia 2017 NAJWAŻNIEJSZE za nim zaczniesz przygodę ze skryptami Skript - nazwa własna pluginu, w którym pisze się SKRYPTY skrypt - kod zapisany w języku pluginu Skript script - angielskie słowo, odpowiednik słowa skrypt w języku polskim Co to jest Skript? Wtyczka Skript pozwala nam na bardzo proste tworzenie dodatków na swój serwer minecraft. Nie musimy znać żadnego języku programowania, lecz jakakolwiek wcześniejsza wiedza na temat C++/ Javy nam nie zaszkodzi, a wręcz pomoże zrozumieć funkcje pluginu. Przyda nam się także dobra znajomość języka angielskiego/ niemieckiego, ponieważ wszystkie zdarzenia, efekty, warunki opierają się na tych językach. O co chodzi?SSCC "Standard Skript Code Conventions" jest zestawem reguł pisania skryptów stworzonym przez destroyer'a4017. Określa on styl kodowania, który zapewnia kompatybilność z innymi skryptami, łatwość utrzymania/modyfikowania kodu oraz sprawia, że skrypt jest prosty do odczytania.Nazwy plików Nazwy plików kończących się na ".sk" nie powinny zawierać następujących znaków: # ` $ % { } (spacji) Jeśli w nazwie chcesz zawrzeć wersję skryptu powinna ona znaleźć się na końcu, za nazwą skryptu: skrewards-v1.2.3.skNazwy zmiennychPoniższe zasady odnoszą się tylko do zmiennych globalnych, nie do lokalnych (zaczynających się od _). Nazwy zmiennych powinny być zapisane według konwencji Aby zobaczyć link musisz się zalogować. , gdzie nie występują spacje oraz pierwsza litera każdego słowa (wyłączając pierwsze) zaczyna się z wielkiej litery. Zmienne tworzone przez skrypt powinny być definiowane w sposób {<nazwa skryptu>::<nazwa zmiennej>}, co ułatwia usuwanie danych danego skryptu albo aktualizowanie zmiennych z wcześniejszej wersji skryptu, na przykład: # Zamiast takiej zmiennej {current.reward}# Użyj następującego wzoru {skrewards::currentReward} Zmienne dynamiczne oraz listy powinny być stopniowane, co jest bardziej obiektowym podejściem i umożliwia zapętlanie danych. # Zamiast takich zmiennych {reward.level.modifier.1} {reward.level.modifier.2} {reward.level.modifier.3} {rewardstatus.%player%} {info.%player%.mined.diamonds} {info.%player%.mined.emeralds}# Użyj następujących wzorów {skrewards::rewardLevelModifier::1} {skrewards::rewardLevelModifier::2} {skrewards::rewardLevelModifier:: 3} {skrewards::rewardStatus::%player%} {skrewards::info::%player%::minedDiamonds} {skrewards::info::%player%::minedEmeralds}# Lub {skrewards::info::%player%::mined::diamonds} {skrewards::info::%player%::mined::emeralds} Jeśli piszesz API, powinieneś wpisać dane do zarezerwowanych nazw zmiennych {<nazwa skryptu>::api::<output ID>}. Jeśli używasz skQuery, możesz zapisywać dane do tych zmiennych gdy podprogram/funkcja jest wykonywany/a. W zwykłym Skript powinieneś zdeklarować komendy możliwe do użycia tylko z konsoli, które wpisują dane do tych zmiennych. Schemat ten pozwala twórcom skryptów tworząc własny skrypt pozyskiwać informacje z innych. Jeśli Twój skrypt jest BIBLIOTEKĄ, której jedynym celem jest udostępnienie funkcji, należy wtedy pominąć fragment ::api i używać {<nazwa skryptu>::<output ID>}. Zmienne API powinny być usunięte zawsze gdy serwer jest wyłączany.Porządkowanie kodu Stworzony kod musi być uporządkowany w określony sposób. Nie powinieneś wpisywać zdarzeń i komend w losowej kolejności; muszą być czytelnie oddzielone. Każdy z elementów może być pominięty, o ile są one w odpowiedniej kolejności. script options (jeśli używasz skQuery) aliasy [aliases:] zmienne [variables:] opcje [options:] podprogramy/funkcje (jeśli używasz skQuery) nowe komendy [command /komenda:] on script load: on script unload: okresowe zdarzenia (np. every 10 seconds, at 10:00) inne zdarzenia Zdarzenia i Warunki Zdarzenia zawsze powinny zaczynać się od słówka "on", mimo, że będą działać bez niego. Kiedy tylko to możliwe, powinieneś unikać używania selektorów w linii definiującej zdarzenie, np.: on right click with porkchop: on left click on tnt: on damage of cow: Należy uogólnić takie zdarzenia i skorzystać z warunków: on right click: if tool of player is porkchop:# dalszy kod on left click: if clicked block is tnt:# dalszy kod on damage: if victim is a cow:# dalszy kod Stosując warunki, NIGDY nie powtórzysz tego samego zdarzenia kilka razy w jednym skrypcie. Warunki powinny ZAWSZE zaczynać się od słówka "if" i kończyć dwukropkiem. NIGDY nie używaj warunków bez wprowadzenia dalszego kodu do ich wnętrza. To pozwoli twórcom skryptów w łatwy sposób dodać kod przed i po warunku albo dodać "else:". # Zamiast on damage: if victim is a player: {skrewards::info::%victim%::isInvincible} is true cancel event set {skrewards::info::%victim%::isInvincible} to false# Użyj takich warunków on damage: if victim is a player: if {skrewards::info::%victim%::isInvincible} is true: cancel event set {skrewards::info::%victim%::isInvincible} to false Specyfikacja LambdyAby zobaczyć link musisz się zalogować. są nową funkcją skQuery i mogą być używane we wszystkich wersjach powyżej 1.17.0. Pozwalają sporą ilość kodu skompresować do kilku linii. Lambdy, tak długo jak długo będą używane rozsądnie, będą spełniać wymagania SSCC. Lambdy mogą być brane pod uwagę jeśli: [*]Użyte są zamiast funkcji do wykonania POJEDYNCZEGO zadania [*]Użyte są do zaciemnienia kodu przez stworzenie bardzo skompresowanego kodu [*]Lepiej opisują ciąg zadań Nie wystarczające wiadomości? Funkcje Możliwość tworzenia własnych funkcji w skryptach do tej pory oferowały tylko dodatki (WS i skQ). Od momentu wydania developerskiej wersji Skript 2.2 można z nich korzystać bez żadnych dodatkowych pluginów. Skąd wziąć Skript w wersji 2.2? Najnowszą wersję Skript można pobrać Aby zobaczyć link musisz się zalogować. , warto też rozważyć skorzystanie z Aby zobaczyć link musisz się zalogować. autorstwa Mirreducki'ego. Składnia Istnieją dwa podstawowe typy funkcji: taka, która coś zwraca, jakąś wartość, oraz taka, która tylko wykonuje kod i nie zwraca żadnej wartości. # Funkcja, która zwraca wartość function nazwa_funkcji(nazwa_argumentu: %typ_argumentu%, ...) :: %typ_zwracanej_wartości%: # kod_funkcji return %coś% # Funkcja, która tylko wykonuje swój kod i nie zwraca żadnej wartości function nazwa_funkcji(nazwa_argumentu: %typ_argumentu%, ...): # kod_funkcji Argumenty są opcjonalne, można ich użyć ale nie trzeba. Definiowanie obydwu rodzaji funkcji zaczynamy od słowa kluczowego function, następnie po spacji podajemy nazwę, z której bedziemy później korzystać aby wywołać naszą funkcję. Po tym w nawiasach podajemy argumenty, jeśli nasza funkcja nie będzie z nich korzystać należy wstawić tylko nawiasy (). Argumenty podajemy według wzoru: nazwa: %typ%, np. gracz: player albo p: player, w: world. W przypadku funkcji zwracającej jakąś wartość trzeba w tym momencie podać typ tej wartości (np. number, text, player, location). Na końcu linijki definniującej funkcję należy umieścić dwukropek, a następne linijki (kod funkcji) wciąć o jedną jednostkę. Podając liczbę mnogą typu argumentu (np. players, entities, worlds) umożliwimy sobie podawanie wielu wartości (o podanmy typie). Tak samo sprawa ma się w przypadku typu zwracanej wartości, gdy podamy jego liczbę mnogą będziemy mogli zwracać listy wartości. Np. function podpal(g: players): function ktoWygral(mecz: text) :: players:. Argumenty Wiesz już jak zdefiniować argumenty, teraz czas nauczyć się z nich korzystac. Jest to naprawdę proste. W kodzie naszej funkcji odwołujemy się poprostu do zmiennych lokalnych (zaczynających się od znaku _) o takich nazwach jak podane argumenty. # np. function dajDiamenta(gracz: player): give 1 diamond to {_gracz} Korzystanie z funkcji Gdy już zdefiniowaliśmy naszą funkcję przyszedł czas aby ją wykorzystać. # np. command /daj: trigger: dajDiamenta(player) send "Oto twój diament :)" Jeśli nasza funkcja zwraca jakąś wartość to możemy ją np. zapisać do zmiennej. command /punkty: trigger: set {_punkty} to ileMaPunktow(player) send "&eMasz &6%{_punkty}% &epunktow." Definicja funkcji nie musi być w pliku, w którym z niej korzystamy. Funkcje zdefiniowane w jednym skrypcie będziemy mogli używać w każdym innym. Jak znajdę chwilę czasu to dodam tu jeszcze kilka przykładowych funkcji. function dodajWarpa(nazwa: text, lokacja: location) :: boolean: if {warpy::%{_nazwa}%} is set: return false else: set {warpy::%{_nazwa}%} to {_lokacja} return true ZAPISYWANIE I USUWANIE: 1) Pojedyncza wartość: Kod wygląda tak: set yaml value "nazwa" from file "plik.yml" to "wartosc" Sk sam stworzy dany plik, jednak stanie się to w folderze scripts. A co jeśli chcemy zrobić to w "plugins" ? Musimy dodać do ścieżki pliku "../" spowoduje to "przejście" o folder wyżej, czyli: set yaml value "nazwa" from file "../../plik.yml" to "wartosc" Powyższy kod stworzy plik "plik.yml" w folderze "plugins". Wyglądał on będzie tak: nazwa: wartosc Czasami potrzebujemy jednak zrobić coś w stylu: nazwa: nazwa1: nazwa2: wartosc Czyli takie "drzewko". Wtedy dodajemy "." pomiędzy nazwami czyli: set yaml value "nazwa.nazwa1.nazwa2" from file "../../plik.yml" to "wartosc" Aby usunąć: delete yaml value "wartosc" from file "plik.yml" 2) Lista: Kod do stworzenia listy: add "wartosc1" to yaml list "nazwalisty" from file "../../plik.yml" Stworzy to nam takie coś: nazwalisty: - wartosc1 Jeśli chcemy dodać klika wartości po prostu robimy to samo, tylko zmieniamy wartość. Więc kod: add "wartosc1" to yaml list "nazwalisty" from file "../../plik.yml" add "wartosc2" to yaml list "nazwalisty" from file "../../plik.yml" add "wartosc3" to yaml list "nazwalisty" from file "../../plik.yml" add "wartosc4" to yaml list "nazwalisty" from file "../../plik.yml" Stworzy nam: nazwalisty: - wartosc1 - wartosc2 - wartosc3 - wartosc4 Oczywiście jeśli chcemy zrobić "drzewko", tak samo jak na początku, dodajemy ",". Aby usunąć: remove "wartosc" from yaml list "lista" from file "plik.yml" ODCZYTYWANIE: 1) Pojedyncza wartość: Odczytujemy to kodem: set {zmienna} to yaml value "nazwa" from file "../../plik.yml" Zmienną tą możemy potem dowolnie użyć: send "%{zmienna}%" Możemy używać też bez zmiennych: send "%yaml value ""nazwa"" from file ""../../plik.yml""%" 2) Lista: Listy odczytujemy kodem: set {lista::*} to yaml list "nazwalisty" from file "../../plik.yml" Również listy możemy użyć bez zmiennych: send "%yaml list ""nazwalisty"" from file ""../../plik.yml""%" I to jest już koniec tego poradnika Pomogłem? daj repke ! - Pozdrawiam Srebrny80pl 1 Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
xFazzzi Napisano 5 Stycznia 2019 Zgłoś Udostępnij Napisano 5 Stycznia 2019 rep+ 1 Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
spadajokkxD Napisano 10 Stycznia 2019 Zgłoś Udostępnij Napisano 10 Stycznia 2019 Cytat Cytat Cytat Cytat Cytat Cytat Cytat Cytat Cytat Cytat Cytat Słabe Gdzie wytł. że bez trigger nic nie napiszesz, ze [<text>] daje mozliwiosc zrobienia komendy z argumentami lub można dać przedmioty graczowi, przykład: command /kitvipodamina [<offlineplayer>] permission: admintoktosfajny permission message: &9Ta komenda wymaga rangi &6Admin trigger: execute player command "/give %arg 1% diamond 5" send "&6Dales %arg 1% diamenty!" command /bc [<text>]: permission: bc permission message: &6Brak permisji debescie trigger: broadcast "&6> &a%coloured arg% Cytuj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
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ą.