Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
/ X( c3 s. p+ h4 p  z# f, W6 `1 @Сборка        L2j) B- X" ?' a: R$ q9 o! ?3 n
Пример основан на сборке L2J.
5 e3 Y8 X$ d; f" Z
5 _+ y: {& s$ j  t) O  V# ~5 }; s: U& pПервое что нужно сделать, это добавить необходимые Java классы в квест.
4 T7 d6 z& r2 U: z

  1. ! J2 C6 x$ [  A: H) K
  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 F% i& ], A1 r( ~, M6 R
  3. % O  l. w& y; M" u
  4. </div>
Скопировать код
  1. import sys
    ' O% W9 J& G8 [4 R  r- z  R3 X
  2. from net.sf.l2j.gameserver.model.quest import State
    ! ]; R  S/ z0 l: _3 p' y6 P9 c
  3. from net.sf.l2j.gameserver.model.quest import QuestState' M+ Q% i' n8 C# @
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082: M! h# w2 @0 e" ?0 k
  2. FANGS_ITEM_ID = 1859
    ) F& E4 a* S" d: o' p2 Y# `
  3. DROP_RATE = 500000  W/ z1 ~! X# j: n; ~; U
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    ) P* `& P$ K& U& h- t
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):( E+ T& x8 O1 G7 z: ]& q

6 u+ n+ d/ O7 I' m' U1 k+ j2 G
  1. def completed(st) :& V1 I  |; W; B2 e
  2. st.setState(COMPLETED)3 t2 O$ c/ e6 {
  3. st.clearQuestDrops()1 `; _  W6 Q" `1 F3 u! N
  4. st.takeItems(FANGS_ITEM_ID,-1)
    * B* ?& O+ U0 n9 H1 Y! L
  5. st.giveItems(WORLD_MAP_ITEM_ID,1), |/ X# C% U% f; x, L. U
  6. st.exitQuest(False)
    . |; K. Y  Z3 w, I# U3 K' C3 k( ]
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))0 D+ n9 w  t1 g
1 a# k! i5 n6 {4 G% B

7 l" ?# K0 F* ?9 ?1 e2 L) ?& [$ r' k2 J
8 F; l* z2 [, W1 k$ k$ N
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):# x' u8 n; y- V% w2 e5 U$ C' o
3 q) N) |- y5 E' Y) d3 R
  1. def check(st) :; v2 a, n. D2 E4 W  P
  2. if getCount(st) >= 4 :
    # q$ o( L1 Y  J% E' o8 V
  3. completed(st)
    . s( I, ~) Y( Q  H% `1 F7 t) V
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
) q, L" b1 o- \& X; {8 }- j  ~; S4 H3 z: t' D
  1. class Quest (JQuest):
    ) X/ N+ N( [) Z# i9 `1 g/ E& b
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)  A9 v' ?  b# Z# v. L4 Z+ ?. b: k
  3. def onEvent (self,event,st):
    9 p; j2 n7 z4 q. J( |
  4. id = st.getState()8 i  K9 w: T- G0 C' l, G
  5. if id == CREATED : st.setState(STARTED); g9 }) p! c1 ?  Z& |
  6. elif id == COMPLETED: pass0 |+ x4 {3 y) ~5 G, t6 F
  7. elif id == STARTED : check(st)
    0 _- ^; q2 m' l/ j3 c: U3 T8 l. u
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)0 I, m1 Y6 Y0 d) x* }0 l
  2. QUEST.addStartNpc(7056)
Скопировать код
' c) ~+ F: H' L* z2 a

( I  y1 s7 X# q4 `
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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