MineServer.pl - Minecraft Serwer Serwery Minecraft

Pełna wersja: [PORADNIK] Pisanie Skriptów część 6 - QUESTY, czyli ostatnia gratka 1 sezonu Skriptów
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
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 Smile

PAMIĘTAJCIE O LINIJCE stop! Big Grin

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

Dzięki za przeczytanie, za komentarze i za ocenianie.

Pozdrówka cieplutkie, ironhide Smile

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ć Big Grin)
Spoczko poradnik. Ogolnie to wszystko zrozumiałem bo jestem na poziomie takich skryptów ( wyewoluowałem) xD. Na pewno mi się to przyda, gratki Jajron gratki
Ja tam i tak tych skryptów nie ogarniam, może się komuś przyda Big Grin, gratki za poradnik Tongue
Jak dla mnie skrypty są bardzo trudne do ogarnięcia Big Grin i myślę że mam racje Tongue gratki.
Ironhide akurat tego mi było potrzeba super leci plus + Wink
Prawda jest taka że i tak ten kod nie zrobi questów w takiej metodzie jak plugin na nie ale na pewno już jakieś początki o ich oparcie wprowadza, możecie się nacieszyć jakąś gratką na zrobienie tego Smile
@up a da się stworzyc np: npc gracza zamiast zombie bo mnie to cholernie ciekawi.
@up: też pytanie, byś badał citizena to byś wiedział że się da....
@up ta tylko ze ja citizensa prawie w ogole nie uzywam wiec wiesz ;p
No ale z ciekawosci sprawdze czy bedzie sie dalo cos zmajstrowac.

Ps. Nie koncz pisania skryptow Sad
Nic nie zrozumialem Sad
+[+][+][+]+
Przekierowanie