Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude0 y) ~# R& V1 w& D) g1 x! N8 z
Сборка        L2j  p4 O' n% D5 Y9 u+ j7 f
Пример основан на сборке L2J.1 a) f2 }$ |2 p7 Y2 p1 m1 e! D% E# p

& n) Z! h6 @* x# Q" U% T, RПервое что нужно сделать, это добавить необходимые Java классы в квест.
1 U1 ~" f' _+ f) E

  1. 2 x. g; A5 k, o8 T6 A$ M
  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># H, e3 j/ \6 z) ~% W& T' R$ d
  3. ' N6 }3 k8 u) [
  4. </div>
Скопировать код
  1. import sys
    / x! E9 Q# M" G9 p; O
  2. from net.sf.l2j.gameserver.model.quest import State
    7 j. l; y0 i  ]% M2 i3 }1 l, `: D
  3. from net.sf.l2j.gameserver.model.quest import QuestState* j6 {. f1 J0 C
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120823 F6 ^5 }8 a4 W
  2. FANGS_ITEM_ID = 18599 Q' h. c+ s  s9 A1 k. {# f
  3. DROP_RATE = 500000( I# X( ~- ?9 g
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
      R+ R; T* Z; S  G5 r, |7 [
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
7 T$ U! i: }( Y$ m7 U# P
1 C$ W, d8 z' |4 T5 J
  1. def completed(st) :: j$ A$ d8 h9 K/ u" t0 l/ y) }
  2. st.setState(COMPLETED)
    ; R( d5 r! z% e( F
  3. st.clearQuestDrops()
    + L  q& K3 `, z! ?
  4. st.takeItems(FANGS_ITEM_ID,-1)
    ( Z. ]; H4 b" [6 t' B' f" t# J
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    % o: C' G( G# C9 Q, z
  6. st.exitQuest(False)
    ) |, ^( V. O) ^/ K
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
4 b! }; }8 R3 f- q* @4 `3 _
' T. I# r6 i9 K5 j; U, O0 ^. z" x1 ?. v+ @$ f1 {8 o4 y

& x4 T0 Q9 o. f; u9 X1 j4 HИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):" S4 M6 D/ ^# z& q/ ]# x3 j

* k" c0 P, B5 A( `0 M" O' y6 ~
  1. def check(st) :: q. |6 P3 R- K& b+ U* ~% n
  2. if getCount(st) >= 4 :
    6 Z" h* N5 P- v4 w& r9 J4 d" s
  3. completed(st)
    8 |/ U3 G! p5 J0 x6 m3 Z; I: x
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.3 C( R. O+ `7 J, J* ?3 u6 l

: _& N$ e1 t% ]  X
  1. class Quest (JQuest):, P: Z, s! {, K2 y
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    1 x0 Y' d7 P! U, B7 [
  3. def onEvent (self,event,st):
    & M+ L' l1 K: b2 Y0 ]
  4. id = st.getState()% Q% p2 [* I( i  [
  5. if id == CREATED : st.setState(STARTED), _' {' w% w- S* b0 b0 Y, q
  6. elif id == COMPLETED: pass
    % Q  N* t# p( T6 T( _9 B! n. C
  7. elif id == STARTED : check(st)  y* x$ E# N# E8 t! m! \+ |
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)6 U  l4 O! o; p$ d; C6 Z9 |
  2. QUEST.addStartNpc(7056)
Скопировать код

4 W! u. a1 l" G+ Z3 `* W* s( s1 H5 ?6 l5 c
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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