Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius [Версия для печати] Автор: admin Время: 2024-9-21 10:39 Название: Гайд по основным Java-файлам ядра сервер L2J_Mobius Гайд по основным Java-файлам ядра сервер L2J_Mobius & r" V9 A- P* d! b Y; t0 S% c: A9 f3 z# N( u9 YРазбор файла QuestManager.java1 S4 N3 X9 R* m8 L" i
9 d: F$ u3 j2 K/ f
Этот файл управляет загрузкой, перезагрузкой, выгрузкой и хранением квестов и скриптов на сервере Lineage 2. В нём реализованы функции для управления квестами и скриптами, а также взаимодействия с движком скриптов. ; l* G) T/ T2 dОсновные элементы 6 ^' D+ L# m+ T( E
Лицензия 4 f! _5 W- |) A
Комментарии в начале указывают на лицензию GNU General Public License, что позволяет использовать и модифицировать код в рамках условий лицензии.4 g) t3 R2 }* D/ B3 y5 f
Импорты , N+ \. a8 M, E( [$ K2 s( X
; |9 _, ^+ U( [# bQuestManager.java — управление квестами и скриптами. , L8 q9 M: Y: k$ z3 xПуть: \L2J_Mobius\java\org\l2jmobius\gameserver\instancemanager\ 4 q6 ?0 q# i$ P- w2 I; l- @* E, d w( m: a/ D3 U
1 J$ C8 X& z$ U
Давай переведем и разберем код QuestManager.java по частям. Этот класс управляет квестами и скриптами на сервере L2J Mobius. В нем реализованы функции для загрузки, выгрузки, обновления и отслеживания состояния квестов и скриптов. 7 S2 J, q5 A' }/ [6 y( ?1. Лицензионное соглашение: v8 G) \/ h0 Y
/* 8 F5 \3 I. A! n5 m& f
* Этот файл является частью проекта L2J Mobius. ( D! i6 E3 N6 Z
* ' m9 V" Z' ~: _
* Эта программа является свободным ПО: вы можете распространять её и/или изменять. j7 h( D1 x" k% o- p( F
* её в соответствии с условиями GNU General Public License, опубликованной 0 B6 o# ~; B+ e. L, _, z h
* Free Software Foundation, либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии." O% D5 b; B* F7 K5 `& m3 Q
* + F6 x( V" }/ m- D: r# \
* Эта программа распространяется в надежде, что она будет полезной, & [* b+ A3 `& s$ }; }
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии& e3 ]' {% s0 V
* КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.* F9 B$ t; e' T. J
* См. GNU General Public License для получения более подробной информации. 5 j, h8 w5 s& ?' K
* ; B1 N: M& `" ?% a
* Вы должны были получить копию GNU General Public License 3 A0 R' c; [$ w7 {/ T
* вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>. 7 ~4 y$ ~( J( n0 c w! y
*/
Скопировать код
Это стандартный блок лицензии, который описывает, что этот код является открытым исходным кодом, распространяемым по лицензии GPLv3.0 M" z* u# J" [: R
5 w; v' n, f: x" }8 Z8 [. M6 N 1 R% |/ H6 s0 }2. Импортируемые библиотеки / F) D3 g3 C4 W( \) [0 {2 I% ?# N E1 [+ i
package org.l2jmobius.gameserver.instancemanager; 5 J* T5 H+ \3 ^8 c
% t: B1 T: g( j. c' _. e2 |
import java.util.Map; * X/ }! G3 u+ o) g+ ~
import java.util.concurrent.ConcurrentHashMap;5 S! a4 V0 v0 c# O$ Z% k
import java.util.logging.Level;& H& X& ]5 a" V5 u' k
import java.util.logging.Logger; # v: i7 U8 v; z+ s. R
8 A5 \2 ]! C* S
import org.l2jmobius.Config; J! f2 ?2 ?, J5 j, W
import org.l2jmobius.commons.util.CommonUtil; $ T8 ?8 [3 O2 Z4 f S
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 — менеджер для работы с игровыми скриптами.2 `; ~! a3 T: A G, }' E
# R5 s3 M4 y# S3 o3. Описание класса QuestManager- S& |1 N# @7 l$ f
/** 4 g* n+ T& Y1 F7 B
* Менеджер квестов и скриптов.9 P! ^& h% c3 L
* Автор: Zoey76 N# P8 t: n' y9 J2 I" N
*/3 p0 r- h3 M% o! l9 i
public class QuestManager2 k. d1 c C8 H4 [, n% z
{ - D! U- t+ h) W' p- \1 H4 Y
private static final Logger LOGGER = Logger.getLogger(QuestManager.class.getName()); o# K {; f* \
3 K2 E2 x' u1 V) o+ a
/** Карта, содержащая все квесты. */ 1 y( `; J9 W4 a# Z/ y- w6 m/ M
private final Map<String, Quest> _quests = new ConcurrentHashMap<>();& `# f" C' ]0 q9 v( d3 \" J
/** Карта, содержащая все скрипты. */8 i- b7 C) a5 `: `
private final Map<String, Quest> _scripts = new ConcurrentHashMap<>(); 2 D. v. ]( R) v/ P
+ I' D% I0 o" C
protected QuestManager()) z5 ~/ E+ t( ]! m+ I
{& U$ c$ l5 ?( d! K+ v
}+ l8 U7 g9 O/ t% j
}
Скопировать код
4. Методы$ y3 `6 M2 U, G: x. b Метод reload(String questFolder)- z' _! V. Y1 Y7 _/ \) m
public boolean reload(String questFolder)7 n3 a: H8 L, ]& r
{ 8 r( `% {/ N7 u6 D! @0 q- j7 @
final Quest q = getQuest(questFolder);( O7 k7 P4 V. k9 c9 X4 p
if (q == null) & \1 j2 r+ F q. T, ]/ }
{ - O8 d7 n. e/ C6 O7 e _
return false; ( w" _4 A \/ u. C `9 c
} $ @8 x8 n! F: k" H O
return q.reload();# U7 a1 e. D W$ @( w, R
}
Скопировать код
1 t, T5 D( h1 G# j# C0 h/ Z3 z $ b6 v" z) E H+ JМетод перезагружает квест по имени папки, в которой он хранится.Если квест с таким именем не найден, возвращается false, иначе вызывается метод reload() у объекта квеста.. f W- [% `6 s7 N E5 m' G Метод reload(int questId)/ K8 @0 C+ J- _1 X& N
: q) z7 f8 t7 u: J
/**5 S/ |8 C4 j+ I. A1 j: u! o
* Перезагружает квест по ID.9 E. B% h# H6 O) l3 x
* @param questId ID квеста для перезагрузки5 t. W5 n7 _5 W g6 ?8 O5 b
* @return {@code true} если перезагрузка успешна, {@code false} в противном случае 0 K. }( _: a" C9 L- L
Этот метод проходит по всем квестам и скриптам и вызывает метод unload() для каждого, а затем очищает коллекции _quests и _scripts. 2 V/ L, A8 {2 C% Y! k% A A' A
8 N( B. q. z% ~ Метод report()/ f1 W/ o$ H- g( `0 o$ z- m
2 l d; y8 Q2 p# a4 j$ O
/**7 k, t" f& r" @( Y9 d6 U9 h
* Логирует количество загруженных квестов и скриптов. 4 U' [$ u) }# o/ g
*/8 `, ^% d7 H% S/ {, [
public void report() - ~' N+ h, x) F; N& y1 H! ~8 c
* Добавляет новый квест., Y' k7 X. _9 s M& }7 K8 h
* @param quest квест для добавления. p+ }2 h: n3 G
*/! |- J; A; k e$ a
public void addQuest(Quest quest)/ w2 P ?( W, V1 v! J
{( r$ s# R+ O: X5 c% C- u2 E
if (quest == null)* d; C$ }: W; G3 n# X
{ . }& T- t4 Q2 g( t3 P/ l$ O
throw new IllegalArgumentException("Аргумент квеста не может быть null");0 t, r4 H4 U7 `# p& i+ w
} ' `5 X& a/ k& E: @
. E s6 L" @5 p9 A; H- J3 g; I1 x, X
final Quest old = _quests.put(quest.getName(), quest);' Z( X5 L+ P* O; U
if (old != null) ! r' [$ g) Z9 N. m7 Z/ L7 L& |! _. C
{ L! X! l; S1 g3 o
old.unload();" h, u/ ?8 @$ Z6 g [9 ~3 n3 c
LOGGER.info("Заменен квест " + old.getName() + " (" + old.getId() + ") новой версией!");. @" b& H! L" D5 V
} ( p! T+ b2 I( w9 s
* r& t1 _$ m+ M; y+ @3 C, T
if (Config.ALT_DEV_SHOW_QUESTS_LOAD_IN_LOGS) {8 _3 `1 T0 e5 Q. u! Z. w
{ : V0 q. Z% `/ {0 x
final String questName = quest.getName().contains("_") ? quest.getName().substring(quest.getName().indexOf('_') + 1) : quest.getName();" Q# k% a& @: g7 a# G
LOGGER.info("Загружен квест " + CommonUtil.splitWords(questName) + ".");" ]: z6 g2 C8 `6 S- E. {9 q3 K
} 6 B2 R" g7 n% V4 p% Q# A
}. ~ j& R4 l5 d6 M+ x2 j4 Q% k5 l [
``
Скопировать код
Логика работыQuestManager управляет процессом загрузки, перезагрузки и выгрузки квестов и скриптов на сервере. Он поддерживает кэширование квестов и скриптов в картах _quests и _scripts, а также обеспечивает возможность их перезагрузки без перезапуска сервера.% G# j! ^- m* }% F* l+ ~ ЗаключениеQuestManager.java — это ключевой элемент в управлении системой квестов и скриптов. Основная его функция — это управление квестами и скриптами, их загрузка, перезагрузка, выгрузка и хранение на сервере.8 z' d. D: ~# d
" \, P3 s+ v% |' d. U/ Z$ O
' r$ t! X; h H2 E# d, w! ~" }% T, i4 g: n
Добро пожаловать artace.ru - творческий сектор (https://www.artace.ru/)