Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
& ?8 w/ M/ G3 \& @+ MСборка L2j% B: D5 W- [+ O
Пример основан на сборке L2J.
; J/ A4 L- U$ m0 q2 P3 }3 H& v3 V# Q" J
Первое что нужно сделать, это добавить необходимые Java классы в квест." L& f- r+ H$ K; X% A
* D9 L, G* A+ D" P8 Q4 |$ q- <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>
" o8 N& e2 l0 y2 B- t( R3 M
5 y9 y% ~& `( J; Y5 M- </div>
Скопировать код- import sys# s6 b% i! p1 H+ `
- from net.sf.l2j.gameserver.model.quest import State
& W, g9 \# Y6 q+ j( i, t- C - from net.sf.l2j.gameserver.model.quest import QuestState
) b% J# l( l% E - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082: G& z C$ J2 {5 N \% C' I
- FANGS_ITEM_ID = 1859, u* j" C6 e- t* {/ F* P
- DROP_RATE = 5000000 f6 i' x7 ~. h, G! s
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :) `; W$ ~1 z* @* e1 m
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
' _, t0 |, h$ Q; H+ {) v- k
6 k3 ~# {4 K! v: N2 L- def completed(st) :8 C8 h" h' x0 a" v" D* g8 q
- st.setState(COMPLETED)/ c# y* c3 d+ r9 [1 v5 F+ B
- st.clearQuestDrops()3 f1 V* R5 X, \7 I+ c: b
- st.takeItems(FANGS_ITEM_ID,-1)
7 w( e* c5 `5 A3 {, Y6 P - st.giveItems(WORLD_MAP_ITEM_ID,1)4 x+ |: Z0 L+ o' I7 C/ {- \$ f
- st.exitQuest(False); r# ~$ E/ Y. N. `5 V5 L8 v6 l
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
4 G3 O$ ], w6 C4 t) T- {/ s2 K
+ \( R. h" W' g9 b x# d3 d
2 @ N! d# T" x5 a8 H& M1 Q/ Y& ?) W
3 U v7 Y, X, `& ^1 UИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):0 J# t: f/ l! k& s# u
B3 E; T" @* L& o% L
- def check(st) :
+ @& s; N* @, M9 o - if getCount(st) >= 4 :
+ u P0 o) n! v m$ v7 N1 A, n* ? - completed(st)5 J% W. j" b( I+ l; m+ J
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
8 t8 P4 Z. I, |* Z- ~6 Q5 e ?! f; o
" E0 L, z) u9 y$ }: D$ V- class Quest (JQuest):- @; @" \8 @0 A
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)7 J% \3 \( X) U$ {# ~) M
- def onEvent (self,event,st): T1 B6 C% q5 f# z4 ~
- id = st.getState(): F' y2 {! {* g* f0 `! |* V" l* A
- if id == CREATED : st.setState(STARTED)
+ B1 b! f. b$ } - elif id == COMPLETED: pass7 `$ X$ C( P1 h/ e4 x$ O% y! H
- elif id == STARTED : check(st) z3 F6 G& X3 W6 C4 ?6 ~# b1 a
- return
Скопировать код- QUEST.setInitialState(CREATED)
+ o4 ]: s, C+ `8 @ - QUEST.addStartNpc(7056)
Скопировать код 1 Q& l; ?& f3 m) r, H5 x
& I$ s }6 A, {# s, w. z/ B1 {
|