Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
% g+ v( F0 K$ w( e, x W$ _Сборка L2j
0 {6 B* Y: ]. A! I* i% M$ NПример основан на сборке L2J.
4 a/ C5 K* `4 k& `9 z; `8 ^, O2 r+ Q Q; p9 x
Первое что нужно сделать, это добавить необходимые Java классы в квест.
3 v, E; F! p) h" Q+ T/ d- 5 s! e y' r" L7 T! w
- <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>
) U9 X+ I ]# N8 W- n - + @* f: K: \' l, X6 T* e# j5 I; s3 @
- </div>
Скопировать код- import sys
D$ m6 R1 o' ? - from net.sf.l2j.gameserver.model.quest import State
' b2 {4 O8 Y9 `; R" ?( L: ? V - from net.sf.l2j.gameserver.model.quest import QuestState' E e5 e4 }2 P b+ ]
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082% _% j- ]8 D% w
- FANGS_ITEM_ID = 1859
( ^1 D0 c* J& c/ L' W( J4 T - DROP_RATE = 5000003 R5 e: E h0 v6 m* v# _
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :7 p/ g: n- J; p) ^ F
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
p. }7 ^0 p" R: E+ m
+ r0 ^/ P t5 P% M- def completed(st) :: u0 Z$ v" q8 b2 Y6 o0 ^# T
- st.setState(COMPLETED)
" e4 Z7 J2 v1 c - st.clearQuestDrops()
) z- [. Q5 U4 t+ m5 F4 A - st.takeItems(FANGS_ITEM_ID,-1)0 {! T, q, D, ]" `9 \) Q& L6 y5 H
- st.giveItems(WORLD_MAP_ITEM_ID,1)
2 S3 s* }( y! v7 f0 t - st.exitQuest(False)
% e) p/ t" Y1 k% U - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))) E; j7 E, u5 h; N& X" R
/ X0 S' `1 r5 M- s: {; _ X, l- @) C3 E& b" Z4 ?1 H( S
! o, Q h6 K+ H4 R8 hИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
; X. x7 E$ ~5 C5 E; I" a3 Q! A0 m6 Q3 |7 V& P
- def check(st) :1 i* R" [3 A" O1 m) i, B+ x
- if getCount(st) >= 4 :7 u4 ?% ^0 k1 g5 ]2 Y( P7 j- @
- completed(st)# |! u3 W% d; f. c1 D- L
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.. }$ i% C' g. Z& I
: }# W) z$ H. B
- class Quest (JQuest):
1 m, o$ a" r8 ? - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)" t7 R2 P1 X. s8 y' [' G& ?
- def onEvent (self,event,st):
6 k* Y) d1 e# \ y/ f* P: ^$ y - id = st.getState() A9 m% h0 f$ ?& p6 q
- if id == CREATED : st.setState(STARTED)* n" o. F* U( e- o% _+ Z
- elif id == COMPLETED: pass
) \( H( Y3 d* ]* _3 e/ B$ r$ B - elif id == STARTED : check(st)
/ C4 l6 r6 b4 b8 b5 P - return
Скопировать код- QUEST.setInitialState(CREATED)! B0 Y& }# G7 A4 w6 k
- QUEST.addStartNpc(7056)
Скопировать код
- b8 _* Z, u( |6 W
- {" U/ d. s8 ~2 j |