Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius [Версия для печати] Автор: admin Время: 2024-9-21 10:39 Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius Гайд по основным Java-файлам ядра сервер L2J_Mobius4 v+ a0 e- J7 S; M7 k
6 Y9 D6 h0 t1 P3 N4 Y Разбор файла QuestManager.java# W$ ?6 M- ?9 t7 V2 N7 O7 [& M
# l& s+ [( r7 UЭтот файл управляет загрузкой, перезагрузкой, выгрузкой и хранением квестов и скриптов на сервере Lineage 2. В нём реализованы функции для управления квестами и скриптами, а также взаимодействия с движком скриптов. ( E2 E; E4 B ~Основные элементы 6 R8 _. a: m4 r$ [4 [
Лицензия9 P1 \- m# I0 W. ^* N2 Z
Комментарии в начале указывают на лицензию GNU General Public License, что позволяет использовать и модифицировать код в рамках условий лицензии. + ~: l" u7 v8 d, p! b O7 f: w
Импорты: Y" \" X! `" I3 Z$ `3 g" w( ~8 k
* e* J: S1 _# l- U* t' z: p7 sQuestManager.java — управление квестами и скриптами./ ~% ?4 ^5 f% ^1 H9 q Путь: \L2J_Mobius\java\org\l2jmobius\gameserver\instancemanager\- V. L, \. s! n8 e( t
9 o' I; u8 t" G+ ]% u+ W; v& ~3 G3 n/ u" R% {: p
Давай переведем и разберем код QuestManager.java по частям. Этот класс управляет квестами и скриптами на сервере L2J Mobius. В нем реализованы функции для загрузки, выгрузки, обновления и отслеживания состояния квестов и скриптов. , v! W$ m; q$ y1 s& s1. Лицензионное соглашение# d, d$ y0 ]0 d j" O
/*& T: i7 B4 V" Y
* Этот файл является частью проекта L2J Mobius. . o2 {+ J6 L' j9 s# u
* % T% ~' S0 | D
* Эта программа является свободным ПО: вы можете распространять её и/или изменять& K3 B: e' y+ P4 E
* её в соответствии с условиями GNU General Public License, опубликованной ! U W% E/ {4 m6 K
* Free Software Foundation, либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.4 H$ ^# e, ]3 e6 E; t$ I; d
* 0 h6 h0 @8 c3 `' O |! c
* Эта программа распространяется в надежде, что она будет полезной,/ V$ ?* ~+ |& ~. W1 z
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии . `* _! v2 N3 j, q8 X
* КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. . ^" [, J8 o# v9 d7 Z- Q
* См. GNU General Public License для получения более подробной информации.5 g; N% W! U/ \
* , v2 T. e: s( C- j6 H$ R
* Вы должны были получить копию GNU General Public License $ P: C/ m- z0 e' I1 Q* _
* вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>. & f1 U( U* Z/ \5 w
*/
Скопировать код
Это стандартный блок лицензии, который описывает, что этот код является открытым исходным кодом, распространяемым по лицензии GPLv3.7 ]* f% W/ N0 G, U& [8 n
$ c5 ?) H3 Z; p + w3 f: N8 a) w$ m# L" t/ K! W2. Импортируемые библиотеки ; r$ B5 M* m& C& G f% ~$ O % y0 N" v6 K; c6 g
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 — менеджер для работы с игровыми скриптами.0 I8 r2 F0 x6 R
* [* a0 ?9 d2 x0 B% { n1 T3. Описание класса QuestManager : i8 m4 V A, H8 G; t1 h
4. Методы 2 j, |. k: T7 P8 |- Y' TМетод reload(String questFolder) 3 a7 P# ?3 T0 _3 l
public boolean reload(String questFolder)9 h7 k5 B, K' p0 i, d
{ % [# x: h; r% Q G0 M. E
final Quest q = getQuest(questFolder);8 O8 r R( }% w {0 M# c7 ~1 o
if (q == null)" a. n x# }6 }/ j0 x9 I: F3 b
{% u1 b U# o- m" U% S; g; j5 c# e
return false;/ P! J. v2 w4 R) B, h1 U
}/ ?1 l# m" r" E5 A' n; J1 {" T2 x
return q.reload();& {# o( U0 V5 o5 j
}
Скопировать код
% v# m7 S3 L3 S6 ~* i. c 0 e3 u; U4 @& L. v! ~! KМетод перезагружает квест по имени папки, в которой он хранится.Если квест с таким именем не найден, возвращается false, иначе вызывается метод reload() у объекта квеста.1 _2 h! G9 y0 [- V2 b9 k Метод reload(int questId) 2 ^, H5 V& ^9 i1 | |5 L # R. ?1 ` t9 ]) X
/**0 v8 n" v# q @$ @& a( d
* Перезагружает квест по ID.) L5 y) X7 y+ r4 o. h
* @param questId ID квеста для перезагрузки . j$ W$ @+ V/ [, ]" `- n0 `
* @return {@code true} если перезагрузка успешна, {@code false} в противном случае ! S( x# d* Y9 [% b* q4 C
*/ $ y$ t7 B* F; C. O' S
public boolean reload(int questId)# h1 h0 u% f. ~8 O/ w' P
{ 2 p1 Y* A: o# {3 Q4 ]/ q0 F, x; Q& d
final Quest q = getQuest(questId); 9 W0 C1 O) u$ f1 g. _2 z5 I7 Q) K2 v' j
if (q == null) + a: d, T0 ]" M0 t7 }
{ 7 J4 l( d% t x$ @( P8 b
return false; , J5 J8 M' ?* ]0 i& K: N
}$ ?- n2 h3 G( d& B7 t) l0 D9 H1 O
return q.reload(); 9 T, W N+ ], y% D; R3 e
}
Скопировать код
Аналогично предыдущему методу, но перезагружает квест по его ID. ) i# D7 h) J7 ?+ M1 J
- D8 E G) x/ d5 A e* e5 ?Метод reloadAllScripts()1 K1 Z2 d: a; M* |' r
6 c' S1 h) y7 p, P, f# Z0 l
/** ; O3 `7 j5 s& L! S9 O; d
* Выгружает все квесты и скрипты, а затем перезагружает их. 5 `7 h' _/ D1 n4 U- j
*/ 2 |/ {, N. A9 c8 J' F
public void reloadAllScripts()8 B8 y5 I- C3 \
{ 0 Y6 f; A1 @: ^" n0 z7 C
unloadAllScripts();9 |2 D4 `7 V0 F. @
3 L2 D& u6 V3 }- Q
LOGGER.info("Перезагрузка всех серверных скриптов.");( _0 k, D1 |: o* L
try ' p3 R% A3 D2 U/ K" ]$ E
{0 z1 L" \4 F1 U1 m; [+ I& j/ c
ScriptEngineManager.getInstance().executeScriptList();4 e! \) B. _; Y0 w. i1 ], K
}% H, F% l9 |: c( B7 L3 a
catch (Exception e)9 d, B2 |' J% m4 p
{ 5 Y) E7 `& e+ R$ K; z
LOGGER.log(Level.SEVERE, "Не удалось выполнить список скриптов!", e);3 c; x# R$ U% K1 e& J, e3 l+ Z* J
} , D3 Q- @" v7 O' H! A/ J B- _
" u! h/ Y, `6 _ j3 C
getInstance().report();; f, m {3 h& L$ Z
}
Скопировать код
Метод unloadAllScripts() M' A3 Q. s) _3 M6 c9 h9 A
( A" I6 }6 E) u, \
/**3 F* r* I5 h u. v& W0 e
* Выгружает все квесты и скрипты. , t C7 p9 T7 G! }
*/ 7 b, B- Q6 G9 C
public void unloadAllScripts() 1 J; R! I, M% F% |
{9 V C; ~# q9 R4 |3 q/ D5 M, t
LOGGER.info("Выгрузка всех серверных скриптов.");, C. A( r: V/ l k
) K0 h: E: |- g' Z |0 X: b2 N% g
// Выгрузка квестов. 5 X5 Y# C4 S3 @4 O8 H% b5 P
for (Quest quest : _quests.values())# _) v* s! e& b: R3 m+ w
for (Quest script : _scripts.values()) ) `: S" ?2 D% ~6 e
{ 3 |' |# Z7 }% M- z9 {& T% A
if (script != null) * {- e+ A/ G+ R9 I# G$ ?: ?
{) g: u5 i7 R. l8 B
script.unload(false);8 }! _6 O9 j5 z6 s* q
} - }& G5 c* X$ }; l& A) ]" B- B
}& X! F* h/ u5 w; {
_scripts.clear(); 0 b" Q- R% E \/ j$ M! ]9 ]
}
Скопировать код
Этот метод проходит по всем квестам и скриптам и вызывает метод unload() для каждого, а затем очищает коллекции _quests и _scripts.6 i' U, J* |8 [' A* M" C
% k( w. n: l6 o6 cМетод report()% u* N# b. ~2 p$ L7 b2 Q
2 g& T! z+ g% z$ _- m, O* O. U0 Q% _
/** ) s9 |( B6 f0 w5 Q* _0 w
* Логирует количество загруженных квестов и скриптов. 3 w6 W' f- Q- F% q, Z
Логика работыQuestManager управляет процессом загрузки, перезагрузки и выгрузки квестов и скриптов на сервере. Он поддерживает кэширование квестов и скриптов в картах _quests и _scripts, а также обеспечивает возможность их перезагрузки без перезапуска сервера.) \. _2 v- r7 y$ Z ЗаключениеQuestManager.java — это ключевой элемент в управлении системой квестов и скриптов. Основная его функция — это управление квестами и скриптами, их загрузка, перезагрузка, выгрузка и хранение на сервере. # b; q2 y, \$ X 0 B4 v: T! W: V e, |# z* a A3 u1 G7 n
: w7 s# P) f: M
Добро пожаловать artace.ru - творческий сектор (https://www.artace.ru/)