Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius [Версия для печати] Автор: admin Время: 2024-9-21 10:39 Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius Гайд по основным Java-файлам ядра сервер L2J_Mobius 6 T# o; z! L2 }* B# D9 a8 ?; s3 n# D7 B8 B Разбор файла QuestManager.java & ~" h/ T9 k J) U; O9 A: [' `9 X ; ~3 t7 N8 H- `: B2 G) M8 \Этот файл управляет загрузкой, перезагрузкой, выгрузкой и хранением квестов и скриптов на сервере Lineage 2. В нём реализованы функции для управления квестами и скриптами, а также взаимодействия с движком скриптов.7 r |2 d$ [- ]2 W: ]* D Основные элементы! ?, `; I5 }0 U
Лицензия ; ^7 j" k! `8 C
Комментарии в начале указывают на лицензию GNU General Public License, что позволяет использовать и модифицировать код в рамках условий лицензии. # P+ j4 {! {: v5 v
Импорты ) F6 w! n) @, V' k# ?! C9 X& u: F
/ T" g5 D! E5 j5 G4 `QuestManager.java — управление квестами и скриптами. 3 o/ y- u2 F* Z) x: y% H$ CПуть: \L2J_Mobius\java\org\l2jmobius\gameserver\instancemanager\9 R. B6 }7 n4 M! e# t4 @
- _6 J7 f" k0 u* b$ H/ y8 z( X
; I" W" H; s# cДавай переведем и разберем код QuestManager.java по частям. Этот класс управляет квестами и скриптами на сервере L2J Mobius. В нем реализованы функции для загрузки, выгрузки, обновления и отслеживания состояния квестов и скриптов., f$ X% S2 B; V7 w 1. Лицензионное соглашение + N2 \8 S% N& @& w# i) ?
/*. F- U* d- w* x8 K4 C
* Этот файл является частью проекта L2J Mobius.$ H' M& i- D) \1 N
* : z+ k: M$ a3 N. }' c5 e
* Эта программа является свободным ПО: вы можете распространять её и/или изменять( e' H1 z# i5 ]2 B8 s1 r6 }
* её в соответствии с условиями GNU General Public License, опубликованной 9 |: ]5 _% Y; ]% v' u8 G
* Free Software Foundation, либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии. 0 S: H) m0 j4 a$ k8 s- s0 b( u
* 0 { V4 x$ P* z& h
* Эта программа распространяется в надежде, что она будет полезной, ' ?! B/ {0 @5 }. Z. C7 n9 }; E
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии 5 W1 c: m/ o5 G
* КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ." h* P2 G5 C$ u# M0 l* U
* См. GNU General Public License для получения более подробной информации.7 w, [$ u4 i# ^/ w* X+ w' H
* & i% n7 D# [4 r- s6 f# \& r, [
* Вы должны были получить копию GNU General Public License( @% o" i9 O" d1 V- \# o1 h
* вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>.1 @$ ?0 y+ x8 T4 Y" @" @+ p6 \
*/
Скопировать код
Это стандартный блок лицензии, который описывает, что этот код является открытым исходным кодом, распространяемым по лицензии GPLv3.5 D n V0 t! Z
+ g [# E; P3 _5 u1 u
- }# z1 e2 h5 m7 b5 ] 2. Импортируемые библиотеки 8 S1 w% R; {$ z* l- G2 I" o: [' ^: C7 [/ y2 E5 v, w, m* J/ H
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 — менеджер для работы с игровыми скриптами.8 a" X$ [! y8 J2 M A
* V( [. }( k6 U* ~7 i! B3. Описание класса QuestManager3 \/ V& s8 M; E! V
/**, i* Q2 f# e m% O# T& w
* Менеджер квестов и скриптов. ) h$ x6 [, c+ w" [ p
* Автор: Zoey76/ h; C! [2 _0 H1 y) W" q
*/8 o4 R7 q* Q( q5 C
public class QuestManager ; X" g# i$ E. c9 x* t; V
/** Карта, содержащая все квесты. */ / Q3 [& r1 r; t
private final Map<String, Quest> _quests = new ConcurrentHashMap<>(); $ P1 S/ i% d# i, B/ C2 R+ t
/** Карта, содержащая все скрипты. */# H; d, Y* `# [3 t5 P, K
private final Map<String, Quest> _scripts = new ConcurrentHashMap<>(); 6 v. L$ S! X, C6 q2 |! u
# O# ~ R w* K
protected QuestManager(); I0 A' }; h. q; @
{ 5 K& n6 L( Z9 {
}; @6 }7 P# D, R" u S
}
Скопировать код
4. Методы - @) p7 I% y2 G3 Q- B! RМетод reload(String questFolder)2 ^5 h3 l0 Y% _. R
public boolean reload(String questFolder)/ N5 p) Z/ m- d2 u
{# f8 Y+ W- i, b# e1 |
final Quest q = getQuest(questFolder);( U) G; Z, `5 s
if (q == null) + A! N1 [% L6 Q" O
{ 3 d. E4 R( S; W# x9 b
return false;& M3 u( I" d1 U0 c
}7 ~0 L$ I6 n a. y- F
return q.reload(); 5 }, l8 q& s) j) N7 X
}
Скопировать код
x. ~4 E- x0 x/ c8 ^) q% C% N1 b/ ~7 Q+ x: U3 h9 l( u
Метод перезагружает квест по имени папки, в которой он хранится.Если квест с таким именем не найден, возвращается false, иначе вызывается метод reload() у объекта квеста. 0 U5 @& |6 O6 ~/ e7 r; IМетод reload(int questId) 0 Q( M9 ?/ D# v2 q e! f) m- H# K 1 q- A4 _8 }$ w8 _# t% C
/** ) I9 ?0 h* X0 B. M2 l+ ?6 g3 p
* Перезагружает квест по ID. 0 `) a. O- [: H" y, D- r& r
* @param questId ID квеста для перезагрузки' D5 R9 @6 B# G1 J6 R, Q7 j
* @return {@code true} если перезагрузка успешна, {@code false} в противном случае$ n) ]" n* R0 E/ w8 @
*/$ E; a& |: H9 P# p: s0 U3 m
public boolean reload(int questId) 8 e% t; q9 U" b7 i S
{9 T [9 R( C. L7 }9 ^0 W' M
final Quest q = getQuest(questId);2 ?' P4 ?& c% b
if (q == null) ( R0 ^' p# Y, I
{ , Y7 p) y( n8 c/ Z- V g$ @
return false; 2 N {* `& ?2 c" W4 c8 R
} ; b0 Q- I% T, O: I" V
return q.reload(); & n" k N- e% C& ~9 H* y4 J* r
}
Скопировать код
Аналогично предыдущему методу, но перезагружает квест по его ID. \( L; s( r( y+ S2 Q7 W
$ e% C5 a8 r+ Z5 s Метод reloadAllScripts()3 b R) L4 \9 `$ g( d# a4 h
( }- `5 M, S% }' ]/ B5 L7 m
/** ' b# w; I n5 D7 \1 A
* Выгружает все квесты и скрипты, а затем перезагружает их. ! }) e* _& a# c1 f
*/ " a# f7 Z6 l( u% d: `: X
public void reloadAllScripts()$ d3 Z- y" g6 h' W* X. I' R
{ 1 Q9 E- m& e( D& _" i( B
unloadAllScripts(); $ E: r* o" Z, O6 j/ q, l" G/ L
+ Z/ g9 C+ d0 t1 w
LOGGER.info("Перезагрузка всех серверных скриптов."); / J6 V! I0 G5 K$ P" ]6 L
try( v, A* u; t/ U) s7 a
{ : d* R. b* E0 `* M" i1 U
ScriptEngineManager.getInstance().executeScriptList();& x7 P; w+ C+ Q$ ~# g* V5 z
}. r8 t+ L6 c4 P7 ~- o9 w
catch (Exception e) # V" Z! ?- _( \
{" K) W. I) K0 P4 q& C
LOGGER.log(Level.SEVERE, "Не удалось выполнить список скриптов!", e); + I' G. U9 H; U3 r
} ! V, \2 y! }: `# P
+ a9 n5 w9 n! m3 Y G3 \. J& |
getInstance().report();3 z" }/ J' A$ A& O5 D. J" H/ D% C
}
Скопировать код
Метод unloadAllScripts()8 u- `/ x2 j# N& l; b. x
0 c+ G( }- F- R
/** 2 Y7 T; e" t/ N% g Z
* Выгружает все квесты и скрипты.& k& Z/ e) j9 p4 p( Z
Этот метод проходит по всем квестам и скриптам и вызывает метод unload() для каждого, а затем очищает коллекции _quests и _scripts.' s: W1 h! _4 @: C D* Z0 I
3 _; b* K5 n; A* h; M1 i Метод report() ' D" e% s. j* X: D$ Y/ x; H9 c% y" p
/**$ ~; g' i1 y }" N
* Логирует количество загруженных квестов и скриптов.3 a& R" V& p: S
if (Config.ALT_DEV_SHOW_QUESTS_LOAD_IN_LOGS) 7 A2 _4 n3 H0 h, W
{ 2 E+ A0 Y! n) o/ N4 t
final String questName = quest.getName().contains("_") ? quest.getName().substring(quest.getName().indexOf('_') + 1) : quest.getName();/ m) X8 A9 P( H2 G- \4 ~
LOGGER.info("Загружен квест " + CommonUtil.splitWords(questName) + ".");+ C9 z) A% f. z* p% t$ v
} 3 V# X2 v) K' f2 ^$ C) I/ q
}$ w& F8 ^1 w+ N# S) ]
``
Скопировать код
Логика работыQuestManager управляет процессом загрузки, перезагрузки и выгрузки квестов и скриптов на сервере. Он поддерживает кэширование квестов и скриптов в картах _quests и _scripts, а также обеспечивает возможность их перезагрузки без перезапуска сервера. ( l( Z6 Z; C' G( @* g4 w# |/ WЗаключениеQuestManager.java — это ключевой элемент в управлении системой квестов и скриптов. Основная его функция — это управление квестами и скриптами, их загрузка, перезагрузка, выгрузка и хранение на сервере. ! c* E$ ^3 Z1 {& B5 j; u/ N # t8 I' }) H6 O+ G) ]( c % T8 X8 G+ H/ Y' M 2 z8 X/ X8 A, G E; C
Добро пожаловать artace.ru - творческий сектор (https://artace.ru/)