#1

Pisanie Qestów

in Poradniki Sat Apr 03, 2010 9:16 pm
by kamil • 57 Posts

Witam! Chciałbym wam pokazać jak poprawnie pisać oraz wgrywać questy do naszego servera. Zapraszam do czytania.

ETAP I


PODSTAWY PISANIA QUESTÓW


1. A wiec najpierw jak pisać. Każdy quest zaczyna sie linijka:

quest nazwa_questa begin


Jest to linijka, która rozpoczyna naszego questa, musi pojawić się w każdym queście!

2. Następna linijka, która musi pojawić się w queście to:

1
state start begin


3. Nastepnie musimy wskazać na jakim lvlu quest ma się rozpocząć. Ta linijka za to odpowiada:

1
when login or levelup* with pc.get_level >= 46**


* - W czym :

- when login or levelup - kiedy wloguje sie lub wbije dany lvl (Troche Angielskiego )
>= - Wiekszy lub równy lvlowi 46

** - :
( = - Równy,
< - Mniejszy ,
> - Większy ,
<= - Mniejszy lub równy ,
>= - Większy lub równy)


4. Nastepnie w queście ustalamy state czyli dany etap w queście.

Przykład:

Ustawiamy pierwszy state (Etap), w którym musimy iść do NPC.
Dajemy kolejny state (Etap) po rozmowie z NPC i dopiero w tym nowym state będzie nam np. z moba dropić itemek,
a nie wcześniej, tylko dopiero teraz w tym state (Etapie). Chyba rozumiecie? Przejdźmy dalej.

State ustawiamy wpisujać linijkę: set_state(dowolny_state*)

* - W nawiasie może znaleść się dowolne wyrażenie, ale bez spacji, lub dowolne słowo***.

5.Następnie dajemy end, gdyż wpisaliśmy "begin" co oznacza początek, to tak i każdy state ma swój koniec czyli end*

* - End w quescie po każdym state lub letter**, czacie z NPC, local select (wybór np: "Tak", "Nie") występuje dwa razy.

** - To list wyświetlany z boku ekranu, ten zwój w którym jest napisane co mamy zrobić, gdzie się udać.

*** - Możemy w nawiasie wpisać co chcemy byle nie : end begin when then

6 Wiec mniejwiecej to co napisaliśmy wygląda tak:

1
2
3
4
5
6
quest ogr begin
state start begin
when login or levelup with pc.get_level > 46 begin
set_state(info)
end
end


*Nie wiem jak wytłumaczyć te tabulatory, podam przykład questa na końcu, to może załapiecie, ja też tak to łapałem.

7. Musimy wskazać do jakiego npc mamy się udać na początek. Wpisujemy linijkę:

state info begin

1
2
3
4
5
6
when letter begin
local v = find_npc_by_vnum(20011)
if v != 0 then
target.vid("__TARGET__", v, "Uriel")
end
send_letter("Nazwa Listu")*


* - W czym:

1
2
3
4
5
6
7
state info begin -- Rozpoczynamy state który ustawili&#347;my wcze&#347;niej. Patrz ptk. 6 - 4 Linijka
when letter begin -- Kiedy naci&#347;niemy na zwój (ten po lewej stronie ekranu)
local v = find_npc_by_vnum(20011) -- W nawiasie wpisujemy ID Npc (20011 - Uriel)
if v != 0 then - Musi tak by&#263;
target.vid("__TARGET__", v, "Nazwa Npc") - tak musi by&#263;
end -- Tutaj end...
send_letter("Nazwa listu") -- send_letter oznacza wy&#347;lij list a w nawiasie wpisujemy jego nazw&#281;.


To co tu wpisaliśmy oznacza : Udaj się do Npc Uriela (20011 - ID w nawiasie 3 linijka) oraz wyślij list Nazwa Listu

8. Wpisujemy informację - gdy naciśnie na list co ma się pokazać.

1
2
3
4
5
6
7
when button or info begin
say_title("")
say("")
say("")
say("")
say_reward("")*
end


* - W czym:

when button or info begin -- kiedy naciśniemy na zwój z questem

1
2
3
4
5
say_title("")-- tekst na &#380;ó&#322;to
say("")-- tekst na bia&#322;o
say("")-- -||-
say("")-- -||-
say_reward("") -- Tekst na czerwono*


* - W ("") wpisujemy teskt w tym miejscu ("Tutaj tekst")

Przejdźmy dalej...

9. Po otworzeniu listu jeśli jest w nim napisane, że mamy udać się do np. Kowala musimy ustawić, że gdy naciśniemy
na kowala, on zacznie z nami rozmawiać.

Dodajemy linijki:

[/code]when __TARGET__.target.click or
20016.chat."Test" begin
target.delete("__TARGET__")
say_title("")
say("")
set_state(kolejny_state)
end
end*[/code]


