Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude/ O6 N# ~! S4 U
Сборка        L2j
! O* w5 p# ]! oПример основан на сборке L2J.0 l, }( s/ Z9 o( D/ k. ^& Y

  m8 X% B' u5 {- r7 t0 m% JПервое что нужно сделать, это добавить необходимые Java классы в квест.! E( k5 I( g! x- T: [& S3 F
  1. 2 {0 U7 ]1 G1 j6 v. a1 P1 h
  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>1 k% F) d% O" A3 d3 b1 q

  3. : o' U6 x2 Y7 r7 I, u$ N
  4. </div>
Скопировать код
  1. import sys8 `. x  B' R, \9 _5 x  R: R4 _  S
  2. from net.sf.l2j.gameserver.model.quest import State
    3 A- g! J; u) }2 N
  3. from net.sf.l2j.gameserver.model.quest import QuestState8 D: P! F3 f  a# N# P
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082) e6 ~+ E7 [: X  l* _4 v& {" v
  2. FANGS_ITEM_ID = 1859
    , u1 L* w/ ]- ]5 J5 l- V( V7 D
  3. DROP_RATE = 500000% Z1 @5 F. S2 e1 o* m8 S8 R
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :' K$ F. Q3 u& n/ o* `3 d
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):( d; x- w& B" g$ y

7 y" _+ n, P$ k3 B0 m: Y; h
  1. def completed(st) :4 B* w; l: x. _4 P' N
  2. st.setState(COMPLETED)* K7 a- }! d4 u$ Q
  3. st.clearQuestDrops()2 [# K' ?" G2 v% d
  4. st.takeItems(FANGS_ITEM_ID,-1). w3 T2 w$ L4 v& z0 e4 N* C  a
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    $ u: X5 G4 z/ L3 Z
  6. st.exitQuest(False)- ^5 u: c$ d  N9 ^
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
2 {) k3 f2 F/ T, _( }! [: X8 j
9 @' G+ a) \; J9 }7 e8 ^% W6 ?- S) ~( c0 C! @. Y# m4 I

6 a4 d: M( N) @, k" G5 Y' mИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):# A( [; ~2 U6 V5 I) q; [6 f$ ~  X

3 \( R( ?+ m( C/ B
  1. def check(st) :, X6 d7 q% P9 Y: a6 \
  2. if getCount(st) >= 4 :
    9 n2 ]5 X9 H- j) ^
  3. completed(st). U2 s" K  c- s8 N, F8 E
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.3 b; y$ v6 o; @, s: v

+ g$ l. C+ X& m) T6 t
  1. class Quest (JQuest):
    ) |6 q6 |9 ?1 H8 T; P
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    0 I% q2 F, Q2 z5 Z# e
  3. def onEvent (self,event,st):
    ' t7 c7 X8 G8 M$ C
  4. id = st.getState()
      d# d+ K1 U8 Z# x% v1 G- N
  5. if id == CREATED : st.setState(STARTED)4 y% |1 `: v9 n; r& o
  6. elif id == COMPLETED: pass7 y8 ]& v$ F  z! Z1 ~  [; P8 p8 v
  7. elif id == STARTED : check(st)
    # M4 V4 I+ w8 c7 S% E# X
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)- Y6 t$ ?4 s) o8 H* d
  2. QUEST.addStartNpc(7056)
Скопировать код
: C4 K7 s5 b0 i5 @* b0 v

8 }1 @1 r# _5 p  T& C' C) k
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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