Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude4 [1 N3 O- B( B, m1 {
Сборка L2j
% X- F+ L; o! d6 V, |8 LПример основан на сборке L2J.
8 `5 A4 t9 m2 Q3 T5 I7 H1 t* ~
k& x9 h7 Q# aПервое что нужно сделать, это добавить необходимые Java классы в квест.
8 Z3 h/ B0 f# `2 Z
5 {, x. Z* l! h2 B- <div><span style="color: rgb(20, 20, 20); font-family: Monaco, Menlo, Consolas, "Roboto Mono", "Andale Mono", "Ubuntu Mono", monospace; font-size: 12px; white-space-collapse: preserve; background-color: rgb(245, 245, 245);">(net.sf.l2j.gameserver.model.quest).</span>
/ K' M& B3 c) O1 H( R! ~* i
* f9 r3 z9 v1 H6 Q% h1 z- </div>
Скопировать код- import sys
6 P& f6 g G3 g( \5 ~- G" D - from net.sf.l2j.gameserver.model.quest import State
$ v# r8 P: x- Z5 ? - from net.sf.l2j.gameserver.model.quest import QuestState+ n: K. c5 I0 E) A* C
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
8 P @3 I# E/ Z) U - FANGS_ITEM_ID = 18594 H1 c* W6 U; |) N" D, }
- DROP_RATE = 500000
* Z" l" p0 D: ?& @( _5 p1 ^ - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :& m- {' j# j4 E9 I/ G
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
2 a! ~* ?% Q! O' L+ E& q! c1 F
1 N& I% V* q% f q0 q3 [- def completed(st) :
( R, g' k: G E% s) J* M7 Q' h - st.setState(COMPLETED)1 M* U# [! m$ d, \; }2 f% R: @/ \
- st.clearQuestDrops()
/ p1 B# a% y- [ - st.takeItems(FANGS_ITEM_ID,-1)) W6 A L; ~$ a! e
- st.giveItems(WORLD_MAP_ITEM_ID,1)
9 G4 ~: n( G7 t) F9 G) Q$ J% \ - st.exitQuest(False)
- E( e% b$ `; P - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
u. M" h: n o7 P' _5 B1 m& G' o" _/ x) t2 r; _2 w
$ U8 B( K' j- G8 E- o; R$ d" }
2 ~% \% q/ T: S2 Y% `4 h2 BИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
2 s1 [/ j2 e5 r! V/ x' B9 S
' `) c% B+ M/ _8 G- def check(st) :
. ?9 ^5 _) a7 _ - if getCount(st) >= 4 :
% a% }$ q @0 S6 o9 @8 ` - completed(st)8 `& k% l! f4 g$ [. ?9 |" J; n" ~
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
! q2 H0 q% s# Q U) M% _1 g# Y* I8 Y% z K7 t [8 A. n* ?
- class Quest (JQuest):1 v. A0 C$ Z2 }+ U0 o* n
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
. `& K+ g( K' w9 p1 j - def onEvent (self,event,st):2 i/ R. _1 o, Q& o, _ _
- id = st.getState()" Q7 i6 V3 w. k% z# y0 B
- if id == CREATED : st.setState(STARTED)
* Q b# |5 f+ M0 P+ V - elif id == COMPLETED: pass/ g: C( i8 a- ?7 R+ H$ |* q
- elif id == STARTED : check(st)
# R! D( A: P0 \) Z - return
Скопировать код- QUEST.setInitialState(CREATED)
4 a4 q% K# u& p' V( `. M: I - QUEST.addStartNpc(7056)
Скопировать код . z# Y+ ~8 j. v8 Z5 R7 {3 y' W
1 u0 K) {2 _) [ |