Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
+ B7 s- `4 W) o: A7 j4 L# jСборка        L2j
5 J5 l; w6 r! g- ]8 _( yПример основан на сборке L2J.
* g1 ~- ?: G0 o: u4 ~! L% p
  P. [8 f( z! vПервое что нужно сделать, это добавить необходимые Java классы в квест.( e( M# P" `2 W+ s5 x! ^
  1. # e& r1 Y7 K; X# w  N
  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>
    1 r/ G$ g$ v9 k. R+ {( K. R! e! M

  3. ; C# z$ Q* u# h3 V+ x
  4. </div>
Скопировать код
  1. import sys" l- @7 B* y2 N" k8 c
  2. from net.sf.l2j.gameserver.model.quest import State
    # k; ~" p  O' I- o* u
  3. from net.sf.l2j.gameserver.model.quest import QuestState. b0 ~( M4 }2 O. v( a7 J  _) i  ^% {
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082, V9 O2 I) M# g. T( R
  2. FANGS_ITEM_ID = 18599 {" h, Q& v. }- J8 ?* h
  3. DROP_RATE = 500000( U) @+ Q8 A! U' W
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :- }5 X. P6 @; {7 w0 m
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):, \  v% F6 c) a+ \2 I; p$ I, ^
' L, b. x2 ~$ V3 ^% {3 E
  1. def completed(st) :: z, s. {* U) p4 Q/ ]9 J( ]' B
  2. st.setState(COMPLETED)
    8 k* S. s: f9 G" g: K
  3. st.clearQuestDrops()
    5 H: Y0 ~8 Q6 D! g2 S4 K) F
  4. st.takeItems(FANGS_ITEM_ID,-1)3 k  a& t9 j' D9 b
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)# v  d9 z2 S! b1 m
  6. st.exitQuest(False)
    ) @. H! R' R6 p( H
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
6 t. b# V' H7 @2 j& N
( Y% w1 [) p! J0 G1 `
2 u: S# v9 q; u7 N

' r3 |* e8 j; P6 o: \( x5 _  rИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):- {- C. f" e3 o7 G, P# K  ?1 n

' t: e3 ]( m  ^6 F/ W: h# J% k
  1. def check(st) :
    ) S( \% e& a  ?
  2. if getCount(st) >= 4 :, r( o! v% N; S/ ^6 O
  3. completed(st)3 ]6 V( p& Y7 R* E4 p' G
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
6 t( ^& c1 w0 e
% T% b3 Y9 n! n- b, N3 I
  1. class Quest (JQuest):# O* \  m. s" N9 e5 h) j, z4 d
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    / r( Q' v& ]' A
  3. def onEvent (self,event,st):
    ' {8 ^0 T! |0 d
  4. id = st.getState()
    + e5 r( S0 {* `+ p7 ?
  5. if id == CREATED : st.setState(STARTED)5 {. D' Z! K. N6 X
  6. elif id == COMPLETED: pass! L2 I# c( {; L: N, Q
  7. elif id == STARTED : check(st)" t$ O/ P% d/ B5 c$ E( D2 H
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    ' Y2 W* d% d3 D. X" l" G
  2. QUEST.addStartNpc(7056)
Скопировать код

/ R2 p8 X9 L8 Q4 [& P5 m2 j% N7 S4 i  u' ~1 ]/ e' X" E8 f9 Z# N
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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