Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
6 s0 x" i5 a9 @; ?% M, EСборка        L2j, e( k& h  `9 f0 H9 O
Пример основан на сборке L2J.3 G) O. [. X, u) \$ f
% z; ~, c  a% t
Первое что нужно сделать, это добавить необходимые Java классы в квест.
0 P* i. V4 U$ z* i

  1. 5 N  T/ |, Q! x$ [& m( R
  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>
    9 G: W+ w2 _0 W9 a+ L

  3. $ o0 [& ^' _( B* x4 i
  4. </div>
Скопировать код
  1. import sys
    8 i% K; P. a9 j0 _9 _1 ?
  2. from net.sf.l2j.gameserver.model.quest import State: X. |5 i. `, X& r9 `% {
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    # Q% Y/ w5 p% X" s
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    - i- j" V6 L) Y8 T
  2. FANGS_ITEM_ID = 18595 @' n2 U, W" Y0 Y8 x8 K) F6 h' C- q
  3. DROP_RATE = 500000
    9 p  x) _0 P; o  z
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
      [3 D' B) H6 h- ?* W. ?2 {7 ^1 J
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):" S! v" G8 L/ ]) t& Y, I, B" a" T

2 Y, G9 U2 k8 P, H: {' {0 X) n
  1. def completed(st) :
    , Z; X% ]; Q7 @
  2. st.setState(COMPLETED)1 ~3 ^+ V! J& ~$ C; C( j8 Z& j
  3. st.clearQuestDrops()7 u+ b! N0 W: V! j5 l
  4. st.takeItems(FANGS_ITEM_ID,-1)
    $ ]/ d' f; K  L0 l
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    0 N6 ^7 i% c" c" ~$ D: l
  6. st.exitQuest(False)0 O" O! I" y; A9 ?, T
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
% o: F4 L5 j% I- B2 ?; M; N2 w9 x2 a. k. s% y& {7 a1 t2 h4 i) j

/ U  j' w7 B/ K* `
% l# G' r7 y1 w- E$ y
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):3 l- e7 B$ f; V4 p( B% D# ~
( c0 \1 `& c* l
  1. def check(st) :
    " f) F3 g4 A* }
  2. if getCount(st) >= 4 :$ a/ w8 W( ^% h( a- K- D
  3. completed(st)6 N0 M* p% j. B/ d% F$ Q- c
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.- w$ F4 N# R' Z5 o1 t& \
/ \; |1 i/ o: l6 f, J3 n( R
  1. class Quest (JQuest):( D) {3 M: {* e
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)& l- Q0 m8 g7 f+ g$ a, @& T% C8 W% X' C
  3. def onEvent (self,event,st):
    1 {2 \' N: _1 T- K) I4 J, p
  4. id = st.getState()$ _$ c3 D0 f5 E
  5. if id == CREATED : st.setState(STARTED)
    4 m8 v8 K/ u  Y& v! s- c  Z8 q- q
  6. elif id == COMPLETED: pass% D8 W6 J6 H5 K5 I' N7 E; ~/ b7 R
  7. elif id == STARTED : check(st)
    " Y. b* s% [- m( O
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)1 f$ j/ a/ m; x; L3 J
  2. QUEST.addStartNpc(7056)
Скопировать код
0 `, L6 p, Q- D0 p" [+ T  ~

4 `4 r3 r: {+ z0 x5 N, L7 B
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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