Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
7 M; i! J1 U+ c/ ^Сборка        L2j3 f) A4 V8 X$ ^9 l3 b/ h
Пример основан на сборке L2J.6 N5 S: @' k* P) W) M1 P

; \, H0 |- `# ^  D! X* X6 S/ u  kПервое что нужно сделать, это добавить необходимые Java классы в квест., u6 ?% f7 M( A. k7 c4 Z
  1. " ?/ L6 u4 A' j4 G% c
  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>( X7 L. T5 v' A/ r. I" q
  3. 8 N4 W$ f$ N/ I/ s$ \
  4. </div>
Скопировать код
  1. import sys
    7 W" s; s1 K1 v' R' J
  2. from net.sf.l2j.gameserver.model.quest import State- e! y1 U% p7 t/ d
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    ; ~5 K) o6 _) B) ]: b& b# c$ w
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    0 x, @/ m( N, y. M% u7 C9 D
  2. FANGS_ITEM_ID = 1859
    * l! |& V' Z& r
  3. DROP_RATE = 500000+ B5 T1 H$ ?3 W, y# g8 u9 ^5 C
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :% q$ z$ h# F7 \% ^3 T
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):% v* I8 C4 \; [. r: w
6 Z1 F5 p8 P3 A* j1 X
  1. def completed(st) :
    ' g% t8 W) \" i5 s9 B  G9 d4 v1 i
  2. st.setState(COMPLETED)
    ( j/ X. q5 X( b% g8 E
  3. st.clearQuestDrops()! ?2 K& C  h( c3 E1 }+ H% Z
  4. st.takeItems(FANGS_ITEM_ID,-1)& y' v0 ]$ ^1 z% d: Z- `
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    , T8 Q9 J: Q1 J0 W; ]# I4 x
  6. st.exitQuest(False)+ E1 J) {' d) D
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))' s4 U5 N$ q3 o

4 G% O, v$ z0 X# z) x6 {" [
) k" @% z3 y, S2 E$ U& S

8 O- t, `0 j) S; F8 _8 Y8 DИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):6 ^0 [- y/ s7 u& k

( H. z( r8 c) @1 S' r9 n
  1. def check(st) :
    $ z$ h0 e  p) P/ D) U  X  [2 v
  2. if getCount(st) >= 4 :1 X. U/ |" u: \; \7 i* _3 V
  3. completed(st)
      m- S3 e5 S3 G1 I) |5 v
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
0 n3 S4 m0 w8 o- W: i; I0 L; y
" T* t% I8 ?. K5 P: r
  1. class Quest (JQuest):/ t- l5 ?+ Q* i* H2 R0 c
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    : R, Y, s+ a$ a
  3. def onEvent (self,event,st):" F/ X$ A0 j5 H" M3 k* B* X
  4. id = st.getState()$ D+ P9 ?; |0 w( J4 i
  5. if id == CREATED : st.setState(STARTED)
    ; x$ n. s5 [" ]3 D& N6 p% w8 D
  6. elif id == COMPLETED: pass) M& l3 a% k4 ~- M3 T
  7. elif id == STARTED : check(st)
    3 l  _1 n  @4 N; U( `3 @; {  r
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)* I' r) O+ @9 [  y. f$ a) x5 P' l
  2. QUEST.addStartNpc(7056)
Скопировать код
) E4 P- a+ Z3 g& @4 ?0 c* |
9 y' |( X; W# k  ]4 b
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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