Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude% T8 B+ q! X; g
Сборка L2j( G. k6 \6 L: e; j
Пример основан на сборке L2J.
; [& X/ w* u0 r2 R& f% k, \. ?6 k0 S& {& x6 k
Первое что нужно сделать, это добавить необходимые Java классы в квест.
2 q4 d7 s& [8 B2 P
7 U7 L( A7 W6 l& \' x* f- <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>
! t8 D0 }7 a" Z; H* m' P9 _/ z
" }1 }: h; k0 X4 B- </div>
Скопировать код- import sys
% O- @/ u* v* o/ R# f8 { - from net.sf.l2j.gameserver.model.quest import State; f; q! o1 D, p: X
- from net.sf.l2j.gameserver.model.quest import QuestState8 E3 @- g$ D X" k
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082* p' T" c" \5 s3 L, l: l
- FANGS_ITEM_ID = 1859: e0 ^! C# \7 _# O/ V/ C: c
- DROP_RATE = 500000; }: }; t7 x6 [% x6 P
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :" ~. h5 t6 f/ R# o! t
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):! d8 X$ u1 n6 p1 R1 y9 B) I
2 _; I' P9 `/ V% ~; k2 k( {- def completed(st) :
3 b6 r) A/ D' D- v - st.setState(COMPLETED)! f0 J; T% n( ]/ t9 E
- st.clearQuestDrops(): t) D: j' _+ S; P$ ~' y
- st.takeItems(FANGS_ITEM_ID,-1)
7 S0 R. K* j9 q6 ~# x# X. N4 ^7 f - st.giveItems(WORLD_MAP_ITEM_ID,1)% Y7 |. x9 N0 G0 `3 Y- r s; p: {
- st.exitQuest(False)
1 R1 J& g v5 L' I1 N( B - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
( T5 h( i! a4 f9 f v3 \9 h1 k2 x6 m/ E4 Q# {: `. o
2 o2 Q. v5 G# _! _+ X6 v2 I& K8 Y- M" K
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):5 P$ k6 L; R5 b6 g4 b, i4 I5 f
* T+ V1 j4 Q% d& }$ q: m
- def check(st) :6 j; I2 [- O: |/ ^, D3 G( w
- if getCount(st) >= 4 : X% @. B8 I3 Y! c) T1 s x( u; s
- completed(st)
* A. |. U- e z W - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
9 G& s+ r1 c7 I. W6 u- T# k2 A3 I. H; |- V Z
- class Quest (JQuest):5 y% Z( z# Q( W4 Z9 v. x W' K. d5 Y
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
5 S) u3 t! [) `8 r - def onEvent (self,event,st):+ B5 M8 H/ Y+ z! X
- id = st.getState()
5 o5 H5 y" X. x( w6 @. I: K# B0 _$ a$ E - if id == CREATED : st.setState(STARTED)
0 C9 s4 i4 }4 Z2 ~ - elif id == COMPLETED: pass3 X, y* _% |& v5 A7 e/ L7 K8 d ?
- elif id == STARTED : check(st): E/ C; c- L; z1 B! C3 j
- return
Скопировать код- QUEST.setInitialState(CREATED)
9 }( p& o! Z$ {7 w* Y7 ] - QUEST.addStartNpc(7056)
Скопировать код + N, i: X& v% @/ h/ Y
2 b0 `$ D1 J& q7 N5 j |