Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude1 L8 E" ]' n( ]/ t8 _" d
Сборка        L2j
! c- k+ a$ |8 a1 l# k0 cПример основан на сборке L2J.
* D1 M0 ?: v0 w: g4 N! {
* {, k1 @$ Z3 n% w* P3 oПервое что нужно сделать, это добавить необходимые Java классы в квест.
5 O$ a- c: y. X3 Z6 A# d, z% o" f

  1. ' X  q+ B2 [% j
  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>; B- K' d" k9 x4 k3 R4 I
  3. : Z! z0 m' d2 s2 u' D: i
  4. </div>
Скопировать код
  1. import sys+ z! H2 x+ k3 I
  2. from net.sf.l2j.gameserver.model.quest import State! u" X/ H& m# Z5 v4 X- g* b6 O
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    ! C0 v* m+ @* x* f
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082" |. @) r6 N/ x& h
  2. FANGS_ITEM_ID = 1859
    ) g4 N8 ?# E+ R
  3. DROP_RATE = 500000
    2 X6 u, u1 T) A! o5 W4 I' W
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :! m6 U0 B& v) u7 m. p& Y' i: S
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):. r0 Z" T+ I8 {, _0 g& u: R, F

; {- |: C2 a' `" y6 t/ Q4 N
  1. def completed(st) :: i2 H, `( }1 v* Q5 H$ C. x- n
  2. st.setState(COMPLETED)" W3 v0 y, v+ }" K2 M7 |% s, ]
  3. st.clearQuestDrops()
    ; `  I$ F  P( k8 U/ h
  4. st.takeItems(FANGS_ITEM_ID,-1)2 h1 C& t& u; c9 b( C2 \0 T
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    7 B$ t8 a, \/ \1 q7 B
  6. st.exitQuest(False)0 e0 s1 x! u; R$ I& Z
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))' H4 T# M5 r3 a6 H' x- Z
& `9 f% k) B; B6 Z+ M4 A* @# @
7 N3 n1 ^8 [0 g6 z4 r% N2 @
" R5 y) u$ j" P
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):; v. o* r$ U0 Z' F6 D

+ ^4 w  Z& G1 }! E7 Q
  1. def check(st) :+ I3 F% z; y& ?9 _
  2. if getCount(st) >= 4 :! \( G2 ]7 @. F
  3. completed(st)
    , s0 Z; d; M. o/ `& R$ p
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.- s" |- ?& }6 U  n# F

( N8 j/ ?7 @  J/ ]: j% i8 {
  1. class Quest (JQuest):' h7 U: f+ `; E1 e) f
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    1 B& }7 B* r' H
  3. def onEvent (self,event,st):
    & V& H3 ]  H& ]+ a
  4. id = st.getState()
    # p) o# J$ r, Q6 C; c
  5. if id == CREATED : st.setState(STARTED)
    6 d/ M' [7 c; r- w7 v
  6. elif id == COMPLETED: pass, o& F8 p: X2 y
  7. elif id == STARTED : check(st)
    7 z. B4 J' |3 J8 B3 s; Y
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    & C: E* O" O/ j- `( A7 A$ }
  2. QUEST.addStartNpc(7056)
Скопировать код

% Q* _, Q; I1 s* p3 ?  ~6 e6 [' v# c: B) y) g7 u9 R
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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