Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude ]$ [1 u1 F5 {* ?$ X2 \
Сборка L2j
$ d- Y9 P; Z9 [# |6 K- i4 R; zПример основан на сборке L2J.
! I; N2 S7 K( C1 L# H! p( n
4 w$ M0 t9 G: f/ }( A5 lПервое что нужно сделать, это добавить необходимые Java классы в квест.) l% g9 t x3 w7 Y5 L/ }7 Y
- & _- y# C2 P. ~5 x
- <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>0 R! D8 r+ X3 v; k; }: r, l* j# \
- " s8 ]0 l/ ^/ Q. e: T9 x! A
- </div>
Скопировать код- import sys' k" j& D2 R, {3 r
- from net.sf.l2j.gameserver.model.quest import State$ \# v! v! e/ _4 u. z
- from net.sf.l2j.gameserver.model.quest import QuestState
6 w+ m, `/ e& f, S+ P - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
- \& ^9 G! h4 j4 s! L - FANGS_ITEM_ID = 18590 J( ?' i: g; I0 p8 p* b
- DROP_RATE = 5000003 C. Y) Q& j( u$ ^' l3 U. G
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :& T3 |4 l) R( K% Q1 J4 ^5 m N
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
* I, q3 O1 s! e3 T4 s6 j2 n1 j
2 R r( c, n6 ]+ G8 f' [) f- def completed(st) :; u! a, g$ i% k
- st.setState(COMPLETED)
; Y9 e7 f1 _0 O W5 R - st.clearQuestDrops()
+ M: R9 J" N, V4 l+ c& ~ - st.takeItems(FANGS_ITEM_ID,-1): x% J2 |6 o0 [/ f
- st.giveItems(WORLD_MAP_ITEM_ID,1)- s' R3 V6 @$ Z; o* u% W
- st.exitQuest(False)" |" D6 x' X( i- j v
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))* `$ e# O+ y6 b& g
M# \' w& i, X3 A6 Z
% y6 X: ^ S* @8 i( I& e4 k, k5 |- ~6 @' \2 @# ^# `+ R- A% y
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
6 `7 Y, d0 |3 n! f* {
+ |- z+ v3 B# C- def check(st) :
- [$ ]& B6 k; m' f9 _ - if getCount(st) >= 4 :: Y6 W* s: v6 H
- completed(st)
9 B8 k0 ^2 D5 f9 _7 D1 _' E - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
: e( @4 \! ^, A6 O% E8 M6 h9 {' I, t3 J6 f+ F. j) O& d! q' D0 ^
- class Quest (JQuest):, T) W7 a) S% J6 m* V4 W
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
8 G4 D V K0 U7 O9 N9 D - def onEvent (self,event,st):# z7 Y% v: A8 r) a( ?' K7 l
- id = st.getState()
+ ~( E5 k% m$ E; z1 ` - if id == CREATED : st.setState(STARTED)* h9 P- H" b ?& X3 x
- elif id == COMPLETED: pass! u2 ?6 V* Y' Q& ~9 u c
- elif id == STARTED : check(st)" j$ g: J/ U8 d% C. v* e
- return
Скопировать код- QUEST.setInitialState(CREATED)
! _7 ~- i& n# b: {8 M& E0 D5 A* D/ @ - QUEST.addStartNpc(7056)
Скопировать код 4 L3 n8 \9 Q$ L4 y# R
: E$ I& i) t) K$ \: `2 n |