Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
2 a7 i( ?4 l( h- U/ }0 \. f$ MСборка        L2j; O* \+ ]; U8 m+ Y" y4 L! A2 D
Пример основан на сборке L2J.
, ]% Z1 b7 y# c5 K2 b; T7 [; P5 Z. t. p* h0 A
Первое что нужно сделать, это добавить необходимые Java классы в квест.2 I; ]  V4 C8 C" w/ ^7 f1 G$ g
  1. & a" s/ X5 w9 k0 }: _( v! B( \- ~
  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>
    7 ~( d/ a/ N9 j

  3. 2 W, |) Q* R, l: N$ l# {% z
  4. </div>
Скопировать код
  1. import sys
    6 e3 z( L8 m6 d# B* S" T
  2. from net.sf.l2j.gameserver.model.quest import State
    2 V" o, |: \! f4 n3 ~% v3 w3 x
  3. from net.sf.l2j.gameserver.model.quest import QuestState' X9 B* Z6 Y/ X# B# ]
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120827 J3 R, J* z4 m! ?4 T% {  _
  2. FANGS_ITEM_ID = 1859
    ; R- ~- L3 ^) T2 o
  3. DROP_RATE = 500000
    % I; |# j2 i- j6 i- M) d
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :0 i  W4 V' X2 E$ D9 X) l
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
5 e0 q0 H9 y0 d
9 ?6 V- S' }8 a0 i
  1. def completed(st) :  e9 n  F/ ?1 Z( }- w3 X: t
  2. st.setState(COMPLETED)
    & r) z4 z* O# W, d
  3. st.clearQuestDrops()
    ( v' \+ l- o/ J# }+ m  T, M
  4. st.takeItems(FANGS_ITEM_ID,-1)7 l7 B+ |  h9 |% K
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)9 a2 h" W! b  K5 A/ L  y
  6. st.exitQuest(False)0 l/ F* B( y/ z
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))+ V  \. [7 D. t* g0 a

1 O2 i& U: @% w3 n9 Y; k% I4 m3 f: T. X- a4 w: g3 @+ I/ `

; ?* R% j9 ?/ v8 K  ?И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):2 s/ U# l/ k( c3 K/ o7 ^

% o  {, _6 M, `/ v
  1. def check(st) :
    2 J0 _' v6 E; y* R& x0 U
  2. if getCount(st) >= 4 :0 [& v5 h/ K/ C. r$ ]
  3. completed(st)7 i7 G* P, u2 I( D
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал." m: M- S/ Z, P# d2 [6 E

3 _1 c% J: S: B/ i5 x- ~5 [
  1. class Quest (JQuest):& A* S0 }3 k8 }( k7 C' [
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
      x8 O7 [: ?% V( v" x* B
  3. def onEvent (self,event,st):+ L" U6 r# j; Z3 f, g: T
  4. id = st.getState()' p; h9 D6 P+ Q2 x% h
  5. if id == CREATED : st.setState(STARTED)
    ! p# }- q4 h0 k: c  P# l" F
  6. elif id == COMPLETED: pass
    2 t2 l& f# r3 N0 `- Y- t7 N  K$ k
  7. elif id == STARTED : check(st); Z; t8 t0 z& K% a2 x  D
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)! G7 B" G  ]7 M3 H# f* H  Z6 `, H
  2. QUEST.addStartNpc(7056)
Скопировать код

- n7 k. _2 l; p5 Q
$ [% j+ A7 ^! o) Q
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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