Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude3 p: d$ b4 G' D8 {6 u
Сборка        L2j
  N6 O! C5 A, k1 v4 nПример основан на сборке L2J.
4 ^. ^& Z  S! b% ]! G+ }3 |* a# j2 e
Первое что нужно сделать, это добавить необходимые Java классы в квест.
7 Y: l& F1 ?/ T. X& E; J
  1. % O9 j7 Q0 \) R- [6 ?
  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>
    % @# y4 K' T( f- G+ w3 }

  3. + ~* p3 H- @) d5 b: H
  4. </div>
Скопировать код
  1. import sys
    4 N8 i, B! e8 A! `+ u# T! ~% g  h
  2. from net.sf.l2j.gameserver.model.quest import State3 T% P2 z4 ^8 ?: B: R
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    ( L6 ]) R# o6 Q3 Q1 _
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    3 B' o) s: U9 x' ~. d' S) P9 V
  2. FANGS_ITEM_ID = 18599 T. M' {. x# [: V0 E; d7 v
  3. DROP_RATE = 500000" R) v* h+ {- Q6 m2 I5 k
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :4 l! `: x* {; w8 n
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
; P0 l3 v  {1 O2 Z- {# Q  \( n& ^: _+ S
& [9 w- l5 e8 P+ H+ m
  1. def completed(st) :0 @% N; u, A* c& z5 \4 @% l' E
  2. st.setState(COMPLETED)
    / Q( M3 e1 v- s# x7 p% j
  3. st.clearQuestDrops()
    $ F  H; {; J" j0 s
  4. st.takeItems(FANGS_ITEM_ID,-1)* K/ D; T+ Z" r' P
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ' u  M* [! }4 e6 D7 v
  6. st.exitQuest(False)
    - B- s9 I# t& f/ _  O7 w( K9 u
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))$ H: ?- f+ w" k, x

9 ]4 D5 l0 g) k) i# f# t3 u+ ?9 u( O7 c4 X  E& }/ M, ?' {
+ T/ Q* }8 g$ d  j' u7 `3 `' w
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
7 `% P3 k' q" g$ |
! T$ G" u- n+ m5 }
  1. def check(st) :
    : b) Q* H1 Z7 L/ y2 Z" `
  2. if getCount(st) >= 4 :
    ; d+ r1 T& B$ W# L
  3. completed(st)) p$ G% R' e9 @2 X9 T
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
# F$ q/ |% h! c9 C
1 ^4 h  f3 a2 ]
  1. class Quest (JQuest):* X$ {- n. L/ O& |, c5 N- t
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    ' \0 u3 ]% h' ~
  3. def onEvent (self,event,st):3 n8 U; G! D# T4 z  ~
  4. id = st.getState()
    # d- d. m. h) [# |! {
  5. if id == CREATED : st.setState(STARTED); T, t( z6 |& K1 J/ Q- ?- Q& X
  6. elif id == COMPLETED: pass- q3 K5 o# `. p" I; W
  7. elif id == STARTED : check(st)
    9 v; Q, {, K6 N; j& u1 X
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)/ i8 `, A) Z1 B( Z
  2. QUEST.addStartNpc(7056)
Скопировать код

' _" j' ?  T4 w7 Y2 F' h" [# x2 c5 }7 }+ x0 q
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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