Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius [Версия для печати] Автор: admin Время: 2024-9-21 10:39 Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius Гайд по основным Java-файлам ядра сервер L2J_Mobius - ~7 a3 _2 b/ ? b" Y - E. G2 q0 M9 \6 LРазбор файла QuestManager.java b# P; X/ r* B3 S7 l
+ E; N j" [+ |5 ^* EЭтот файл управляет загрузкой, перезагрузкой, выгрузкой и хранением квестов и скриптов на сервере Lineage 2. В нём реализованы функции для управления квестами и скриптами, а также взаимодействия с движком скриптов.# v) r r( ~. ~0 s& n8 l) t7 m' P6 \) ` Основные элементы( v2 S, k" R9 J& W1 s5 |
Лицензия 0 ]4 Z' O1 T" h: `
Комментарии в начале указывают на лицензию GNU General Public License, что позволяет использовать и модифицировать код в рамках условий лицензии.! I* {: {+ E( K
Импорты 6 X( [! C: J9 A) k; `& S
4 a4 t7 T' a* O& b9 k! x1 Y' M; K: tQuestManager.java — управление квестами и скриптами. ! Y$ I6 o q! r! y% @* Y% V& V# CПуть: \L2J_Mobius\java\org\l2jmobius\gameserver\instancemanager\ - k# i) f; n7 k4 z$ a z# R' K1 ^: S6 `9 `+ |% T; A; f
/ T2 ], g) V; H3 O
Давай переведем и разберем код QuestManager.java по частям. Этот класс управляет квестами и скриптами на сервере L2J Mobius. В нем реализованы функции для загрузки, выгрузки, обновления и отслеживания состояния квестов и скриптов. 0 ]" ]9 K. A: O" T: U1. Лицензионное соглашение 9 |7 }- h3 v9 j6 I/ Y4 M3 N `
/*3 _9 a* ]4 a: E2 b+ R) B4 `" c
* Этот файл является частью проекта L2J Mobius.3 ^7 Y6 N+ ]6 b/ q; O
* % v; U! W% k( ^7 \$ I
* Эта программа является свободным ПО: вы можете распространять её и/или изменять2 S; o* v+ F- j' N8 x
* её в соответствии с условиями GNU General Public License, опубликованной 6 ]$ }' B& i" e% S6 v; r$ U% ~
* Free Software Foundation, либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии." l8 S2 T/ M$ T! a. [
* 5 ^0 c# s+ ]$ V% {0 J( Z
* Эта программа распространяется в надежде, что она будет полезной, # Y7 ]1 I2 L$ m6 Q Y2 q
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии + O, s% R; g; L
* КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.# O2 ^; r3 S7 ^- f
* См. GNU General Public License для получения более подробной информации. 9 v3 y* d& F4 u8 r8 u' ]
* 3 y! P0 X. M5 H' g
* Вы должны были получить копию GNU General Public License " B/ c) i" H1 x1 J1 O
* вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>.2 K, v; q6 E* [4 p- A' ~
*/
Скопировать код
Это стандартный блок лицензии, который описывает, что этот код является открытым исходным кодом, распространяемым по лицензии GPLv3. ; s' [' [/ B0 I& o/ R6 k2 w0 J7 O3 U, @3 V% B! E
( q/ g8 H' h; V/ T/ U* R( t; ]+ S. b6 \2. Импортируемые библиотеки & _# b1 Y4 \, m$ \. ~4 Z/ Q1 o. U1 V
package org.l2jmobius.gameserver.instancemanager;' e) t: T3 Z$ e: }, e( w! L+ v4 u: ?4 O
$ M. {6 X+ Q! ]4 D* o$ \* k) O
import java.util.Map; o4 Q: w$ G, h/ Z/ ]
import java.util.concurrent.ConcurrentHashMap;+ e* G0 g4 G6 }8 V- O& 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 — менеджер для работы с игровыми скриптами. * Y- c6 D8 ?' C; g* Y' e9 w3 w2 s+ y$ T! s: F
3. Описание класса QuestManager4 {, z' a, M$ m4 g0 L
/** 3 a) q, u% B5 p7 l2 c) o. C1 t& N6 j, U
* Менеджер квестов и скриптов.1 z: K% x5 X$ S6 e
* Автор: Zoey76 & [5 {: Q2 V X
*/ % N/ F' ?3 c) e3 n
public class QuestManager `' j* I; `! I4 Y% g& c5 p2 e# w
{4 T5 S4 O! ]( F N1 T
private static final Logger LOGGER = Logger.getLogger(QuestManager.class.getName()); - z( h- t) ~8 M. b3 G
- n& r0 u6 k) I# i3 ^) z! L6 A
/** Карта, содержащая все квесты. */4 t8 y5 h. b5 n: p9 C
private final Map<String, Quest> _quests = new ConcurrentHashMap<>(); % c4 i6 }6 b; w2 i
/** Карта, содержащая все скрипты. */- Q; e+ i- F- r1 h! u! i" N. F+ i; e+ C
private final Map<String, Quest> _scripts = new ConcurrentHashMap<>(); + z: Q2 o8 `8 C9 i
4. Методы2 ]% O6 W/ p2 R, J/ H Метод reload(String questFolder) - u; W! h$ Y3 p+ w
public boolean reload(String questFolder) 2 ?9 L2 n( E" [: q3 Q5 J8 e l
{ ( j. X/ `* Y7 S8 F; R
final Quest q = getQuest(questFolder); : F" e, H7 Q& ]- _3 Y# m
if (q == null) + y( ^) g& i4 R& Q1 `$ x
{ 4 X! ~: i# t/ ^; T
return false; 5 o) N8 N6 J! x" r) ]( r
} / c$ d& ?. _8 g: U% }6 Z
return q.reload();" C! U1 v2 U% p; y* o
}
Скопировать код
3 l8 f, I1 F3 b
; g, T/ ~4 Q2 O" VМетод перезагружает квест по имени папки, в которой он хранится.Если квест с таким именем не найден, возвращается false, иначе вызывается метод reload() у объекта квеста. % m3 n0 F, Z8 _Метод reload(int questId) 4 p C+ A: |5 s$ x) T# M, [) f: @; w& \. I5 M) [
/** 3 J0 D Y# g" I3 J
* Перезагружает квест по ID. ) R- B4 y5 _6 X2 A- K) c# J$ V+ o
* @param questId ID квеста для перезагрузки % F- G! m+ v# R5 b
* @return {@code true} если перезагрузка успешна, {@code false} в противном случае , v5 q1 i( w& T8 I6 Y
*/ 3 I; G6 A1 d& n% [/ @5 D+ u
public boolean reload(int questId)4 _2 y- F! m) e, A- c2 a3 {
{ 5 J0 w. R4 c! S: D; G" t
final Quest q = getQuest(questId);" p) o% b( j: C6 u9 ~- ~" ~5 ^4 F% p
if (q == null)1 E5 C; ]+ A j) n3 w* b. k
{ / _8 v2 Z2 i/ Z8 @: C+ f3 a
return false; & p, n% Q1 ~7 w$ u4 \; a: s
} ( k$ c8 Z, f4 o7 s+ v4 R8 e- |
return q.reload();0 l h+ }% T6 t9 M
}
Скопировать код
Аналогично предыдущему методу, но перезагружает квест по его ID.* k7 {. Q( z; b& H
* Выгружает все квесты и скрипты. ! i/ a0 A2 `- Q* a# I1 f/ e
*/ / ^- J8 E2 z: Q% z
public void unloadAllScripts() 2 [5 A6 o5 D, M
{) \4 b" x g3 X- ~1 i* h Z
LOGGER.info("Выгрузка всех серверных скриптов."); 8 a, [- P1 @+ S' P Q6 {
3 b1 S. T3 N& R5 ]# z
// Выгрузка квестов.) o* ?/ \ Z5 i, @% j Z5 R
for (Quest quest : _quests.values())+ g# J, Y$ h( X6 L1 q, ~
{ ' g% T; ?4 W7 N9 {! q
if (quest != null) 2 R# f6 Y- U7 M. _, ~+ w
{ $ P0 g/ d5 p! L# E' |; ~; s+ @
quest.unload(false);% J& C5 L2 f9 }4 o9 {
} ( v, k8 n% |) q
}! E8 n6 H! u- K2 l: E9 {
_quests.clear(); k: i# m5 M2 j3 N8 t
// Выгрузка скриптов.4 c0 ]& M! a6 Q. e( ?) N
for (Quest script : _scripts.values())# G% }3 L/ L) p q3 z" z* ]0 P
{ # |6 i( _2 S0 e0 Q9 x1 c: R9 [
if (script != null) / G, ^9 a* O0 I4 y( b
{$ g7 F* M2 [1 M8 s8 W1 D
script.unload(false);! }) L3 ]% a H) R6 `. ^4 P$ k
}( j( e! V# f- @
} ; t1 L, B8 E2 E1 g- W+ K% i. c
_scripts.clear();! z; D+ ?' o1 [! z
}
Скопировать код
Этот метод проходит по всем квестам и скриптам и вызывает метод unload() для каждого, а затем очищает коллекции _quests и _scripts. % [+ M- J' l7 F: E, U8 O- B
Логика работыQuestManager управляет процессом загрузки, перезагрузки и выгрузки квестов и скриптов на сервере. Он поддерживает кэширование квестов и скриптов в картах _quests и _scripts, а также обеспечивает возможность их перезагрузки без перезапуска сервера. , q! [' t# U" c: @' AЗаключениеQuestManager.java — это ключевой элемент в управлении системой квестов и скриптов. Основная его функция — это управление квестами и скриптами, их загрузка, перезагрузка, выгрузка и хранение на сервере. 9 X/ F& E$ [9 a% e) X: M. F' g ) C0 w. g1 u) g% o' b 8 Y$ {& G; _9 p, d! V' P( I* N4 Q 3 D# V: K. L( E- F
Добро пожаловать artace.ru - творческий сектор (https://www.artace.ru/)