Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius [Версия для печати] Автор: admin Время: 2024-9-21 10:39 Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius Гайд по основным Java-файлам ядра сервер L2J_Mobius; o; O( G( m- B, k1 j
) [* `$ ^/ H- p: C# x ?7 \Разбор файла QuestManager.java9 O9 P( d' I' ~) L+ J7 l) c4 H
/ \8 a d/ O& @" ~Этот файл управляет загрузкой, перезагрузкой, выгрузкой и хранением квестов и скриптов на сервере Lineage 2. В нём реализованы функции для управления квестами и скриптами, а также взаимодействия с движком скриптов.& i1 Q g0 V, w: I Основные элементы. q) L6 `" e& r2 e, [3 R+ z3 |
Лицензия s7 u( _4 ?6 a8 T
Комментарии в начале указывают на лицензию GNU General Public License, что позволяет использовать и модифицировать код в рамках условий лицензии. 3 C4 F+ b" Y- F% E
Импорты" \: U A# h V1 B
. Z) @3 {( \4 |: s$ \. |QuestManager.java — управление квестами и скриптами. " B. q$ J8 \$ ZПуть: \L2J_Mobius\java\org\l2jmobius\gameserver\instancemanager\4 T: ^" Z6 [+ ? Y3 @! Q& r7 y
. z1 ]+ q9 E/ R. c+ A" O: r N5 m: s/ _& ?4 i
Давай переведем и разберем код QuestManager.java по частям. Этот класс управляет квестами и скриптами на сервере L2J Mobius. В нем реализованы функции для загрузки, выгрузки, обновления и отслеживания состояния квестов и скриптов. 7 t$ d6 O6 r( t. ^, z A. F4 j# K1. Лицензионное соглашение ; a* x% n h* x+ B$ L
/* " S6 y/ y5 z7 B/ N4 K9 ?
* Этот файл является частью проекта L2J Mobius.& ]& K2 Q0 A( y- n6 U3 V" S7 W' K
* 1 F5 S8 e2 S) d
* Эта программа является свободным ПО: вы можете распространять её и/или изменять% o) m1 V4 g8 ]
* её в соответствии с условиями GNU General Public License, опубликованной ( z- B' ?$ S: |2 n% T- x+ e
* Free Software Foundation, либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии. ) F/ k) i5 k- b' R9 `$ m
* 6 v" K" M& V7 a$ @
* Эта программа распространяется в надежде, что она будет полезной,* u8 _3 y1 V% z4 t( O
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии 3 n/ Y3 h6 e" x1 m
* КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.' ]/ q. l2 O! t& e
* См. GNU General Public License для получения более подробной информации.+ U8 S4 Q. e6 ~; E3 A
* 9 v% ?0 m9 Q1 R' e7 F0 d
* Вы должны были получить копию GNU General Public License- d8 m6 X' h$ X1 V
* вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>. 8 p! T% J$ k! j* {; q
*/
Скопировать код
Это стандартный блок лицензии, который описывает, что этот код является открытым исходным кодом, распространяемым по лицензии GPLv3. ! H, W! Y2 C& N* M" Z& p+ z8 D1 B$ U/ d2 v5 i# J8 j- q
; U# [% F& w6 ^: R9 o) G 2. Импортируемые библиотеки 3 ?# S; O' W y3 {; ~ ; \+ t* \5 v# c/ \
package org.l2jmobius.gameserver.instancemanager; 7 ~% @5 K3 m: u/ @3 Z y$ k6 v
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 — менеджер для работы с игровыми скриптами.* ~9 R9 S3 f% j1 Q
, c/ d' v, c/ u2 y# Y9 ~; C& H+ m
3. Описание класса QuestManager 7 A" p: Z) _0 u
public boolean reload(String questFolder)4 d1 j# i& X8 l1 m, {! {
{ ! `/ `8 o0 C2 t3 |5 b. I
final Quest q = getQuest(questFolder);, v* T, _- p# ]$ V. |
if (q == null) , n9 w6 u5 h# x2 u: [
{ / ]* X: B y, `3 H. I m
return false;5 Z! }- T$ R" D# Y9 p
} 8 _, |+ n4 k% S- s# \3 B
return q.reload(); # q6 x# \3 b' N) S1 ? E0 q
}
Скопировать код
7 w4 ^6 \8 Z; P4 |4 ?+ {9 ^' N$ G4 w$ a# Z, ^7 t
Метод перезагружает квест по имени папки, в которой он хранится.Если квест с таким именем не найден, возвращается false, иначе вызывается метод reload() у объекта квеста. ! b4 \; [& l. y0 D3 ~/ FМетод reload(int questId) - j/ \- C6 o2 M3 d0 O3 m3 W( z3 z( v* w2 y' N$ z" u S6 t0 h
/**' j& C6 d+ s$ g" y' P$ s
* Перезагружает квест по ID. 6 M. G9 d; {4 m$ F
* @param questId ID квеста для перезагрузки* V4 M1 @, I& W6 x
* @return {@code true} если перезагрузка успешна, {@code false} в противном случае ) e* ?+ n/ z$ n8 h# N
LOGGER.log(Level.SEVERE, "Не удалось выполнить список скриптов!", e); / Z1 L/ y. f/ P' r1 }5 L
} . k8 N$ F" N# x% G! r, L, u. l# x
% c$ y+ F5 V' T8 _. C6 O
getInstance().report(); T3 k" \4 K0 @3 @. p+ v3 g
}
Скопировать код
Метод unloadAllScripts()9 w7 J0 E" J8 b! l- X
. N: a# b1 M0 }9 P0 i$ J0 y! H
/**: j5 W# n2 M0 X" l; p2 V1 G! A; w- V
* Выгружает все квесты и скрипты./ b1 s4 k1 ?5 i8 u4 I, S
*/! q" h5 x2 g' h5 {+ X
public void unloadAllScripts() & T& e- W" f9 y+ L% w7 x
{ * X8 C2 y2 V0 `) `* m
LOGGER.info("Выгрузка всех серверных скриптов."); ; J. @, o. H2 l; P
: ~6 ^% v5 Y4 N+ }; t
// Выгрузка квестов. 0 m7 I+ K% }1 m) H/ ~
for (Quest quest : _quests.values()) 8 v" ]3 }* Z( P
{* R- R; }" f: Q& I5 O" x
if (quest != null) ; T0 O, ?$ y5 O* o9 ~$ _/ Y% Q
{( Q. q( ~: Y+ a5 l |; ~% A& W
quest.unload(false);2 _- k; @$ P0 P$ X: f+ D: b
} 9 ?1 N! u" R: c. m* T
}/ A* T& ]& g; d, K0 f/ A
_quests.clear(); $ K* M& C" {, }) ]5 r$ f I
// Выгрузка скриптов.$ r. c4 [" {- Y
for (Quest script : _scripts.values()) 6 k9 O9 m0 y6 {; b
{ . [2 x. V- e3 H: W+ t
if (script != null) 9 b. Y0 W! H6 W W; o
{0 v5 C9 ^, o. ?/ i4 c/ M g
script.unload(false); ! K: b$ c( j; @4 f6 N8 E+ a
}# w4 y% A, h* t& j) t5 b
}4 ?9 S/ T7 ^/ p
_scripts.clear(); `7 I1 U6 s9 r! w* _- Y
}
Скопировать код
Этот метод проходит по всем квестам и скриптам и вызывает метод unload() для каждого, а затем очищает коллекции _quests и _scripts. ; c/ C, p# O8 i6 C1 [3 q
/ I, E; d1 ?# E/ l* E Метод report()6 `7 B- b# ]# H7 t! q! \; K
, z1 _* K' s4 X: A: D8 F! M. W
/**. a8 `- d0 d5 ?
* Логирует количество загруженных квестов и скриптов. 6 @* F; i/ [( q8 n- e0 M
*/ 1 k7 E: r5 r% p5 o
public void report() " S: e H ]6 f; d6 I0 z% m5 T6 ^. N; R
throw new IllegalArgumentException("Аргумент квеста не может быть null"); 8 r9 G0 l1 l: U5 P
}: L7 O& R1 r+ d, W
J9 i$ D3 z: w+ M) T9 s- a/ e
final Quest old = _quests.put(quest.getName(), quest);. _ L1 @) C# V, g' B
if (old != null)# |$ { a) n* T0 { V j" B
{ " M0 N2 I& [1 L8 `$ J# d8 B' d% T
old.unload();) Q# c, M& c% g3 Q
LOGGER.info("Заменен квест " + old.getName() + " (" + old.getId() + ") новой версией!"); , c& c# Q( u6 P+ s( {$ O2 Y. y
}3 M+ D$ F1 C) I) F
" s( a% \) s1 D9 c
if (Config.ALT_DEV_SHOW_QUESTS_LOAD_IN_LOGS)/ D; j$ d- ^- g# b" x
{ & z* U6 W" Z8 [3 ~' P6 h
final String questName = quest.getName().contains("_") ? quest.getName().substring(quest.getName().indexOf('_') + 1) : quest.getName();1 h1 U0 j1 T3 F; A0 X
LOGGER.info("Загружен квест " + CommonUtil.splitWords(questName) + ".");& J; M9 W+ L. J: [+ U( g9 I3 Z
} : d+ J, N- S4 x
} . N8 Q/ x3 T0 i1 v% T
``
Скопировать код
Логика работыQuestManager управляет процессом загрузки, перезагрузки и выгрузки квестов и скриптов на сервере. Он поддерживает кэширование квестов и скриптов в картах _quests и _scripts, а также обеспечивает возможность их перезагрузки без перезапуска сервера. 1 M8 [& e i# P7 _ЗаключениеQuestManager.java — это ключевой элемент в управлении системой квестов и скриптов. Основная его функция — это управление квестами и скриптами, их загрузка, перезагрузка, выгрузка и хранение на сервере.- P( |6 m% z1 A* c+ a
$ a g! p- |$ ~. n' A& h' B1 X( _$ d4 b' Y' T
: a" @4 ?/ j2 g( ]' Y0 p6 \ y( D
Добро пожаловать artace.ru - творческий сектор (https://artace.ru/)