Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
$ a& q8 Q5 Q% [4 w' c- DСборка        L2j
# d$ I: e8 t2 h6 L9 V) {0 AПример основан на сборке L2J.
7 M: i: X3 P) P2 N! z  v6 C6 m% j5 C  J* n( y
Первое что нужно сделать, это добавить необходимые Java классы в квест.! r, ~6 e2 ?% J9 t6 I

  1. * {1 V# U1 W8 ?: w, t1 {+ {3 e$ n) C
  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>( S0 Q( ?! \" ]" K0 N

  3. ; Q* s1 m9 O( W5 P
  4. </div>
Скопировать код
  1. import sys! c  F: M$ c/ Z  ]7 U3 i
  2. from net.sf.l2j.gameserver.model.quest import State
    0 u, X4 ?+ \+ n1 q9 J' A" Z
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    , G9 [: v0 _1 V: X7 K3 E+ W
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120821 V: M! i/ L6 B& e8 N6 e6 b+ V
  2. FANGS_ITEM_ID = 1859
    4 v/ I* Z6 Y, \" k! @% O- Q% V
  3. DROP_RATE = 500000
    3 i9 }9 {' j( O9 E& E6 K# j+ q1 D
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :. t: X" {4 Q: G! Q6 C( e% B, E
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
4 E1 w2 {. Z( p! ]/ S8 Q
# ]4 m, v. g( @' c& p6 A
  1. def completed(st) :3 ]4 m8 b" }0 j3 P
  2. st.setState(COMPLETED)
    6 T: x8 }3 t+ h( h
  3. st.clearQuestDrops(). e4 o1 q0 T0 J* V# O( u  X
  4. st.takeItems(FANGS_ITEM_ID,-1)9 j- l6 L4 g' m
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ! F- ]/ T5 g/ e8 v4 u5 U
  6. st.exitQuest(False)
    * a% C; s: n  ~) I3 J5 F% w- G
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))1 y1 A0 k  h( l- m: K. P# Y0 t( W
  o* ^, c; @4 o" m6 |% [$ e% `9 L

9 R# |, V* E, K; \# |0 w0 r/ y; Z) n  v
0 I' `) s' }5 w9 @+ Q
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
* Y( |" y( Q9 H) ~  q/ y1 a  p! M. M2 m+ N* S8 h" C* _
  1. def check(st) :( r2 v5 }5 w5 g
  2. if getCount(st) >= 4 :
    + x2 j2 |1 E  Q& H1 W
  3. completed(st)) W3 o7 C+ W6 E5 {
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.+ x3 D/ q' b, M" i& z
% y. q' h% e5 N8 D% P) k. Z
  1. class Quest (JQuest):% C" [1 t( T: c5 q  ], `
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    7 h! t: l1 d' z( d( u* h- ]
  3. def onEvent (self,event,st):! v! \5 |0 S9 v8 d
  4. id = st.getState()- D9 W8 a7 ~3 J3 L2 k) Q$ J& w6 L
  5. if id == CREATED : st.setState(STARTED); z  C6 ~+ T& R
  6. elif id == COMPLETED: pass( {. K# x, C6 U- R2 n! |# f
  7. elif id == STARTED : check(st)( w! I$ A8 \( @& X1 j6 f
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    ' ]  M: _- O- ^( H+ D" W
  2. QUEST.addStartNpc(7056)
Скопировать код
0 D. a. ^5 J0 v$ o$ V) \) H
+ k/ j. Q; }1 }6 [5 d
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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