Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude2 {; B) ^: z& Z. I# m
Сборка        L2j6 {, I9 \0 a/ E; V/ \
Пример основан на сборке L2J.! Z4 M+ w. w/ k. d

  H6 }* o+ r# J7 D' k' ?Первое что нужно сделать, это добавить необходимые Java классы в квест.
0 S/ ?$ H9 v9 v: e

  1. + M1 W1 Y* u+ T( W  g8 m* _
  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 w, [7 {/ y
  3. / P5 W' L1 O" @, Z) o2 s3 \4 k
  4. </div>
Скопировать код
  1. import sys
    7 l: M5 {" x! }2 C- v
  2. from net.sf.l2j.gameserver.model.quest import State" l/ |# k4 s1 W# x% ?
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    - ~0 K8 Q& \% J5 I# H- H
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    # |6 I# v3 z: W1 G, \
  2. FANGS_ITEM_ID = 1859
    . O0 D) @- y5 B' \, C5 ?9 J
  3. DROP_RATE = 500000
    % ^2 z2 q* c4 g$ |+ a+ T8 h- S
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    ; O: V+ ]) |; I# V! ^+ H
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
5 g% g; v& D  I& k3 s6 J( @5 `! K& e8 O7 G0 r; P3 Y
  1. def completed(st) :
    5 }. ^/ l3 X+ R+ a
  2. st.setState(COMPLETED)) G7 I( E! n3 Y  B
  3. st.clearQuestDrops()
    3 Y1 L4 ~' I( k  |, ~+ H6 I
  4. st.takeItems(FANGS_ITEM_ID,-1)+ w* W, ^7 ?; g( I" l
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    & ]# ^$ w- S. b8 T6 z/ y* ~) f0 h+ C5 A
  6. st.exitQuest(False)% a- U4 \4 g0 b- D  l8 M* ?! {1 R
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
* }/ j. V8 D: O' T/ B/ _" e3 k8 a, Z; `
3 X! t) o: }3 J# E! ?
6 [6 ?$ i' G; L( g

* x# q7 @1 O3 z& `И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):; d4 Y7 k0 R3 B! O+ Z( k
. d1 k4 |6 f# d/ ]3 C. Z6 Q3 q& l
  1. def check(st) :6 n* g4 n2 u8 j) H5 q5 R
  2. if getCount(st) >= 4 :
    ( C# u* F6 \8 F  R& W
  3. completed(st)% w& R- l5 d3 Q! \% R9 G* M- e: d
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.; v2 Y' ?' ~1 H, D& p4 U  h5 y5 P

; Q- B  x2 ]+ y% ^; J8 w
  1. class Quest (JQuest):/ |7 j" d# B+ D$ }
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    3 p% o/ D0 q) x. y# G
  3. def onEvent (self,event,st):
    4 p, t6 H* `! l) w7 T
  4. id = st.getState()
    1 O9 X' r+ ~4 |. V" t* ?9 y, S& X
  5. if id == CREATED : st.setState(STARTED)
    5 _* l2 v* b  N8 i( g8 ]
  6. elif id == COMPLETED: pass
    9 q, Y% d! p0 L
  7. elif id == STARTED : check(st)
    # i/ p( H+ J+ s- j, \
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    / u' S. |6 n$ D5 F7 v
  2. QUEST.addStartNpc(7056)
Скопировать код
, `8 K. f3 }) K, j5 T: L
9 @9 R8 A, F1 }; q
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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