Yolo pozdro ziomki.
Jak wiecie, zapowiedziałem wam ostatecznie iż na ten czas poradniki o Skriptach zakończę moim największym dziełem jakim są questy.
Na wstępie od razu wam powiem (bo wiem że niektórzy pewnie sobie pomyślą że w skripcie się tego nie da zrobić) to uwierzcie mi iż jest możliwe zrobienie tego przy odpowiednim kombinowaniu z manipulacjami i interakcjami.
W tym poradniku pokażę wam najprostszy quest czyli oddanie jakiemuś npc dowolnej ilości itemów, przykładowo 10 sztuk nether star.
Na wstępie warto by przygotować sobie opcje jakie będą nam potrzebne (używamy tu manipulacji, czyli variables i options):
Kod PHP:
variables:
{Quest.%player%} = false
{Nagroda.%player%} = false
options:
tag: &7&l[&4&lQuest&7&l]
zadanie: &8&l[&e&lZadanie&8&l]
Tak oto stworzyliśmy potrzebne nam rzeczy aby napisać sobie ten system. Jak widać występuje też opcja, która wg mnie jest opcją wyboru (opcja nagrody) tzn. można ją sobie zainicjować albo bez niej to zrobić (w kodzie jej zastosowanie tutaj ujrzycie)
Pora na zrobienie interakcji.
Do tej pory pokazywałem wam metodę "on rightclick with <item>", dzisiaj pokaże wam nowy sposób czyli "on rightclick on <blok, mob itp.>"
Wpierw trzeba nam aby Skript wiedział iż chcemy aby po kliknięciu dajmy na to na zombie o danej nazwie - otrzymywało się questa (polecam używać pluginu na NPC - Citizens bo w przeciwnym wypadku trzeba będzie dopisywać linijki kodu na brak obrażeń od obu stron z normy)
Kod PHP:
on rightclick on zombie:
if name of zombie is "&e&lQuester":
if {Quest.%player%} is false:
send "&4&l%player% &b&lmam dla ciebie zadanie!" to player
wait 3 second
send "&2&lZdobadz dla mnie 10 sztuk &eOgnistej Gwiazdy" to player
wait 3 second
send "&9&lJesli ci sie uda, wroc do mnie po nagrode!" to player
set {Quest.%player%} to true
wait 5 second
send " {@tag} " to player
send "{@zadanie} &6Zdobadz 10 sztuk &eOgnistej Gwiazdy" to player
stop
Teraz omówię kod:
Działa to na takiej zasadzie, że jeśli gracz kliknie na zombie o takiej nazwie i nie ma aktywnej misji, zombie przemówi do niego i wyznaczy mu zadanie, po czym misja się aktywuje.
WAŻNE: musicie dać koniecznie linijkę
stop inaczej interakcja może się popsuć!
Niby wszystko jest spoko ale gdzie interakcja z nagrodą? Musimy teraz utworzyć warunek aktywnej misji i dołączyć nagrodę, oto wykonanie:
Kod PHP:
if {Quest.%player%} is true:
if player has 10 nether star named "&eOgnista Gwiazda":
remove 10 nether star named "&eOgnista Gwiazda" from player's inventory
send "&4&lWspaniala robota oto twoja nagroda!" to player
if {Nagroda.%player%} is false:
set {Nagroda.%player%} to true
if {Nagroda.%player%} is true:
give 1 diamond sword of sharpness 10, fire aspect 5 named "&eOgnisty Miecz" to player
set {Nagroda.%player%} to false
set {Quest.%player%} to false
stop
else:
send "{@zadanie} &6Nie posiadasz w swoim ekwipunku 20 sztuk &eOgnistej Gwiazdy!" to player
stop
Już spieszę z objaśnieniem:
Ten warunek z kolei wpierw sprawdza czy misja jest aktywna i jeśli jest to sprawdza potem czy posiadamy 20 sztuk nether stara o nazwie na żółto - Ognista Gwiazda. Jeśli mamy, zabiera nam gwiazdy i dodaje miecz który niewątpliwie jest tu mocny i ustawia wszystkie zmienne typu nagroda i misja na fałsz czyli po prostu kończy misję. Dopisany jest też warunek na poziomie sprawdzenia itemów, który ma za zadanie nas poinformować jeśli nie mamy wymaganej ilości itów
PAMIĘTAJCIE O LINIJCE
stop!
Całość kodu:
Kod PHP:
variables:
{Quest.%player%} = false
{Nagroda.%player%} = false
options:
tag: &7&l[&4&lQuest&7&l]
zadanie: &8&l[&e&lZadanie&8&l]
on rightclick on zombie:
if name of zombie is "&e&lQuester":
if {Quest.%player%} is false:
send "&4&l%player% &b&lmam dla ciebie zadanie!" to player
wait 3 second
send "&2&lZdobadz dla mnie 10 sztuk &eOgnistej Gwiazdy" to player
wait 3 second
send "&9&lJesli ci sie uda, wroc do mnie po nagrode!" to player
set {Quest.%player%} to true
wait 5 second
send " {@tag} " to player
send "{@zadanie} &6Zdobadz 10 sztuk &eOgnistej Gwiazdy" to player
stop
if {Quest.%player%} is true:
if player has 10 nether star named "&eOgnista Gwiazda":
remove 10 nether star named "&eOgnista Gwiazda" from player's inventory
send "&4&lWspaniala robota oto twoja nagroda!" to player
if {Nagroda.%player%} is false:
set {Nagroda.%player%} to true
if {Nagroda.%player%} is true:
give 1 diamond sword of sharpness 10, fire aspect 5 named "&eOgnisty Miecz" to player
set {Nagroda.%player%} to false
set {Quest.%player%} to false
stop
else:
send "{@zadanie} &6Nie posiadasz w swoim ekwipunku 20 sztuk &eOgnistej Gwiazdy!" to player
stop
To by było na tyle, dla niedowiarków, można zdziałać coś w skripcie, lecz nie jest to mega obszerne, więc za wiele z tym nie zdziałacie ale podstawy bynajmniej tutaj są
Dzięki za przeczytanie, za komentarze i za ocenianie.
Pozdrówka cieplutkie, ironhide
PS: w wątku w cytatach php może być źle ustawione przesuwanie linijek (tzn. tabowanie - 4 spacje, jak ktoś ogarnia skripty to będzie wiedział co i jak naprawić
)