* - W czym:
[code]when __TARGET__.target.click or -- Gdy naciśniemy na obiekt (__TARGET__). Patrz ptk. 7 linijka 5.
20011.chat."Test" begin - gdy wybierzemy z czatu "test" (Kowal ma: Rozmawiaj, Stworz Podrecznik Kowala itp.)
target.delete("__TARGET__") -- ma skasować strzałkę nad kowalem.
say_title("") -- tekst na żółto, który mówi kowal
say("") -- tekst na biało, który mówi kowal.
set_state(kolejny_state) -- ustawiamy kolejny state (Etap) w queście.
end
end[/code]
10. Powiedzmy, że kowal kazał nam coś zabić, niech to będzie 101 (Dziki Pies), oraz ma z niego wylecieć 70021 (Błogosławieństwo Anioła)

Dodajemy linijki:
[code]state kolejny_state begin
when letter begin
send_letter("Zabij kundla")
end
when button or info begin
say("Zabij kundla")
end

when 101.kill with pc.countitem(70021)==0 begin
local random = math.random(3)
if random == 1 then
pc.give_item2(70021, 1)
say("")
say("
local v = find_npc_by_vnum(20016)
if v != 0 then
target.vid("__TARGET__", v, "Kowal")
end
end
end*[/code]
* - W czym:
[code]state kolejny_state begin -- oznacza początek state'a (Etapu) ustawionego w dialogu z kowalem. Patrz poprzedni ptk.
when letter begin -- Tak musi być...
send_letter("Zabij kundla") -- Nazwa listu
end
when button or info begin -- Kiedy naciśniemy na list
say("Zabij kundla") -- Co ma się wyświetlić gdy naciśniemy na list.
end

when 101.kill with pc.countitem(70021)==0 begin -- Gdy zabijemy 101 (Dziki Pies) nie posiadając 70021 (Błogo. Anioła)
local random = math.random(3) -- Im więcej tym żadziej dropi
if random == 1 then -- jeśli akurat wylosuję się, że dropnie
pc.give_item2(70021, 1) -- jaki item ma dać gdy akurat wylosuje, że ma dropnać
say("") -- Co ma powiedzieć, gdy dropnie
local v = find_npc_by_vnum(20016) -- Do jakiego NPC mamy się udać, gdy dropnie
if v != 0 then -- Tak musi być
target.vid("__TARGET__", v, "Kowal") -- Tak musi być
end
end
end[/code]
11. Czas na powrót po nagrodę... A więc musimy ustawić, że możemy pogadać z NPC, tylko gdy mamy dany item.

Wygląda to tak:
[code]when 20016.chat."Test!" with pc.countitem(70021)>0 begin
target.delete("__TARGET__")
say_title("")
say("")
say_reward("")
pc.remove_item(19, 1)
pc.give_item2(70021)
set_state(__COMPLETE__)
end
end*[/code]
* - W czym:
[code]when 20016.chat."Test!" with pc.countitem(70021)>0 begin -- Gdy klikniemy na NPC 20016 (Kowal) posiadając item 70021( Błogo. Anioła)
target.delete("__TARGET__") -- Kasuje strzałkę nad NPC
say_title("") -- Tekst na żółto
say("") -- Tekst na biało
say_reward("") -- Tekst na czerwono
pc.remove_item(70021, 1) -- Jaki item kowal ma zabrać**
pc.give_item2(19) -- Jaki item kowal ma dać
set_state(__COMPLETE__) -- Tak zwykle nazywa się state (Etap) kończący questa.
end
end[/code]
** - Chodzi o to, że w nawiasie wpisujemy liczbę np. (19, 1) znaczy, że ma zabrać Miecz +9 - Jedna sztuka, po przecinku
wpisujemy liczbę itemów jaka ma nam zniknąć z Eq. Gdybyśmy wpisali tam 2, zabrało by 2 miecze.

12. Jeśli chcemy, aby nie było możliwości powtórki questa wpisujemy to:
[code]end
state __COMPLETE__ begin
end
end[/code]
To odpowiada, za to, że questa nie będzie można już powtórzyć.

ETAP II



WGRYWANIE QUESTA DO SERVERA


Gdy już mamy questa napisanego (Musi on mieć rozszerzenie *.quest!!!) musimy go wgrać do servera. Robimy to w ten sposób:

1. Wrzucamy go do :
[code]/usr/rain/channel/share_data/locale/hongkong/quest

lub

/usr/rain/channel/share_data/locale/english/quest
[/code]
(Zależy czy masz Polskie czy Chińskie tabele)

2. Wrzucamy go tam.

3. Włączamy FreeBSD (VPC), logujemy się na root mcncc.com (Domyślnie)

4. Wpisujemy cd /usr/rain/channel/share_data/locale/hongkong/quest *

* - Hongkong lub english - zależy jakie posiadasz tabele.

5. Wpisujemy (W VPC) ./qc nazwa_questa.quest

6. Jeśli nie ma błędu jest ok. Jeśli jednak błąd się pojawi (np. Expecting 'when' or 'function' a niżej : nazwa_questa:40:Abort
oznacza, iż w 40, 38 lub 39 linijce naszego questu jest błąd. Musimy go poszukać)


7. Jeśli jest dobrze, wpisujemy reboot, logujemy się, /etc/rc.d/netif restart a potem ./start

8. W grze pojawia się quest.

PRZYKŁAD QUESTA NAPISANEGO PRZEZE MNIE:
[code]quest stone begin
state start begin
when login or levelup with pc.level >= 55 begin
set_state(info)
end
end

state info begin
when letter begin
local v = find_npc_by_vnum(20016)
if v != 0 then
target.vid("__TARGET__", v, "Kowal")
end
send_letter("Teczowy Kamien")
end

when button or info begin
say_title("Kamien")
say("")
say("Idz do kowala, musisz")
say("dla niego zrobic!")
end

when __TARGET__.target.click or
20016.chat."Teczowy Kamien" begin
target.delete("__TARGET__")
say("Kowal:")
say("No! Wkoncu sie zjawiles. Sluchaj. Musisz mi pomoc!")
say("")
say("Musze wyrobic akcesoria z Niebianskich Lez,")
say("ale nie moge tego zrobic bez kilku rzeczy.")
say("")
say("A wiec potrzebuje Teczowego Kamienia...")
say("Jednak za bardzo nie wiem, gdzie moge go znalesc.")
say("Mam tu list, o teczowym kamieniu. Jest napisane, ze")
say("kamien posiadaja Ezoteryki. Idz wiec i go dla mnie")
say("zdobadz. Zabij Elit. Ezot. Egzektutor.")
set_state(ezotek)
end
end

state ezotek begin
when letter begin
send_letter("Teczowy Kamien")
end
when button or info begin
say_title("Teczowy Kamien")
say("Kowal chce, abys zdoby dla niego")
say("Teczowy Kamien. Jest on mu potrzebny do wyrobu")
say("akcesorii z Nieb. Lez.")
say("Zabij Elit. Ezot. Egzekutor aby go zdobyc!")
end

when 735.kill with pc.countitem(50512)==0 begin
local random = math.random(3)
if random == 1 then
pc.give_item2(50512, 1)
chat("Zdobyles Teczowy Kamien!")
chat("Wroc do kowala.")
local v = find_npc_by_vnum(20016)
if v != 0 then
target.vid("__TARGET__", v, "Kowal")
end
end
end
when 20016.chat."Kamien!" with pc.countitem(50512)>0 begin
say_title("Kowal:")
target.delete("__TARGET__")
say("Swietnie! Masz go. Daj mi go.")
say("Wiec tak, to prawda. Ezoty mial ten kamien.")
say("Bardzo Ci dziekuje za pomoc w jego zdobyciu.")
say("Lecz czy moglbys mi pomoc w czyms jeszcze?")
say("Widisz.. Mam wszystkie potrzebne skladniki,")
say("ale nie mam receptury. Posiada ja Zarazony Wlocznik.")
say("Idz zabij go na gorze Sohan i przyniesc mi recepture.")
say("")
say("Powodzenia!")
say("")
pc.remove_item(50512, 1)
set_state(receptura)
end
end

state receptura begin
when letter begin
send_letter("Zdobadz Recepture")
end
when button or info begin
say_title("Receptura Wyrobu")
say("Kowal poprosil Cie o jeszcze jedna")
say("Rzecz. Masz zdobyc dla niego")
say("Wiadomosc Krola Plagi, czyli recepture wyrobu")
say("Akcesorii z Nieb. Lez.")
end

when 935.kill with pc.countitem(30168)==0 begin
local random = math.random(3)
if random == 1 then
pc.give_item2(30168, 1)
say_reward("Zdobyles Recepture.")
say_reward("Wroc do kowala aby odebrac")
say_reward("nagrode.")
local v = find_npc_by_vnum(20016)
if v != 0 then
target.vid("__TARGET__", v, "Kowal")
end
end
end
when 20016.chat."Receptura Wyrobu" with pc.countitem(30168)>0 begin
target.delete("__TARGET__")
say_title("Kowal:")
say("Swietnie! Masz recepture!")
say("Teraz bede mogl stworzyc Akcesorie!")
say("")
say("No oczywyscie, nagroda. Tak, nalezy Ci sie.")
say("Wez te oto akcesoria.")
say_reward("Akcesoria z Nieb. Lez +9!")
say("")
pc.remove_item(30168, 1)
pc.give_item2(14209)
pc.give_item2(15209)
set_state(__COMPLETE__)
end
end
state __COMPLETE__ begin
end
end[/code]
Pozdro!


Scroll up

Chcesz Wiedziec Status Servera A Niewiesz Jak To Zrobić To Proste Wystarczy Wejść Na Tą Stronke :) http://m2status.tk
Visitors
0 Members and 5 Guests are online.

We welcome our newest member: Williamhawk
Board Statistics
The forum has 205 topics and 544 posts.

0 members have been online today: