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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius
7 |+ K: B* f- b4 x3 s- vСледующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.
" {+ K% r9 }/ x! h: r, I
5 O6 w+ b" A% n* [% ]# ^7 K

7 e4 {7 p, R  kИди и убей X монстров / Возвращение - награда.2 }6 K' k3 [0 [1 T: z( i
Q00529_RegularBarrierMaintenance- m' }/ V3 }1 Z3 q
7 ^# x  T/ G( a3 p# M
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.
) a9 C4 G0 t( r/ C& h7 F. a! sQ00683_AdventOfKrofinSubspecies
" y& v! s; E+ M4 q/ F
; c' o" s+ }9 D# SПоговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.
5 m" D# J4 v; T: r/ h8 ^Q10516_UnveiledFafurionTemple8 ~) Y) d# O. H6 J

% Z- \* }& P+ T9 _Убейте X монстров, а также соберите X предметов / Возврат - награда.' u9 _5 s  v* S# X
Q10517_FafurionsMinions  q) }6 S$ I+ i$ Y4 M! E
) s1 G) s8 A" M3 Z* Y# I" y
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.- v1 \- J6 `1 B
Q10529_IvoryTowersResearchFloatingSeaJournal
! ~# p8 ?/ T3 J
( t/ W! i1 \1 D/ U9 b2 p6 s: aИди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.9 g% L8 T. H; I6 i! m4 y! P' b
Q10518_SucceedingThePriestess
* ~, ^1 ^2 \! v7 [" \$ Q
, e' [1 q6 d  A  c& g" C6 HУчаствуйте в убийстве рейдбосса / Возврат - награда., a1 x" L. Z  j3 s
Q10519_контролирование вашей температуры
( H- S: W5 s3 v4 I" o
3 |. A) g( p6 qПоговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.
- p/ Z/ k1 E3 h. Z1 IQ10533_OrfensAmbition
2 W8 Y1 f- I" K) \( C2 }7 d
0 N( c( {' w! p: I% T, a- x
% m+ w7 s( E" U2 {0 B* S1 n+ d7 u8 \. ]/ K. h; I/ Z
Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!
' n. A" z0 z; Z! u4 m& O: e7 T7 L

0 }- X( @- @8 T6 P, f- E5 JШаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".1 z5 U% n" W$ E$ k
: O% X' Z* d% c
Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".1 y9 P1 C5 I+ u4 M2 F  @* z2 ^
; B; j& h3 b1 q+ P
Шаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".* B* t$ _5 n' s0 {" _/ p' r0 v! D
1 s- w8 B5 o! p7 o; p
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
1 l9 g6 [5 E$ G. w! o' ~+ k8 [: i. ~9 U$ l" e2 ~; G2 Z# \" T0 I
Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.
; Q5 ?+ {( n( x. [9 E7 Z# M1 `5 j3 m5 V- V% t$ |) e! S
Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".% n3 k4 L- p- j5 h

" y( I1 [3 X+ ZЕсли я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.5 l, B# K% l8 g0 y9 C  _
* A: M7 S0 f9 Q2 G# u7 L
Шаг 2:  ^( Y# g6 L; {0 ]
* S2 E& W; [1 r. v; X
Следующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:
* j4 a9 l0 f/ G4 h/ W1 ]" |% G$ I% M+ h, b' l0 V8 c  W
1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. . V% n. S1 E4 e' q6 F  P# J0 W
Например:
2 b3 W6 e) c! [4 u" q6 b
& Z: L3 ?9 T; v8 \
  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>;
    / T9 Z* X; P  D
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:
' B% V( k" J- k+ w3 A' w
6 b8 T. l. r6 ~% g) n: g
  1. /**6 l+ L: r3 S* z
  2. * @author NosBit
    , V  J3 Y6 n/ g" S. c/ x7 n! i
  3. */+ e9 f/ F1 }6 P+ T
  4. public class QuestMasterHandler
    ! R# y5 C. Y+ |- r5 z  E
  5. {2 `$ m2 q6 ]9 q% U: o/ k7 X: z* Z) K
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());
    " G. P3 i: n! k, O) X( M
  7.         
    . l# S( G- Z- a7 F0 C
  8.         private static final Class<?>[] QUESTS =, b- j% e. W7 |; F/ F
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.
; ^1 P5 N; p8 j1 s0 e1 j5 e& O- P5 i
$ r# F3 ~6 S9 |6 d% M9 x5 q1 A; r4 W, o( \( P* @
Шаг 3:% m% B2 h1 E; F! i5 i

+ |7 k  W) x0 K. e% WФайл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д.
6 X, S- \9 O9 x$ h8 e  U" `Давайте разберем все поля на основе примера:/ ?: E1 Y4 p9 j9 f

5 r) p/ s1 l* x7 w, D* b
  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
    . o' `  ^- h  v4 A7 ?. A2 l8 W) j
