Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude- R; u, m! u& h. ?9 L) {
Сборка        L2j( S; V; q5 T$ \& }0 A
Пример основан на сборке L2J.& V( P( H# F- F8 a0 Q- `4 i7 I7 S
2 ?" a6 v1 x" ~- L6 V, ^9 z
Первое что нужно сделать, это добавить необходимые Java классы в квест.
- o: k  h  f6 _: i/ l* L

  1. * X# X$ [, U8 c- ?, {! z3 [6 p2 M
  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>
    " @/ R+ }5 y, W% b, y' ~" B) F
  3. ; L  b, a) L5 |; q6 a' x1 V7 c
  4. </div>
Скопировать код
  1. import sys+ K6 r1 q5 C* D2 T3 o1 Q
  2. from net.sf.l2j.gameserver.model.quest import State0 \2 @/ h0 I0 J
  3. from net.sf.l2j.gameserver.model.quest import QuestState$ {1 N. @4 N8 ~& a
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    # G$ ^* D& d6 D  v; h2 p
  2. FANGS_ITEM_ID = 1859/ w/ L4 t# S" j9 C! k/ ~
  3. DROP_RATE = 500000: e0 c+ t2 M' n! ~0 [
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    ' D/ U, a! K. {: e# ]6 G: U
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
% U' I5 M8 f( Z9 K. o2 U' o% J+ z9 e* P9 X) P. o% x7 j7 V
  1. def completed(st) :
    9 z- P3 Q2 Z& J) R; ^4 ?# Y
  2. st.setState(COMPLETED). t5 r$ `$ A; h+ F  x: [# L
  3. st.clearQuestDrops()
    , a# c/ q9 {+ v. [3 N
  4. st.takeItems(FANGS_ITEM_ID,-1)
    . x  o. b, M3 {+ K4 ?7 R
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)6 E# d2 ]9 r, `
  6. st.exitQuest(False)
    " m: k; w0 F- {3 N; n1 W
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
; s2 ?( g9 g, h/ M7 f1 |2 \( r
' `! Q" L: U$ M6 l0 B& \3 a- C+ e8 t# a4 L! Q8 m

" V" F% U8 z3 P3 Z5 E; z- {6 D% fИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):. k4 D" \6 q8 X! K7 T" r2 G
( p( z0 o# A& a" x9 o
  1. def check(st) :6 v) ^5 n& q& ^& F3 A9 b. u# }
  2. if getCount(st) >= 4 :$ Q% H* W$ }; B/ F3 H
  3. completed(st)1 A/ Z7 M. l3 t" x% O
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.' h7 ^" I" M4 o2 I6 C; Q. o

+ _7 g6 O* V4 B( |) |9 w
  1. class Quest (JQuest):# F, A! D# Z/ x& Y7 s
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    9 W" ?, ?( c* p5 r$ m9 B
  3. def onEvent (self,event,st):
    , w+ G1 \3 ?2 O* C
  4. id = st.getState(), A+ Y5 E+ T* a: @2 D0 f
  5. if id == CREATED : st.setState(STARTED)9 q2 w+ p$ R2 e% {: N9 l0 ?/ T
  6. elif id == COMPLETED: pass9 P1 p: _: y0 p# L, M# k& g
  7. elif id == STARTED : check(st)! B4 e, x& z' A" ]
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    5 P+ T: }8 b! x$ k! n4 @
  2. QUEST.addStartNpc(7056)
Скопировать код
0 e: k6 e* J" Q. w  V

* e- G" ~. \' N0 i- H% l/ I4 n
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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