Top.Mail.Ru

[Квесты] Создаём собственные квесты (часть 1)

[Скопировать ссылку]
admin Опубликовано 2024-9-17 18:39:47 | Показать все сообщения |Режим чтения Распечатать Назад Вперед

Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!

Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться

x
Хроники        Interlude
% L5 F4 P$ s$ J' x' ]Сборка        L2j
1 |* t: c5 {/ n& j+ ]- P! U8 dПример основан на сборке L2J., P, T9 _) s% i; {

' A+ Y0 ?; C/ Y$ D! r) oПервое что нужно сделать, это добавить необходимые Java классы в квест.
. {. c  N" F0 ^% Z, ^

  1. * p; m2 O$ P" N- t7 N+ N
  2. <div><span style="color: rgb(20, 20, 20); font-family: Monaco, Menlo, Consolas, &quot;Roboto Mono&quot;, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace; font-size: 12px; white-space-collapse: preserve; background-color: rgb(245, 245, 245);">(net.sf.l2j.gameserver.model.quest).</span>
    $ B/ K/ G3 L9 S0 k4 `8 Q7 a7 x

  3.   F  j+ D7 O; E6 n# h% _
  4. </div>
Скопировать код
  1. import sys
    ; A  h) ]: U7 Z, J7 g
  2. from net.sf.l2j.gameserver.model.quest import State
    $ ~/ {5 {0 b2 b
  3. from net.sf.l2j.gameserver.model.quest import QuestState+ J& R! q6 m# L: g
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120826 d% k0 c0 a0 i( J* L
  2. FANGS_ITEM_ID = 1859
    % g) C4 j# y. F! j1 ^# k" F( S
  3. DROP_RATE = 500000
    ) I0 {  C3 m4 }
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :) X& P2 l  O/ D9 n) g% \9 c2 _: y/ z
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):/ u& R$ b* q. T- S8 q$ r: G

% u, e" D+ q  R" j4 ~0 i
  1. def completed(st) :$ x3 k" I, T* u& k2 ~! T$ G) G, L
  2. st.setState(COMPLETED)4 V) t) e  \; W7 D- V
  3. st.clearQuestDrops()* G: ~/ A2 p1 I" r. O* i6 o/ J
  4. st.takeItems(FANGS_ITEM_ID,-1), t$ E2 u: M  m7 r+ d5 B
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)# d' y2 ]% `% n' R
  6. st.exitQuest(False). e* I5 {( ?; N1 l0 E5 v  m4 q
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))3 j& ?2 }) H6 k" V
6 |- R( s  Z. Z9 T- r, R# _
4 k* m9 q9 l% S8 g2 X0 F  B

0 C1 T& y* I/ M( e- _" _7 tИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):1 w, C1 M$ l9 X* Z  h- T9 h
8 ~; O+ ~: p7 p( m
  1. def check(st) :
    $ Y9 T. o/ ]& Q* p. s* \
  2. if getCount(st) >= 4 :6 `0 D$ c% A/ i3 ]
  3. completed(st)
    * y8 d  Y- G7 i# m: |, k
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
4 C# Z/ F+ `$ C: p/ `- I
( K1 d- |& X. e3 \, [
  1. class Quest (JQuest):
    & {" M' _; `8 F, o  V: S6 [: K
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)7 t* `# ]2 h4 N
  3. def onEvent (self,event,st):
    % m1 e3 ?! r) S% B
  4. id = st.getState(): ~$ x2 {' c& r9 \2 E* Z2 `* u
  5. if id == CREATED : st.setState(STARTED)+ u- Y4 |, G6 T; ^. K+ I1 V
  6. elif id == COMPLETED: pass
    5 G% i: A! J9 b9 N7 C( N* U
  7. elif id == STARTED : check(st)
    ; }  y; w! d! }
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)2 t# u$ j3 b+ u0 Y# u2 m  Y
  2. QUEST.addStartNpc(7056)
Скопировать код
$ D+ l0 J+ e1 w2 [% D
' J2 [4 |2 B$ k6 C0 c; T
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

Правил начисления баллов

Опубликовать
Сектор творческих людей
Горячая линия

638638758

С понедельника по воскресенье с 9:00 до 23:00

Обратной связь

admin@artace.ru Онлайн

QR-код

Powered by Discuz! X3.5© 2001-2021 Comsenz Inc.