Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude' A& q8 e+ F9 p4 q/ B
Сборка        L2j
6 u# ^  _+ L- k6 J. ]$ w3 vПример основан на сборке L2J.2 t4 R- a, M. L
' d# C6 L. N" X* X2 N! A2 ?
Первое что нужно сделать, это добавить необходимые Java классы в квест., a2 h& }' P) z0 |/ P, A

  1. - r' z$ g1 F+ \/ ~2 C! S8 T- ?+ Y6 A$ 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>
    : O0 D* K$ L/ a! d4 z

  3. 3 H' S9 c5 Y* c$ q, ~* h1 Y
  4. </div>
Скопировать код
  1. import sys
    5 u0 s! c3 P  v# Q, Y1 v' B
  2. from net.sf.l2j.gameserver.model.quest import State, h8 N/ Z4 E' d( g4 v* o
  3. from net.sf.l2j.gameserver.model.quest import QuestState4 C$ q0 Y  B5 Y8 ^! d
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    " ^& Z6 O3 E/ C
  2. FANGS_ITEM_ID = 1859
      B* ~, T8 f9 [4 m2 H
  3. DROP_RATE = 500000
    , q4 E3 E9 |- r9 N8 H6 p: S
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
      `* ]4 q/ {5 o/ T( s. C/ D# ~4 V
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):' ]7 ~8 i1 O: P2 k7 D3 S
" s4 R( b6 G$ _0 K  u& J
  1. def completed(st) :  }( b5 l7 n5 n, N9 h3 D3 ?
  2. st.setState(COMPLETED)9 a# c5 t7 z& ]. k. [$ e2 l+ v
  3. st.clearQuestDrops()
    1 b/ Q6 p; c7 ]
  4. st.takeItems(FANGS_ITEM_ID,-1)
    ' @5 b* Z- t4 O9 s
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ) Y! G+ [- c4 a
  6. st.exitQuest(False)9 ]) ~% @/ P, \0 \$ p
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
5 B& j6 ]; R" B4 `+ \2 P( O4 X. p
$ Y3 Z0 K! ?$ Y. D0 q2 O

6 W5 f6 ~6 i; C, MИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):" T. q' Z  f) s3 a7 p$ `% m
+ y" m1 |4 l" A% j3 |; p
  1. def check(st) :7 O5 D8 ?/ C' R9 ?) V
  2. if getCount(st) >= 4 :
    0 Z! V9 {! S- A5 ~0 |& `' z
  3. completed(st)6 t# K( O- y5 r8 S" n& V
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.( x9 X2 _7 Q) }% I4 f  |
7 X7 y; ^& R* w3 C+ l. F
  1. class Quest (JQuest):
    ) {, e2 y4 g$ \) d+ Y
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr): G& J7 Z+ F/ z7 R
  3. def onEvent (self,event,st):7 i& G) @2 w! ^: T; w
  4. id = st.getState()$ A- R1 V6 t4 X3 A9 s' z
  5. if id == CREATED : st.setState(STARTED)7 q! d; g+ q" |- V& M
  6. elif id == COMPLETED: pass0 T3 M& p, I! i6 ]$ d* t# W
  7. elif id == STARTED : check(st)
    6 M1 I# X3 Y6 m2 j& x
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    - z4 p/ p6 K/ Z' T
  2. QUEST.addStartNpc(7056)
Скопировать код
+ m/ i4 ?* L( [* b0 N

  b! P6 u: i+ n1 a" G& S& p( V
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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