Skocz do zawartości

[Skript-reflect] - Własne Efekty, warunki, wyrażenia i eventy!


Rekomendowane odpowiedzi

Skript-mirror
W tym poradniku przedstawię wam jak tworzyć własne efekty, wyrażenia i warunki
za pomocą pięknego dodatku skript-mirror oraz jego forka skript-reflect

Ogólny wzór składni

[text] Opcjonalne
(text) Wymagane
text1|text2 albo
%text% typ zmiennej

np Składnia
[(xAxee|Ax)] [the] (plugin|plg) (man|manager) (disable|off) (plugin|plg) %string%
Moze jedynie zostać:
plg man disable plg "Ticker"
Albo:
xAxee the plugin manager disable plugin "Ticker"

Uwaga
Jeżeli na początku damy local to dany efekt / wyrażenie / warunek będzie mógł być wykorzystany tylko w skrypcie w którym się znajduje !
Efekty / wyrażenia / warunki muszą być nad wykonywanym kodem lub w innym skrypcie !
!
 Do podanych argumentów zwracamy się expr-<numer argumentu> !
!
Efekty / wyrażenia / warunki mają małą siłę i zostaną "pokonane" jeżeli jakiś dodatek posiada takie wyrażenie, dlatego dobrze gdy mają przedrostek ! 

Efekty (Effects)
(Coś co wykonuje jakiś kod)
dealy effect #Zatrzymuje kod w efekcie i dalszy kod w skrypcie
continue #Wznawia zatrzymany kod

Najpierw musimy zdefiniować składnie naszego wyrażenia

[local] effect <składnia>:
	parse: #Opcjonalnie
  		#kod (domyślne ustawiania zmiennyc)
	trigger: #Wymagane
		#kod

np:

effect [AxTops] (clear|reset) all [top] points:
	trigger:
		loop {points::*}:
			set {points::%loop-index%} to 0

Taki efekt możemy użyć np tak:

command /pointsreset:
	permission: *
	trigger:
		reset all top points
		send "&7Zresetowanie"
		stop

Warunki (condition)
(Warunki wykorzystujemy w ifach)

Również najpierw musimy zdefiniować wyrażenie

[local] condition <składnia>:
  check:
    #wykonywany kod
	continue

 ! Continue dajemy wtedy gdy kod spełnił warunek i kod za ifem może się wykonać (czyli zwróci true) !
np:

condition [AxTops] %player% can buy (for|with) %number%:
	check:
		if {points::%expr-1%} >= expr-2:
			continue

Możemy to wykorzystać jako:

command /kupmiecz [<text>]:
	trigger:
		if player can buy for 200:
  			add diamond sword to player
  			remove 200 from player's points
  			send "poprawnie zakupiono!"
			stop
		send "Nie masz tyle punktow"

 

Wyrażenia (expression)
(Coś co zwraca wartość)

Definiujemy 

[plural] [local] expression <składnia>:
  parse: #Opcjonalnie
    #kod...
  get: #Opcjonalnie
    #kod...
	return...
  add: #Opcjonalnie
    #kod...
  set: #Opcjonalnie
    #kod...
  remove: #Opcjonalnie
    #kod...
  remove all: #Opcjonalnie
    #kod...
  delete: #Opcjonalnie
    #kod...
  reset: #Opcjonalnie
    #kod...

! W return dajemy wartość którą ma zwrócić wyrażenie (tak jak w funkcji) !
!
Aby pobrać zmienianą wartość w set/add/remove należy wpisać change value !
!
Return type
to typ zwracanej wartości !
!
przedrostek pluar określa zwracaną wartość jako pojedyńczą !
np:

