Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude* w5 k4 a6 I' G: y# O
Сборка        L2j' S2 x  h( C/ R. W: N
Пример основан на сборке L2J.( \4 G9 W+ b. t7 [* b
" }$ n6 \+ J: k9 X$ D
Первое что нужно сделать, это добавить необходимые Java классы в квест.
& d- y# v' o' {8 p2 J1 s
  1. $ O! ]% j: ^% i% l, x( 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>
    $ k9 ^7 Z) W, T4 F

  3. % g3 t+ S  A+ U9 r
  4. </div>
Скопировать код
  1. import sys
    9 `: N2 @* r9 N" N3 e' l. o* z
  2. from net.sf.l2j.gameserver.model.quest import State4 ~1 x! [( e% O8 a; N3 s
  3. from net.sf.l2j.gameserver.model.quest import QuestState* O/ k  s+ P" x3 N3 k) V
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    ! I+ i6 O$ ~5 n5 c' a
  2. FANGS_ITEM_ID = 1859
    ; ^3 ]  |8 x/ C% Z0 Y2 S9 k4 l
  3. DROP_RATE = 500000: P. n* o. h0 h0 ~2 v
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    5 y4 V8 V+ s4 x# u' r) x- m
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
; g& |$ Y% v) U3 h6 L4 P2 l1 ^0 B& E6 O% \# ?; ?8 ~1 A% e
  1. def completed(st) :
    , {6 C% I7 h' f8 Q0 G5 q
  2. st.setState(COMPLETED)" U1 ]6 p6 H' q  B  n+ j9 ~
  3. st.clearQuestDrops()
    % L$ b+ a- C) V7 _' F" N
  4. st.takeItems(FANGS_ITEM_ID,-1)
    1 |+ s% |& G4 `4 h! a+ y# `! C
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)# N" p4 D& ^! I' D
  6. st.exitQuest(False)
    ! F$ ]6 H  r- R% G
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
) h0 z; y0 O5 ~* a8 @% A, S* Z# Y- d2 B; X$ ]0 X: n

; j5 m7 @% u- m2 o) m, l

0 _  @+ p5 N& H/ r- hИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):: \" S6 x9 M: `0 y# s

. R: h# n; |9 X3 B9 N" p% K* H
  1. def check(st) :, Y# x8 w$ I  i# L; O1 o+ p) `# E
  2. if getCount(st) >= 4 :/ d7 j$ G$ Q) r
  3. completed(st)6 H0 `7 |7 s) F  a- ^
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
+ v1 f0 I0 V% Q% ^; S1 V- `$ }: |( l9 y, d
  1. class Quest (JQuest):9 X! U, _' H9 h; U+ i
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    $ U) h; w4 w8 f, ?) J, z& I$ e/ _2 ~
  3. def onEvent (self,event,st):$ f- M6 V0 D1 |* @& z* u# ~
  4. id = st.getState()2 f3 U; \3 Q- o
  5. if id == CREATED : st.setState(STARTED)
    ; ?7 N' \+ Z! _
  6. elif id == COMPLETED: pass' U# \4 R. V- r- m' Q7 [& j. D$ Z
  7. elif id == STARTED : check(st)
    8 Z2 K7 H" w; r3 d3 N6 u( m- `
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    , J+ a, A. p' J
  2. QUEST.addStartNpc(7056)
Скопировать код

4 E, [* r  p/ F4 D  u
, A) C" g. y2 z% |. _- y) w5 _. I; @
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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