Скопировать код
Поля данных:
% k) A8 J0 d4 P) S5 |
+ X  B8 F1 t" n0 A/ ]% dФайл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре.
- I) r( C! g  {9 OПример соодержания8 m: @9 C: x+ ?. K9 i1 }6 r
Вот описание структуры строки:
- C/ g0 o' U& g) u# i: c
  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
Скопировать код
Давайте разберем все поля на основе примера:9 j1 u# w9 s& }' h
6 F/ ?2 x- y; G! a8 i9 B- V$ \
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.+ f. r  X) L) N+ L
! i1 J0 }( p" ]$ ?, @; n
( E7 W, ?7 V/ x1 A: m2 h, r; N4 S

6 C( F/ M' _8 N8 Q; O. I5 _5 f7 v; l! HСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
2 T9 U+ E7 S1 y4 }* j( e/ R. \6 H& Z) i( q
Шаг 4# G9 ?- S& ]$ v
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:
. B3 t4 S) i7 T! E0 \Пример добавления нового квеста:
+ D# q) N1 }9 u$ ], M
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">) K& v; p% a) P' A
  2.     <locations>9 R9 C4 w* |% d% N
  3.         <param name="startLocationId">2001</param>/ h0 I" J3 k, _0 ]1 |4 Y9 [1 ?
  4.         <param name="endLocationId">2002</param>
    : k, \! o; N+ d
  5.         <param name="questLocationId">2003</param>
    3 m( J! d5 @$ \# s/ y' |2 m% P
  6.     </locations>2 C1 m1 M. h  f7 y
  7.     <conditions>& D% W1 c. H$ U, @' d4 C
  8.         <param name="preQuestId">20000</param>2 ?/ n' X1 B# b: {6 W
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->/ O0 _8 q' M. i( k( ~) \0 t9 N
  10.     </conditions>7 e, d2 ^4 o7 T9 P) Z) `
  11.     <rewards>
    9 p/ Y2 b5 ~( c. o
  12.         <param name="rewardLevel">50</param>
    & R- K/ }3 s+ `* t
  13.         <param name="rewardSp">5000</param>
    9 d& K/ M0 @. H. T
  14.         <param name="rewardItemId">57</param> <!-- Adena -->
    , f8 B' x; c% p! [9 o
  15.         <param name="rewardItemCount">10000</param>
    . p7 ~) J8 E9 w6 g+ J% e
  16.     </rewards>4 h6 g5 H( O2 {% B5 u
  17.     <goals>
    ) x$ A0 U6 ~* k  {
  18.         <param name="goalCount">10</param>
    - n" N& j+ W0 I
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>
    . l+ F  p* q& ~3 o1 s* h
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->
    : r* Y2 e" m& C- J* P6 F
  21.         <param name="goalItemCount">1</param>
    - p9 `* S' \2 \) h/ `& ^
  22.     </goals>- s) k) I$ U  d# l9 B* C) Q" g
  23. </quest>  ?0 K8 P# L, Y
Скопировать код
Описание структуры:% v# J0 {" d; N% t% h$ H9 t) C
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.9 g  v: U' w$ T/ f+ T
3 [' s! J. ~  ?( ^/ h- S
Шаг 5
% \3 n# G8 G7 \: P1 E' q. uФайл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:
+ l/ q1 o2 _3 N( ]Структура данных
0 O' W( I7 X# ]; s) W4 B& E! o% PПример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:
4 I5 Y6 C% g* P& R" F
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end& v  s: T0 E6 |$ p+ E! R5 Q; a
Скопировать код
Разъяснение полей:8 N# N% o; D0 F' ^
' q/ ]# x- p' L+ G
4 ~3 M/ A; M3 N5 i1 g( H3 K
Что можно изменить:

  `! [9 y. C# V6 WФайл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:
, Y0 m: N" ]4 L, v
) i; e7 D9 G( k* z" P1 g. aЭтот файл определяет основной функционал и настройки для конкретного квеста в игре.
2 {. I1 |4 G2 C4 q
/ P" C7 `6 c5 Y8 O+ w/ L
8 u" ]' r. F; c: T2 m/ p& F: S4 H. o+ f
3 n. J6 t7 D, }- H* I, x8 ?

2 O( i1 [- y' K" O, i+ S# I. r0 W! L; O8 o

- o; `" n# b: P: i3 I
: B/ v) m+ h( B6 R; v7 D7 B3 i
2 |. s6 h4 o, N  f1 z. M- c
) {8 J2 x' v, V- R




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