artace.ru - творческий сектор

Название: Создание квестов L2j_Mobius [Версия для печати]

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius
! j1 _. M) `) j' ~) ZСледующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.
6 }4 y7 P/ v- h. x6 q# D7 @" }/ B! ~
6 H- d# T  m$ P, q8 s2 k
Иди и убей X монстров / Возвращение - награда.
$ w6 l9 \, S  b! A! zQ00529_RegularBarrierMaintenance
2 o) s4 U9 O3 E6 |5 s6 x+ c$ i
6 K# ~) h: z# U$ a* ]: dПолучите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.. h; \5 b) f9 r5 C4 [7 y1 x' j+ w" w
Q00683_AdventOfKrofinSubspecies8 ]' \/ _; Q' Y- l* g+ m
, A* ^$ O# Z0 i' w2 I/ F
Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.
+ A, X5 S- W. M' AQ10516_UnveiledFafurionTemple
9 y5 c5 F  V) g( X  m% x% z: K4 ]$ N+ F  S/ H
Убейте X монстров, а также соберите X предметов / Возврат - награда.2 a' m2 E3 ^8 F+ w
Q10517_FafurionsMinions$ j& F7 J8 J9 J3 z5 I  w
2 R9 J. F& V' }: [" d
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.) Q* }% `! ^" t" {* V
Q10529_IvoryTowersResearchFloatingSeaJournal7 L* l8 \8 Q8 c; d7 q* C- @: a
9 |8 t0 \2 `8 x- s
Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда., H+ A+ f* k2 |( W
Q10518_SucceedingThePriestess% g5 w" M( L+ a5 E) B- ^# _& S# D% R
+ R$ J4 Y. C8 k  P. a7 w1 N3 Y
Участвуйте в убийстве рейдбосса / Возврат - награда.. `3 g/ C3 t7 |
Q10519_контролирование вашей температуры$ ~, h# E, F- `5 x9 S$ L

% P" ^) ^7 P  }, WПоговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.2 u% V5 Z8 H4 T  W! ?
Q10533_OrfensAmbition+ d! }- L) h  f5 U4 U
5 R( ^! j8 N8 A& i. U, Y
& D" e5 K1 }2 J& G
& ^/ C6 p# m& o/ ?* ~
Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!
# s! L8 O% U  X: N! `6 V. Y" y9 p

! ?$ O) ]. b" V+ |2 Z" CШаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".
4 Z! V& @) b% o; p6 z4 I7 x$ z3 p8 @
Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".- \$ L4 O9 v* v5 S" i8 W

: R4 c0 ?( s5 a' S. CШаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".
) E  p3 G7 R5 l  i9 d2 P! d8 ?$ _9 f) R6 ~
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.4 u- H: Y/ R2 U9 O4 O
) I: q2 @; |1 D4 N- P  ?" P' c
Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.
' }5 Y6 n) Z+ J5 n
# |# H- C5 [+ b; q' c( v3 c  ^0 oШаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".
0 V3 i8 l" n; O( m- T
# J8 H. |. O8 I6 {* \Если я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.( y; H/ z6 ?9 p. m  b# c
- P$ C4 P7 I& ^/ ~$ Z
Шаг 2:
# \  z3 z% E( }( a( G0 ~
% {4 v* F. {+ n, U, m1 F8 Z; ?; Q5 pСледующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:
3 ]6 s5 a. w) P, o  u( e) J9 T- }8 f) G$ j/ b' k: A3 t
1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. ! @) j9 j% g$ y0 j- w5 B
Например:
8 }* B- ]4 K, x, R$ O! @  e& D# Q# c, _
  1. import quests.<span style="background-color: rgb(255, 255, 255);">Q98765_NewQuest</span>.<span style="background-color: rgb(255, 255, 255);">Q98765_NewQuest</span>;
    / h8 }8 }! ]& `: s  B. r
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:, v/ G, ?! E+ n! p  C

5 i* U+ M0 `8 k7 I) M
  1. /**
    0 l, @2 B/ _2 k; {: y
  2. * @author NosBit
    4 Y" a$ L* G$ O  M! o
  3. */
    7 s+ d% K0 U/ Y! F+ M  q
  4. public class QuestMasterHandler
    " ~2 T$ G5 B0 \% G2 V4 [
  5. {: d0 \6 m, a. Z8 e" o
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());
      M! J! d: |$ `0 `& J
  7.         ; @; F# M8 v1 H, y
  8.         private static final Class<?>[] QUESTS =
      Q, q, V- D0 L7 ?$ ^  K4 l
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.
5 _/ U, S: c; H' h/ R
% q8 U. S) Y, ~: L5 h
9 F% w% R. T% A, yШаг 3:6 e7 l6 z7 W+ Y
9 K" M" I/ q  Z8 z8 B2 W/ J
Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д.
& o$ ?/ U+ s) \, g/ y1 m8 b' a  ]1 [Давайте разберем все поля на основе примера:3 i$ \+ f( u8 Z, i% h

