Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
4 X E% ~# |1 F& {Сборка L2j. h- p# A1 k) d. e
Пример основан на сборке L2J.
9 r, Z' N9 h O5 o' b; o9 E6 }6 R
8 K# V0 L! V) ^6 k+ f% FПервое что нужно сделать, это добавить необходимые Java классы в квест.% L6 f. J4 v9 @% P" W. {: f
- % C# y8 p: Z4 }! b2 x) S2 m& B9 n
- <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>
# Y8 s# f7 X L
$ e: }; b# [- c, A% z- </div>
Скопировать код- import sys1 o- R3 u' F+ m! j# `
- from net.sf.l2j.gameserver.model.quest import State
; q$ U. q2 n6 \! a. u" R y0 E' P - from net.sf.l2j.gameserver.model.quest import QuestState- X" m7 N! w" m% h
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082' ^& q$ e7 ~" p4 `' V# @! n
- FANGS_ITEM_ID = 1859
+ ?! p3 i% W( }2 V4 S/ Y4 O$ C - DROP_RATE = 500000# I9 e+ f1 L/ A8 S# f( s& d
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :" y" y5 E- I- |# [( o* m
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
* U# Q5 w( v1 Q* P. [, Q7 t% T9 N6 j) R9 C
- def completed(st) :0 L5 O- W9 H2 ?+ g F6 v. Q
- st.setState(COMPLETED)
: X5 `2 s/ ~7 t9 H( M/ V5 T7 B8 O - st.clearQuestDrops()- e1 R; o' g8 p. m4 t. @7 X
- st.takeItems(FANGS_ITEM_ID,-1)
6 W2 O3 d9 J4 G! D+ G - st.giveItems(WORLD_MAP_ITEM_ID,1); a9 N; w, d0 c' v j* m
- st.exitQuest(False)) e9 x% T& ~" Q
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))& ^- Z9 x9 |4 k8 @5 L6 X
) `7 b4 Y* b& K, ?9 R( z1 R4 K* y& i
" P& [1 F, n7 b+ s! `9 X! E2 r, q) `4 G
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
0 ?8 M6 x! l, \8 z2 U# P, y9 q3 d
! f3 P7 N: I* s2 _8 Z0 p/ a. v- def check(st) :. w' X9 H# m0 l8 n( |
- if getCount(st) >= 4 :( q) G+ h# }9 x+ a `4 H
- completed(st)) ^ e( T, X0 S& ~
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
8 O" b) r- P$ w8 ?+ |
& N q: l( n# K/ K6 D- class Quest (JQuest):
9 [0 a) ^: E4 ` ]) p. T! L& M - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)) t3 a- L }7 Y8 {! F7 |
- def onEvent (self,event,st):
) N* |$ x/ q* n1 K - id = st.getState()
& L0 N7 s/ ~' {3 s) B - if id == CREATED : st.setState(STARTED)
( T( p. I+ m. N) Q3 l# } - elif id == COMPLETED: pass; c* a; B3 ~0 L% N0 D4 Z6 T
- elif id == STARTED : check(st) O+ \9 J+ ^) u/ l ~* |
- return
Скопировать код- QUEST.setInitialState(CREATED)3 ^' |( j) ^- k% ? L$ X% a7 ^# v
- QUEST.addStartNpc(7056)
Скопировать код 1 Q+ X# L- H% Z
8 y3 g F4 G/ q |