Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude7 X0 }) p- P  J$ k6 `1 K/ X
Сборка        L2j' v0 f' L! d% \, U
Пример основан на сборке L2J.
, r: i6 O  _1 ~7 o* m3 Q: \5 ]" A" J9 Z% z1 S- F/ ]
Первое что нужно сделать, это добавить необходимые Java классы в квест.
& y, r; Q; w! v$ q4 O/ f
  1. 3 V6 F. R7 O/ ]- K! n% H5 D+ x
  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>- |' z% p6 c; Z

  3. . [" `0 o, e& r  W- Q3 d
  4. </div>
Скопировать код
  1. import sys
    . n6 m/ ?5 D3 s
  2. from net.sf.l2j.gameserver.model.quest import State
    + j3 E) F' t  d" G7 ?* [
  3. from net.sf.l2j.gameserver.model.quest import QuestState3 K4 D! K$ \4 `8 O
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    4 L1 @9 R7 S4 Y/ D& {
  2. FANGS_ITEM_ID = 1859* F9 L: E4 P8 D
  3. DROP_RATE = 500000; e' x9 i5 J$ N) s+ J0 w
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    ( p: ~+ M! i/ N1 ^
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):1 B9 C7 B1 p: `$ R$ p- P/ g5 Z0 v

( E1 T& I) V- a. a; f' \% D. U4 v
  1. def completed(st) :
    * @; ^& N* z2 [3 c
  2. st.setState(COMPLETED)$ g: ]8 ]' d- c: H. l
  3. st.clearQuestDrops()
    # p6 Z3 ]: F# M8 u  u
  4. st.takeItems(FANGS_ITEM_ID,-1): K) p1 E. ?7 ^  ~# y: a& Z4 v2 ?
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    - P' V+ P. ~6 M, _7 Y0 r
  6. st.exitQuest(False)$ n( Q6 c  Z+ W! {2 q& |
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
5 z* V" M' i; J
' {/ V- k1 Y+ _# O' V6 a9 x& C
2 r& X9 G, Z3 b0 ]: M9 j

: Q4 c; j) L* _8 H& b, sИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):- {* P8 F; x6 c( t: k4 z& O4 L* H* M
5 I2 D5 Y# w9 U0 h4 m
  1. def check(st) :
    * c0 p  L; ]  J$ F
  2. if getCount(st) >= 4 :
    ! S7 p: T1 G9 ?# r8 M
  3. completed(st)5 j0 e) ^7 {# |! P1 d! [$ E
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.2 U( X' }6 `" G) V0 i3 s& Z
1 w! a9 h- d) X0 l% w
  1. class Quest (JQuest):
    " D7 h- u. a- W( l4 q% S" i. W. O
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    - Y9 m" i. n- c- A% `' ^
  3. def onEvent (self,event,st):  b) S# |6 p9 T% y8 I
  4. id = st.getState()
    % G) o8 `& S! m; _* }/ h" f$ f- |
  5. if id == CREATED : st.setState(STARTED)7 w, ]2 x0 K. \# m, @, H$ ]8 Y
  6. elif id == COMPLETED: pass
    ) d; Y/ @% O- V) \, @7 D- i
  7. elif id == STARTED : check(st)
    " ]7 b* Q: L5 {, Z7 ]4 h# x
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    # v4 ~5 `* w0 b9 Z
  2. QUEST.addStartNpc(7056)
Скопировать код
- N) V' l) C" N2 Z/ J6 J4 q

3 l+ C5 P1 z+ P* I: p/ ?" E
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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