Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude: H, J( s* Z' ^/ l* f. [" B7 J: m
Сборка        L2j
2 P. k# ?* G6 z8 \' t0 VПример основан на сборке L2J.: F: R; v- `$ v5 d3 q$ J6 X. ]7 ?
' I& O+ ~8 x( m
Первое что нужно сделать, это добавить необходимые Java классы в квест.
3 P) v* e- _( y4 B
  1. + |" I5 Y7 A4 U1 l
  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 d% D. J% s- O

  3. + Y% V, J8 B& E; }0 m0 }& O4 |
  4. </div>
Скопировать код
  1. import sys
    % P0 E! s5 k: @4 X' F
  2. from net.sf.l2j.gameserver.model.quest import State) T0 F$ P, f% o" A, J
  3. from net.sf.l2j.gameserver.model.quest import QuestState- K# I8 x, V' {1 \! r& g- h
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082/ Q  I  w# i6 K  c! o: u, C
  2. FANGS_ITEM_ID = 1859# C* S/ ~" Q# n4 M1 x
  3. DROP_RATE = 500000) m" r3 G) ^! s
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :) g0 V4 U7 L/ Q# B
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
* U6 x7 ?0 {% V+ M; F1 I
$ @" I2 O" T. P# e% m
  1. def completed(st) :2 z: }  K; K: v. t6 y5 d
  2. st.setState(COMPLETED)+ T: C! ]- l! t
  3. st.clearQuestDrops()) w2 b& x/ n( ?. z
  4. st.takeItems(FANGS_ITEM_ID,-1)8 h, L, D7 _! y! U
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    1 O0 O1 q2 f% i) s3 E3 f! ^
  6. st.exitQuest(False)+ e5 f+ F  v2 i* O9 s
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))  E) {' h/ o3 t# z

3 V/ M! i% p: O
1 ~. _1 F1 v! M4 l/ S
+ s; A' A7 r1 n- n
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
0 l% E! V% K8 A$ [  C6 S4 q. x! g4 Y7 `3 U: G9 b7 H) V
  1. def check(st) :( b: n5 e1 u6 v
  2. if getCount(st) >= 4 :
    1 J" U$ J8 u! X
  3. completed(st)
    : g; o/ A4 W# I+ H
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
3 y7 x4 p2 r5 _9 z" w% p# \( f2 N* X
  1. class Quest (JQuest):; ?) m* \2 j$ X- A- N5 J
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)' i, p, E* K9 D3 I
  3. def onEvent (self,event,st):
    , M2 q+ J0 Q6 W: m' X: \# Y
  4. id = st.getState()' F0 @/ ]+ \$ p! [7 l
  5. if id == CREATED : st.setState(STARTED)( K5 j$ ]3 r) p6 k. F+ T+ E
  6. elif id == COMPLETED: pass8 c1 f# s" j3 O" H" Y8 d
  7. elif id == STARTED : check(st)
    ) i! W3 J& Y# [4 X$ F' J
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)% H1 z5 E. a/ a0 S# b
  2. QUEST.addStartNpc(7056)
Скопировать код
0 D, E: H& |* X. g4 g

1 I& u# ?8 h" ]! a0 U7 Y
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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