Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
. `' H( ?0 b) l5 t$ g9 z0 dСборка        L2j
, K0 _1 }" l5 X/ s* K3 TПример основан на сборке L2J.
, G; q5 _: t- i6 s+ p2 Q9 i
; `: \! {* V. O( b1 nПервое что нужно сделать, это добавить необходимые Java классы в квест.- i2 X: k* h) q* E

  1. ; j, l9 e( h+ T7 `9 {
  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>4 F5 ?- _+ ~; ~8 k5 s1 L) B0 q/ ^

  3. / |" d+ M, U' H+ H/ C
  4. </div>
Скопировать код
  1. import sys
    . b  m  _5 X4 T1 z3 L
  2. from net.sf.l2j.gameserver.model.quest import State
    , V( E9 R" _/ f6 `. l$ R
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    + _* V; k- d% M
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082& u; j3 ]# o' e& V! h4 P. p0 Y
  2. FANGS_ITEM_ID = 1859! N  [2 i4 d5 h4 {
  3. DROP_RATE = 5000005 K5 v' Z+ ?  m; o
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :4 X$ K+ z' ~* K: q1 R+ H' y- D; j
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
1 F) k- n) t9 Q- Y; @0 ?' |6 ^/ V! b) X4 R
  1. def completed(st) :  u0 Z# S+ M- y  K& D4 q# n& R9 Y
  2. st.setState(COMPLETED)
    8 ]8 Y) V3 Z9 P  h, g! O
  3. st.clearQuestDrops()
    9 X% ?% c  s9 x$ y+ ]0 H
  4. st.takeItems(FANGS_ITEM_ID,-1)
    " ^! {, h- F' C
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    8 O& ?7 D7 a, q9 i" z
  6. st.exitQuest(False)9 N3 m" n3 E  b$ u% r3 o! Q
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))* s) A7 m( G2 Y: a' A* Q  i
5 V5 Z' Z4 z: L

/ F8 S$ z' F! x2 ~7 T4 ]0 L

3 J/ D& `' R5 M6 IИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
/ u, u$ m: w2 b: A2 I
0 z/ i8 ]5 h( D- ?) p- }0 h, f
  1. def check(st) :
    1 R) Z5 |0 g# t$ `
  2. if getCount(st) >= 4 :
    . A: ~5 Y% c' m. T- M% p
  3. completed(st)6 M, D5 j) i# _% p
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
8 C5 h& W( W5 l0 v+ K/ o% ~
& V# s" M1 c( G
  1. class Quest (JQuest):
      j1 c% B( d7 e; t/ v* s
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr), g8 d. ]' i, U) l& |% Q/ M/ W3 Q
  3. def onEvent (self,event,st):% G$ |& U  \* X, o
  4. id = st.getState()9 ^8 V6 D0 E$ m$ f  Y: D
  5. if id == CREATED : st.setState(STARTED)# ~4 X3 c+ D9 o8 k" G
  6. elif id == COMPLETED: pass
    - T. F: F; Q; A. t" l! P' o
  7. elif id == STARTED : check(st)
    1 G7 J& u* {" {$ b
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)/ D5 g2 F' Y! N+ Y) [7 F4 M! V$ B, V
  2. QUEST.addStartNpc(7056)
Скопировать код

4 i5 o  n( U' L: i" l6 s! K( t$ w" W9 u8 @' f
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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