Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
' |2 z# |8 F0 H( g7 |Сборка        L2j
; `4 w7 X; U; C- u$ A4 uПример основан на сборке L2J.
( I" }3 \) C6 ]- B
. S3 k4 G0 {6 x* A1 M0 Z6 I5 Q" ]Первое что нужно сделать, это добавить необходимые Java классы в квест.. U* Q2 s, _  b" H& y7 @+ X

  1. 0 B- E0 o5 g1 s( m& R5 H
  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>
    - S" ^; f. G8 p% F- O* G: w

  3. ; s  |) O' w% L
  4. </div>
Скопировать код
  1. import sys
    6 _- ^: U. l* J6 N
  2. from net.sf.l2j.gameserver.model.quest import State5 I, k! c0 t& c4 y2 u# ~8 R( W
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    " p; z; @1 F1 q4 A6 o& u. B* P
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    3 O' s# h$ M% z
  2. FANGS_ITEM_ID = 1859
    , O% W+ _0 X# Z0 f
  3. DROP_RATE = 500000
    2 H; H+ A! p7 f! P' C; K' z
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :5 J( y5 \- e: v  a8 v
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):& m" W9 \, o5 V5 i' i3 e1 B
6 o  \) p- l* H( i
  1. def completed(st) :
    + W, B9 S+ a8 w$ t0 {% z4 P
  2. st.setState(COMPLETED)' U1 E6 v7 ?$ W7 |! {
  3. st.clearQuestDrops()5 P9 E+ {: ?1 p+ ?" a+ b. h
  4. st.takeItems(FANGS_ITEM_ID,-1)
    2 V0 ?) m: K: T
  5. st.giveItems(WORLD_MAP_ITEM_ID,1), |+ O7 {1 I" L& d% F
  6. st.exitQuest(False)" @3 h3 F; E0 ?% Z' S! _
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
! P3 D0 d7 n- N/ M2 ~+ Q
; E& }2 z& t6 X' @+ q: \" u! g2 u  C) o! W& N: y7 U1 R% `$ l( o7 a
5 L4 n+ v6 H; |- ^( n- |
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):5 D! w% W4 E2 f- `; ]8 B

/ F# O2 E: `; C& i3 E! h6 S
  1. def check(st) :
    6 r$ e* A; E, T; Y9 n
  2. if getCount(st) >= 4 :
    & X5 w( |$ U, c2 I# y* `, J# y
  3. completed(st)  S$ Q$ W5 Q( m# ~
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
0 i) q' g2 b) O$ U$ \: i3 F5 G# N" c/ H) a' a
  1. class Quest (JQuest):7 C, s( d5 R: p1 ^$ c( u
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)2 @: a4 W% ?$ O- k# K) w7 U
  3. def onEvent (self,event,st):/ D; A  \# P% S, u0 h( |) u
  4. id = st.getState()& _9 @  F" V: s. P! d
  5. if id == CREATED : st.setState(STARTED)( D$ d9 e' _1 ~6 c! u
  6. elif id == COMPLETED: pass
    " U- Q: U. A% I* E
  7. elif id == STARTED : check(st)% O' T% Z) d$ `' }7 Z/ a% `
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    ( j7 j: J" _" N4 Q0 N1 [' n& o' U
  2. QUEST.addStartNpc(7056)
Скопировать код
# k+ Q1 r6 p4 w3 W* o4 H. U

( U  F' e8 x4 K7 q6 Q* f
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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