Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
6 M. t6 Y9 f$ m- C/ zСборка        L2j
# O8 J( O) W2 N6 v0 R- ]1 D5 HПример основан на сборке L2J.- S/ i# _" g+ k: I
- p1 O# [, q0 a! M' g0 |
Первое что нужно сделать, это добавить необходимые Java классы в квест.. d9 v# r2 z* L. e  f  @

  1. / ?6 m  f4 W/ y6 R
  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>, w  t: y* [+ O" H
  3. ; k1 n7 m# V( X2 J
  4. </div>
Скопировать код
  1. import sys. {5 Z) f4 ], |! v% T
  2. from net.sf.l2j.gameserver.model.quest import State( ^+ C  [( G$ |5 _3 o8 _
  3. from net.sf.l2j.gameserver.model.quest import QuestState0 Y! C/ m# Y4 y, N3 A
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    * w! ~8 x! D: q. O7 M3 @) R
  2. FANGS_ITEM_ID = 1859
    - E/ ~9 H6 H* {# L. ^
  3. DROP_RATE = 500000# U& o/ o& v% r' Q  o. w' _
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    8 N& \* |( v& `9 \2 g& ^& d
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
) }1 I; U( Y! x6 J0 a
2 v5 `/ I; k/ ?3 B7 e
  1. def completed(st) :1 S* |9 D$ ^. N0 f5 L
  2. st.setState(COMPLETED)
    " o$ ~+ D$ ~2 z6 B8 C
  3. st.clearQuestDrops()
    ! @# A( w# S0 q" g2 ^
  4. st.takeItems(FANGS_ITEM_ID,-1)0 [) ?. k% t/ Q( ]
  5. st.giveItems(WORLD_MAP_ITEM_ID,1). e% j4 Q/ X% _1 K, ~* M4 ]" {
  6. st.exitQuest(False)
    2 O# R1 ?# h" V$ s) C% k
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))7 i# j0 l( c" h1 c# U

$ d) B; t* y; T; R/ J! P* u9 e* T5 {

! w2 y3 c4 D6 u  X3 D* r  i* O& j# cИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):8 j# i6 c& w' t3 Z9 O2 H2 s$ y
& D" {9 ?  r+ z& W, L
  1. def check(st) :
    / Q. q* K9 t% t2 X: I
  2. if getCount(st) >= 4 :
    # Q+ y/ u! w! v' n3 v! u; F
  3. completed(st)2 V8 t" N4 r8 q# q! |: n
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
+ `+ c  K6 l5 V) G+ |' P- c( `) B: C( m% S  k- ~) s0 |- g/ D  @$ L
  1. class Quest (JQuest):
    / |1 H4 I6 @7 @% e3 F8 K7 q
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
      ?& q- q: G  f: h
  3. def onEvent (self,event,st):: o' N* k. o; \5 w9 K* j
  4. id = st.getState()/ `- X0 q) Q: ~* l- ]
  5. if id == CREATED : st.setState(STARTED)
    # F; n7 a7 p( ^# B" W. Z
  6. elif id == COMPLETED: pass6 r  Z) z2 v+ O/ L$ O" }% c
  7. elif id == STARTED : check(st)
    " G% @: @* [& P. N
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)  F" s/ R0 [; `
  2. QUEST.addStartNpc(7056)
Скопировать код

4 p0 w! Z+ y! C; X! C+ }
6 Y- S3 b7 H, ^' D9 c2 w' r+ [+ Z
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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