Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
! ^2 H  Q2 h' O5 q" _Сборка        L2j0 e. x7 Q; G( i: K# R
Пример основан на сборке L2J.! Q7 @, \/ k: |5 D$ o7 N, D* ?2 c( K* D7 t

2 M7 z+ a3 M% {2 [8 L' dПервое что нужно сделать, это добавить необходимые Java классы в квест.2 T  ^9 V* F* T* y% t

  1. ) K; x2 P( H; 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>
    / l1 u: f" @2 f! K; \

  3. + Z  R# K5 @; B6 l9 j. Y
  4. </div>
Скопировать код
  1. import sys
    , M% ~) b* X9 B3 J, H
  2. from net.sf.l2j.gameserver.model.quest import State+ q* X% X/ Q: g0 l2 ~3 f# _
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    4 J; h" f( A# _) P2 d* i$ v) V, D
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082# G# }% _* K; ?' ?, Y
  2. FANGS_ITEM_ID = 1859
    3 H* M2 ]' v: j# }+ E6 b+ k; x
  3. DROP_RATE = 500000
    ' k: P, y8 G4 f
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :- G8 f7 O7 y' h0 C' [
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):) L' p6 O6 P+ S7 f. ^

' r4 H" \' i% c, Y  @, U
  1. def completed(st) :% l4 K5 t7 Q/ X( e& `/ f
  2. st.setState(COMPLETED)
    ! H$ i- L; Y1 q- [! S
  3. st.clearQuestDrops()
    ! J8 E0 E: y/ R& ]
  4. st.takeItems(FANGS_ITEM_ID,-1)
    6 G! T6 E4 }$ r$ h+ x
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)( _! z) ^! b6 A2 U
  6. st.exitQuest(False)6 x) }" T  F/ x( ]/ i+ I; o
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
. f# }! G! I% a( X1 T% R6 H6 v( N. |9 P6 m5 F5 a
( A1 f+ K9 s6 H

2 b& Y9 S8 u. V$ N1 jИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
6 v$ a6 b2 n- E. N0 u* p# A  P: Q
1 t0 i. X2 `1 T. F, ?+ M/ F2 B
  1. def check(st) :! b8 B7 R6 O/ L0 ]
  2. if getCount(st) >= 4 :
      i6 H& Y' E) I
  3. completed(st)
    " W: ~( C8 D9 Y
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.7 ?  x$ z. \- z! R$ ^* [

# ?) N, B: q# a' W
  1. class Quest (JQuest):* `( m6 D1 s8 r
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    * e' s2 o% c/ Q) l; P
  3. def onEvent (self,event,st):: P1 Y3 R( C+ j
  4. id = st.getState()
    - o6 f2 k  w8 z4 k# ^( N' E
  5. if id == CREATED : st.setState(STARTED)
    * s" W2 l4 ^$ O( ]; H# A' f5 Z
  6. elif id == COMPLETED: pass9 ^( B4 b) A* M8 k
  7. elif id == STARTED : check(st)
    4 m' A: V4 h% N5 X
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)/ u6 ?) c0 [& |/ M5 H) j( _; ^
  2. QUEST.addStartNpc(7056)
Скопировать код
/ s$ c" |* o& _) B4 F; |; R4 u
3 V  ]0 e0 ]+ d
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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