Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude7 H( L' y2 G' v5 M3 k& s
Сборка        L2j
& q4 G" t) J& C! lПример основан на сборке L2J.
2 m0 p: O, T- i8 H! |% K0 ^8 A$ i' W% Q
Первое что нужно сделать, это добавить необходимые Java классы в квест.' D: a  a5 }) T' \
  1. 6 a( Y# j# y4 S! t6 U+ Z$ j
  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>
    - S0 i5 _( U3 E! v1 o

  3. 1 ]0 l* `3 h4 G6 x
  4. </div>
Скопировать код
  1. import sys
    + L. H( @( P0 h* q2 I
  2. from net.sf.l2j.gameserver.model.quest import State1 o$ s$ j0 x5 {( m
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    - {3 v+ f- [2 w; c( @+ l
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082; x! {2 E5 I9 S- e2 F* i& w
  2. FANGS_ITEM_ID = 18593 q3 O; ]8 i5 `% I4 K( C. o
  3. DROP_RATE = 500000' r6 l% s2 C! W0 s' R
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    + T4 b7 n/ M3 H) c
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
+ ?# t9 W, b  ~: k( l/ i
0 F! U3 F7 p. K" I; Z
  1. def completed(st) :
    - n6 f9 {& b/ T4 z5 Q
  2. st.setState(COMPLETED)
    7 b9 R6 }  J6 e0 E9 n( o. y
  3. st.clearQuestDrops()
    8 H0 c! V9 K, R5 V7 N% x5 r# L
  4. st.takeItems(FANGS_ITEM_ID,-1); R+ @% y2 B5 X' V2 f
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ( t7 i0 P* z7 k) h6 }0 h3 p
  6. st.exitQuest(False)
    2 j1 E- w3 [/ i* m( G
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
8 u; f) N1 g) P7 K4 u; x5 P8 k/ y& e: W& r5 S! a) ?/ M. j* G
: v" s  \0 j* ~. r- Y1 }
+ F# O; b) N3 I/ m; a0 A
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
* [0 w; ^$ w: o3 ]9 a+ O: o' ^! A( U; R* n
  1. def check(st) :
    $ }. _, `3 _. }( ]% b' y! j
  2. if getCount(st) >= 4 :$ w  ~/ q( {/ ~+ `
  3. completed(st)2 P/ w. \, O" |4 ]" c
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
2 W  Z' j" q7 ?
4 Y8 N& w8 U+ u8 C3 |! W: \& z
  1. class Quest (JQuest):; b* H% i  L+ z  A5 Y
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)4 \6 ?& F, ?: `! S- v, e$ g/ N
  3. def onEvent (self,event,st):
    % `2 L4 j2 Z; x/ U* n
  4. id = st.getState()
    . t2 i5 h( [8 k1 [$ }% g5 j0 a
  5. if id == CREATED : st.setState(STARTED)  }! v* N$ @, k* {# v% ^  K
  6. elif id == COMPLETED: pass
    ( U5 \) u5 ?( j( j+ V! }5 t# B) K
  7. elif id == STARTED : check(st)
    / d7 ~4 G" r7 |$ ~' n
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)! m5 w9 V4 V& g# O% a/ ?
  2. QUEST.addStartNpc(7056)
Скопировать код

: ^- P/ t8 G* \( Q* q
# _( i5 c4 a0 P6 f4 h: e
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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