Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude/ C) J" J1 j5 V; Y( _& M3 q
Сборка L2j: c- `7 `9 R, [. A0 T
Пример основан на сборке L2J.
|# _. ~2 \1 q! e& P2 j {" N
8 f( n9 ^! X% z) p8 x/ XПервое что нужно сделать, это добавить необходимые Java классы в квест.
; u+ d# \6 u+ N3 H/ }
; m( s$ O; J% r/ N- <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>7 t8 Z+ D3 d# A: t8 n7 g: z6 N9 l
, w% q/ y* U/ z4 P% W" R5 ~' `8 v- </div>
Скопировать код- import sys E1 n+ j. |% _* x
- from net.sf.l2j.gameserver.model.quest import State
- y( z+ ]" A9 V3 B5 F% b - from net.sf.l2j.gameserver.model.quest import QuestState$ ^% ] L! V3 a. E) K J
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
" ~$ ^. \: N% R+ ~' i- ] - FANGS_ITEM_ID = 18597 s; P/ n% x9 S( a" P, K/ B
- DROP_RATE = 500000, \8 v+ O! G# F. [4 F7 n2 x# X6 O- o
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :. O3 K+ I% ?. A) j, s
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):- u% F/ @8 O' k# O6 Y0 H
4 j2 O" ]# S) b" `( n3 X4 `1 K. D, a- def completed(st) :
/ L; J+ o; U. J! K6 N! ]' }/ W! ^ - st.setState(COMPLETED)
2 C0 o& W% _8 k - st.clearQuestDrops()
, ^' o6 i" Y6 l8 K# O" E - st.takeItems(FANGS_ITEM_ID,-1)+ R& O- q/ |) a1 S9 |3 G6 G
- st.giveItems(WORLD_MAP_ITEM_ID,1)4 ?$ M; y% Z' `
- st.exitQuest(False)
; c% Z4 b3 ? m - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
3 g5 N* q) k/ c1 U# C; _1 |! c0 h) `( l9 p) F' N2 c M" |6 J: `) o
: c, q; o w# a: I" j1 y" k% V
4 W d$ t6 m: B# \И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):8 n9 E4 A& e+ H6 L2 O( c' T
. v# |" m ~6 o1 y- def check(st) :. F: e0 L- m% Z3 m( f. j/ Z
- if getCount(st) >= 4 :( ]5 J2 q5 J0 [. U! h# y
- completed(st)" b8 U+ r% p! i M
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
; o$ V; j" K* ^* [* i1 K" H6 C6 x6 c" j: B( q2 T
- class Quest (JQuest):2 ~4 z. T4 O8 ?) w2 q; `4 \' }
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
* e, `2 S* B6 P& a4 p, B - def onEvent (self,event,st):
6 e1 G$ D% L' L: s; E3 ? - id = st.getState()
9 q: A6 x4 P) R% x8 G - if id == CREATED : st.setState(STARTED)
0 R$ E3 q; w8 O: |: m0 x - elif id == COMPLETED: pass
' c G9 Q) I& M" l r/ x - elif id == STARTED : check(st)
5 r: x# {' q- E8 }3 Q* C y - return
Скопировать код- QUEST.setInitialState(CREATED)6 D* \, e8 a5 Y$ L) `' O
- QUEST.addStartNpc(7056)
Скопировать код
, T- n8 X. M4 O0 z0 {5 B# d# c/ X! E, @ q! Z
|