Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude  ]$ [1 u1 F5 {* ?$ X2 \
Сборка        L2j
$ d- Y9 P; Z9 [# |6 K- i4 R; zПример основан на сборке L2J.
! I; N2 S7 K( C1 L# H! p( n
4 w$ M0 t9 G: f/ }( A5 lПервое что нужно сделать, это добавить необходимые Java классы в квест.) l% g9 t  x3 w7 Y5 L/ }7 Y
  1. & _- y# C2 P. ~5 x
  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>0 R! D8 r+ X3 v; k; }: r, l* j# \
  3. " s8 ]0 l/ ^/ Q. e: T9 x! A
  4. </div>
Скопировать код
  1. import sys' k" j& D2 R, {3 r
  2. from net.sf.l2j.gameserver.model.quest import State$ \# v! v! e/ _4 u. z
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    6 w+ m, `/ e& f, S+ P
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    - \& ^9 G! h4 j4 s! L
  2. FANGS_ITEM_ID = 18590 J( ?' i: g; I0 p8 p* b
  3. DROP_RATE = 5000003 C. Y) Q& j( u$ ^' l3 U. G
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :& T3 |4 l) R( K% Q1 J4 ^5 m  N
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
* I, q3 O1 s! e3 T4 s6 j2 n1 j
2 R  r( c, n6 ]+ G8 f' [) f
  1. def completed(st) :; u! a, g$ i% k
  2. st.setState(COMPLETED)
    ; Y9 e7 f1 _0 O  W5 R
  3. st.clearQuestDrops()
    + M: R9 J" N, V4 l+ c& ~
  4. st.takeItems(FANGS_ITEM_ID,-1): x% J2 |6 o0 [/ f
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)- s' R3 V6 @$ Z; o* u% W
  6. st.exitQuest(False)" |" D6 x' X( i- j  v
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))* `$ e# O+ y6 b& g

  M# \' w& i, X3 A6 Z
% y6 X: ^  S* @8 i( I& e4 k, k5 |
- ~6 @' \2 @# ^# `+ R- A% y
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
6 `7 Y, d0 |3 n! f* {
+ |- z+ v3 B# C
  1. def check(st) :
    - [$ ]& B6 k; m' f9 _
  2. if getCount(st) >= 4 :: Y6 W* s: v6 H
  3. completed(st)
    9 B8 k0 ^2 D5 f9 _7 D1 _' E
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
: e( @4 \! ^, A6 O% E8 M6 h9 {' I, t3 J6 f+ F. j) O& d! q' D0 ^
  1. class Quest (JQuest):, T) W7 a) S% J6 m* V4 W
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    8 G4 D  V  K0 U7 O9 N9 D
  3. def onEvent (self,event,st):# z7 Y% v: A8 r) a( ?' K7 l
  4. id = st.getState()
    + ~( E5 k% m$ E; z1 `
  5. if id == CREATED : st.setState(STARTED)* h9 P- H" b  ?& X3 x
  6. elif id == COMPLETED: pass! u2 ?6 V* Y' Q& ~9 u  c
  7. elif id == STARTED : check(st)" j$ g: J/ U8 d% C. v* e
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    ! _7 ~- i& n# b: {8 M& E0 D5 A* D/ @
  2. QUEST.addStartNpc(7056)
Скопировать код
4 L3 n8 \9 Q$ L4 y# R

: E$ I& i) t) K$ \: `2 n
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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