Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude1 [& F" s2 I, J# d" ^
Сборка        L2j
& X, O6 f( o( L; X1 c+ JПример основан на сборке L2J.+ h+ G0 P+ V2 r' @6 B
* S* w2 o% I/ d) \* I: F, n
Первое что нужно сделать, это добавить необходимые Java классы в квест.
* o4 F+ f5 R. h8 \

  1. , h- q! ~. u' x( h  N
  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>
    9 Q6 i- G7 Q5 Y0 Q) V8 t

  3. - w) p  |- T. M- w; i$ X; h3 s
  4. </div>
Скопировать код
  1. import sys% |5 r+ ]0 i* \' ?5 }
  2. from net.sf.l2j.gameserver.model.quest import State6 x* q, b+ E# {" y8 x! ~
  3. from net.sf.l2j.gameserver.model.quest import QuestState( o+ b  b& l* M; n$ @
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    ( F: ?9 ]- A% ^4 a. h
  2. FANGS_ITEM_ID = 1859
    ; R  Z+ i" g2 y6 T! `# V
  3. DROP_RATE = 5000003 Q3 Y$ _) O5 b, ?% C% |9 m; ~/ Y
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    : _# F/ I" {: A
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
; S; C2 y; F! {- M- |& r8 E5 f
4 |2 S- F% ]1 e) c/ O! W
  1. def completed(st) :* H+ Y8 l, i9 m, W
  2. st.setState(COMPLETED)# v& v' P- q5 z
  3. st.clearQuestDrops(): Y) q' d; k4 j' C2 w
  4. st.takeItems(FANGS_ITEM_ID,-1)1 G- F, a  J+ s6 P
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)# u- L6 n. e$ ]$ X
  6. st.exitQuest(False): K' ^- R$ K; q3 E
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))9 P) T* n. ^. i2 n

; u" M) S! R. U2 ~7 b- a* L5 g: U' q" a
7 L* o+ _/ O$ A  L" C$ F" T
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
" f$ z+ W4 }/ j( d, d5 L
' T) H, p. k" ]5 Z% |
  1. def check(st) :
    . X; h$ O, L; l  t) [4 E8 r
  2. if getCount(st) >= 4 :1 M+ l. N& ^1 K3 C( j- W1 z3 [; g
  3. completed(st)2 l2 c4 N% v# r- o5 y5 q5 @* I
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
' i) `) p4 T( k* B3 u! p
; Q5 b/ E, q! U8 X+ s
  1. class Quest (JQuest):
    ) H$ k. {8 y+ P  w
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)9 y; I+ j3 m6 m4 I& h
  3. def onEvent (self,event,st):$ y- L1 k% {, j! N8 }
  4. id = st.getState()6 G7 k4 S- c) S$ z; b% b+ G
  5. if id == CREATED : st.setState(STARTED)% g0 ]/ v8 n  T
  6. elif id == COMPLETED: pass& a3 C# {( E7 d/ Y
  7. elif id == STARTED : check(st)
    - W; A/ M3 c- g) b/ z
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)3 P* Z9 G; K! ]$ n0 L7 {/ Q
  2. QUEST.addStartNpc(7056)
Скопировать код

6 l  }! \/ G0 T$ D- g0 f7 p+ H2 i5 D+ v9 V- i1 o
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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