Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
' |- o% {' X' g% |Сборка L2j" ~. t; T' d+ B4 V
Пример основан на сборке L2J.* Z3 E4 z: D: N$ W$ z4 n
! r* {, \# p6 n* qПервое что нужно сделать, это добавить необходимые Java классы в квест.
. V/ Q2 y' E" Q) }1 I* y. x& w) _- $ X4 [7 ^: n+ w6 n2 s; q0 Z- g+ g
- <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>. F5 g2 g* V4 q3 `- g1 ^ G" \
- # T8 B) U! d' F; f8 {2 W4 ?
- </div>
Скопировать код- import sys9 |1 e+ F. [5 M! v6 ~
- from net.sf.l2j.gameserver.model.quest import State7 W6 x0 | v& E' ?9 a& j3 k$ \
- from net.sf.l2j.gameserver.model.quest import QuestState
% H# f0 `6 \: _1 W0 X6 h - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 120820 Q# k- X: ~# ?7 D
- FANGS_ITEM_ID = 1859. F: T6 G$ G& _. @0 v
- DROP_RATE = 500000$ n. c6 P; w6 S! f$ Z
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
8 {, A* q5 X t4 @. M$ { - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
5 D7 P* E( d. q1 x1 R2 O
$ X. X/ _4 b2 Q) O- K- def completed(st) :
$ Z8 j, N: o# p5 X/ j" e+ ~ - st.setState(COMPLETED)) z! o' {9 ^, A9 l% h1 ?8 W7 E
- st.clearQuestDrops()
! F. X. X! ~# B; g/ Q8 N - st.takeItems(FANGS_ITEM_ID,-1)
! M) |4 F( _" \, f - st.giveItems(WORLD_MAP_ITEM_ID,1)
9 D* r: g7 h! Q& A - st.exitQuest(False)
- d+ D, V: Z' }, I - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
1 l/ B" ?9 d+ e4 l c' j) V, E; v2 _0 F9 o1 K: v9 g& y( E
# q' q( C9 d% I+ H1 a/ F c) i
& A$ P9 [9 @1 [! h/ P. vИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):: a1 A' I' {- S+ O
: @/ N- Y, N% |5 R; Q* ~- def check(st) :1 O& q" t$ M- L# ?/ `) L4 ^$ a; o
- if getCount(st) >= 4 :
% _' D) r7 ^% v; f# B& H9 L- \! G - completed(st), N8 A J$ N) T
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.8 h7 c% F; M% j V5 \1 F
2 v" V% B# x5 W
- class Quest (JQuest):5 e; A% K5 f/ m" N. n1 b% O! _3 v
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
# j# ~( _2 `: o( ?5 v - def onEvent (self,event,st):( i8 U R ?1 O7 K9 C) u+ C: ^
- id = st.getState()% ^* d8 M1 i. ~7 ?! C& {
- if id == CREATED : st.setState(STARTED)
$ B, {8 `; k$ h, l' Z - elif id == COMPLETED: pass( p- c0 ?$ v1 T
- elif id == STARTED : check(st)" B ^6 J& g& H2 @ X
- return
Скопировать код- QUEST.setInitialState(CREATED)
7 X2 y7 h8 t# O+ p6 i5 Y - QUEST.addStartNpc(7056)
Скопировать код
$ ~0 B3 Z% X3 A
/ b/ ?6 h3 B0 u, ~7 a' U5 u |