Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
9 V3 f% y7 |4 ~: rСборка        L2j
2 d6 N* {0 W- h/ SПример основан на сборке L2J.. y* ?3 q+ r  R& Z) m8 J

# b9 |/ `, s: O6 {; EПервое что нужно сделать, это добавить необходимые Java классы в квест.
6 g, O$ b1 }9 J7 n0 |* ^3 T3 U: ^( ~

  1. ; ?- a+ U6 ]0 i* f2 `
  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>4 j/ B  S% i7 u2 X
  3. & ^" ~: `8 q! ~1 Y0 h
  4. </div>
Скопировать код
  1. import sys- P7 k, Q3 B. i. J' z1 n4 J
  2. from net.sf.l2j.gameserver.model.quest import State
    4 V0 ]- a' d" M/ y
  3. from net.sf.l2j.gameserver.model.quest import QuestState+ k' {( x# s6 T3 ^" y. m" M# h9 R9 d
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    6 n  `( p  E* ?" J; O" @5 Q
  2. FANGS_ITEM_ID = 1859* a" ?6 R) I0 |* F1 |# z0 u, @
  3. DROP_RATE = 500000; l' [" x: r: j  G8 H( h  k7 k
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    * P: g9 \1 _1 X3 G4 j
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):" L  h7 g* P/ f* Y7 K
" m/ i5 ^& x( A* F6 W# a0 j
  1. def completed(st) :
    , q" Y7 t$ m4 l# j' b
  2. st.setState(COMPLETED)3 \. N1 z4 Q6 H4 B: _/ @4 v8 n, Z; ]
  3. st.clearQuestDrops()4 v: E% D1 ]8 U  s$ W2 ~
  4. st.takeItems(FANGS_ITEM_ID,-1)4 |: `2 r! d9 U. W, j
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)* e- X1 [3 D: C, g
  6. st.exitQuest(False)$ `9 c' w( m5 n$ H2 I* d; M
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))) L" L6 \9 o4 w. {5 Q9 J

5 T) u: {  }, J0 H7 L/ p1 u( I3 e, g8 ]; k4 w7 v+ p2 w
6 V5 l  E5 c2 X8 o* o8 Q
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):3 J3 d/ F% l& u& D/ Q2 U
/ Z8 r$ h1 K& t  S
  1. def check(st) :
    9 Z8 ~, Y9 }* F% \
  2. if getCount(st) >= 4 :
    # |2 i6 b5 ?  i% \5 e! \
  3. completed(st)+ q0 F" f) C! N+ ^5 Q( u
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.4 U8 D6 h1 O/ z/ d. F. J: I8 Z

; D9 n- D2 c! x, @
  1. class Quest (JQuest):
    , p! }3 [( s0 ?! Y$ q6 O# M
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    7 v1 K6 r& L2 U! R8 \7 [! `6 M  A- y
  3. def onEvent (self,event,st):. e$ V  X7 g0 S' o- C7 f
  4. id = st.getState()" l: m) z" T( {
  5. if id == CREATED : st.setState(STARTED)
    ( r$ D; d7 i4 J
  6. elif id == COMPLETED: pass8 x- _/ j+ B/ O
  7. elif id == STARTED : check(st)
    " Z5 D  o0 ?/ t6 X* E7 H' b, p
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    5 Q" f. {' B0 i! B
  2. QUEST.addStartNpc(7056)
Скопировать код
+ J- i6 W' K* a

+ m. C- E4 H4 z) ^5 k
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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