Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude1 j* _ b8 Y3 T( V# m5 m* I
Сборка L2j: w6 ]) s) v. i% v9 x) [, B
Пример основан на сборке L2J.' y) ?& i0 K# j; }" F
( h: l( e: I& Y) P
Первое что нужно сделать, это добавить необходимые Java классы в квест.
, l* F; c' L$ J' A, z1 _6 R/ q) ~- ) A2 ]* ]! s: q9 l2 e
- <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>
2 x; Q/ @# T! [7 e - ) h) Z# n; { K/ t( y& l# r# @2 C
- </div>
Скопировать код- import sys3 e0 ^7 k5 q* A$ ` u8 h S
- from net.sf.l2j.gameserver.model.quest import State2 `; q% {8 {. t8 L+ e. h2 K- O/ x2 T
- from net.sf.l2j.gameserver.model.quest import QuestState% p3 h, Z7 K1 B0 J$ @, S, v ?
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 120824 Q; `: P+ z5 }% e) s, e
- FANGS_ITEM_ID = 18595 {/ j# o, v! m1 @, K
- DROP_RATE = 500000
" a/ n9 o% {* O$ J6 r3 R% G1 ]- G - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
/ o2 f4 R6 R) R0 Y1 v- b% `3 z - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):' G& B# _9 n4 r3 z# S& J2 A3 x
1 g' ~# d6 M- K
- def completed(st) :( l4 ~" ^- [# O! a. x
- st.setState(COMPLETED). B! ^$ u$ q% `
- st.clearQuestDrops()5 }% s6 m9 _! V* X/ u; D$ G% e0 F8 L
- st.takeItems(FANGS_ITEM_ID,-1)$ {6 W. @$ r4 O# |$ k" ~) `- S0 K
- st.giveItems(WORLD_MAP_ITEM_ID,1)
* Y9 M& m" A5 e7 J5 N) f - st.exitQuest(False)
' p3 o: z0 v, O0 Q - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
* y9 b( p1 ` D
9 v9 ], H8 i& }2 g; f) K/ ]
/ r6 J. t% ^+ j! [8 e' i
4 J! b9 l- V4 [6 s/ WИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
5 X. \% y5 y$ \% C
9 ~% i1 r: e5 r$ d3 s6 N4 L8 p1 J* C- def check(st) :
: Z5 G) ^0 I) p# H9 u9 z - if getCount(st) >= 4 :+ I# Q F/ {& R/ r* }
- completed(st)6 i' c* d: J1 p' _! Q
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
0 u3 N% V/ Q+ o# L% `+ o: R. N3 u: V, L/ d
- class Quest (JQuest):8 {: ^! H8 s- U* {* x; h: H9 F1 B
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
, t; X: z- Z5 O/ v, p. r - def onEvent (self,event,st):
% U! a- s( n0 I+ U) P - id = st.getState()0 s! y& Q- b+ ]6 e+ |9 a1 \
- if id == CREATED : st.setState(STARTED)' r8 }* C7 M$ j# V0 i
- elif id == COMPLETED: pass) R2 h5 P7 s) |# U. S
- elif id == STARTED : check(st). U8 u9 _/ M! [
- return
Скопировать код- QUEST.setInitialState(CREATED)
3 M, f1 i4 p( W( Y9 ~7 u' P8 A/ S - QUEST.addStartNpc(7056)
Скопировать код % x" `! x: u A/ E% z" D2 U
+ r$ {4 K9 z; E1 r5 p1 h
|