Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
& p1 `: C# W2 ~$ vСборка        L2j
6 ~' ^2 ?9 P. x; jПример основан на сборке L2J.5 M% M1 W  s6 N$ I+ v

6 v6 H0 ^# [  ~! C! H1 b  O3 uПервое что нужно сделать, это добавить необходимые Java классы в квест.
- j3 v7 Q3 T) j' o# D
  1. ( Z) c9 K% @+ ~
  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>
    3 `- o# x/ [7 }2 q
  3. ) P3 \$ a2 E8 A" b- s
  4. </div>
Скопировать код
  1. import sys
      o" p' x1 z8 K8 ~$ {
  2. from net.sf.l2j.gameserver.model.quest import State
    ) `  n) P$ q! @/ \' j
  3. from net.sf.l2j.gameserver.model.quest import QuestState! j& B; c* C- v' q' s1 M: T. O
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120823 g3 D- m( v4 O
  2. FANGS_ITEM_ID = 18591 B) L5 s0 L% y: ]
  3. DROP_RATE = 500000( G/ R2 W' w3 R( E& R3 v1 Q6 G
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :& h1 f7 ?6 Y$ }6 }& ]/ N
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
! A, M0 k: @9 T6 E6 C( X6 ]6 W+ [( r- m2 U+ }1 L6 I" n. M
  1. def completed(st) :
    + N% m# J0 a3 [, [
  2. st.setState(COMPLETED)
    / d( V7 a% Q9 o9 f7 p
  3. st.clearQuestDrops()
    1 Z2 `& ^3 h9 x! W' x/ G
  4. st.takeItems(FANGS_ITEM_ID,-1)
    8 r5 i  l/ l5 ~5 Q8 \& g* F6 Q5 ]8 @
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    " _- ]2 F  Q+ K
  6. st.exitQuest(False)1 V; S7 X6 q" v8 H$ u8 e
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
* u# P# J0 @6 z8 Q8 Y+ z* g4 l4 g" {& x0 L2 u6 A/ p% F
# r! A. n. _6 S3 O2 b

- \" o7 ^5 `( [+ b3 u1 fИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):" s% c0 s$ m* D; l
3 j3 }( r0 p( ^6 W
  1. def check(st) :) B- v  W1 G7 h+ J
  2. if getCount(st) >= 4 :
    0 |, b& k) x; ]) B
  3. completed(st)3 q  S5 G0 B. r) v% r( k
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.3 e! v) B( R6 F' p% F% z$ {

3 U7 |% B" [* B: a: s0 J7 `
  1. class Quest (JQuest):
    2 v7 T6 E+ s0 G" R- U
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)7 ~" d( ~4 U9 `8 K+ U7 t
  3. def onEvent (self,event,st):
    8 v. t) m+ K8 W2 P7 `4 I: j
  4. id = st.getState()2 Q" K" M  ]1 |9 F* Q- Z8 m9 Z
  5. if id == CREATED : st.setState(STARTED). K( _! b5 _' |: H
  6. elif id == COMPLETED: pass3 K3 Q# n2 ?2 T8 G! v
  7. elif id == STARTED : check(st)
    ; [6 P1 @1 d! k- d9 c3 B, e
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    7 O' R8 N# p% r& m' _* o
  2. QUEST.addStartNpc(7056)
Скопировать код

) G9 V+ p) v# G8 }5 u2 c. ^% [% y. \3 ]# H4 [/ z& M# F
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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