Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude9 H% ]7 u2 z9 V+ n( T
Сборка L2j
/ { Y3 ~ j, j. h! [Пример основан на сборке L2J.
5 a1 R" I3 D8 ^5 ?9 ~% l9 |# X) O- |, a* K7 e
Первое что нужно сделать, это добавить необходимые Java классы в квест.
B% a2 m; t) G- . k! b" ^8 {' K5 T* ~; p+ J
- <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>( g% g2 o d0 D4 b& T. v
- $ l2 J" g6 a( c/ R, o
- </div>
Скопировать код- import sys, y5 c) i$ ?' E* ]* r( x
- from net.sf.l2j.gameserver.model.quest import State
/ G* u. y) Q. _5 {- v& C! J' [ - from net.sf.l2j.gameserver.model.quest import QuestState
" N% J# C# R, @% A - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
: |# I7 U$ L) F+ Y - FANGS_ITEM_ID = 18597 B8 k0 v: x4 R z4 b3 n5 d9 H
- DROP_RATE = 500000( Y: y7 @1 W1 H7 B4 L2 B) m) u
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
' X# Z/ R' n, ^. v) Y1 Q' f - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
1 F; P, A, z- A' H7 j
/ `( u) k* ~ ^- |1 a- def completed(st) :
- [0 v. u9 \, V& @% w) I G+ y - st.setState(COMPLETED)
: \. X1 G6 z" O1 S0 o - st.clearQuestDrops()
3 V9 a: Y+ ]8 r: u* N5 y6 u- d+ X T3 X - st.takeItems(FANGS_ITEM_ID,-1)
, k3 l8 M; C3 r& x; E5 }/ B/ w - st.giveItems(WORLD_MAP_ITEM_ID,1)$ [$ X8 k" F% v( R( s9 E* n
- st.exitQuest(False)
' D8 w3 p) B7 R! \2 k$ N- h - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
3 M3 @- S( t o1 u0 }, u
9 y7 X, ^: n: h. m$ f8 t3 A/ T) c% Z
- D0 A5 J# G5 D" b& `
$ g C" ]$ Y# T2 r% w; o/ {И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
% C# l; [. ]- i# e3 f) m7 ?, Y/ G1 h5 I& h9 U+ y% a% G
- def check(st) :, ]! w. x8 {; l) T! ]' Y
- if getCount(st) >= 4 :& D; [: y, m0 V# c, L
- completed(st) C6 Y7 {# V* `9 k6 N% i* G
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.' ? ^2 `% d `* C+ m2 ] T% e
% X6 Q) V# Z- W& k1 f; e0 ^3 z
- class Quest (JQuest):( l) F* f3 A3 k& F& x7 g* F
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
5 j0 Q5 R' y! q" n9 s - def onEvent (self,event,st):5 \$ V1 y- F$ f* F* E X& k
- id = st.getState()' U) i) s7 D0 X. C" C, J% M: ^& y
- if id == CREATED : st.setState(STARTED)* d: ^: V) I) x6 S1 j* T8 f
- elif id == COMPLETED: pass( b. n+ e/ @+ {/ r1 |# Z
- elif id == STARTED : check(st)" M, ^1 @% p, a0 } {
- return
Скопировать код- QUEST.setInitialState(CREATED)5 l' ? g3 p! V0 c1 X" Y( q# h
- QUEST.addStartNpc(7056)
Скопировать код
) d) S$ q% d( I' G+ F$ ?
6 q3 F& Z+ L2 ^: E: g! { |