Skocz do zawartości

[SkQuery] Lambdy - lambdy i predykaty


Rekomendowane odpowiedzi

W tym poradniku...
dowiesz się co to są lambdy, jak się dzielą i dlaczego są takie użyteczne.
 
Przedstawienie
Czym są te tajemnicze Lambdy? Lambdy to nowe elementy wspaniałego dodatku jakim jest skQuery. Pozwalają zawrzeć więcej kodu w jednej linii i tworzyć bardziej skomplikowane skrypty.
Dokładniej lambdy to dwa nowe typy, które pozwalają wsadzić więcej kodu w twój kod :):
- lambdy (lambdas), które zawierają efekty
- predykaty (predicates), które zawierają warunki (conditions)
Można łączyć wiele lambd lub predykatów ze sobą ale między sobą.
(lambda z lambdą: tak, predykat z predykatem: tak, lambda z predykatem: nie)

Lambdy

[%efekt%][%efekt%]->[%efekt%]
// np.[send "lambdy!" to player][send "lambdy!" to player]->[send "sa fajne!"][send "lambdy!" to player]->[send "sa fajne!"]->[give diamond named "lambda" to player]

Predykaty

[%warunek%][%warunek%]->[%warunek%]
// np.[player has diamond named "lambda"][player has diamond named "lambda"]->[player is op][player has diamond named "lambda"]->[player is op]->[name of player is "pirat"]

 
Użycie
Z przedstawionych wyżej elementów można aktualnie skorzystać na cztery sposoby.
Autorzy dodatków do Skript mogą z nich skorzystać i umożliwić korzystanie w tworzonych przez nich elementach z naszych kochanych lambd i predykatów.

Bezpośrednio
Pierwszym sposobem wykorzystania lambd jest użycie ich bezpośrednio za pomocą efektu do i wyrażenia check.

// efekt "do" dla lambddo %lambda/y%
// np.do [send "lambdy!" to player]->[send "sa fajne!"]->[give diamond named "lambda" to player]// zadziala tak samo jak:send "lambdy!" to playersend "sa fajne!"give diamond named "lambda" to player
// wyrazenie "check" dla predykatow check[ed] %predykat/y%
// np.check [player has diamond named "lambda"]->[player is op]->[name of player is "pirat"]:    # kod// zadziala tak samo jak:if player has diamond named "lambda":    if player is op:        if name of player is "pirat":            # kod

Wyrażenie "where"
Następną możliwością użycia predykatów jest wyrażenie where, dzięki któremu możemy zapętlić tylko obiekty spełniające dane warunki zamiast zapętlać wszystkie obiekty i dopiero w zapętleni sprawdzać ich cechy.

%obiekty% where %predykat/y%// zeby w predykacie odwolac sie do obiektu trzeba skorzystac z wyrazenia:%type% input
// np.loop all players where [player input has permission "jestem.fajny"]->[player input has diamond named "lambda"]:    # kod// zadziala tak samo jak:loop all players:    loop-player has permission "jestem.fajny"    loop-player has diamond named "lambda"    # kod

Podczas formatowania ekwipunku
Gdy formatujemy slot ekwipunku tak aby po kliknięciu wykonać jakąś akcję, teraz zamiast komendy możemy użyć też lambdy co w połączeniu z funkcjami daje nam naprawdę potężne możliwości.

format slot %number% of %players% with %item stack% to close then run %lambda%format slot %number% of %players% with %item stack% to run %lambda%
// np.format slot 1 of player with cookie named "Ciastko" with lore "kliknij mnie!" to run [broadcast "%player% kliknal w ciastko!"]format slot 1 of player with cookie named "Ciastko" with lore "kliknij mnie!" to run [access "funkcja"]

Taki krótki poradnik, może się komuś przyda.

Pirat

Odnośnik do komentarza
https://skript.pl/temat/4317-skquery-lambdy-lambdy-i-predykaty/
Udostępnij na innych stronach

ja też.

A czy można tu używać wyrażeń z innych dodatków do skriptA? np. WS czy twojego (PirateSK)?

Mini błędzik:

cookie named "Ciastko" with lore "klinij mnie!"
(lore)
Odnośnik do komentarza
https://skript.pl/temat/4317-skquery-lambdy-lambdy-i-predykaty/#findComment-36363
Udostępnij na innych stronach

Możesz mi podać przykład taki?:

Masz w wirtualnym inv. emerald. gdy na niego klikniesz sprawdza czy masz 1 emerald, jak masz to zabiera ci go i daje diament.

Przy użyciu tego access mi chodzi

Odnośnik do komentarza
https://skript.pl/temat/4317-skquery-lambdy-lambdy-i-predykaty/#findComment-36365
Udostępnij na innych stronach

Możesz mi podać przykład taki?:

Masz w wirtualnym inv. emerald. gdy na niego klikniesz sprawdza czy masz 1 emerald, jak masz to zabiera ci go i daje diament.

Przy użyciu tego access mi chodzi

// formatujesz slot ekwipunku:format slot 1 of player with emerald to run [access "emerlad" from player]// i definiujesz funkcje:function "emerlad":	set {_p} to parameter-1	{_p} has 1 emerald:		remove 1 emerald from {_p}		if {_p} can hold 1 diamond:			give 1 diamond to {_p}		else:			drop 1 diamond at {_p}		return	send "Masz za malo szmaragdow."	return
Odnośnik do komentarza
https://skript.pl/temat/4317-skquery-lambdy-lambdy-i-predykaty/#findComment-36367
Udostępnij na innych stronach

  • 4 miesiące temu...

Da się do tych lambd przypisać coś w stylu "Else" lub "else if"?

Bez tego, jeśli nie ma, są troszkę bezużyteczne (poza momentami, gdzie są same warunki bez else) ;/

Edytowane przez piter909
Odnośnik do komentarza
https://skript.pl/temat/4317-skquery-lambdy-lambdy-i-predykaty/#findComment-56062
Udostępnij na innych stronach

  • 1 miesiąc temu...
  • Szifter zablokował(a) ten temat
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ę...