Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude% T8 B+ q! X; g
Сборка        L2j( G. k6 \6 L: e; j
Пример основан на сборке L2J.
; [& X/ w* u0 r2 R& f% k, \. ?6 k0 S& {& x6 k
Первое что нужно сделать, это добавить необходимые Java классы в квест.
2 q4 d7 s& [8 B2 P

  1. 7 U7 L( A7 W6 l& \' x* f
  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>
    ! t8 D0 }7 a" Z; H* m' P9 _/ z

  3. " }1 }: h; k0 X4 B
  4. </div>
Скопировать код
  1. import sys
    % O- @/ u* v* o/ R# f8 {
  2. from net.sf.l2j.gameserver.model.quest import State; f; q! o1 D, p: X
  3. from net.sf.l2j.gameserver.model.quest import QuestState8 E3 @- g$ D  X" k
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082* p' T" c" \5 s3 L, l: l
  2. FANGS_ITEM_ID = 1859: e0 ^! C# \7 _# O/ V/ C: c
  3. DROP_RATE = 500000; }: }; t7 x6 [% x6 P
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :" ~. h5 t6 f/ R# o! t
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):! d8 X$ u1 n6 p1 R1 y9 B) I

2 _; I' P9 `/ V% ~; k2 k( {
  1. def completed(st) :
    3 b6 r) A/ D' D- v
  2. st.setState(COMPLETED)! f0 J; T% n( ]/ t9 E
  3. st.clearQuestDrops(): t) D: j' _+ S; P$ ~' y
  4. st.takeItems(FANGS_ITEM_ID,-1)
    7 S0 R. K* j9 q6 ~# x# X. N4 ^7 f
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)% Y7 |. x9 N0 G0 `3 Y- r  s; p: {
  6. st.exitQuest(False)
    1 R1 J& g  v5 L' I1 N( B
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
( T5 h( i! a4 f9 f  v3 \9 h1 k2 x6 m/ E4 Q# {: `. o

2 o2 Q. v5 G# _! _+ X
6 v2 I& K8 Y- M" K
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):5 P$ k6 L; R5 b6 g4 b, i4 I5 f
* T+ V1 j4 Q% d& }$ q: m
  1. def check(st) :6 j; I2 [- O: |/ ^, D3 G( w
  2. if getCount(st) >= 4 :  X% @. B8 I3 Y! c) T1 s  x( u; s
  3. completed(st)
    * A. |. U- e  z  W
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
9 G& s+ r1 c7 I. W6 u- T# k2 A3 I. H; |- V  Z
  1. class Quest (JQuest):5 y% Z( z# Q( W4 Z9 v. x  W' K. d5 Y
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    5 S) u3 t! [) `8 r
  3. def onEvent (self,event,st):+ B5 M8 H/ Y+ z! X
  4. id = st.getState()
    5 o5 H5 y" X. x( w6 @. I: K# B0 _$ a$ E
  5. if id == CREATED : st.setState(STARTED)
    0 C9 s4 i4 }4 Z2 ~
  6. elif id == COMPLETED: pass3 X, y* _% |& v5 A7 e/ L7 K8 d  ?
  7. elif id == STARTED : check(st): E/ C; c- L; z1 B! C3 j
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    9 }( p& o! Z$ {7 w* Y7 ]
  2. QUEST.addStartNpc(7056)
Скопировать код
+ N, i: X& v% @/ h/ Y

2 b0 `$ D1 J& q7 N5 j
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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