Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude4 [1 N3 O- B( B, m1 {
Сборка        L2j
% X- F+ L; o! d6 V, |8 LПример основан на сборке L2J.
8 `5 A4 t9 m2 Q3 T5 I7 H1 t* ~
  k& x9 h7 Q# aПервое что нужно сделать, это добавить необходимые Java классы в квест.
8 Z3 h/ B0 f# `2 Z

  1. 5 {, x. Z* l! h2 B
  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>
    / K' M& B3 c) O1 H( R! ~* i

  3. * f9 r3 z9 v1 H6 Q% h1 z
  4. </div>
Скопировать код
  1. import sys
    6 P& f6 g  G3 g( \5 ~- G" D
  2. from net.sf.l2j.gameserver.model.quest import State
    $ v# r8 P: x- Z5 ?
  3. from net.sf.l2j.gameserver.model.quest import QuestState+ n: K. c5 I0 E) A* C
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    8 P  @3 I# E/ Z) U
  2. FANGS_ITEM_ID = 18594 H1 c* W6 U; |) N" D, }
  3. DROP_RATE = 500000
    * Z" l" p0 D: ?& @( _5 p1 ^
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :& m- {' j# j4 E9 I/ G
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
2 a! ~* ?% Q! O' L+ E& q! c1 F
1 N& I% V* q% f  q0 q3 [
  1. def completed(st) :
    ( R, g' k: G  E% s) J* M7 Q' h
  2. st.setState(COMPLETED)1 M* U# [! m$ d, \; }2 f% R: @/ \
  3. st.clearQuestDrops()
    / p1 B# a% y- [
  4. st.takeItems(FANGS_ITEM_ID,-1)) W6 A  L; ~$ a! e
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    9 G4 ~: n( G7 t) F9 G) Q$ J% \
  6. st.exitQuest(False)
    - E( e% b$ `; P
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
  u. M" h: n  o7 P' _5 B1 m& G' o" _/ x) t2 r; _2 w
$ U8 B( K' j- G8 E- o; R$ d" }

2 ~% \% q/ T: S2 Y% `4 h2 BИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
2 s1 [/ j2 e5 r! V/ x' B9 S
' `) c% B+ M/ _8 G
  1. def check(st) :
    . ?9 ^5 _) a7 _
  2. if getCount(st) >= 4 :
    % a% }$ q  @0 S6 o9 @8 `
  3. completed(st)8 `& k% l! f4 g$ [. ?9 |" J; n" ~
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
! q2 H0 q% s# Q  U) M% _1 g# Y* I8 Y% z  K7 t  [8 A. n* ?
  1. class Quest (JQuest):1 v. A0 C$ Z2 }+ U0 o* n
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    . `& K+ g( K' w9 p1 j
  3. def onEvent (self,event,st):2 i/ R. _1 o, Q& o, _  _
  4. id = st.getState()" Q7 i6 V3 w. k% z# y0 B
  5. if id == CREATED : st.setState(STARTED)
    * Q  b# |5 f+ M0 P+ V
  6. elif id == COMPLETED: pass/ g: C( i8 a- ?7 R+ H$ |* q
  7. elif id == STARTED : check(st)
    # R! D( A: P0 \) Z
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    4 a4 q% K# u& p' V( `. M: I
  2. QUEST.addStartNpc(7056)
Скопировать код
. z# Y+ ~8 j. v8 Z5 R7 {3 y' W

1 u0 K) {2 _) [
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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