Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius [Версия для печати] Автор: admin Время: 2024-9-21 10:39 Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius Гайд по основным Java-файлам ядра сервер L2J_Mobius. y$ O$ m' Y5 a+ f0 t
9 D* F2 R+ U1 X* v! ^- i Разбор файла QuestManager.java ' T6 U3 T" ^/ d+ p" _/ C i+ \1 G 9 d1 j8 u x% n4 RЭтот файл управляет загрузкой, перезагрузкой, выгрузкой и хранением квестов и скриптов на сервере Lineage 2. В нём реализованы функции для управления квестами и скриптами, а также взаимодействия с движком скриптов. 5 ~0 Z7 a) L' B; K& hОсновные элементы. }4 M8 w6 r+ c4 b1 S; G* r
Лицензия3 X. j$ l+ Z' N6 r, d- D6 M) @
Комментарии в начале указывают на лицензию GNU General Public License, что позволяет использовать и модифицировать код в рамках условий лицензии. : W H6 V- l x# M- r+ ]5 d
Импорты , s* X n* d, Y
) n9 q4 t" u b5 @1 V8 `$ YQuestManager.java — управление квестами и скриптами. 2 L! G$ O" H! `" C4 s$ hПуть: \L2J_Mobius\java\org\l2jmobius\gameserver\instancemanager\, U; j( S+ S9 _ Z4 S
4 t6 k$ x& R" v7 f6 }: F+ V |$ F) s6 N- p. J# D* x( B7 jДавай переведем и разберем код QuestManager.java по частям. Этот класс управляет квестами и скриптами на сервере L2J Mobius. В нем реализованы функции для загрузки, выгрузки, обновления и отслеживания состояния квестов и скриптов.4 t. Z/ h' j3 q 1. Лицензионное соглашение2 x7 ~0 |4 p- B1 _
/* + Z9 i; Y0 U; S/ u
* Этот файл является частью проекта L2J Mobius.; t# _7 e o8 N' Q
* * n! y4 s2 D7 Z* n
* Эта программа является свободным ПО: вы можете распространять её и/или изменять + J/ o! h/ t+ c. r7 e9 ]
* её в соответствии с условиями GNU General Public License, опубликованной. K8 s5 `" B: R) x6 e
* Free Software Foundation, либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии., w; s( J, a+ K7 J; ^
* # e& W9 Y% `' i7 H
* Эта программа распространяется в надежде, что она будет полезной,* e0 {8 w; G+ N# w! d
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии# Z0 \ s' g8 R+ i% H' H( \
* КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.3 }2 ?* b2 f0 F/ B6 E; w. B& A
* См. GNU General Public License для получения более подробной информации.1 i7 P1 z, z! I9 T5 N
* - N2 @6 {* r- V9 y4 p! y# n4 g
* Вы должны были получить копию GNU General Public License% f( t% w% Q) {- f0 A
* вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>. / B9 m% T/ z0 T l- C2 _' W+ W
*/
Скопировать код
Это стандартный блок лицензии, который описывает, что этот код является открытым исходным кодом, распространяемым по лицензии GPLv3. ' P9 w: k {. P" ^' h; a# x# u; d% F5 Z
2 P. u; e" g0 C. u$ ] Q 2. Импортируемые библиотеки2 z& v% f% C3 O: J( T
2 s6 R8 z. j) E9 }, A* A# K+ E. \
package org.l2jmobius.gameserver.instancemanager; ! f' [, j! {: Q: R9 z
java.util.Map — интерфейс для работы с коллекциями, которые сопоставляют ключи со значениями.java.util.concurrent.ConcurrentHashMap — потокобезопасная реализация карты для использования в многопоточных приложениях.java.util.logging.Logger — класс для логирования информации (вывод сообщений в консоль или лог-файлы).org.l2jmobius.Config — класс конфигурации сервера.org.l2jmobius.commons.util.CommonUtil — утилиты, которые могут использоваться в различных частях программы.org.l2jmobius.gameserver.model.quest.Quest — базовый класс квеста, представляющий игровой квест.org.l2jmobius.gameserver.scripting.ScriptEngineManager — менеджер для работы с игровыми скриптами.& q1 W; N( [1 U" G: B
0 C8 F' i( B+ W( I# Z! z9 U3. Описание класса QuestManager% r- s& F m+ b+ B. y
/** 7 R9 I; a; H" W! O
* Менеджер квестов и скриптов.- p! ?3 q N" M( r6 `2 t
* Автор: Zoey76 8 ?+ K3 e w+ N0 g% _7 [2 s. q* A+ m
*/" }) k* F! P( q/ Z- e5 A/ n
public class QuestManager5 c& E+ q( e( I c! q6 J
{" E+ U8 G. J I* F9 W
private static final Logger LOGGER = Logger.getLogger(QuestManager.class.getName());+ \: ~; c4 m- V9 Y1 U$ b
" Z8 [0 e0 ^' g8 p, @; ~( V
/** Карта, содержащая все квесты. */ N* Q5 S8 z) V/ n/ H3 F
private final Map<String, Quest> _quests = new ConcurrentHashMap<>(); ; J4 D. v9 K1 E: d
/** Карта, содержащая все скрипты. */1 T& H# V+ r$ b5 i
private final Map<String, Quest> _scripts = new ConcurrentHashMap<>(); ; [( |- h. `2 q7 t% M! x3 g/ U
public boolean reload(String questFolder)( {6 l+ @- O0 \ @3 M6 g
{9 ^% K& w3 z" I0 C& r
final Quest q = getQuest(questFolder);$ P( A; D {. m- `9 {# R( t
if (q == null), g) h% u- R0 J5 M4 j( t% s' u
{4 H# g: r; q# l
return false;. V. u- _( V& Q1 u" ^& T! s
} 9 t$ v# `9 k1 a, k" g
return q.reload(); 5 [) N8 j! |8 n) o
}
Скопировать код
% [1 S) i% k# K% }" z7 {9 ?0 P: r# y. |
Метод перезагружает квест по имени папки, в которой он хранится.Если квест с таким именем не найден, возвращается false, иначе вызывается метод reload() у объекта квеста.: V0 X9 h R5 ^! b! J Метод reload(int questId) $ r# L. l8 D3 Z( I" V/ r; k. W( `$ y4 o5 q, U9 N5 C
/** v+ d, A. [' U0 I \ U5 `
* Перезагружает квест по ID.1 U- R3 N* _! ?0 w. {8 @4 V/ F: q
* @param questId ID квеста для перезагрузки0 L% E {6 `/ A
* @return {@code true} если перезагрузка успешна, {@code false} в противном случае 9 Q' n0 V' Z. r# s( |4 B' F6 R* X
*/ ! z# U: @: O$ W/ i
public boolean reload(int questId) / B- Z" U0 ^/ [& y' w2 C
{2 p: j6 G0 H4 E
final Quest q = getQuest(questId);( u U/ E/ z' E( U" Q
if (q == null)' p% q3 b7 x; ?" [2 t6 L; O
{9 Z" M: l& a/ s0 j0 P J6 h. n' q
return false; ) @" F# C ?5 R0 O2 N' O
}! E5 k: I. H: a% u. U% ?
return q.reload();7 e: v. {# t7 N2 g+ Q# \0 V
}
Скопировать код
Аналогично предыдущему методу, но перезагружает квест по его ID. , a4 n3 H0 [1 P
& Q3 K* ^, ? E Метод reloadAllScripts() ' z0 ?$ A- f, h" x, ?9 m% d) u+ @; y& b# m- N& l& K
/** & B, v9 h0 }+ q) F! C
* Выгружает все квесты и скрипты, а затем перезагружает их." ?5 s ?9 g6 N) J% W
*/9 p" b4 g$ e) Z
public void reloadAllScripts()+ W& g `. }' R1 X/ V; \" i; p
{ / D- e0 X r; V/ [4 I! V
unloadAllScripts(); + B# o. ?' m( |0 I# C
! S! U% G* H5 O7 H: M* w
LOGGER.info("Перезагрузка всех серверных скриптов.");" T3 k( d$ _; s6 d$ K+ m
try$ d0 w; ~/ j' o% k1 y; J
{ 2 Q6 P1 a2 u- E% j/ E( b( ]8 _' ~9 h
ScriptEngineManager.getInstance().executeScriptList(); . ^9 A0 O$ }1 w1 \, p% e
} 5 ?5 w: Z" j# |: t( t' i
catch (Exception e)( X* r8 Z }/ b, A
{; {6 g( S8 ]- F7 w- }
LOGGER.log(Level.SEVERE, "Не удалось выполнить список скриптов!", e); " q W i$ o. A8 b" d* M
}* K) a$ d: I: q" x
6 @# ?$ {5 L; j. G) B+ L6 {) B2 `
getInstance().report();0 j4 ~. I7 B* k5 C" N( E; g
}
Скопировать код
Метод unloadAllScripts()# g. R; S" w, b9 J3 K& b8 X
4 K5 }4 t1 Y* r" w) d- g
/** 8 O8 H' V, [9 o( E
* Выгружает все квесты и скрипты. F5 E$ @1 r7 L) G( p# s: X
Логика работыQuestManager управляет процессом загрузки, перезагрузки и выгрузки квестов и скриптов на сервере. Он поддерживает кэширование квестов и скриптов в картах _quests и _scripts, а также обеспечивает возможность их перезагрузки без перезапуска сервера. # H( ]7 t/ t1 ^ y `7 @ЗаключениеQuestManager.java — это ключевой элемент в управлении системой квестов и скриптов. Основная его функция — это управление квестами и скриптами, их загрузка, перезагрузка, выгрузка и хранение на сервере. : Q7 I! K1 ?# k7 D* b7 n/ [- z$ E: |9 a- `6 I1 J m% i
, W/ a. M+ n& z: P# u) v9 s H- ? : `5 e, j' M# l
Добро пожаловать artace.ru - творческий сектор (https://www.artace.ru/)