Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius [Версия для печати] Автор: admin Время: 2024-9-21 10:39 Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius Гайд по основным Java-файлам ядра сервер L2J_Mobius # L1 f9 m& ^ q% T3 T$ |8 j9 V: |6 Q+ y/ h+ j q, i0 p2 [1 T3 C Разбор файла QuestManager.java: X4 J6 X4 g3 y3 Z9 D6 S: q
; z+ @& _3 u" x' f* `7 \! UЭтот файл управляет загрузкой, перезагрузкой, выгрузкой и хранением квестов и скриптов на сервере Lineage 2. В нём реализованы функции для управления квестами и скриптами, а также взаимодействия с движком скриптов. / x( D2 v- |; N( WОсновные элементы! O% A+ ~ z1 o6 ]. O: S4 A
Лицензия. c; t. |! J: }( b) U, b3 T/ M
Комментарии в начале указывают на лицензию GNU General Public License, что позволяет использовать и модифицировать код в рамках условий лицензии. ) W C, w3 d0 e+ u F% n7 O
Импорты' F6 l- u. B" C5 m1 s
. t ]( U9 K3 e2 ]( DQuestManager.java — управление квестами и скриптами. 4 `& C1 c0 A+ FПуть: \L2J_Mobius\java\org\l2jmobius\gameserver\instancemanager\ # D* M# m& P1 E% k& ^, G. C; _9 ^ _0 C
2 r& X; W4 |4 F4 A( |
Давай переведем и разберем код QuestManager.java по частям. Этот класс управляет квестами и скриптами на сервере L2J Mobius. В нем реализованы функции для загрузки, выгрузки, обновления и отслеживания состояния квестов и скриптов. / m6 T7 ~ q" l; ~$ @7 Y1. Лицензионное соглашение 0 T, i0 `) i. h( \
/* 4 z1 d* d; u \" u3 \0 e
* Этот файл является частью проекта L2J Mobius. c- ?8 _) W* G9 s+ n
* 0 A4 \9 X& K+ ?% D
* Эта программа является свободным ПО: вы можете распространять её и/или изменять" s; A+ A5 x2 q) e5 N
* её в соответствии с условиями GNU General Public License, опубликованной A, q2 |* p' y7 Q3 v) w
* Free Software Foundation, либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.4 N" p5 J+ a2 @' \7 }( K! C! W" u
* - U4 q8 c5 r/ A- \7 ^6 T& K q
* Эта программа распространяется в надежде, что она будет полезной, " Q8 U! i) F" w7 R
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии k) |) Q* g+ V2 o/ s5 @3 n% K
* КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.5 F" y% |( d. q
* См. GNU General Public License для получения более подробной информации.2 f& \1 F+ U2 t( v1 p" e
* 8 Q, H7 Z3 R# ~" c: ?( j+ ~
* Вы должны были получить копию GNU General Public License1 t: Y! z/ t! @ [6 `' Y
* вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>. % x7 Q, |& F& Z9 b
*/
Скопировать код
Это стандартный блок лицензии, который описывает, что этот код является открытым исходным кодом, распространяемым по лицензии GPLv3.; P* ]. ]4 ?& }! F0 N& \$ V
3 }9 X {# z& @ g& _; l
" }9 T1 x( d9 o( S% k' l' g+ o 2. Импортируемые библиотеки 4 ~- d5 O9 S" P 6 s2 K" Q p$ o" Y( f* a
package org.l2jmobius.gameserver.instancemanager;# |7 r! {& j9 X1 c# l- Y
# a' c! K6 p1 ?* z( x! t
import java.util.Map;% B& n+ [/ y& O* M1 N: h% J
import java.util.concurrent.ConcurrentHashMap;- F9 a) s( q3 A3 n( e- v8 z& y. E5 l
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 — менеджер для работы с игровыми скриптами.1 y% a* q8 I# v6 `! \) G3 Q
, w$ f4 }( m, _+ W0 y
3. Описание класса QuestManager! r8 C- X7 ]( m- N: K0 N
/** 7 I- g/ ^, J1 s/ j6 n
* Менеджер квестов и скриптов. P. ^4 U& F9 n8 T0 N- v+ F& b& o1 `
* Автор: Zoey76( L1 r b; g, U
*/ $ Y# V3 W4 q! c( {, n U
public class QuestManager% Z( W8 b" U* |& R% ~. F
{% l6 i) d( c% |6 W6 ]
private static final Logger LOGGER = Logger.getLogger(QuestManager.class.getName()); 6 T0 g* P' A+ P" F- B3 H
! T, K% M) q; ?- M* b
/** Карта, содержащая все квесты. */. T+ w" j; l! W w0 Z
private final Map<String, Quest> _quests = new ConcurrentHashMap<>(); ! [% U+ r2 W* q( s2 {" a$ I
/** Карта, содержащая все скрипты. */8 C r1 j* Q8 I! Q2 D. y* F9 g* Q
private final Map<String, Quest> _scripts = new ConcurrentHashMap<>(); G* H: \* [$ G- z6 R
4. Методы8 {) N* E/ Z, _" O Метод reload(String questFolder)* h9 Z9 w9 w" V2 U
public boolean reload(String questFolder) $ n1 F- C8 _1 j% Q0 k% i
{ 5 P! S1 }6 g( ^; |& q8 T
final Quest q = getQuest(questFolder);7 o {9 ]) b7 x( F7 h1 k
if (q == null)8 r v+ @4 i! c9 ]
{# I( J- ?0 y& u
return false; 3 l1 ]% q# }, {
} 2 y+ `, ^0 j5 U% u) \0 D
return q.reload(); 3 v3 y% L+ Y6 u0 t) S
}
Скопировать код
0 R9 }, Y. q. k5 a3 k L' s! _# Q5 H1 W H
Метод перезагружает квест по имени папки, в которой он хранится.Если квест с таким именем не найден, возвращается false, иначе вызывается метод reload() у объекта квеста. 0 Z2 J2 I* M& L! \; TМетод reload(int questId) 6 x' H6 [, E, c P0 h1 E J" l ^- g# o- C
/**! ~3 K3 [, Y# L! }$ k
* Перезагружает квест по ID. ( l* K }9 g3 n8 F5 ?9 H9 ?2 M) K
* @param questId ID квеста для перезагрузки! U6 @ t6 ^5 K0 Q+ m
* @return {@code true} если перезагрузка успешна, {@code false} в противном случае * M0 E% E# p9 ~4 i9 V; u
*/ / ]4 @) Y5 b! w. X
public boolean reload(int questId)+ v1 o, x x# B3 J1 b) r0 U! Y: z
{6 W5 ~% O) Y _9 u% V
final Quest q = getQuest(questId); ; C& q+ T9 j$ d) \ g+ U! p
if (q == null)/ ~' `9 |! N' ~, a: E6 w4 a/ |
{ % y! g% X0 k/ H! _7 W
return false; * [* _5 m6 y. s
} 3 k$ ~6 n. A% o0 w# n5 A; y
return q.reload();: X0 u/ J: M" b( M: h
}
Скопировать код
Аналогично предыдущему методу, но перезагружает квест по его ID. . E! D1 ?) B4 U5 L) G# y
/ T& G6 o6 k( U Метод reloadAllScripts()$ s, }( l: ^5 u. J
I; i6 x. G& v
/*** F- [5 X) x7 ~/ F! O, Q
* Выгружает все квесты и скрипты, а затем перезагружает их.; [9 Y/ I* p8 D3 V( z7 G* g
*/ 7 w% k/ h$ N# G
public void reloadAllScripts()0 o* o6 q- i) s l) z
{ 1 ]5 [1 t/ O- ]5 l4 c1 d
unloadAllScripts();; S( w# Z" ^. T- e
$ A/ k' K* H* [) |
LOGGER.info("Перезагрузка всех серверных скриптов."); 6 a# s9 C% ?9 D, O( ?8 q' H, i
try# D# v, X3 F1 T, o% \, G
{ % u/ E; \* P9 z' V( ?
ScriptEngineManager.getInstance().executeScriptList(); $ L c7 ~) z5 N: D& T0 a
} 5 Z) C' {) T. F/ W) r
catch (Exception e) 5 ~5 h/ |& p! `
{ . N7 l$ w+ B7 c/ p' [/ v
LOGGER.log(Level.SEVERE, "Не удалось выполнить список скриптов!", e); 3 }) `" X7 p' Z0 `* o( D
} / S" r7 J5 N: g; d' H
7 I# Z1 ]/ c) q. q$ g
getInstance().report(); 0 z+ ?; b6 {" u. M. \% a+ U
}
Скопировать код
Метод unloadAllScripts(): e8 R: I1 \% P$ K9 n
2 e% v, ^! H3 A8 c8 c, C: i- L
/** & F( v" n) X) m8 }
* Выгружает все квесты и скрипты.9 b7 d1 o6 ]% C/ l
*/' R. P8 @, i. K2 k- R, ]
public void unloadAllScripts()' Z2 R8 r' s7 D# @+ ~ r' n3 L
{ t. I) z7 U# Z3 J7 w, K
LOGGER.info("Выгрузка всех серверных скриптов.");6 e* e" ~ k' ?' y% t7 C
' g2 f; ^: @) n; Y+ k9 h
// Выгрузка квестов. ; F' r, ^/ O) u ]
for (Quest quest : _quests.values()): }& t% c5 f: G$ Y
if (Config.ALT_DEV_SHOW_QUESTS_LOAD_IN_LOGS): `! Q% A# ?: p/ T( n3 `
{ ( v# H/ N6 e7 f3 Q4 c" g2 d4 h% d6 p
final String questName = quest.getName().contains("_") ? quest.getName().substring(quest.getName().indexOf('_') + 1) : quest.getName();( t4 m. B' V$ J
LOGGER.info("Загружен квест " + CommonUtil.splitWords(questName) + ".");; s+ j$ K0 o. i1 B) U
} l& {1 \# V1 t( F, j
} ; _4 \+ n5 v0 B
``
Скопировать код
Логика работыQuestManager управляет процессом загрузки, перезагрузки и выгрузки квестов и скриптов на сервере. Он поддерживает кэширование квестов и скриптов в картах _quests и _scripts, а также обеспечивает возможность их перезагрузки без перезапуска сервера.* l* h5 \( C7 M% |) q: S6 m ЗаключениеQuestManager.java — это ключевой элемент в управлении системой квестов и скриптов. Основная его функция — это управление квестами и скриптами, их загрузка, перезагрузка, выгрузка и хранение на сервере. " _1 p% {% j% m- B8 I$ [ F& |: E; V' Z/ y9 H$ H' ^+ x% C
1 U" y- T( W. a' S , k, ?0 \! |8 k! X4 S
Добро пожаловать artace.ru - творческий сектор (https://artace.ru/)