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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius * h. u( H" @, F$ T) G0 ?- {0 `
Следующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.8 O, @" P) Q& B+ [

' j" c4 y2 j" F9 [5 j1 o8 J
4 u9 G, F7 K9 p3 h) |& u" m
Иди и убей X монстров / Возвращение - награда.
: T' ^/ g6 ?8 t' E; M; Z( G" fQ00529_RegularBarrierMaintenance+ [0 w, L! S+ Z  f0 x4 k1 H6 S7 g
4 \* V; x/ A7 G$ @  M
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.
! s; Q, D8 O2 b6 ^/ e  wQ00683_AdventOfKrofinSubspecies
* x) U  |- R, |, g& W4 A) @. N
& s* \# a  }5 ]9 ]; }( @Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.& N9 L; w; U  g& e
Q10516_UnveiledFafurionTemple& G/ n, b% g8 x/ `- `3 p
6 }3 k# S" s; @) n5 v; e* O
Убейте X монстров, а также соберите X предметов / Возврат - награда.7 d0 @& F$ N1 P
Q10517_FafurionsMinions. V& k: O! K& u5 E
1 m' l+ P+ v$ }  t
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда./ K# }5 S$ j% B4 q: C
Q10529_IvoryTowersResearchFloatingSeaJournal! G. d8 Q7 I1 h. j/ m. R
6 M, {7 W$ p+ j& |6 a
Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.
1 c5 _: @3 J0 W. H- F# a1 X6 K" UQ10518_SucceedingThePriestess7 F% B. U! u8 c7 j  a  P
! R0 T. q# d1 O$ O
Участвуйте в убийстве рейдбосса / Возврат - награда.: s1 X4 R/ n. P, @1 S
Q10519_контролирование вашей температуры# y6 S2 h+ c/ j. b! g" Y# l
7 t. d: Q8 }* i- h5 E
Поговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.
4 E* t* t8 m$ B$ ZQ10533_OrfensAmbition- _% s4 r: w  Q( G' K+ s
& u$ Q, }& v2 @: s( v% |

0 D% g( ~- F$ L- r, S8 o2 V
9 U( u& Y# A4 Z! [* r6 ^$ MРуководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!
4 W/ [/ w6 E* K+ P- q# q0 A3 Q

9 ~; k, q3 L+ a/ GШаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".
- f( @/ a! c" y# {* Y0 w) g+ F6 e
( P. g( a0 X* r8 X) F, tШаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".
3 D9 z  f2 j+ b% X
8 r3 D6 n& [! m% R; m* H5 `, }" {Шаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".1 Z1 ~! ~& D# k/ e0 N

+ t6 y0 H0 Z3 o5 \0 h" n0 `! m0 }Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
* i% X# n; h& c! [; g. W( D8 v8 q  U0 S* \9 t( V
Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.
5 t( \) ]5 k# y% f7 y, z7 p% w* a' b4 h* K' ~, H/ j
Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".
- l9 W- q. Q6 o- Q& I$ T7 k3 R! G  q1 n" G
Если я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.
8 F1 o" n3 t  @  Z+ }% V1 P
2 _2 I0 n3 }& P/ s" T$ x+ XШаг 2:9 _+ p4 S4 y5 h. }

) ^1 F2 U% P' u+ j9 B# S1 m2 m0 ~Следующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:
; H9 Q$ ?5 t% D3 i, t' s; D2 H/ M8 l9 u. P
1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест.
: I# C" P  y: E! Z! ~7 h+ V. Y5 vНапример:* y* h  ^0 F$ J  q8 t  n) c( F/ Z& \
. g; _+ {! B4 a$ |, m" u
  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>;4 _2 {3 \0 ]+ L
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:* p* P6 X5 N( b+ a/ k0 F1 E' U
* o% u, w3 q4 A4 n' q
  1. /**
    % H$ o# U' g0 M! s* l
  2. * @author NosBit  f; [- \  x% ~' B" ~# y' J3 D! J
  3. */$ i7 C. c4 w' C) m6 X- m7 X6 \
  4. public class QuestMasterHandler
    6 m' p( L! E1 ?* B( o) @! k
  5. {  H# g" E. O2 O: k
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());: K6 Y4 A5 y/ ?7 b
  7.         + ]$ k- [1 t% l9 U/ O
  8.         private static final Class<?>[] QUESTS =
    , ?/ B" h& \/ [2 A( l0 {9 E  K! z
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.
9 i2 N1 @$ y5 |5 s" K
" U+ x! g* m# `! V: v, k. A! {% [: R4 L* q+ B
Шаг 3:
+ o& K7 K6 s  d4 r; P- p5 e" _
! r! d5 D. V% D/ h& [3 _6 L* ZФайл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д.   n$ T. l: h# E  \  }! ^) N
Давайте разберем все поля на основе примера:
$ {0 x3 M- T+ `2 j5 [: x- r* N3 G8 b3 W: M- u& y7 }
  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, G+ @. m  X* L5 J4 m" @! [
Скопировать код
Поля данных:
, i8 W1 T6 F$ @2 i: Q) H  c, |# S! Q- Y- C; j+ L: z
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре.
+ I8 e. d2 }! ?, UПример соодержания3 E& y# ?2 @/ A+ j
Вот описание структуры строки:
; |- v( O$ k" {1 e" F6 H
  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
Скопировать код
Давайте разберем все поля на основе примера:' F: ]* ~9 t5 [. a6 r

5 v; D8 f, j5 S# _) pЭта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.8 ~$ p! p: r( D4 `+ t1 @: Z
, e7 g3 F! i# V
& ~$ \, D6 I6 ]0 T. {# `

; b! z" ?2 I  k4 b# oСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
8 U- o% G1 u2 z% M- \% l' A1 ]6 J( F( I7 N: p7 r
Шаг 44 c) D- ^8 b( f" c$ ?, f, `, U# l% m+ w
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:
5 ]  @+ y' J( D" F3 F2 aПример добавления нового квеста:; X0 k5 E& U1 ^5 A# K5 _
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">, E2 n8 w! K* R( G5 h1 f
  2.     <locations>
    " Y2 W* ]9 H8 s( V4 x- ]5 A4 {
  3.         <param name="startLocationId">2001</param>
    % p% \$ w4 v& w* E
  4.         <param name="endLocationId">2002</param>+ @- B* D( O, ~/ N  q5 Q
  5.         <param name="questLocationId">2003</param>6 h/ I: y0 t7 J4 G+ ]
  6.     </locations>1 j6 u* T( s2 v0 E) u3 c& \( i
  7.     <conditions>! M- W4 u  F$ ~3 X' C
  8.         <param name="preQuestId">20000</param>
    ' y" w! n0 K# @; p( Z/ [: X8 r
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->/ o3 p1 s# P& J5 j& i% g- J/ U: B8 {
  10.     </conditions>1 o$ @4 l0 ^/ D
  11.     <rewards>
      m! u+ o1 I, a$ U5 z" y1 w
  12.         <param name="rewardLevel">50</param>) h; c6 D$ |+ J7 I  i8 b+ ?
  13.         <param name="rewardSp">5000</param>* Z" A+ Q. B* R/ S0 {9 E; e
  14.         <param name="rewardItemId">57</param> <!-- Adena -->6 R3 J$ ^( E+ n1 d6 N' G1 g
  15.         <param name="rewardItemCount">10000</param>1 u& o! u3 T: I+ T  n+ S
  16.     </rewards>& Z  ~1 n( d, f
  17.     <goals>
    0 o* o+ R  ?) P
  18.         <param name="goalCount">10</param>2 I, K$ j/ f0 O# g# Z# b8 w( \8 e
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>3 N8 u" |2 c( y) ?7 f0 ]( p
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->
    " q$ R3 Z" h7 |% \& b# B
  21.         <param name="goalItemCount">1</param>% H1 h( W0 Z% i  J1 S
  22.     </goals>
    7 y9 k4 q7 U! f7 d; [0 Z9 n
  23. </quest>
    / H, r- n# b" R' w) f, j, f& z  ^' _
Скопировать код
Описание структуры:0 Z; `- v4 O; x
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.6 }9 `' l( p. d3 I9 d  o- o) [
/ n5 Z" x5 S' \" r
Шаг 5- K3 M- u0 @8 w( R! ?! S) ^
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:$ m! E& O9 \- w( G$ I
Структура данных
: p  n  e  g- p" P1 u2 d* ~, eПример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:- q/ K9 Y7 x$ y! H: }; ]
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end7 \2 p0 {+ K9 ?: @, @$ x
Скопировать код
Разъяснение полей:
2 A/ \3 U1 ]$ ]9 `4 \# [3 @: P& S
8 U8 G: W1 y; a$ E' B
) G1 Q) [$ j- |" F6 I! h" ?: z2 XЧто можно изменить:
5 A* d- s& U* j) w
Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:
1 L# y& e, c4 z& g: t2 Z& r
) x+ M# W( S$ B% j- S  P$ y+ @, OЭтот файл определяет основной функционал и настройки для конкретного квеста в игре.  G) y% `$ E  E* ?

6 {1 s/ ^. b$ L  C$ v
7 z% T5 u, z9 h2 P' S$ D0 b/ `4 C! c! M' \& f' r8 i0 F* B
  `/ b2 }0 C4 r. i# |4 V

  `0 q" L9 L" r9 R% y0 |1 Y6 a2 P+ f( w; R4 [/ ]4 [
2 W! G# V  Y1 z- W

2 G; {9 a$ E7 t# M. t( o* i
: V1 J$ M* ]  l) }$ t5 ]% s3 K3 S" _2 o





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