Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude6 U4 w- y* B8 i/ L6 A8 d3 O3 ?& ^+ b
Сборка        L2j" t7 A+ z& D7 U4 E( D3 |
Пример основан на сборке L2J.
) [! ^2 E: X; B9 S
1 x: F" b" n8 p# G# s' rПервое что нужно сделать, это добавить необходимые Java классы в квест.
1 f- i+ K! a: Y6 @/ w( C. {, u
  1. 1 [: k& a+ Z& I( n3 u( S) T
  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 k1 g; o4 i% j
  3. : N8 p3 Z! v6 c. y  f: {8 w
  4. </div>
Скопировать код
  1. import sys2 e7 ^# M" T: U1 g
  2. from net.sf.l2j.gameserver.model.quest import State8 ]6 H4 ^1 a# q
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    ; W6 h' f7 V1 E4 {& A& s9 V6 k, f
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    / a' w6 _9 O. S) S# }& Q8 y
  2. FANGS_ITEM_ID = 18593 x9 G9 \( D! O% r" O3 m* E# {4 P
  3. DROP_RATE = 5000007 K7 {8 L- u6 N; {2 L1 j
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :/ X' z$ G; b7 [' G8 v
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
' e1 f4 c; s$ _( {! F6 n( I( w
: J  {: r, T- n9 I, ^& d- K' P
  1. def completed(st) :0 G4 r* j8 [" ?6 X, `+ y4 L* ^
  2. st.setState(COMPLETED)
    9 M6 R% V6 D0 ]; e" s" D0 ]
  3. st.clearQuestDrops()6 j$ J4 c1 t" O
  4. st.takeItems(FANGS_ITEM_ID,-1)
    - Q* V3 ?$ K3 k5 i; _
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)- b0 N; P6 }6 A! K
  6. st.exitQuest(False)* a5 k; Q$ `3 p; O8 O& L) z
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))' y$ q" K2 j! I7 l, K3 |
% k) m- p# M% K+ j4 x5 Y& D$ k

5 ^* t6 ^9 F3 z8 H: k( M6 N( t
8 ]. a  g1 d, ?
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
  P6 c! f+ d" z  J7 L6 |
/ |/ Q) \; o3 D+ N; O- N) R6 f
  1. def check(st) :4 e& V  V) s" P) u( i$ k- G
  2. if getCount(st) >= 4 :) \3 E' C9 ?1 d( f
  3. completed(st)
    % `) |/ [# y( ?0 H8 g
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
: W7 b( Z: f2 G" \( D
1 ~. e; g/ P- n: _% Y) W
  1. class Quest (JQuest):5 E+ `8 P/ H* w4 j# S
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)3 N. v- F3 h1 C
  3. def onEvent (self,event,st):
    . Y1 l5 v1 O+ l( ?1 ?
  4. id = st.getState()$ t% o2 s, d5 X  N% n
  5. if id == CREATED : st.setState(STARTED)
    + B, q  J* r8 L2 Y; c# p9 R. |
  6. elif id == COMPLETED: pass
    0 z7 K- W3 t9 I) I& B1 O
  7. elif id == STARTED : check(st)9 S/ W) I0 B' V; a, T5 r
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    3 A. O& {; ?, Z( [$ y
  2. QUEST.addStartNpc(7056)
Скопировать код
9 [5 i1 E, X+ R0 @9 V4 r7 ?
- H3 t" u% J1 A& U' Z6 }% |* u
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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