Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude1 d8 `) a8 p I, S# H7 p
Сборка L2j3 ~1 a+ ?6 W5 o& j" H0 H3 Y
Пример основан на сборке L2J.
3 J: ]2 ]& B2 B& G3 g( j4 n, P6 P( U4 v% S; c/ ]/ Q# {
Первое что нужно сделать, это добавить необходимые Java классы в квест.
! v. ?! U# k3 m# \2 v b- & r( m! ?& X( L; 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>7 g; t& R. w( M! B5 V
" q/ M6 A2 G$ `& f3 G" l: X- </div>
Скопировать код- import sys
0 a7 Z* }9 n' [* E - from net.sf.l2j.gameserver.model.quest import State6 w7 _6 v7 r* A8 D# L1 k. e
- from net.sf.l2j.gameserver.model.quest import QuestState0 d$ u, Z4 A; H+ ~0 `: \9 U
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
: x* K0 ]: J3 E" ?) R6 u - FANGS_ITEM_ID = 18590 W' f4 B9 ?% |4 [! a' x, E
- DROP_RATE = 500000
: D; q7 Q+ R+ d6 r5 B - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
- Q5 _" P3 n( G2 a - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):5 |" J, G* {" w
- {3 W2 |8 w+ b: j& t7 N/ p& W- def completed(st) :
0 Y" U7 Z; E" _% x8 t2 R - st.setState(COMPLETED)5 r5 J" o5 I' n+ T& X2 Y# N9 {! K- d
- st.clearQuestDrops()* X* a; m: @: [
- st.takeItems(FANGS_ITEM_ID,-1)# [/ D5 ~2 ~# s+ [. E4 U
- st.giveItems(WORLD_MAP_ITEM_ID,1)
3 P5 R7 q' Y7 M% _! o- X, L: \ - st.exitQuest(False)
5 W" B+ M/ K% X0 y7 r/ p# o - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
: @5 \5 G0 l, I$ p0 U+ {
- T, m4 w) |5 u4 W* O Q6 E" {8 W. O5 ~0 h* E
4 ~; e9 S; p% V+ HИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
0 W& R- z$ o3 X& M2 \7 v$ k, Q9 T7 ]" {1 M! ~/ E1 g
- def check(st) :
! C& L) a2 d! E' ]% o g0 a$ E - if getCount(st) >= 4 :
2 {7 L% ]; C: Z# V0 I# e2 c+ k - completed(st)1 |% u3 Z. u* C& i9 D
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.; j r6 ]( k. j2 P# v9 y/ ^" E
* F3 S0 P5 ?; `! S7 x, Y
- class Quest (JQuest):4 x4 ~! c. l; P7 O. T
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)9 ]0 s I+ o5 B, S4 @$ n/ c# r! @
- def onEvent (self,event,st):4 q% C- @2 H4 V, a) y7 x. b9 x6 M
- id = st.getState()0 v; c3 ?7 k! q1 g- Z
- if id == CREATED : st.setState(STARTED), U+ O! t) f; |2 n
- elif id == COMPLETED: pass
" |( r' H, U- n& s; v - elif id == STARTED : check(st)6 u6 V- P3 `4 \1 K) I
- return
Скопировать код- QUEST.setInitialState(CREATED)
7 X6 T/ X2 z. [3 L+ ?1 u - QUEST.addStartNpc(7056)
Скопировать код
/ Y5 o- y- \1 O3 F; s0 d! q
( h% ?; f: E; X |