Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius [Версия для печати] Автор: admin Время: 2024-9-21 10:39 Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius Гайд по основным Java-файлам ядра сервер L2J_Mobius5 ]3 r8 e# P1 ~! I5 T" V
! ]* f% {9 K5 V$ x Разбор файла QuestManager.java 5 n' \/ y1 n L+ {2 v5 M2 q 5 H. s4 U t& a( M) yЭтот файл управляет загрузкой, перезагрузкой, выгрузкой и хранением квестов и скриптов на сервере Lineage 2. В нём реализованы функции для управления квестами и скриптами, а также взаимодействия с движком скриптов.1 \6 Y' c' _( o8 W5 M$ t2 p Основные элементы 8 ^+ D# \$ l! n! Z! L; k
Лицензия 8 q; X; H j8 S( D
Комментарии в начале указывают на лицензию GNU General Public License, что позволяет использовать и модифицировать код в рамках условий лицензии.6 Q+ `* S m1 c) s6 Q: G
Импорты + T( n# v3 L2 M' H1 |
/ j' J* h, o8 k Q8 DQuestManager.java — управление квестами и скриптами.' p7 S9 X9 U7 Z7 j Путь: \L2J_Mobius\java\org\l2jmobius\gameserver\instancemanager\ / M! s$ O* S% Z+ W9 m, A N" o! i& U+ M( z
0 ?* ~5 r* n" d+ v6 S( B1 kДавай переведем и разберем код QuestManager.java по частям. Этот класс управляет квестами и скриптами на сервере L2J Mobius. В нем реализованы функции для загрузки, выгрузки, обновления и отслеживания состояния квестов и скриптов. ' c; v6 P0 Z' b# B% {$ a9 G. ~6 u8 N1. Лицензионное соглашение5 E2 \' L0 K$ X. x8 U* E
/*% B% S( V8 k$ m# `
* Этот файл является частью проекта L2J Mobius.* k' _3 |% F V1 m1 V0 b
* 1 M3 D2 A3 m+ [" L$ X2 v; N' ?
* Эта программа является свободным ПО: вы можете распространять её и/или изменять ; q9 C, T9 D( S4 m
* её в соответствии с условиями GNU General Public License, опубликованной r' S; I. e- ~+ a4 r+ m" y
* Free Software Foundation, либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии. 4 T2 Y1 S( M4 f$ n
* ) ~6 s( ?7 o) K7 U7 {! b
* Эта программа распространяется в надежде, что она будет полезной,5 l+ n2 {# R/ w: T; }2 ]' }/ \$ @: E
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии 5 |0 ^& {2 i; x" B V
* КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.' h0 X; B$ K( z g$ y1 d
* См. GNU General Public License для получения более подробной информации.0 G6 P" \( A$ N$ U8 d* H; S4 {
* ( w0 p5 k% ?8 f
* Вы должны были получить копию GNU General Public License $ @, g' v% ^/ E6 y5 L+ B
* вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>. & K3 `8 ^( x. l1 U+ U# c
*/
Скопировать код
Это стандартный блок лицензии, который описывает, что этот код является открытым исходным кодом, распространяемым по лицензии GPLv3.+ p4 A- T& X ]( d8 z& X/ H
; i7 `* G8 L& e9 r. U7 O# c Y; b, t+ Z3 F5 i 2. Импортируемые библиотеки $ o) p9 R: ?( h, Z 8 X# J0 }: W2 I% I5 q
package org.l2jmobius.gameserver.instancemanager; * j a \1 a6 b% U# ?8 C8 H
$ O m( I7 B [) B3 Y, |6 l* {: p
import java.util.Map;/ W L0 S% {* R( }1 C% g/ ?6 K
import java.util.concurrent.ConcurrentHashMap;+ `. B3 y3 x; X
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 — менеджер для работы с игровыми скриптами. # L! `* y7 \' K& L2 n N0 k0 v$ f2 W3 K# m1 L% L
3. Описание класса QuestManager - W* F9 X" r1 B1 [) v
/** 5 q: s3 |3 [- t9 \: ?' i( W
* Менеджер квестов и скриптов.0 k. B- }# {' c; S
* Автор: Zoey76: y' s; \: ~4 R; h) u2 S0 n% p, p
*/) C8 {5 |6 s6 l, p
public class QuestManager' O' a5 e3 R' z9 G. \
{" Z7 O! s! V1 p/ W% t0 t% ]) f3 }$ b
private static final Logger LOGGER = Logger.getLogger(QuestManager.class.getName()); , K- L/ H* B* b% I
8 j$ Z% d. Y9 l/ h( o
/** Карта, содержащая все квесты. */ # a# s( M6 K" v, C& p
private final Map<String, Quest> _quests = new ConcurrentHashMap<>();4 v; b! ?8 }4 T6 X6 O- B/ Q; B4 }
private final Map<String, Quest> _scripts = new ConcurrentHashMap<>(); ; \, O& u7 l2 E& b" W7 W& l, Z, v
0 v* [ M; v" [! ? R; x, l
protected QuestManager()* N/ ~- Q; `: [9 Z
{. p8 l- L' H- [( S3 T
} & B- o" Y3 H! V7 E2 L, ~: R( t
}
Скопировать код
4. Методы' |" w1 ]( D U$ v2 n; V% C( H Метод reload(String questFolder)" O! u: s8 C$ S* V
public boolean reload(String questFolder)# T6 V3 d* r3 i! x( c- {1 G
{ . N+ j& e( V- J3 g0 H
final Quest q = getQuest(questFolder); ' r7 L7 Y, [; ?& x9 Y
if (q == null)* N, l2 ~; l% u( b t& j2 n
{3 U. L* B" E! g5 P) }7 R
return false; 1 w; ]$ b J( S
}" A, r: L& D, L! t! Z) H" X# Z
return q.reload(); ) f( ]$ }: R( v$ r
}
Скопировать код
! w' W- ^" P! ]8 |# J3 c) a% X5 |! j8 o; n" t8 k* c
Метод перезагружает квест по имени папки, в которой он хранится.Если квест с таким именем не найден, возвращается false, иначе вызывается метод reload() у объекта квеста.- w: V. ]) \& Z" e Метод reload(int questId) 7 |& v: C2 C. U7 Y; m# J1 Z; m9 @; u C0 E8 ]" X; B- p
/** U& Y! h9 V: o) s X5 R0 v* B
* Перезагружает квест по ID./ G, X$ @8 E, z9 {7 U
* @param questId ID квеста для перезагрузки 8 T( ?9 A, v) S4 x. J6 u
* @return {@code true} если перезагрузка успешна, {@code false} в противном случае" \* g' L9 }" q4 e, F
*/2 c! K! x, Q% _
public boolean reload(int questId) 8 |/ K; N5 G8 ^/ M
{& @. }! w1 M; D6 |! i2 e
final Quest q = getQuest(questId);/ Q2 q( f+ l3 a- T. S2 m& P
if (q == null) 5 ]6 r7 k. {; C8 s2 J+ u- ]1 o$ J
{ ! I t I/ j% {3 r6 h# ]- R
return false;' B# r% z, `3 T' K. {
}3 Q* D% Y6 m9 D2 D" c, x
return q.reload(); - O A% i1 P t. l! q5 v
}
Скопировать код
Аналогично предыдущему методу, но перезагружает квест по его ID.! K6 _6 F j$ `
for (Quest script : _scripts.values())0 C3 a( z" N4 W. |; L4 T
{' E$ R3 ~' ~! w/ V( c4 v
if (script != null)' F/ s$ w/ `- l( T$ z
{ ?& `+ x3 _2 @* f! `. W
script.unload(false);& m) Z% a$ I& h$ r3 X% S4 {2 N
}! V1 r) b" ]. m2 B- g. A' L
}( }* H0 @+ j# O) a) i$ l. F& ]
_scripts.clear(); - Q* p" w+ p: W' x% x
}
Скопировать код
Этот метод проходит по всем квестам и скриптам и вызывает метод unload() для каждого, а затем очищает коллекции _quests и _scripts. . f8 g* A3 t; s# b6 b. t8 O" ^* E$ r
4 Y B, P( P( i1 G7 `$ J+ v a- w/ L Метод report() . @- A2 Q( D- J, U 7 F/ t ?) T3 o' H j/ F
/**( \9 b3 l M6 `8 p: T
* Логирует количество загруженных квестов и скриптов. 3 E) D. j. d* z5 o
Логика работыQuestManager управляет процессом загрузки, перезагрузки и выгрузки квестов и скриптов на сервере. Он поддерживает кэширование квестов и скриптов в картах _quests и _scripts, а также обеспечивает возможность их перезагрузки без перезапуска сервера.( C# G" z6 v, o( S* F( } ЗаключениеQuestManager.java — это ключевой элемент в управлении системой квестов и скриптов. Основная его функция — это управление квестами и скриптами, их загрузка, перезагрузка, выгрузка и хранение на сервере.' M9 j+ {% x) C& [$ L, G( w$ P* m& Y
2 x: J5 r. q- _0 C7 C; m6 H2 C* h, o 9 K$ `& y8 T9 o- } & J) m0 g0 r- U$ r2 P {
Добро пожаловать artace.ru - творческий сектор (https://artace.ru/)