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ć stąd, warto też rozważyć skorzystanie z wersji zawierającej poprawki 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