Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
+ J" |$ ?7 r7 t$ BСборка        L2j9 s$ S' E$ b% b0 u) v
Пример основан на сборке L2J.
0 D3 q. v: W! f
! _6 ?2 }+ r, |+ i- J& C2 u2 IПервое что нужно сделать, это добавить необходимые Java классы в квест., `, z: R! X9 P9 a

  1.   p# @0 P# y2 _) ~" k1 Z
  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>6 n" Z1 T& y+ j9 B7 y
  3. # \- Z9 U/ k4 ?7 a  Y3 {
  4. </div>
Скопировать код
  1. import sys+ c( M- n* r9 i) a& x0 I8 W
  2. from net.sf.l2j.gameserver.model.quest import State: r# }! m" E9 c6 w$ [; l; b
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    % V% B: \& B& ]2 w( z
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082+ L  c3 p# j, n1 D7 a
  2. FANGS_ITEM_ID = 1859
    % F  e3 D8 K1 \- S) s
  3. DROP_RATE = 5000000 b' L8 B$ p& M
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    8 F: X3 i0 G3 q* ]7 F6 R7 L
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):8 y$ q0 W! U: Y6 |( Z6 F! M1 S  T

/ H- R" x" S* Q1 K3 t. J6 O
  1. def completed(st) :7 m- E5 J3 `. z$ J. U) B& l: c( `0 a; s
  2. st.setState(COMPLETED)' m* F6 w7 q6 D/ E  x
  3. st.clearQuestDrops()$ ?# [5 D4 |; A" |, R3 Y& {
  4. st.takeItems(FANGS_ITEM_ID,-1)
    1 C; T" ]3 v; i, a
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)9 y! \* J4 q4 Y: y/ R) |' @6 W
  6. st.exitQuest(False)/ k/ A. K2 h6 C6 E) i
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)). s3 }. s) W5 r% y' b) X
1 n. h9 M" h9 u% S5 R

! H$ b4 D. r7 o! v$ F

/ S- S/ |! }: D4 z; o$ w, ^/ UИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):0 j4 K2 b. f% M+ s

+ n6 J/ F# Z9 w+ H
  1. def check(st) :
    4 R+ K" b  m" u5 C
  2. if getCount(st) >= 4 :7 K& E+ K5 w( E6 g
  3. completed(st), |/ K6 v7 g: J5 l3 W
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
! ]6 [' [; R/ u9 r- P5 `
1 ^; ~# O! O% v! P. C
  1. class Quest (JQuest):
    9 _" r! @- t# Z0 _
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)' y/ p' \' }- z$ F7 }" H
  3. def onEvent (self,event,st):
    # W$ M! D+ l: I$ _9 I6 k
  4. id = st.getState()
    4 P: E3 ]# h" @! d
  5. if id == CREATED : st.setState(STARTED)
    7 i- v  p: `6 g+ ^% r* ]% |
  6. elif id == COMPLETED: pass
    ! j) {* i! \4 i, F: o. ?
  7. elif id == STARTED : check(st)
    ' t! x# m1 A$ i% ?7 v" ~9 ?
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    ! E4 S' S# p- Q8 ~( g/ n% C% v
  2. QUEST.addStartNpc(7056)
Скопировать код

* W9 S3 G8 u- D
1 u" @6 a8 s0 C7 \  e5 i: S
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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