Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
" K3 C9 W$ z+ p% W& VСборка        L2j
( b# f2 E  U! J+ J( |Пример основан на сборке L2J.
- X) x- P/ r% M) \! ~
8 \: i2 z% J: {0 L. l/ ZПервое что нужно сделать, это добавить необходимые Java классы в квест.
/ `" v6 M# C% Q! M, W8 P
  1. - M7 q% P& h: z
  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>
    ; @7 r! {. W0 L. A' H  |* m
  3. 5 ^& ]( d2 u+ X+ |
  4. </div>
Скопировать код
  1. import sys
    ! e! a' t( p' W' c
  2. from net.sf.l2j.gameserver.model.quest import State* P5 o" m) `' l; V/ S: q2 ~+ K
  3. from net.sf.l2j.gameserver.model.quest import QuestState2 \% I2 ^' u3 g* f; C
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    , b( x3 z  x2 ~; o: [
  2. FANGS_ITEM_ID = 18595 O; E5 ]) G- i1 @- ?% ?0 I
  3. DROP_RATE = 500000
    . \6 w! V" n$ X
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    , E' ?4 V: a- l- ]) y2 A- K- j- u
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):9 d- j3 K" C3 p. U6 c' s9 f

7 Q5 t4 H3 v. t1 a& x
  1. def completed(st) :
      m3 e/ x& q0 ?( M1 a( w
  2. st.setState(COMPLETED)
    5 k5 j$ d4 ~- o) x% x6 f
  3. st.clearQuestDrops()
    9 a+ Q2 r1 d0 p, j: Z  M
  4. st.takeItems(FANGS_ITEM_ID,-1)+ ?, t, L! h% M7 [8 K/ E# s
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ' f$ |8 r( B# p! ], o
  6. st.exitQuest(False)
    ; D2 f  E/ W3 Y6 P
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
% z; @( {" P$ _# x% V& \- T+ p9 l# P2 O' C( H1 s8 R
, V" b. _$ o& j( I5 r

: C) I- S. p8 e8 gИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):4 ]/ m! A6 ]- ]/ |
3 B" H% W# y1 `5 p- T
  1. def check(st) :
    ' c; c- E! `# j/ |0 v: R( \& I5 I; z
  2. if getCount(st) >= 4 :8 F, \+ R6 o. ^8 H/ y3 Y" _4 e5 `2 A
  3. completed(st)% D4 P, r$ v' ]' ?
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
- l- i0 f( u" r0 ^! z1 O# [- \$ c  w6 z9 s% G" h; ]& i
  1. class Quest (JQuest):! K- b0 `: Y; ]: ]! E; @$ @% `0 Y
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    0 l  }. k1 N) K) Q
  3. def onEvent (self,event,st):& Z/ P6 i) F9 N1 [! o( I
  4. id = st.getState()
    0 \( O1 j9 {  s6 C. e
  5. if id == CREATED : st.setState(STARTED)0 y. k! }) d! N" }
  6. elif id == COMPLETED: pass
    . x% e( E+ G5 M; |" _" ~6 C: |
  7. elif id == STARTED : check(st)
    ) }& D7 X0 A# q1 ^9 F7 w' A
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED): p5 {* @3 s; q8 U
  2. QUEST.addStartNpc(7056)
Скопировать код

7 w) g& V6 L( ^+ o  O& J! W4 U9 h$ y7 b7 v2 W
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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