Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude; m" ]# h: M+ d* d
Сборка        L2j
: J( ^, X1 n5 p8 \Пример основан на сборке L2J.
+ [# d" G8 \& X- H) x+ ?8 E- N
+ f7 ~, x. X) {. v7 D- O* O- k& KПервое что нужно сделать, это добавить необходимые Java классы в квест.- B% @. ^" ^0 v. H! t' P
  1. . n8 F1 I6 N; {- q3 S, M4 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>' b7 ^3 e1 {' R3 }

  3. ) h2 L) H: |, a1 q6 i
  4. </div>
Скопировать код
  1. import sys
    ( b7 m) y. e9 T. x" c# a- m
  2. from net.sf.l2j.gameserver.model.quest import State
    8 j% U# F, M' t' ]- c
  3. from net.sf.l2j.gameserver.model.quest import QuestState# h( j& Z& {8 c; o$ {
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120823 ~" T* O# j: D3 _# Y
  2. FANGS_ITEM_ID = 18594 W1 m8 M  s( W3 B- Y" C2 z
  3. DROP_RATE = 5000001 L" d7 |4 @, E2 }1 W' L
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :+ ]: u5 k! m0 l
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):! a3 [8 G# A0 b4 A3 ^$ @3 Q- O0 Y) |

8 h$ y' E2 |+ a4 a) U
  1. def completed(st) :
    * {4 k+ ^* H1 q* X; ~) R
  2. st.setState(COMPLETED)2 r- g" ^- E, I* y$ R- v5 x
  3. st.clearQuestDrops()
    ' Q# B! k% k. D+ e: ?; f" p
  4. st.takeItems(FANGS_ITEM_ID,-1)
    3 Z- @1 j* S2 n, y7 ^+ G+ h2 K! b& {8 I
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    * r7 W+ I# G7 d) n4 ^
  6. st.exitQuest(False)+ i3 `, j) R1 }  R
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
. Z9 M" m  I; _: f! I- H$ A' I( U$ c: j2 ?, s; V/ \) L! |, i
5 h, g! H* P4 a* G; `) z

% G$ z0 `- q/ v9 s5 B$ vИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
4 q: H( q$ q  U% ], V/ ^6 P* {5 m& a5 c7 F2 g! W1 |/ N
  1. def check(st) :
    + u" f- k* F- Y* h
  2. if getCount(st) >= 4 :
    5 `. U. w- C* w4 o
  3. completed(st)( Y2 ]7 _& z5 W2 ?6 t' m
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
; \& ?! D8 B# _! q  z9 |2 o9 i
: Y- \% ]6 c' P6 w" l
  1. class Quest (JQuest):
    ! K, P7 t1 W( z: k
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)2 B% e! ]7 s7 W$ C% `: ?
  3. def onEvent (self,event,st):2 s' O1 H* Y! ~! o7 l
  4. id = st.getState()- ]$ M7 z. q  A$ E+ N
  5. if id == CREATED : st.setState(STARTED)
    ' o3 @5 k. i6 h7 N/ C
  6. elif id == COMPLETED: pass5 y+ T+ O% R; {* H
  7. elif id == STARTED : check(st)
    . h3 Q$ a. t& f9 T
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    - }- f+ N+ g2 I' u3 P. ^+ C. U& o
  2. QUEST.addStartNpc(7056)
Скопировать код
2 p: v# B8 V4 N. d' j

! j1 z0 M& z" t8 D: p
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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