Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius [Версия для печати] Автор: admin Время: 2024-9-21 10:39 Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius Гайд по основным Java-файлам ядра сервер L2J_Mobius; D0 x; n! ?2 j4 k; L5 v
- w" r f* H# N- F6 ~ Разбор файла QuestManager.java7 p4 ]& ]# @; b+ w/ @+ `
1 h0 ?5 W& o# ^
Этот файл управляет загрузкой, перезагрузкой, выгрузкой и хранением квестов и скриптов на сервере Lineage 2. В нём реализованы функции для управления квестами и скриптами, а также взаимодействия с движком скриптов. 0 _* G0 e6 W4 n! cОсновные элементы . k: B& d. M. `* T
Лицензия8 \: g) h, H$ t @- U: E. N2 B; |
Комментарии в начале указывают на лицензию GNU General Public License, что позволяет использовать и модифицировать код в рамках условий лицензии. : P7 r- w s' B/ G/ x$ ]0 `/ s
Импорты ! J8 L" H8 I/ q3 U" o2 I" C
9 Y2 x( S, S( z3 L% \/ mQuestManager.java — управление квестами и скриптами. " ]8 T0 q+ q, x0 @/ h$ f8 HПуть: \L2J_Mobius\java\org\l2jmobius\gameserver\instancemanager\ ! N/ @1 E, S! d5 F; V# `5 o7 F: g ; m* v7 w0 L7 @0 { & j5 C6 O7 y, R4 ^, dДавай переведем и разберем код QuestManager.java по частям. Этот класс управляет квестами и скриптами на сервере L2J Mobius. В нем реализованы функции для загрузки, выгрузки, обновления и отслеживания состояния квестов и скриптов.' ?+ Q% P, |5 D, V8 | 1. Лицензионное соглашение 2 \7 I& y/ O% c0 N7 _
/*3 H: @9 Q6 U# l6 \/ V
* Этот файл является частью проекта L2J Mobius.% [; `2 e; x& T6 S* R& s
* 6 g A* t: O7 S7 @) p
* Эта программа является свободным ПО: вы можете распространять её и/или изменять : P; U' s1 U, q/ @" l3 M8 l* c
* её в соответствии с условиями GNU General Public License, опубликованной* _: a0 [/ m- W# X! p, S
* Free Software Foundation, либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии. * L( k s4 w6 i
* 0 b$ S5 P k% H& E5 j
* Эта программа распространяется в надежде, что она будет полезной,* b4 }! Z8 @, q/ l% |# D; m
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии 5 x) H6 _, Z6 e) k9 r0 I9 W
* КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.* X4 E* u4 I" E8 L# D+ u' W+ y
* См. GNU General Public License для получения более подробной информации.1 d7 L; U0 c3 b5 {
* 2 z( y9 S7 `' N; T" h i8 b1 Z
* Вы должны были получить копию GNU General Public License 4 G# I0 x/ G8 s
* вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>.2 r4 |* }6 X+ d, }! B$ L
*/
Скопировать код
Это стандартный блок лицензии, который описывает, что этот код является открытым исходным кодом, распространяемым по лицензии GPLv3. a6 `8 z; p' w. \( {
9 B) z; g) l: y. Y# d2 [5 o1 i 8 k0 i s/ y# M3 v2. Импортируемые библиотеки : k# q) S6 v5 |+ E 3 f* d" Q& p! y! Y/ B
package org.l2jmobius.gameserver.instancemanager;) X, h N( `4 v. ^8 i4 y6 \3 {: W
2 _9 S8 Z# |) d( p& e
import java.util.Map; ' p. K9 y7 J! p
import java.util.concurrent.ConcurrentHashMap;8 U& f9 i+ B6 |, @" Y- ] x H2 C
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 — менеджер для работы с игровыми скриптами.5 D& F$ r k1 V ^, Q) u
. y! f2 [" m) t6 S; _* D0 f3. Описание класса QuestManager : Y( h- P( M: o: C0 p
/**' W. L& E3 }5 y: x z
* Менеджер квестов и скриптов.# d0 R! T+ T0 V9 T: A9 V
* Автор: Zoey76 + T$ x9 K# ?& ~- D3 t- ~: A% v9 H
*/# L* ]7 P" j0 z
public class QuestManager. D) n5 q( z ?4 D, f, F6 S5 c' ^
{ ) d& D3 I) U! z# {. S* p
private static final Logger LOGGER = Logger.getLogger(QuestManager.class.getName()); ( E' f7 O* _& |5 S' S4 _/ }$ V% f
: T3 D; q4 |6 y0 R) ~' K3 |% I; \
/** Карта, содержащая все квесты. */# W( R& @" x1 l
private final Map<String, Quest> _quests = new ConcurrentHashMap<>(); " i& L' [6 M* W; O
/** Карта, содержащая все скрипты. */% B, l- E8 R" c! S
private final Map<String, Quest> _scripts = new ConcurrentHashMap<>();' `# C) `' k1 M2 Y0 l% P0 v
. l( ?6 T: L& Q- L" I
protected QuestManager()( y- C' N$ c. r) M H( F! A$ e$ @
{ C8 c# k* {) [
} + `# J& W8 c9 q9 z
}
Скопировать код
4. Методы, x; g Q& X9 [ Метод reload(String questFolder): ?% D6 _! o6 {) k4 D! j; y: Y
public boolean reload(String questFolder)6 A% n. W1 g2 @- B8 G$ q9 F
{) {( t# `! M0 s
final Quest q = getQuest(questFolder); 6 \4 J3 [% Q) [" V
if (q == null)) D3 d" Z+ }8 Q; ^( I* F5 ]: c& v
{% E8 q- L+ j8 h# ~# |" `
return false; 3 n+ G" A- w# K6 Y/ R0 N/ d" c. l% s! B
}& E% v! _/ i9 d$ l8 v; ^
return q.reload();1 d# c1 g5 I: _3 H. _5 ^
}
Скопировать код
/ |1 B0 C) D P1 E1 i4 ? D9 D' L6 f5 c4 XМетод перезагружает квест по имени папки, в которой он хранится.Если квест с таким именем не найден, возвращается false, иначе вызывается метод reload() у объекта квеста.6 d# G$ z1 f5 C) q, I$ j Метод reload(int questId)3 n2 s) S* b! N$ g# Z& M5 O
. B& Q! v: H7 p& |
/**2 ?+ k, p1 ^) Q& f/ T
* Перезагружает квест по ID.& r3 Z9 V2 |7 W
* @param questId ID квеста для перезагрузки+ X. F8 U; h" _' |' O% D6 P7 ~
* @return {@code true} если перезагрузка успешна, {@code false} в противном случае- b* w& {4 M% T/ F5 ~: q; m; H
*/ 0 O/ E1 [$ r! P/ Z
public boolean reload(int questId)# G" k/ ~3 H/ E0 H
{ , K) Y+ }8 _" K+ P k* H
final Quest q = getQuest(questId);2 I; S" O& A) v# [
if (q == null)7 t/ m) f/ O' i' }4 u' R* Q. _
{ 3 m2 W, s% n4 T3 ?# L$ u
return false; 2 w1 V( |- O4 H6 b; B, v. c
} & V+ \' D: z$ g( P' X
return q.reload();6 F3 k( G5 f5 K) k
}
Скопировать код
Аналогично предыдущему методу, но перезагружает квест по его ID. ( [) U' H* E# ?7 s% ]
4 t/ k) e% v2 z @- ?! VМетод reloadAllScripts(). A- o6 l1 V4 Z0 j& |8 K
0 E# J7 u! ]! `) _4 [+ L2 X
/** C' |& v/ ~( c2 l
* Выгружает все квесты и скрипты, а затем перезагружает их.& g2 d$ t, C9 V7 f( G7 E
*/0 s) q& A4 L3 H [
public void reloadAllScripts() 2 t2 j/ ^; d, n. n' N
{8 e7 y+ Y( y5 _6 e$ Q
unloadAllScripts();3 o. u) Z. x% I0 j7 g
: F4 _5 D! n- R: a0 i, T- W
LOGGER.info("Перезагрузка всех серверных скриптов."); / W! x+ d. ]$ G; [/ M7 x! g
try % D- L$ _8 G; g( d
{! ~$ S5 ]2 E, ^1 ~
ScriptEngineManager.getInstance().executeScriptList(); ( c) J; b% x2 q/ u4 E1 h
} 3 P0 L3 x7 @4 n$ q5 F. k
catch (Exception e)% H3 N& c4 o9 l+ S6 ^ l- q
{/ k, P: D$ d6 o
LOGGER.log(Level.SEVERE, "Не удалось выполнить список скриптов!", e);% ]. I, j+ M1 ^( N2 H# }
} " b6 G+ Z# G2 v! h
( [( g2 i( L! |3 W3 V7 ?( l6 Y+ K
getInstance().report();/ q. f/ P8 }# p ~- h
}
Скопировать код
Метод unloadAllScripts()6 G3 N) k I" v5 K: ]8 _5 @) [) F2 q0 i
6 j. S, }4 \0 p* M/ ?( b# Z
/**& i6 V" F L2 Q& F8 B# g5 \
* Выгружает все квесты и скрипты. ( b5 j* E0 R! W4 w2 ^2 P f
*/! F5 p6 E2 s; u: j3 N4 _
public void unloadAllScripts() * V: U4 n K' [- O4 u
{: k7 ?% B/ x1 A: S+ \9 K! d- Z" i
LOGGER.info("Выгрузка всех серверных скриптов.");0 C6 `7 @$ {/ G; a
* u( t8 e9 n1 x. `1 T
// Выгрузка квестов. * x' O3 y& [) d6 Q/ l9 `; L
for (Quest quest : _quests.values()) : I( H' u6 A* {1 U" m
Логика работыQuestManager управляет процессом загрузки, перезагрузки и выгрузки квестов и скриптов на сервере. Он поддерживает кэширование квестов и скриптов в картах _quests и _scripts, а также обеспечивает возможность их перезагрузки без перезапуска сервера. # p8 S5 o3 c8 M5 K5 r4 R6 [ЗаключениеQuestManager.java — это ключевой элемент в управлении системой квестов и скриптов. Основная его функция — это управление квестами и скриптами, их загрузка, перезагрузка, выгрузка и хранение на сервере.) c6 B- |6 T3 {8 \. B
! w- ~2 j& t- n! c- ?! x# W( _
" j2 f+ V0 D; @+ e/ w" U) M Y) A* C7 f, m- o, m
Добро пожаловать artace.ru - творческий сектор (https://www.artace.ru/)