Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
4 X  E% ~# |1 F& {Сборка        L2j. h- p# A1 k) d. e
Пример основан на сборке L2J.
9 r, Z' N9 h  O5 o' b; o9 E6 }6 R
8 K# V0 L! V) ^6 k+ f% FПервое что нужно сделать, это добавить необходимые Java классы в квест.% L6 f. J4 v9 @% P" W. {: f
  1. % C# y8 p: Z4 }! b2 x) S2 m& B9 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>
    # Y8 s# f7 X  L

  3. $ e: }; b# [- c, A% z
  4. </div>
Скопировать код
  1. import sys1 o- R3 u' F+ m! j# `
  2. from net.sf.l2j.gameserver.model.quest import State
    ; q$ U. q2 n6 \! a. u" R  y0 E' P
  3. from net.sf.l2j.gameserver.model.quest import QuestState- X" m7 N! w" m% h
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082' ^& q$ e7 ~" p4 `' V# @! n
  2. FANGS_ITEM_ID = 1859
    + ?! p3 i% W( }2 V4 S/ Y4 O$ C
  3. DROP_RATE = 500000# I9 e+ f1 L/ A8 S# f( s& d
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :" y" y5 E- I- |# [( o* m
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
* U# Q5 w( v1 Q* P. [, Q7 t% T9 N6 j) R9 C
  1. def completed(st) :0 L5 O- W9 H2 ?+ g  F6 v. Q
  2. st.setState(COMPLETED)
    : X5 `2 s/ ~7 t9 H( M/ V5 T7 B8 O
  3. st.clearQuestDrops()- e1 R; o' g8 p. m4 t. @7 X
  4. st.takeItems(FANGS_ITEM_ID,-1)
    6 W2 O3 d9 J4 G! D+ G
  5. st.giveItems(WORLD_MAP_ITEM_ID,1); a9 N; w, d0 c' v  j* m
  6. st.exitQuest(False)) e9 x% T& ~" Q
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))& ^- Z9 x9 |4 k8 @5 L6 X

) `7 b4 Y* b& K, ?9 R( z1 R4 K* y& i
" P& [1 F, n7 b+ s! `
9 X! E2 r, q) `4 G
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
0 ?8 M6 x! l, \8 z2 U# P, y9 q3 d
! f3 P7 N: I* s2 _8 Z0 p/ a. v
  1. def check(st) :. w' X9 H# m0 l8 n( |
  2. if getCount(st) >= 4 :( q) G+ h# }9 x+ a  `4 H
  3. completed(st)) ^  e( T, X0 S& ~
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
8 O" b) r- P$ w8 ?+ |
& N  q: l( n# K/ K6 D
  1. class Quest (JQuest):
    9 [0 a) ^: E4 `  ]) p. T! L& M
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)) t3 a- L  }7 Y8 {! F7 |
  3. def onEvent (self,event,st):
    ) N* |$ x/ q* n1 K
  4. id = st.getState()
    & L0 N7 s/ ~' {3 s) B
  5. if id == CREATED : st.setState(STARTED)
    ( T( p. I+ m. N) Q3 l# }
  6. elif id == COMPLETED: pass; c* a; B3 ~0 L% N0 D4 Z6 T
  7. elif id == STARTED : check(st)  O+ \9 J+ ^) u/ l  ~* |
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)3 ^' |( j) ^- k% ?  L$ X% a7 ^# v
  2. QUEST.addStartNpc(7056)
Скопировать код
1 Q+ X# L- H% Z

8 y3 g  F4 G/ q
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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