Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude+ `3 h: m2 C2 _9 I+ B; A; T
Сборка        L2j
, z, k3 z' e* }/ a. {* RПример основан на сборке L2J.% s1 w+ @, s! B; v- O# x2 ?

1 ]0 ]/ N7 |  _3 |- iПервое что нужно сделать, это добавить необходимые Java классы в квест.
7 @, C2 S7 n  c( M+ b3 r
  1. 5 U7 D. U" |3 d  q  p. P( 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>
    ' h: z2 C4 O6 R5 |) q) b% \1 e

  3. ( o/ k. C1 R5 S% @
  4. </div>
Скопировать код
  1. import sys7 b5 ^' n) L5 {0 R% x
  2. from net.sf.l2j.gameserver.model.quest import State3 j& p: U& N6 @# w+ d
  3. from net.sf.l2j.gameserver.model.quest import QuestState6 O" Y2 H  [5 y4 G7 D, B# X
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082, t3 }2 \' d8 a& E, [  l' Q
  2. FANGS_ITEM_ID = 1859& W( M7 b9 y- h
  3. DROP_RATE = 500000
    4 L2 u. O. ~' x; f
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    6 u0 Z& \2 ]  v
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):+ R, s* p# X- e+ n! r9 E
" Z0 Y. [" J* B3 Z1 G
  1. def completed(st) :, D+ k& M6 q. H6 }; o4 M+ y% ]
  2. st.setState(COMPLETED)1 h, ]: V7 {% g1 Z4 h  d
  3. st.clearQuestDrops()0 u( c& ]. c0 E: q, H( N+ [* z
  4. st.takeItems(FANGS_ITEM_ID,-1)
    ) j2 ^: Y7 ~# K; z5 Y
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    : O6 p2 H$ O: H9 b
  6. st.exitQuest(False)
    ; Y* D2 E  U% J. ~
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))$ _. N) p7 ?- X0 T$ j
1 `$ i" u6 x6 y, F( G# B4 Y, J: t
* S  W/ }5 G0 S6 }5 \9 H& v5 _# w

; a  k" q* u7 ]$ h, NИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):! U3 w  k" t6 K* K* F

1 d# ^1 I  i/ Z0 ^
  1. def check(st) :
    # }, c( e5 L( a, C) ?
  2. if getCount(st) >= 4 :
    8 ~, R+ R- ]3 X" Y0 r" F
  3. completed(st)
    : K/ @- H- M. C9 r% D. ?6 c
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
1 a7 a" I) c4 i, {8 D
  J5 L- d( E& z0 V& ]2 l8 N
  1. class Quest (JQuest):
      g' }3 h5 X/ N! M) L
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    . ~8 W4 z6 F7 D1 i
  3. def onEvent (self,event,st):
    9 Y4 N! ?& S9 O: y0 ~
  4. id = st.getState()# n& C4 }( k# [
  5. if id == CREATED : st.setState(STARTED)5 M5 [9 U# D/ X' X) q
  6. elif id == COMPLETED: pass
    " O. ]6 Y& n" Z" e
  7. elif id == STARTED : check(st)) I  [4 L* j. U' d4 V* M: d8 y
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)- I* Q- R( J2 g8 a/ p& c$ N
  2. QUEST.addStartNpc(7056)
Скопировать код

* E7 N# ~4 ]2 N) p
* V% \" s8 t( G9 g( w
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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