Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude1 j* _  b8 Y3 T( V# m5 m* I
Сборка        L2j: w6 ]) s) v. i% v9 x) [, B
Пример основан на сборке L2J.' y) ?& i0 K# j; }" F
( h: l( e: I& Y) P
Первое что нужно сделать, это добавить необходимые Java классы в квест.
, l* F; c' L$ J' A, z1 _6 R/ q) ~
  1. ) A2 ]* ]! s: q9 l2 e
  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>
    2 x; Q/ @# T! [7 e
  3. ) h) Z# n; {  K/ t( y& l# r# @2 C
  4. </div>
Скопировать код
  1. import sys3 e0 ^7 k5 q* A$ `  u8 h  S
  2. from net.sf.l2j.gameserver.model.quest import State2 `; q% {8 {. t8 L+ e. h2 K- O/ x2 T
  3. from net.sf.l2j.gameserver.model.quest import QuestState% p3 h, Z7 K1 B0 J$ @, S, v  ?
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120824 Q; `: P+ z5 }% e) s, e
  2. FANGS_ITEM_ID = 18595 {/ j# o, v! m1 @, K
  3. DROP_RATE = 500000
    " a/ n9 o% {* O$ J6 r3 R% G1 ]- G
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    / o2 f4 R6 R) R0 Y1 v- b% `3 z
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):' G& B# _9 n4 r3 z# S& J2 A3 x
1 g' ~# d6 M- K
  1. def completed(st) :( l4 ~" ^- [# O! a. x
  2. st.setState(COMPLETED). B! ^$ u$ q% `
  3. st.clearQuestDrops()5 }% s6 m9 _! V* X/ u; D$ G% e0 F8 L
  4. st.takeItems(FANGS_ITEM_ID,-1)$ {6 W. @$ r4 O# |$ k" ~) `- S0 K
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    * Y9 M& m" A5 e7 J5 N) f
  6. st.exitQuest(False)
    ' p3 o: z0 v, O0 Q
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
* y9 b( p1 `  D
9 v9 ], H8 i& }2 g; f) K/ ]
/ r6 J. t% ^+ j! [8 e' i

4 J! b9 l- V4 [6 s/ WИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
5 X. \% y5 y$ \% C
9 ~% i1 r: e5 r$ d3 s6 N4 L8 p1 J* C
  1. def check(st) :
    : Z5 G) ^0 I) p# H9 u9 z
  2. if getCount(st) >= 4 :+ I# Q  F/ {& R/ r* }
  3. completed(st)6 i' c* d: J1 p' _! Q
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
0 u3 N% V/ Q+ o# L% `+ o: R. N3 u: V, L/ d
  1. class Quest (JQuest):8 {: ^! H8 s- U* {* x; h: H9 F1 B
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    , t; X: z- Z5 O/ v, p. r
  3. def onEvent (self,event,st):
    % U! a- s( n0 I+ U) P
  4. id = st.getState()0 s! y& Q- b+ ]6 e+ |9 a1 \
  5. if id == CREATED : st.setState(STARTED)' r8 }* C7 M$ j# V0 i
  6. elif id == COMPLETED: pass) R2 h5 P7 s) |# U. S
  7. elif id == STARTED : check(st). U8 u9 _/ M! [
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    3 M, f1 i4 p( W( Y9 ~7 u' P8 A/ S
  2. QUEST.addStartNpc(7056)
Скопировать код
% x" `! x: u  A/ E% z" D2 U
+ r$ {4 K9 z; E1 r5 p1 h
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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