+ q! v+ I" ^) T% l
  1. quest_begin        tag=1        id=10811        level=1        title=[Узнай свой предел]        sub_name=[Бремя силы]        desc=[Если готовы, то еще раз поговорите с Рыцарем-Хранителем Евы Леонелом Хантером в Хейне.\n]        goal_id={}        goal_type={}        goal_num={}        target_loc={111382.0;220905.0;-3544.0}        add_target_locs={}        q_level={}        lvl_min=100        lvl_max=0        journal_disp=3        entity_name=[Рыцарь-Хранитель Евы Леонел Хантер]        get_item_in_quest=0        unk1=1        unk2=1        start_npc_id={33907}        start_npc_loc={111382.0;220905.0;-3544.0}        q_requirement=[Дворянин]        quest_intro=[Рыцарь-Хранитель Евы Леонел Хантер из Хейна посоветовал прийти к нему, если Вы желаете узнать предел Ваших возможностей...]        class_limit={}        have_item={}        clan_pet_quest=1        cleared_quest=1        mark_type=-1        category_id=0        priority_level=0        search_zoneid=121        iscategory=3        reward_id={45922;15625}        reward_num={1;0}        pre_level={0}        faction_id=0        faction_level_min=0        faction_level_max=0        quest_end, n! l. `: t* e& x) P7 p
Скопировать код
Поля данных:
, f  t% E: d4 ?- s) u  r
4 a( R; U! r' [' B/ x2 f8 VФайл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре.
) c1 S$ v5 n/ ?4 V3 ?9 EПример соодержания
; @! x- u: T0 B" Q9 e( @& l2 BВот описание структуры строки:
0 r# v  [! ]" m& [
  1. questmark_begin        quest_id=10331        npc_id=32153        race_filter={0}        class_filter={0;10}        start_npc_loc={-118017.0;255965.0;-1320.0}        questmark_end
Скопировать код
Давайте разберем все поля на основе примера:
. ~) e" s+ f# f9 P- j  b$ x/ ^6 d4 P4 i
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.3 J% p' F6 @, |
8 F( B9 t, H1 P  s) v$ y

5 d, r, H* c8 M. J. n* M: ?% b$ a

" p9 v- H: F2 ?5 a4 A% SСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.& N! t9 b4 ?3 \5 _4 l" T

9 B! |/ t% P4 ?3 U" v+ j3 x& M4 FШаг 4
0 Q/ R  b9 s3 p: Q: R, fДля того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:
7 Q' j# |! w% I, S: m' `Пример добавления нового квеста:
; S& g( i+ w' d. R$ F  V9 v! w
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">; B# I7 R3 g2 [3 Y' `) A
  2.     <locations>
    " R. L0 z" y0 B+ n, T# f% G4 O
  3.         <param name="startLocationId">2001</param>
    ! {% @$ A' S! _9 a
  4.         <param name="endLocationId">2002</param>
    ( u* c# O! q2 x2 j
  5.         <param name="questLocationId">2003</param>
    7 u7 G2 ^2 h) O: }
  6.     </locations>
    - o$ {. }) b5 B/ y
  7.     <conditions>
    . U" G8 ]% l* h( U$ Z
  8.         <param name="preQuestId">20000</param>0 X& l4 s6 l8 e) Y3 N0 c9 t' [6 b
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->
    2 ~5 K2 s% f9 z% \. |: e4 e
  10.     </conditions>
    $ X( n. V! |0 D
  11.     <rewards>/ Z9 H( h5 J7 ~5 ?7 K: Y
  12.         <param name="rewardLevel">50</param>
    # W7 ?; K* a- ~9 v0 z8 H3 O
  13.         <param name="rewardSp">5000</param>
    4 a- ~/ S; h' y* T: @! F& n
  14.         <param name="rewardItemId">57</param> <!-- Adena -->8 N- f/ ~( z6 d5 R, M9 m1 i
  15.         <param name="rewardItemCount">10000</param>  v9 h6 l! c" C
  16.     </rewards>+ h: @; q- u9 ]1 K  A
  17.     <goals>
    # X  a2 y+ s* X3 v  i
  18.         <param name="goalCount">10</param>% M7 M- p: A& n& X, n$ r
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>
    9 W+ |- G0 l1 C9 j# R" }
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->5 `, l' O3 {7 N; `+ g- T
  21.         <param name="goalItemCount">1</param>, f( z# {" ]; p: ]! s1 X$ w9 m6 }
  22.     </goals>0 ~1 c( L" Z- R2 y) T, a! `( Y0 ]
  23. </quest>
    1 V) J% a& O7 d
Скопировать код
Описание структуры:' I9 I& r0 n9 D
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.: t5 C) w' {0 ?% }) H
9 @# Z5 Y, u) K2 h9 B* Z6 ?/ N2 ^/ r
Шаг 5- m( K5 G5 W2 w
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:
6 E- Z) o( m- U5 LСтруктура данных
& T* b) @! U7 j7 [. W6 m; hПример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:& P! O; [, r! D% e9 C+ S1 a
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end
    - M! V. t+ H+ n; [( x8 ?
Скопировать код
Разъяснение полей:; i( C7 E: Z! h) b
& v; ?, J6 l- }/ b2 k

0 ]+ U$ E% W7 I: L$ S- X2 J0 {$ oЧто можно изменить:
# Y5 s8 y) V: T* K
Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:2 y, S; L+ {, m& b( s6 \

% L. f5 r! H, s0 xЭтот файл определяет основной функционал и настройки для конкретного квеста в игре.
- n5 H2 N6 X2 Y. ]( ~9 D% Q, @- L$ c, g" O
2 z* F7 E0 K) T+ s

* |+ d6 P* x* x) @9 B& e. N3 D2 F
4 m' [: h9 o3 A8 F" D4 `
6 b0 w4 r3 \0 _! S5 V
$ D, v' l- [9 C) b" F; @/ k( n; G2 e. X$ h
) M+ B& N) Z+ j

# N) p* G5 o- i( ~, X7 s, ?: a+ F% J: ?+ @





Добро пожаловать artace.ru - творческий сектор (https://artace.ru/) Powered by Discuz! X3.5