Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
' {8 A# b$ H2 Z5 F: X& y0 AСборка L2j
# E, ~4 l) V5 j4 N+ o( I7 PПример основан на сборке L2J.9 r! L- D2 N! X( ]
; ?5 c# O& P2 h0 k& `+ P
Первое что нужно сделать, это добавить необходимые Java классы в квест.) J' w! Z* E1 |+ j1 V: P
- / M' x6 _+ F+ z
- <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>9 }1 c& v) v: ~9 q
' o% ^' B. {. M+ S7 v& D/ P' ^- </div>
Скопировать код- import sys& |6 M ~: @8 W
- from net.sf.l2j.gameserver.model.quest import State3 X- U8 Z/ M) o. v
- from net.sf.l2j.gameserver.model.quest import QuestState
) d# ^% V, |9 P/ ~& Y6 ?, S - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
, o. b$ _" Y l5 l - FANGS_ITEM_ID = 1859- j! k( m g* A
- DROP_RATE = 500000 D/ m5 z/ n- k; w7 h7 w7 h4 g
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
" w5 w- T/ n+ |, f6 t$ o$ Q - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
, I! Q& n+ r( g( q" \* x5 W8 @5 b$ u5 m
- def completed(st) :( v1 g& x$ ] E3 o& D5 u7 _+ ~
- st.setState(COMPLETED)
3 v3 z1 T# r5 r! S6 k - st.clearQuestDrops()* J) M) \. a+ F
- st.takeItems(FANGS_ITEM_ID,-1)
2 m. |3 d! h5 s/ H; ?/ s* W - st.giveItems(WORLD_MAP_ITEM_ID,1)
; [* n, K' W8 n5 t- @ - st.exitQuest(False)8 ~# c* \/ ~% y, E: M) ^* S5 f
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))# |6 B; [1 d1 R0 M- W$ e
4 a1 c( c/ u4 Y4 L, _) e
& o3 E% T" t' M- ?% R( ?/ |( E# g- o. j" l& W; H
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
; \- e& }7 ^6 x) H. u+ I- h
6 K, w _) q& D. p3 z: }4 q- def check(st) :5 L5 i, B( H! X) I' c- ]
- if getCount(st) >= 4 :3 U0 I5 Q }3 o; R5 d+ G, B/ b
- completed(st); i) _4 W( O T- W1 H: s- a& y
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.5 D7 ?- e q3 j8 Z/ y" g
9 _- @. z0 _' `6 t" v- U% k- class Quest (JQuest):
, |2 r; T8 P0 c; R - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)$ x' k- m' f2 [7 D+ c' k4 r$ E
- def onEvent (self,event,st):
$ C( B: P$ @- _9 `0 G5 a - id = st.getState()$ B- v' t. t! j, o" p
- if id == CREATED : st.setState(STARTED)$ B |' T1 w+ `) C
- elif id == COMPLETED: pass
9 q0 o6 F, b" j: |! k - elif id == STARTED : check(st)
0 z' e. K# r3 k3 [+ w5 P$ d - return
Скопировать код- QUEST.setInitialState(CREATED)
9 N* v" t- L0 A$ u - QUEST.addStartNpc(7056)
Скопировать код / j6 F) L* H w. p
/ \ S" w+ ` u+ b- {; s4 o |