Skocz do zawartości

[Skript] - Warunki


Rekomendowane odpowiedzi

Cześć

Ten poradnik jest przeznaczony raczej dla początkujących osób w skipcie.
Przedstawię tutaj większość dostępnych sposobów na tworzenie warunków.

na jakie sposoby możemy robić warunki?

[if] %condition%:
%condition%
%effect% if %condition%
%objects-1% if %condition% [else|otherwise] %objects-2%

Teraz je trochę omówimy
Zacznijmy od pierwszego i najpopularniejszego

[if] %condition%:

po tym warunku wymagane jest użycie wcięcia.
if przed warunkiem nie jest wymagane, ale dla wyglądu kodu powinno się je pisać.
w tym sposobie możemy użyć else np:

if player has diamond: #warunek
	send "&7Masz diaxa!" #dalszy kod z wcięciem
else: #W przeciwnym razie
	send "&7Nie masz diaxa" #dalszy kod z wcięciem

Następnym sposobem jest "płaski warunek" (inline conditionali)

%condition%

W przypadku gdy warunek zwróci false, dalszy kod nie wykona się (czyli zadziała jak stop)
Często ten sposób nie jest pochwalany, ponieważ kod może się stać mniej przejrzysty (oczywiście zależy od sytuacji)
w tym sposobie nie możemy użyć else

#...
player has emerald #warunek
send "Masz emeralda!" #dalszy kod

Następnym sposobem jest tzw. do if

%effect% if %condition%

Dzięki niemu możemy zaoszczędzić linijkę na warunek np:

send "&7Masz wystarczajaco duzo zlota!" to player if player has gold ingot

Jest jeszcze warunek trójargumentowy (ternary conditional)

%objects-1% if %condition% (else|otherwise) %objects-2%

Jeżeli warunek będzie spełniony zwróci obiekt-1 jeżeli będzie przeciwny zwróci obiekt-2

add (2 if player has permission "*" else 1) of diamond to player

nie używając ternary ten kod byśmy zapisali tak:

if player has permission "*":
	add 2 of diamond to player
else:
	add 1 of diamond to player

 

Często się słyszy żeby nie robić drzew z ifów dlatego jak najlepiej robić warunki?
Najlepiej, dla przejrzystości kodu robić tzw. ify łamane, co to znaczy?
To znaczy, że przeczymy warunkowi który chcemy uzyskać i wstawiamy tam stop np:

if arg is not "tak":
	#Co ma sie wykonac jeżeli nie jest "tak"
	stop
#to co ma sie wykonac jeżeli jest "tak"

Filtry
W skripcie od wersji 22-dev36 możemy korzystać z filtrów list

%objects% (where|that match) [%condition%]

 Jak to działa?
Działa to dosłownie jak filtr, wybiera wartości tylko te które zgadzają się z warunkiem np:

set {_admins::*} to all players where [input has permission "*"]

powyższy kod ustawi zmienną {_admins::*} na osoby które posiadają uprawnienie *
Taki sam kod bez użycia filtru wyglądałby tak:

loop all players:
	if player has permission "*":
		add player to {_admins::*}

 

Spoiler

Dla ciekawskich w skript-reflect możemy stworzyć inny składniowo (bardziej "programistyczie") warunek trójargumentowy kod:

expression %boolean% ? %object% : %object%:
	get:
		if expr-1 is true:
			return expr-2
		return expr-3

składnia:

%boolean% ? %object-1% : %object-2% 

obiekt-1 zostanie zwrócony gdy boolean będzie prawdziwy
obiekt-2 zostanie zwrócony gdy boolean będzie fałszywy

np:

send ({privateMsg::%player-arg%} ? "&7Gracz ma wlaczone prywatne wiadomosci!" : "&7Gracz ma wylaczone prywatne wiadomosci!") to player

 

W jaki sposób możemy przeczyć w warunkach?

is -> is not / isn't / aren't / are not
can -> cannot / can not / can't
has -> has not / not have / don't have / doesn't have

 

Dzięki za poświęcony czas na przeczytanie tego poradnika.
Wszelkie błędy / poprawki / propozycje proszę zgłaszać.
Pozdrawiam 
Aksik

Odnośnik do komentarza
https://skript.pl/temat/45097-skript-warunki/
Udostępnij na innych stronach

Pierwsza sprawa tyczy się tzw. 'inline conditionali' (czy jak ty to powiedziałeś 'płaski warunek'). One nie zmniejszają czytelności kodu, w większości sytuacji są pomocne i pozwalają na uniknięcie zagnieżdżonych warunków. Już prędzej 'do if' oraz 'ternary operator' robią bałagan w kodzie.

Druga rzecz to mały błąd w możliwościach przeczenia, a dokładniej to 'doesn't have', które jest poprawną formą w języku angielskim.

Trzecia i ostatnia sprawa to to, że nie opisałeś operatora trójskładnikowego ('ternary operator'), a on również podchodzi pod warunki.

Mimo wszystko poradnik przyda się osobom początkującym, trzymaj lajka :>

Odnośnik do komentarza
https://skript.pl/temat/45097-skript-warunki/#findComment-283781
Udostępnij na innych stronach

  • xAxee przypiął/eła ten temat
  • 4 tygodnie później...
Cytat

To znaczy, że przeczymy warunkowi który chcemy uzyskać i wstawiamy tam stop np:

Myślę, że w wielu sytuacjach użycie tylko negacji jest jedynym i właściwym sposobem. Idealny przykład to sprawdzenie czy plik nie istnieje - nie odwrotnie czyli: czy plik istnieje. Wiem, że o tym napisałeś, ale w wielu sytuacjach ten stop będzie zbędny.

#pesudo kod

if plik istnieje
	stop
else
	tworze plik

if plik nie istnieje
	tworze plik

 

Cytat

Jeżeli warunek będzie spełniony zwróci obiekt-1 jeżeli będzie przeciwny zwróci obiekt-2

Coś jak operatory logiczne && i ||, które to z javy pochodzą ;)

Brakuje mi czegoś na kształt instrukcji case

case {zmienna} in
	jakis_string)          wywołaj funkcje ;;
	lokalizacja_gracza)    auto tłumaczenie skryptu.
esac

 

Edytowane przez luk4sMC
Odnośnik do komentarza
https://skript.pl/temat/45097-skript-warunki/#findComment-289884
Udostępnij na innych stronach

2 godziny temu, luk4sMC napisał:

Brakuje mi czegoś na kształt instrukcji case

Zawsze możesz sobie zrobić takiego case'a prostym szeregiem 'else if'.

2 godziny temu, luk4sMC napisał:

Coś jak operatory logiczne && i ||, które to z javy pochodzą ;)

To prawda, tego to każdemu brakowało (i pewnie nadal brakuje).

Niestety z operatorem || trzeba to załatwiać w ten sposób:

if arg-1 is 1:
	set {_t} to true
if arg-2 is 2:
	set {_t} to true
{_t} is set
# Dalszy kod

Z operatorem && sprawa wygląda dość podobnie, ale należy przed warunkami ustawiać jakąś zmienną na true, a jeżeli któryś z warunków jest niezgodny, wykonujemy 'stop', aby zatrzymać kod.

Odnośnik do komentarza
https://skript.pl/temat/45097-skript-warunki/#findComment-289909
Udostępnij na innych stronach

  • Libter odpiął/ęła ten temat

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ą.

Nieaktywny
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...