Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
& Z. I) J/ W) e  d! E, pСборка        L2j
& g, {( u, l/ l1 D, ^; G+ GПример основан на сборке L2J.
7 |4 n+ P8 U: L( u- Q# p- B5 F8 Z( n* j; _$ n
Первое что нужно сделать, это добавить необходимые Java классы в квест.* C) }8 F& `/ ]/ [. t
  1. 5 I" ]9 |$ @! n" K; d, E. j7 g6 G
  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>
    & {% G5 q9 Y. Z  M; k; r1 r

  3. % ~: I+ Q& v9 Q9 w* c1 H  B
  4. </div>
Скопировать код
  1. import sys
    ! G- O" L0 U% D% ~- W; U8 R
  2. from net.sf.l2j.gameserver.model.quest import State" O; ]( P* M( \8 T4 a/ B
  3. from net.sf.l2j.gameserver.model.quest import QuestState& i1 x+ k* j+ X! m1 m1 X! R! ~
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082% c4 k  E9 L, f) i
  2. FANGS_ITEM_ID = 1859
    ! i1 Q" R9 i; [. B+ c
  3. DROP_RATE = 500000
    + X2 R4 q6 w3 m- V9 o
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    7 i* L5 U8 n' {" K$ |8 x: v( t, f
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):$ k: L* \8 T4 H4 W& e

- Q: f% j6 `9 W  l1 |  I
  1. def completed(st) :
    ; i; e1 g+ F0 u! H
  2. st.setState(COMPLETED)- [' K) p$ Q* L9 `( p
  3. st.clearQuestDrops()
    / M0 {/ ~# n& H  s1 M) }
  4. st.takeItems(FANGS_ITEM_ID,-1)
    # ~' e5 Q2 u9 A; }1 u, f
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ' T8 g* N8 z( z+ e' I4 B$ o9 F
  6. st.exitQuest(False)
    % L( a; C* B  k
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
$ q1 u9 }( m2 u, ^4 v. C. K. d1 I7 d9 E1 v9 y1 S
& q" ?5 R/ \% v$ M
1 c( @1 N2 O  ]. N4 y  d
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):" l$ I0 ?% H! G8 j/ b
: r; c' J. |0 X, n' y$ W! u" j2 y
  1. def check(st) :
    # p7 V; p/ Y: m8 W; D( x
  2. if getCount(st) >= 4 :
    - q8 V5 ?. }, J' w2 [1 v
  3. completed(st)5 C& F8 @( U; b* @
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
' M& A6 r5 H$ A, [. J! o- t: r) t; N1 b0 V2 z6 E
  1. class Quest (JQuest):! z5 a( M  C5 t. t9 E% R3 Y
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)# O; S( \. h0 m
  3. def onEvent (self,event,st):
    ) }3 k+ ?/ |  D4 ?3 a, B" U+ e* E
  4. id = st.getState()
    . e: P2 _  r) I& `" C: v  g& G
  5. if id == CREATED : st.setState(STARTED)
    3 p" G* Y2 G4 D4 c
  6. elif id == COMPLETED: pass$ a6 d5 R: ?& J1 X
  7. elif id == STARTED : check(st)5 q1 Y& \2 K5 I9 L
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)* p/ y* E* }0 h1 J
  2. QUEST.addStartNpc(7056)
Скопировать код

* W9 E6 `7 \" u, p  @
& J$ u3 |3 n/ S8 R6 F" x8 j
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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