Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
* v) ~6 w" s& U$ vСборка        L2j
9 E" d1 l( c2 y. CПример основан на сборке L2J.
$ u$ s- ?* I: g% J. e9 I  C
6 y7 p4 R2 Z/ L$ EПервое что нужно сделать, это добавить необходимые Java классы в квест.
  }/ g$ E( [/ w4 J" y1 Y: V
  1. ! A% U8 N5 V$ s( [
  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>
    2 `6 s- Q3 C5 Y* r( `. M5 i
  3. 5 g& M3 A: i3 E
  4. </div>
Скопировать код
  1. import sys9 G& Y& t# j$ k3 w& V: Q
  2. from net.sf.l2j.gameserver.model.quest import State
    : r) f8 l% X# F
  3. from net.sf.l2j.gameserver.model.quest import QuestState$ D# O& }* a0 Z4 E  b
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082+ @: B& `# q: t) `* K1 d
  2. FANGS_ITEM_ID = 1859
    ( \- H2 r) J: k: }6 }$ {8 Y
  3. DROP_RATE = 500000( h% Q! z2 }" y( ?$ \2 T1 Q- `
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    " g$ J2 A$ q( u- r
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
4 z5 T2 |+ M) M  m) {$ A: r& [+ \! A* ~: x6 {
  1. def completed(st) :- w. H# q5 _* _' k
  2. st.setState(COMPLETED)
    9 y( g: k+ r7 g; q. x5 e
  3. st.clearQuestDrops()" o" i7 B2 ^3 n5 r; U1 ^3 i$ c
  4. st.takeItems(FANGS_ITEM_ID,-1)' Y% G7 F! J  _$ ^5 B; e5 ]# h
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)/ G5 R$ x0 r7 |
  6. st.exitQuest(False)
    # u4 J  o% g) f. ]( y$ Z
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)): h4 M& P% h! A9 K

$ H' r" J& |6 v( K7 v5 h
1 W1 l- Z" W' D1 }- o1 Y5 [
0 w  |# S7 ^. h! e! Q) j6 o
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):/ H- z1 b8 W/ x

/ x" w3 M- h" L. {, e  v+ O5 _
  1. def check(st) :
    ' m9 @. S# p6 V3 M
  2. if getCount(st) >= 4 :$ l. b1 {) G# M! j! ^. f7 |
  3. completed(st)2 }( }7 b9 R" ^
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
7 J  P# ?1 ~7 X1 q; j
/ R& n6 L( Q2 A1 }
  1. class Quest (JQuest):
    . f6 K/ L% B0 L: I$ p6 I
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr). D& ?2 @: K( [. a/ |4 C$ }
  3. def onEvent (self,event,st):7 ~( A1 v3 ^9 R/ E4 w" ?( ^
  4. id = st.getState()! l1 n7 \% o  T) t- W- |2 g
  5. if id == CREATED : st.setState(STARTED)1 \; t! f" q0 e  }' U+ `
  6. elif id == COMPLETED: pass
    $ Z  W2 p) k; ^/ s
  7. elif id == STARTED : check(st)8 O, U3 `; F0 O2 E( p1 H- }; b  N
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)8 c3 ]* u% u4 Q* |
  2. QUEST.addStartNpc(7056)
Скопировать код

& ]* O! l. @9 \, H# S' |: Z3 r
1 y; U8 C. C7 H
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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