Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude- I* R+ S9 W- D5 c
Сборка        L2j+ t, s: a! ]8 x, I3 c* _
Пример основан на сборке L2J.8 A' G  Q  M; m- J8 z; A

- a1 W& K# c' _0 m& H% U  nПервое что нужно сделать, это добавить необходимые Java классы в квест.
+ V  m3 Q1 y& I- z; H% g
  1. ) w+ q0 a5 m! V# d; n: P* S1 ]
  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>" O* h1 f7 {! U5 K& W8 B1 q
  3. " N7 y+ q' J1 ~
  4. </div>
Скопировать код
  1. import sys! A5 [* m$ ?( l2 D6 \/ N1 V
  2. from net.sf.l2j.gameserver.model.quest import State
    : M( g  a/ [: M
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    . ~) z9 L2 G% h
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    5 D- y( ?; N+ }  i1 h/ i! [
  2. FANGS_ITEM_ID = 1859, S! |- u- n6 x  `8 c
  3. DROP_RATE = 500000- V( n1 v- d! \8 @. K# w) D3 Z; u
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :( x8 u; [, s* z+ H$ @
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):* \* L+ K& x9 p- a/ n7 U
8 M  Y/ B0 p% Q/ f% F9 \/ Z
  1. def completed(st) :% X- k& b/ S9 j- u
  2. st.setState(COMPLETED)  L$ T3 g% {4 u9 B8 V+ f, j3 t
  3. st.clearQuestDrops()2 V# E# \+ H. M7 B4 b+ C. \
  4. st.takeItems(FANGS_ITEM_ID,-1), v& l1 u8 r, `
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ; V; [7 M9 S# D
  6. st.exitQuest(False)
    * Z9 t+ A( z) l( B+ Y
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))1 e5 L8 Z) z4 h: t" H5 n
9 |- b$ _9 _' I* G' e

, X' D: f" v2 r% z' ^

+ p$ z5 O: p  g9 e1 pИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):+ a* n- Q- i9 G* Z/ S+ }

* Z7 e' y5 m/ O; z2 E
  1. def check(st) :4 y7 G. B! h. m$ k# m7 K
  2. if getCount(st) >= 4 :! y! R5 M$ L3 C+ `
  3. completed(st)8 o: H" j( T2 T% @/ y. W$ S
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
& n4 {$ U& T3 p# [1 Y3 w+ D! |; U2 h# Y8 [+ _7 B# p
  1. class Quest (JQuest):  g' g4 w; O% K
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)2 O4 j8 A: i9 N: m) A3 K8 i/ `
  3. def onEvent (self,event,st):
    ' r1 O: V% \, j9 c: O
  4. id = st.getState()
    ' G, D1 p+ L) w* R
  5. if id == CREATED : st.setState(STARTED)- j2 G1 r* v3 I1 ^$ J
  6. elif id == COMPLETED: pass- _: _8 R# ]) o: e+ c/ z( V
  7. elif id == STARTED : check(st)" B! I) Y* Y5 o% _8 K- p$ @2 F+ p" `# O8 {
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    4 L9 T) k3 x$ k* j* v" p1 T4 k5 N9 H
  2. QUEST.addStartNpc(7056)
Скопировать код

% a- Y5 U) l5 s; w2 [+ a* ]- I0 L! e, O$ ?) |
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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