Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
% O. F0 K  q# u* {9 K6 `2 dСборка        L2j6 M7 |: M: V! c: Q! c0 a
Пример основан на сборке L2J.
* R  b* k5 S3 p2 A: @
# v+ L( i1 n. M, U( S" xПервое что нужно сделать, это добавить необходимые Java классы в квест.2 k8 ^- h4 b" ?+ U" R; t0 Z) }! E
  1. : Z, Q2 v  A& D4 s; L
  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>
    : z+ U, g1 d6 q/ ~% ~8 K

  3. $ Q  h8 G# q7 W. {; q1 [
  4. </div>
Скопировать код
  1. import sys0 m4 R$ X; `% S# p; s* n
  2. from net.sf.l2j.gameserver.model.quest import State# v1 b$ e* @& H, O; }
  3. from net.sf.l2j.gameserver.model.quest import QuestState$ X! G( r2 j" C# q8 n+ A- M1 I* a( N
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082/ c. `# r8 k- T8 Q9 a
  2. FANGS_ITEM_ID = 1859. j: I! J3 A& [1 z
  3. DROP_RATE = 500000% K  L' B1 B9 k
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :4 N4 i% I, F2 y  x' C5 E
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
3 S2 w6 K1 z' S) X4 L2 j8 b. N, b+ L. [% p4 N  z
  1. def completed(st) :
    3 D; W4 h2 x7 m1 C
  2. st.setState(COMPLETED)- E# T( |0 J$ a- @3 @: V
  3. st.clearQuestDrops()4 e1 e  P0 ^) K1 X5 v
  4. st.takeItems(FANGS_ITEM_ID,-1)
    5 Y6 a: g0 T( Z% A( [7 y
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)2 F3 N* |) z/ N# O" u
  6. st.exitQuest(False)
    & j7 M6 O* |1 T
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
# n/ _$ d( V) T4 }# V8 l% E% F1 J) S7 Q( K- {( M

9 T# z+ B3 Z* w7 I* B
9 O& [! P1 m- p
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
& K4 Z8 F" S, B9 ~- G
0 U* N- s" P1 p- o7 S' Q' _; F( U
  1. def check(st) :
    4 W5 _& c& F" V6 V' \3 h
  2. if getCount(st) >= 4 :
    : p2 M2 A3 N( t6 i
  3. completed(st)4 u; t, Y& W- J' {: O; ^
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
7 P2 h" {  ]( U4 B+ K( h- b  {8 M- c+ E$ n1 d% G
  1. class Quest (JQuest):
    4 W9 a. _8 {* Q
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
      s3 g3 V( S8 q! T
  3. def onEvent (self,event,st):8 ~- S! f8 Z/ {2 v  ?$ W
  4. id = st.getState()
    8 v+ e0 u- C, k, B( H  b6 Q+ h
  5. if id == CREATED : st.setState(STARTED). C. n# o( Z; L( u
  6. elif id == COMPLETED: pass
    6 b# q; e1 H7 ^9 R2 o
  7. elif id == STARTED : check(st): Z. ~- k6 ]( P) M9 |# t
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    5 Z' Q0 M* W; W/ |
  2. QUEST.addStartNpc(7056)
Скопировать код

- f: t# N- E) [% j. g
# G: t' ]. \& ~0 m# d" q
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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