Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
& e0 b7 A- @$ R% u" v3 rСборка        L2j
5 @* o& z+ A( [. p1 _6 tПример основан на сборке L2J.
3 c- K/ Z- N( Z; F, H3 t$ r% j* i  s' u1 q1 w5 o% m3 x2 G! s* M
Первое что нужно сделать, это добавить необходимые Java классы в квест.
5 }/ E; ?& L) B& h! W

  1. & z* E5 U+ y  ]
  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>( w, t! ^3 Y; g& K# b* d+ ~" T, `

  3. * |/ Y" O) O8 Q
  4. </div>
Скопировать код
  1. import sys
    , t+ z& ~9 m9 r+ m2 _7 A
  2. from net.sf.l2j.gameserver.model.quest import State# K% E3 U# e9 D1 x& P2 V
  3. from net.sf.l2j.gameserver.model.quest import QuestState1 Y  ^/ ~) Y2 B: r
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082# ]# x( n/ m, B6 ?
  2. FANGS_ITEM_ID = 1859& x1 L$ }( x" P) U
  3. DROP_RATE = 500000
    . v$ n2 |! F9 b  h' F' a/ Q
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    ! P$ i% Z$ v" c8 z3 ^$ ]) P
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):$ ~5 f7 h8 r9 f/ m" N
7 t2 {8 H( b+ I, Y: E9 y; l7 k" l2 b
  1. def completed(st) :
    7 K3 a( R* c2 K% M' b3 y
  2. st.setState(COMPLETED)2 _: G$ v! Z% k2 @5 w3 @
  3. st.clearQuestDrops()
    * d- B1 B# }7 @+ h$ E5 N
  4. st.takeItems(FANGS_ITEM_ID,-1)# @$ A7 Z: P7 z) n" ~$ F* B
  5. st.giveItems(WORLD_MAP_ITEM_ID,1). u2 e) r6 |) K# F  y6 F# _
  6. st.exitQuest(False)
    ( x4 w# w' }0 U$ J/ T! z! x
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))5 S; _' R! ^/ b6 ?6 d- y6 J

  g/ A6 d9 P) _$ A4 C& f1 I
8 x& l+ K' V6 U  U

& O' }5 I& j' a$ y+ d& nИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
4 J9 s) {' R+ u2 N0 C
  a! C; E& [6 W' P+ T
  1. def check(st) :9 d# A* X8 ^' ^8 L* R; R' U
  2. if getCount(st) >= 4 :
    % |+ h" I5 o7 F7 U9 A! s, j
  3. completed(st)5 {7 ]8 h' U6 O# j' _$ p3 x4 n+ d
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.( z: }) v3 R+ X5 |6 ?

7 a0 m. u9 t6 h; ?0 y1 A% }- T: T0 v
  1. class Quest (JQuest):2 j  e) G3 Q" c" g% {2 A+ s3 M
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)+ J1 H/ V  j9 b4 B/ d" v* H# k
  3. def onEvent (self,event,st):
    8 ~1 y7 x' Z: u, _$ \9 ]$ p6 B" ~
  4. id = st.getState()
      ?! g- y3 t( M' C$ R6 K% b
  5. if id == CREATED : st.setState(STARTED)
    ' Z9 N* ~- I2 A) h/ j
  6. elif id == COMPLETED: pass) U% i9 _6 Z! {( L/ u
  7. elif id == STARTED : check(st)
      b5 Z5 U! v) N( X2 R
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
      X- \# o/ d4 ^) j7 v0 j
  2. QUEST.addStartNpc(7056)
Скопировать код

) {) S$ o0 Y& |4 k; h
2 L, i7 V- z( t4 Z3 Q6 m
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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