Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
. C+ r8 p9 W2 q8 m+ |- T4 IСборка        L2j
2 C; X. H' Z! F) @) v& ?/ V* lПример основан на сборке L2J.5 B; p6 i$ V: d& }7 o  Y/ Z

2 e) \5 g  p  G. i) BПервое что нужно сделать, это добавить необходимые Java классы в квест.9 H  M4 X. L( \7 D& P" K

  1. ! T5 j9 K/ `( P$ u4 v- H+ K" \
  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>
    3 F) |) W( S( Q; x4 _

  3. 5 m% U( k# X' ^/ z) F( p0 g4 Y
  4. </div>
Скопировать код
  1. import sys
    & i  G" Z; [. c7 X: a( W
  2. from net.sf.l2j.gameserver.model.quest import State* _5 f4 N! o9 }/ X6 j; |: D- \
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    # v; C( U  b! w0 g3 a3 l9 O3 S2 _, a$ O) Z
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082" H; W. }3 |9 P+ {7 e! m
  2. FANGS_ITEM_ID = 1859
    4 b, }% ]2 f4 A. T
  3. DROP_RATE = 5000003 U- a& j1 }: t0 @4 m" t+ m
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    & c+ W( p* `6 c; U' ~) G
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):  v0 S/ Y8 w& h' O! @

7 v0 g% W  g( y4 ~- N
  1. def completed(st) :: N# T" H1 B) u+ {! G& B
  2. st.setState(COMPLETED)" Y/ v/ E; Y. @- `
  3. st.clearQuestDrops()+ R9 {9 b( a  z& m
  4. st.takeItems(FANGS_ITEM_ID,-1)* b5 _" [  U4 @6 ?+ w8 m
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)7 U3 t/ J( ~" i; z
  6. st.exitQuest(False)( V1 p9 G2 q$ q' f7 M
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))$ `$ O/ `0 v! ~9 h

6 c" \7 k& O+ p, w0 `9 H+ c
# y* K0 H3 I7 _7 u0 u
6 p+ X9 G, H& M/ x  ]. j
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
4 Z' ?" Z3 q5 u; s. v
: W! O7 ^& ?* {: Y; t' v" x
  1. def check(st) :  f! J( N" K* Y$ g0 {* H* I
  2. if getCount(st) >= 4 :
    0 z. }' b5 u& R: C
  3. completed(st)
    % i' E" `  H& J& ^) o- b& B
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.+ t0 ~9 Z% h2 S4 P3 m; R6 u

& I1 Y1 a6 Y- m  B
  1. class Quest (JQuest):
    ( n# Y% S, k( Z# Q5 a2 C& i( U9 [1 k
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)$ J( ~+ N9 F( ~+ L2 B  V) v  D# K
  3. def onEvent (self,event,st):
    ! ^4 [( A$ Q3 l" c6 D
  4. id = st.getState()% {: [, j: K0 v" @2 P
  5. if id == CREATED : st.setState(STARTED)
    - \9 W5 r& H+ k: U+ n
  6. elif id == COMPLETED: pass: Y  ?  Z' e' H% \
  7. elif id == STARTED : check(st)0 t( ~% G; g; X- O: _7 j7 C
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    " q5 J4 _+ n- r  M: F
  2. QUEST.addStartNpc(7056)
Скопировать код

) @: c  c/ A% H8 @% {' L- i" M. O4 [1 F+ ^) R* V% V, x: K: C
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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