Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude$ M# E+ V' _# [' p5 H$ R
Сборка        L2j
2 z/ i# W$ D4 ~, ^% |Пример основан на сборке L2J.+ U% f# V: p: @4 ]: [5 U6 U1 Y
9 y) e/ V  t8 m8 q7 J
Первое что нужно сделать, это добавить необходимые Java классы в квест.# j, v  r  Z. g( W! I2 N
  1. : a% @$ b# A$ O! T9 b# p
  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>
    " ~  d; T; x) D; E

  3. 3 B! h( A0 m4 l5 p
  4. </div>
Скопировать код
  1. import sys
    " U# Y/ Z- e. \) m$ ~& V( P
  2. from net.sf.l2j.gameserver.model.quest import State& K4 V: D# G. {' R& g- d2 ~
  3. from net.sf.l2j.gameserver.model.quest import QuestState; E/ H3 T' J- r( \
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    0 E, `$ G+ t( m
  2. FANGS_ITEM_ID = 1859" Y6 V# y1 z3 z7 ^
  3. DROP_RATE = 500000! `* o% a. r2 H6 L, v1 o
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :; N" u# K( J+ j. g/ E
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
, t1 A1 [; m1 S1 y9 c& m/ J! t& t% J. b
  1. def completed(st) :- G5 l1 [; I( T/ y1 Q+ I* E( d
  2. st.setState(COMPLETED)' u# }: Y' h* w4 A6 K9 G5 c
  3. st.clearQuestDrops()
    - n0 J" r6 u5 g$ A7 a, v
  4. st.takeItems(FANGS_ITEM_ID,-1)7 x4 ?. f# J( [$ ]/ `5 m- q8 ?+ ?
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)+ t$ ?* y- ~( ]. e
  6. st.exitQuest(False)
    ) A  @% J8 L) E: J9 m5 A. v$ N4 U+ h
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
5 A' Z# u" D  \! c" X! T+ s
4 S$ D0 ~3 T' m$ z% x
4 U" N+ M) U3 b3 c

/ p7 O: C1 l! m" O# n% d: KИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):" T1 ^5 a. i3 L9 M, S9 T2 \

; w4 r' F$ R3 q3 p4 }6 x
  1. def check(st) :
    3 Z: |+ s2 a* p2 U
  2. if getCount(st) >= 4 :0 v. ]  ~5 l: g7 S: S& I
  3. completed(st)  {5 F/ a, q( B
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.8 [$ }' B3 d! j# |: w0 Z

" S2 I" Q( l# e' ], L
  1. class Quest (JQuest):9 t+ e' I& G+ `5 `. T
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    % |/ L/ |. U+ F, i1 d) u
  3. def onEvent (self,event,st):. T: `; H# b" `  O  P
  4. id = st.getState()
    3 j1 h8 l1 H0 V. j4 n1 B4 v
  5. if id == CREATED : st.setState(STARTED)8 C+ r! C2 @% j  e4 ?0 G
  6. elif id == COMPLETED: pass7 O  y, |) X( ~4 _2 [
  7. elif id == STARTED : check(st)
    % J8 Z- b* M  t
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)! R5 a, F/ L$ w. }0 b
  2. QUEST.addStartNpc(7056)
Скопировать код
# w8 Q: ?/ W  m* T. x
, G; N7 y9 b8 f$ K) {
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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