Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude9 H% ]7 u2 z9 V+ n( T
Сборка        L2j
/ {  Y3 ~  j, j. h! [Пример основан на сборке L2J.
5 a1 R" I3 D8 ^5 ?9 ~% l9 |# X) O- |, a* K7 e
Первое что нужно сделать, это добавить необходимые Java классы в квест.
  B% a2 m; t) G
  1. . k! b" ^8 {' K5 T* ~; p+ 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>( g% g2 o  d0 D4 b& T. v
  3. $ l2 J" g6 a( c/ R, o
  4. </div>
Скопировать код
  1. import sys, y5 c) i$ ?' E* ]* r( x
  2. from net.sf.l2j.gameserver.model.quest import State
    / G* u. y) Q. _5 {- v& C! J' [
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    " N% J# C# R, @% A
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    : |# I7 U$ L) F+ Y
  2. FANGS_ITEM_ID = 18597 B8 k0 v: x4 R  z4 b3 n5 d9 H
  3. DROP_RATE = 500000( Y: y7 @1 W1 H7 B4 L2 B) m) u
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    ' X# Z/ R' n, ^. v) Y1 Q' f
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
1 F; P, A, z- A' H7 j
/ `( u) k* ~  ^- |1 a
  1. def completed(st) :
    - [0 v. u9 \, V& @% w) I  G+ y
  2. st.setState(COMPLETED)
    : \. X1 G6 z" O1 S0 o
  3. st.clearQuestDrops()
    3 V9 a: Y+ ]8 r: u* N5 y6 u- d+ X  T3 X
  4. st.takeItems(FANGS_ITEM_ID,-1)
    , k3 l8 M; C3 r& x; E5 }/ B/ w
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)$ [$ X8 k" F% v( R( s9 E* n
  6. st.exitQuest(False)
    ' D8 w3 p) B7 R! \2 k$ N- h
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
3 M3 @- S( t  o1 u0 }, u
9 y7 X, ^: n: h. m$ f8 t3 A/ T) c% Z
- D0 A5 J# G5 D" b& `

$ g  C" ]$ Y# T2 r% w; o/ {И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
% C# l; [. ]- i# e3 f) m7 ?, Y/ G1 h5 I& h9 U+ y% a% G
  1. def check(st) :, ]! w. x8 {; l) T! ]' Y
  2. if getCount(st) >= 4 :& D; [: y, m0 V# c, L
  3. completed(st)  C6 Y7 {# V* `9 k6 N% i* G
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.' ?  ^2 `% d  `* C+ m2 ]  T% e
% X6 Q) V# Z- W& k1 f; e0 ^3 z
  1. class Quest (JQuest):( l) F* f3 A3 k& F& x7 g* F
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    5 j0 Q5 R' y! q" n9 s
  3. def onEvent (self,event,st):5 \$ V1 y- F$ f* F* E  X& k
  4. id = st.getState()' U) i) s7 D0 X. C" C, J% M: ^& y
  5. if id == CREATED : st.setState(STARTED)* d: ^: V) I) x6 S1 j* T8 f
  6. elif id == COMPLETED: pass( b. n+ e/ @+ {/ r1 |# Z
  7. elif id == STARTED : check(st)" M, ^1 @% p, a0 }  {
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)5 l' ?  g3 p! V0 c1 X" Y( q# h
  2. QUEST.addStartNpc(7056)
Скопировать код

) d) S$ q% d( I' G+ F$ ?
6 q3 F& Z+ L2 ^: E: g! {
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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