plural expression [AxTops] %player%['s] points:
	return type: number
	get:
		if {points::%expr-1%} is not set:
			return 0
		return {points::%expr-1%}
	add:
		add change value to {points::%expr-1%}
	set:
		set {points::%expr-1%} to change value
	remove:
		remove change value from {points::%expr-1%}
	delete:
		delete {points::%expr-1%}
	reset:
		set {points::%expr-1%} to 0

Możemy to wykorzystać jako:

command /points [<player>] [<text>] [<number>]:
	permission: *
	trigger:
		if arg 2 is "reset" or "clear":
			reset arg-1's points
			send "&7Zresetowanie"
			stop
		if arg 2 is "get":
			send "&7Gracz %arg 1% posiada &a%arg 1's points% &7punktow"
			stop
		if arg 3 is set:
			if arg 2 is "set":
				set AxTops arg 1's points to arg 3
				send "&7Ustawiono punkty"
			if arg 2 is "add":
				add arg 3 to AxTops arg 1's points
				send "&7Dodano punkty"
			if arg 2 is "remove":
				remove arg 3 from AxTops arg 1's points
				send "&7Zabrano punkty"

Wszystko razem

Spoiler


plural expression [AxTops] %player%['s] points:
	return type: number
	get:
		if {points::%expr-1%} is not set:
			return 0
		return {points::%expr-1%}
	add:
		add change value to {points::%expr-1%}
	set:
		set {points::%expr-1%} to change value
	remove:
		remove change value from {points::%expr-1%}
	delete:
		delete {points::%expr-1%}
	reset:
		set {points::%expr-1%} to 0
condition [AxTops] %player% can buy for %number%:
	check:
		if {points::%expr-1%} >= expr-2:
			continue
command /points [<text>] [<player>] [<number>]:
	trigger:
		if arg 3 is set:
			if arg 1 is "set":
				set AxTops arg 2's points to arg 3
				send "&7Ustawiono punkty"
			if arg 1 is "add":
				add arg 3 to AxTops arg 2's points
				send "&7Dodano punkty"
			if arg 1 is "remove":
				remove arg 3 from AxTops arg 2's points
				send "&7Zabrano punkty"
		if arg 2 is set:
			if arg 1 is "reset":
				reset AxTops arg 2's points
				send "&7Zresetowano punkty"
			if arg 1 is "delete":
				delete AxTops arg 2's points
				send "&7Usunieto punkty"
			if arg 1 is "get":
				send "%AxTops arg 2's points%"
command /kup:
	trigger:
		if AxTops player can buy for 200:
			add diamond sword to player
			remove 200 from AxTops player's points
			send "&7Zakupiono"
		else:
			send "&7Nie stac cie!"

 

 

Skript-reflect
Jest to fork skript-mirrora który poprawia wiele rzeczy oraz dodaje np własne wydarzenia (eventy)

Zdarzenia (Events)

Definiujemy

custom event "<nazwa>":
    pattern: <skladnia>
    event-values: <zmienne które można pobrać z eventu>
    check:
		#kod który wykona się przed wywołaniem eventu w skripcie
        continue

! Możemy stworzyć event który nie ma w sobie żadnych zmiennych, staczy że usuniemy event-values !
np:

custom event "onPlayerBuy":
    pattern: buy
    event-values: player, number
    check:
        continue

aby event zadziałał trzeba jeszcze go kiedyś wywoływać, od tego mamy efekt

call event %event%

Jednak musimy jeszcze jakoś pobrać event (jako typ) oraz podać mu argumenty które będzie można wykorzystać w evencie, od tego mamy expresje:

new custom event %string% [using %objects%]

aby podać zmienne które będziemy używać w evencie, musimy je najpierw zapisać do listy a potem podać w wyrażeniu
Przykład z użyciem gracza oraz jakiejś liczby

set {_list::player} to player
set {_list::number} to arg-1
new custom event "onPlayerBuy" using {_list::*}

No i brawo! Nasz event jest gotowy do nasłuchiwania

Całość w przykładowej komendzie powinna wyglądać tak:

#Rejestrujemy event
custom event "onPlayerBuy":
    pattern: buy
    event-values: player, number
    check:
        continue

command /kilof [<number>]:
	trigger:
		#jakis tam kod od kupowania
  
		#Podajemy argumenty oraz pobieramy event
		set {_list::player} to player
		set {_list::number} to arg-1
		set {_event} to new custom event "onPlayerBuy" using {_list::*}

		#Wywołujemy event
		call event {_event}
#Nasłuchujemy eventu
on buy:
	send "&7Brawo! udalo ci sie cos kupic! za cene &6%event-number%" to event-player

Dzięki za uwagę no i wszelkie błędy / pomysły proszę zgłaszać

Pozdrawiam Aksik

Edytowane przez xAxee
Dopełnienie poradnika
Odnośnik do komentarza
https://skript.pl/temat/35344-skript-reflect-w%C5%82asne-efekty-warunki-wyra%C5%BCenia-i-eventy/
Udostępnij na innych stronach

  • 8 miesięcy temu...

Super poradnik, twój post jest jednym z nielicznych które kiedyś uświadomiły mi jak przydatnym dodatkiem jest skript-mirror.

Ostatnio przeglądając dokumentacje trafiłem na nowy dodatek - skript-reflect (jak się okazało jest to kontynuacja skript-mirrora). Dodaje wsparcie dla najnowszych wersji minecrafta, asynchronicznych eventów i kodu oraz nowych wersji javy. Ale co najważniejsze dla tego posta - można w nim tworzyć customowe eventy - myślę że warto dodać je do poradnika @xAxee

Odnośnik do komentarza
https://skript.pl/temat/35344-skript-reflect-w%C5%82asne-efekty-warunki-wyra%C5%BCenia-i-eventy/#findComment-257953
Udostępnij na innych stronach

3 godziny temu, PanMaruda napisał:

Super poradnik, twój post jest jednym z nielicznych które kiedyś uświadomiły mi jak przydatnym dodatkiem jest skript-mirror.

Ostatnio przeglądając dokumentacje trafiłem na nowy dodatek - skript-reflect (jak się okazało jest to kontynuacja skript-mirrora). Dodaje wsparcie dla najnowszych wersji minecrafta, asynchronicznych eventów i kodu oraz nowych wersji javy. Ale co najważniejsze dla tego posta - można w nim tworzyć customowe eventy - myślę że warto dodać je do poradnika @xAxee

Dzięki :D Jasne jak tylko ogarnę uzupełnię poradnik :)

Odnośnik do komentarza
https://skript.pl/temat/35344-skript-reflect-w%C5%82asne-efekty-warunki-wyra%C5%BCenia-i-eventy/#findComment-257964
Udostępnij na innych stronach

  • xAxee zmienił(a) tytuł na [Skript-reflect] - Własne Efekty, warunki, wyrażenia i eventy!
Godzinę temu, Michix napisał:

jak mogę dodać wymaganą zmienną do effectu?

Jedynie zrozumiałem, że chcesz, aby bez ustawionej zmiennej efekt się nie wykonał. Jeżeli trafiłem, to w triggerze sprawdź to prostym conditionalem.

Odnośnik do komentarza
https://skript.pl/temat/35344-skript-reflect-w%C5%82asne-efekty-warunki-wyra%C5%BCenia-i-eventy/#findComment-269690
Udostępnij na innych stronach

5 minut temu, Kormic napisał:

Jedynie zrozumiałem, że chcesz, aby bez ustawionej zmiennej efekt się nie wykonał. Jeżeli trafiłem, to w triggerze sprawdź to prostym conditionalem.

Chodzi mi o to, żeby dodać zmienna, bo %text%, %player% działa, a zaś %variable% nie dziala

Odnośnik do komentarza
https://skript.pl/temat/35344-skript-reflect-w%C5%82asne-efekty-warunki-wyra%C5%BCenia-i-eventy/#findComment-269691
Udostępnij na innych stronach

Teraz, Michix napisał:

Chodzi mi o to, żeby dodać zmienna, bo %text%, %player% działa, a zaś %variable% nie dziala

A czy istnieje typ wartości 'variable'? Ty masz się po prostu dostosować do typu wymaganej wartości. Nieważne czy podajesz zwykłą liczbę czy też zmienną. Ważne jest to czy zmienna jest typu 'number' jeżeli jest wymagane w efekcie podanie wartości typu 'number'.

 

 

Odnośnik do komentarza
https://skript.pl/temat/35344-skript-reflect-w%C5%82asne-efekty-warunki-wyra%C5%BCenia-i-eventy/#findComment-269694
Udostępnij na innych stronach

przecież jak wstawisz zmienną w miejscu argumentu tekstowego %string% i ona będzie tekstem to i tak zadziała :/

ale jeżeli koniecznie chcesz mieć tylko zmienną to trzeba:

  • zaimportować sobie ze skripta typ Variable
  • w argumencie podać object
  • w triggerze efektu sprawdzić czy podany objekt jest zmienną (coś w tym stylu):
    raw expr is instance of Variable

     

Odnośnik do komentarza
https://skript.pl/temat/35344-skript-reflect-w%C5%82asne-efekty-warunki-wyra%C5%BCenia-i-eventy/#findComment-269695
Udostępnij na innych stronach

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