Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius [Версия для печати] Автор: admin Время: 2024-9-21 10:39 Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius Гайд по основным Java-файлам ядра сервер L2J_Mobius! G/ G9 p3 t6 U% G: i* p
% {% N, f9 g% }8 [0 @ \. n% D; zРазбор файла QuestManager.java ; @! `" F* o9 U3 ^* N - U, u/ u6 q* vЭтот файл управляет загрузкой, перезагрузкой, выгрузкой и хранением квестов и скриптов на сервере Lineage 2. В нём реализованы функции для управления квестами и скриптами, а также взаимодействия с движком скриптов.6 q' x/ z& k0 Y1 O& c% E+ g% R1 H, e4 Q Основные элементы* w% a- n/ V# W. G/ w
Лицензия9 F& m2 |+ ]& F& l, y3 k
Комментарии в начале указывают на лицензию GNU General Public License, что позволяет использовать и модифицировать код в рамках условий лицензии. + Y6 \$ h8 \% W1 J S% t! D
, T2 ^7 H# K1 \3 N }1 c3 r* {1 Z+ i) Q# U6 }0 W
Давай переведем и разберем код QuestManager.java по частям. Этот класс управляет квестами и скриптами на сервере L2J Mobius. В нем реализованы функции для загрузки, выгрузки, обновления и отслеживания состояния квестов и скриптов.- Z( S) I. T) h* M 1. Лицензионное соглашение % B$ h( v0 ]( ~2 _
/* : P5 l) d; x% y: d
* Этот файл является частью проекта L2J Mobius. 2 r; s+ ^' y& b) B* z
* - }* |6 t1 g* v4 N3 S6 R
* Эта программа является свободным ПО: вы можете распространять её и/или изменять 1 E% h5 l& [% h3 V
* её в соответствии с условиями GNU General Public License, опубликованной A# r* G( J& f6 \4 @
* Free Software Foundation, либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.) G. l) B {" l) B" t
* ( }& l0 z% K5 Y+ u
* Эта программа распространяется в надежде, что она будет полезной, g1 O, V+ K- Q7 S8 {3 e0 g
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии * p3 B3 x) f, Q$ B/ `* v9 N/ _) E, M
* КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. 1 C) f, | Z: l! m7 c5 x+ P' o1 b8 y
* См. GNU General Public License для получения более подробной информации. & W8 ^" _3 `( ^ `
* ' r% c0 b9 p; \% ^5 L. P( O: f
* Вы должны были получить копию GNU General Public License! i4 L% L4 v) [4 J; F4 z; `1 x; Z
* вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>.+ k3 |% T! P1 h8 }
*/
Скопировать код
Это стандартный блок лицензии, который описывает, что этот код является открытым исходным кодом, распространяемым по лицензии GPLv3. & m1 k G8 f$ k' l) H. {: A7 K1 @
1 i& o5 u% ~( E6 r+ A' q2. Импортируемые библиотеки ! X& f: r! B- { F5 ^ 5 {$ [+ |$ }, h
package org.l2jmobius.gameserver.instancemanager; " K% @2 S4 ~$ ?4 u' 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 — менеджер для работы с игровыми скриптами. $ f, O4 K5 x! P: I+ A) [/ U- M2 O5 r J, n8 M6 C
3. Описание класса QuestManager' U/ p# t; Q" Q0 S. f3 S
private final Map<String, Quest> _quests = new ConcurrentHashMap<>(); . e& c9 i- J8 p- N
/** Карта, содержащая все скрипты. */ 1 x6 r8 A, D) ^$ Q" u
private final Map<String, Quest> _scripts = new ConcurrentHashMap<>();$ o. i4 i' b& T
/ }8 u, H+ ^; w
protected QuestManager() 5 B' y+ N* u; T1 ~
{ & y* g4 ~" u2 o2 @# o' n' H
}5 S: v7 ~& R, d# B) A/ y5 g
}
Скопировать код
4. Методы " C5 a9 R+ A, m9 V ~; |8 a$ wМетод reload(String questFolder)5 y% E( W" c& x2 B# z, j7 C& S
public boolean reload(String questFolder). ~3 u r+ t [5 I7 S, m
{ 7 t, b# ]2 \# n
final Quest q = getQuest(questFolder); 6 n: D2 j8 W! ]. d& m; D$ H" }
if (q == null)# X" c9 F$ v* }
{ T9 w; j) I$ J/ I* Z' |# S
return false;* o( u: w, G* Y$ G
}0 J1 Z- n4 I/ Z8 ?
return q.reload(); U) {# T0 ]& I9 t6 T0 R
}
Скопировать код
) g! g: e9 u' H1 s% \$ I2 R9 [/ O B" y4 n1 l s2 @
Метод перезагружает квест по имени папки, в которой он хранится.Если квест с таким именем не найден, возвращается false, иначе вызывается метод reload() у объекта квеста.$ B8 A) `- a/ N+ V) _2 w/ a Метод reload(int questId): A2 ~! I5 M- K7 y. ^5 t
# n9 o! b8 T# F' t
/** / ?( p, h+ @5 v) a/ e
* Перезагружает квест по ID. ! R4 K9 R! g1 t
* @param questId ID квеста для перезагрузки @4 b# S& ?) x% T: G- X& Q
* @return {@code true} если перезагрузка успешна, {@code false} в противном случае / F4 ?7 o1 u$ n- k; p2 X& }5 c
*/7 u" J- ], ]: X( E0 ?, _
public boolean reload(int questId)5 C# N! [+ h9 V$ W
{ 6 k9 z7 m- ]: l6 B3 ?# f$ H- q$ i
final Quest q = getQuest(questId); " ^ M, ], B% r: G2 j) a6 `% t
if (q == null) + H7 g" y0 k. y& E; B5 b
{ $ O# {' Z2 C6 D+ I6 S; Z7 F
return false; 6 R1 g; T: t8 I5 E
} 7 Z" B; S0 n7 Q, \ T
return q.reload();" \" V* N D& z* C* ^. z% Q" X
}
Скопировать код
Аналогично предыдущему методу, но перезагружает квест по его ID. 0 L; e# {3 f+ Y; G& ]1 ]
9 T, P5 N+ V3 B7 ]" x; @6 Z6 O Метод reloadAllScripts()* W) u, A5 C* o3 q9 X
3 @& k/ S5 ?$ T8 D
/** * h* v( ^# L0 X U+ [( L5 t, W
* Выгружает все квесты и скрипты, а затем перезагружает их.+ z- c; }% k V8 b+ m0 [9 C2 I
*/ ; j6 t; n/ H. q6 X& K& |
public void reloadAllScripts()8 O3 y2 h9 R8 J5 ~: x
{& } |8 g. j. R( `
unloadAllScripts();- Y( n( U8 ?' Y- F% p2 D
$ B9 }1 t+ p! J$ L) O1 I
LOGGER.info("Перезагрузка всех серверных скриптов.");: r; k, t# {* a
try3 r& F/ ]8 h; k; C. k" p
{ / j; n6 G; V. _6 ^! g* t( v- w
ScriptEngineManager.getInstance().executeScriptList();, p' d* c+ U3 c+ `
} # h+ Z, D. N* Y$ B( C9 `: z
catch (Exception e)! L* K; o l) X3 c- H/ \8 }9 T
{3 S# o# u0 Q- u
LOGGER.log(Level.SEVERE, "Не удалось выполнить список скриптов!", e); * t" \( k( e* l) K, v5 O+ y
} + F O& o2 K$ N& {0 Y
5 d3 J+ q( A- y) {4 \( d4 `0 }
getInstance().report();; Z# F' A' T( @/ t
}
Скопировать код
Метод unloadAllScripts()/ x% F- v8 [; }1 N
5 z: L) p8 d6 P4 i T: y
/**! R( [: ?- i" b) \
* Выгружает все квесты и скрипты. . m+ k' J" o$ C! M# E8 y& ^9 N/ O
*/ 6 b5 j5 _/ ]! M6 K/ s
public void unloadAllScripts()" a: @5 h) F! y; h3 }5 i) e* i
for (Quest quest : _quests.values()) 4 o2 P& Q5 q. ]4 v
{ + D8 V9 F4 F# l& ^3 S
if (quest != null) . s& j( ~: u Z7 h% `/ z
{2 ]' H* l/ ^- Q p- Y; J: a" l
quest.unload(false);! g! _% F& I4 M- Y) O" ?
}- g2 w s0 G1 l# i/ p
} 8 p/ z/ g3 \8 a# M7 T4 ?
_quests.clear();8 G0 s' {1 G! X# V; D
// Выгрузка скриптов. : ~) I# r7 t' N) V- ?
for (Quest script : _scripts.values())- v7 s8 T+ v; }7 F
{( A1 T' Q0 [, Q, F0 n5 }" r+ u
if (script != null) 2 A; u+ A' g+ u1 C% b
{ . y4 Q* @2 B. a
script.unload(false);1 |+ l7 L3 P' X9 @
}, o( J# ~- c: u2 W+ R
} 9 U$ c% D) G1 |% x) ^) k
_scripts.clear(); b2 Y; f* z% Q+ M8 I0 ?
}
Скопировать код
Этот метод проходит по всем квестам и скриптам и вызывает метод unload() для каждого, а затем очищает коллекции _quests и _scripts. ' h$ P, p5 K- {: C6 C# T
, G, {2 o- l1 x; yМетод report() * B- p0 A3 c7 k. L. M $ E' O, A n% B
/**6 X" `' ]( n3 @2 E' |3 `- c- g t
* Логирует количество загруженных квестов и скриптов.$ b3 A8 a7 O: P$ X @ K
LOGGER.info("Загружен квест " + CommonUtil.splitWords(questName) + "."); 1 M2 b1 Z/ @4 |* ~) c% S W5 i
} & Y# r( u; r% e0 X4 o/ s
} ( D% H; J& k6 g2 N! R4 k# {6 [
``
Скопировать код
Логика работыQuestManager управляет процессом загрузки, перезагрузки и выгрузки квестов и скриптов на сервере. Он поддерживает кэширование квестов и скриптов в картах _quests и _scripts, а также обеспечивает возможность их перезагрузки без перезапуска сервера.7 Z1 n( U7 L& {! ` ЗаключениеQuestManager.java — это ключевой элемент в управлении системой квестов и скриптов. Основная его функция — это управление квестами и скриптами, их загрузка, перезагрузка, выгрузка и хранение на сервере.% m! z4 D3 ^ N: |0 A- x
+ U$ A2 M! |# \: U' f. v $ e' p* u! ~5 _. }; \5 c/ n - {7 F* g: @/ g9 q' z% |: v
Добро пожаловать artace.ru - творческий сектор (https://www.artace.ru/)