Название: Отчет по проделанной работе с файлом ExCrossEventInfo.java [Версия для печати] Автор: admin Время: 2024-10-7 00:04 Название: Отчет по проделанной работе с файлом ExCrossEventInfo.java Отчет по проделанной работе с файлом ExCrossEventInfo.java (L2J_Mobius\java\org\l2jmobius\gameserver\network\serverpackets\crossevent\)Задача:Исправить ошибку, возникающую при отправке пакета ExCrossEventInfo клиенту, которая приводила к исключению NullPointerException при попытке вызова метода getCount() у объекта Item, который мог быть равен null. Ошибка возникала в строке, где программа пыталась получить количество предметов в инвентаре игрока по идентификатору ITEM_TO_PLAY_ID. Описание ошибки:Исключение NullPointerException возникало из-за того, что метод getItemByItemId(ITEM_TO_PLAY_ID) мог возвращать null, если в инвентаре игрока отсутствовал предмет с данным идентификатором. В таких случаях вызов метода getCount() у значения null вызывал ошибку. Проведенная работа:
Анализ кода:Было установлено, что ошибка происходит в методе writeImpl, где из инвентаря игрока извлекается предмет по ID, и затем программа пытается получить его количество с помощью метода getCount(). Однако проверка на существование предмета в инвентаре отсутствовала.
Исправление кода:В метод writeImpl было добавлено условие, проверяющее, существует ли предмет в инвентаре. Если предмет найден, программа получает его количество через метод getCount(). Если предмета нет, вместо вызова getCount() программа записывает 0 в буфер, тем самым предотвращая возникновение NullPointerException.
Изменение кода: java
// Получаем предмет из инвентаря игрока по ID
var item = _player.getInventory().getItemByItemId(ITEM_TO_PLAY_ID);
Тестирование:После внесения изменений файл был скомпилирован, и сборка была протестирована на сервере. Исправление позволило предотвратить ошибку NullPointerException при отсутствии предмета в инвентаре.
Результат:Исправление успешно устранило ошибку, связанную с передачей информации о событии клиенту. Теперь программа корректно обрабатывает ситуации, когда предмет с заданным ID отсутствует в инвентаре игрока, и вместо вызова метода getCount() у несуществующего объекта, записывает в буфер значение 0. Это предотвращает сбой выполнения пакета и улучшает стабильность работы системы. Заключение:Работа с файлом ExCrossEventInfo.java завершена успешно. Была выявлена и исправлена ошибка, которая могла приводить к сбоям в работе сервера при попытке взаимодействия с инвентарем игрока.
Так выглядел код до изменения:
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.