Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
% O. F0 K q# u* {9 K6 `2 dСборка L2j6 M7 |: M: V! c: Q! c0 a
Пример основан на сборке L2J.
* R b* k5 S3 p2 A: @
# v+ L( i1 n. M, U( S" xПервое что нужно сделать, это добавить необходимые Java классы в квест.2 k8 ^- h4 b" ?+ U" R; t0 Z) }! E
- : Z, Q2 v A& D4 s; L
- <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>
: z+ U, g1 d6 q/ ~% ~8 K
$ Q h8 G# q7 W. {; q1 [- </div>
Скопировать код- import sys0 m4 R$ X; `% S# p; s* n
- from net.sf.l2j.gameserver.model.quest import State# v1 b$ e* @& H, O; }
- from net.sf.l2j.gameserver.model.quest import QuestState$ X! G( r2 j" C# q8 n+ A- M1 I* a( N
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082/ c. `# r8 k- T8 Q9 a
- FANGS_ITEM_ID = 1859. j: I! J3 A& [1 z
- DROP_RATE = 500000% K L' B1 B9 k
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :4 N4 i% I, F2 y x' C5 E
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
3 S2 w6 K1 z' S) X4 L2 j8 b. N, b+ L. [% p4 N z
- def completed(st) :
3 D; W4 h2 x7 m1 C - st.setState(COMPLETED)- E# T( |0 J$ a- @3 @: V
- st.clearQuestDrops()4 e1 e P0 ^) K1 X5 v
- st.takeItems(FANGS_ITEM_ID,-1)
5 Y6 a: g0 T( Z% A( [7 y - st.giveItems(WORLD_MAP_ITEM_ID,1)2 F3 N* |) z/ N# O" u
- st.exitQuest(False)
& j7 M6 O* |1 T - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
# n/ _$ d( V) T4 }# V8 l% E% F1 J) S7 Q( K- {( M
9 T# z+ B3 Z* w7 I* B9 O& [! P1 m- p
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
& K4 Z8 F" S, B9 ~- G
0 U* N- s" P1 p- o7 S' Q' _; F( U- def check(st) :
4 W5 _& c& F" V6 V' \3 h - if getCount(st) >= 4 :
: p2 M2 A3 N( t6 i - completed(st)4 u; t, Y& W- J' {: O; ^
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
7 P2 h" { ]( U4 B+ K( h- b {8 M- c+ E$ n1 d% G
- class Quest (JQuest):
4 W9 a. _8 {* Q - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
s3 g3 V( S8 q! T - def onEvent (self,event,st):8 ~- S! f8 Z/ {2 v ?$ W
- id = st.getState()
8 v+ e0 u- C, k, B( H b6 Q+ h - if id == CREATED : st.setState(STARTED). C. n# o( Z; L( u
- elif id == COMPLETED: pass
6 b# q; e1 H7 ^9 R2 o - elif id == STARTED : check(st): Z. ~- k6 ]( P) M9 |# t
- return
Скопировать код- QUEST.setInitialState(CREATED)
5 Z' Q0 M* W; W/ | - QUEST.addStartNpc(7056)
Скопировать код
- f: t# N- E) [% j. g
# G: t' ]. \& ~0 m# d" q |