Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
0 F  E9 E. I# h/ K9 P: kСборка        L2j
7 d2 E9 H; C5 t4 W  a4 _) qПример основан на сборке L2J.& a& I4 n1 b- C. c

, l# z. }+ S' EПервое что нужно сделать, это добавить необходимые Java классы в квест.
! G2 U! w3 C. C- {+ |
  1. 3 p7 V1 ?! k0 i( g4 d, j: C2 P" _
  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>' @0 X" n% H: i! J: |+ N% L

  3. ' r( }: A) r4 O7 }; t" @- a
  4. </div>
Скопировать код
  1. import sys2 V+ h, L  k) {* w
  2. from net.sf.l2j.gameserver.model.quest import State% G2 {$ M* Q6 v
  3. from net.sf.l2j.gameserver.model.quest import QuestState/ `) Q* G  t, `8 H  u
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082) ~' A% t  @6 ^3 u# k
  2. FANGS_ITEM_ID = 18594 I  l5 h2 {% e8 _4 k
  3. DROP_RATE = 500000
    5 ~5 N1 Q7 O: D! q! u( D( S) K
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    % `5 q7 K& s6 y! e1 w! T* x: |% ?
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
) a' E: Y2 A6 W" Q- `+ p5 d0 R3 C/ p' \$ z/ l& b, M
  1. def completed(st) :
    ( g5 b  [4 l1 ^8 i5 p4 I- i
  2. st.setState(COMPLETED)! b0 T" [% B& a9 \
  3. st.clearQuestDrops()
    - ~+ A  T1 {, X
  4. st.takeItems(FANGS_ITEM_ID,-1)( W8 {) V) c  _3 h* j
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    8 ?, W+ u6 C! B" h% U- \: V5 }
  6. st.exitQuest(False)( {: o$ o, A- F% z$ Q3 I
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))8 X* }4 K. D7 h- `; u# J2 ]
, N6 a, F; z; r; J1 A

3 y6 n. l& M9 ^
6 ?% T& i  J6 O4 m
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
% }" ]) N/ k& j$ D: y# [& B* G, k6 Z; Z- C( R1 r
  1. def check(st) :, O  q6 J& `1 R: `1 ]: Q, I
  2. if getCount(st) >= 4 :6 y6 T5 D9 C; ]  e: }3 j+ |
  3. completed(st)
    / K% m2 L6 h# L3 t" h4 k
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.! u, m& x0 Y8 k- ~" f# d- U
6 x5 P4 A, Q* q. i4 `* |
  1. class Quest (JQuest):
    % M7 [* E7 N. T3 A2 t
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)- a, m2 f' }4 L6 Q9 t
  3. def onEvent (self,event,st):5 s( ?- u/ ]0 H6 A
  4. id = st.getState()$ X; p- g  b  s; L0 t
  5. if id == CREATED : st.setState(STARTED)& f( M4 y- T( \" B5 z8 B$ G
  6. elif id == COMPLETED: pass
    ' c  n" W( C& ^: H: O
  7. elif id == STARTED : check(st)* P3 m) h2 X2 }+ C4 t4 [
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    5 L# v: b# |/ i
  2. QUEST.addStartNpc(7056)
Скопировать код

( {$ _, B6 d4 r+ G
4 f' Q; f6 b: ]9 Z5 H% t
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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