artace.ru - творческий сектор

Название: Отчет по проделанной работе с файлом 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 вызывал ошибку.
Проведенная работа:
Результат:Исправление успешно устранило ошибку, связанную с передачей информации о событии клиенту. Теперь программа корректно обрабатывает ситуации, когда предмет с заданным ID отсутствует в инвентаре игрока, и вместо вызова метода getCount() у несуществующего объекта, записывает в буфер значение 0. Это предотвращает сбой выполнения пакета и улучшает стабильность работы системы.
Заключение:Работа с файлом ExCrossEventInfo.java завершена успешно. Была выявлена и исправлена ошибка, которая могла приводить к сбоям в работе сервера при попытке взаимодействия с инвентарем игрока.

Так выглядел код до изменения:
  1. /*
  2. * This file is part of the L2J Mobius project.
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. package org.l2jmobius.gameserver.network.serverpackets.crossevent;

  18. import java.util.List;

  19. import org.l2jmobius.commons.network.WritableBuffer;
  20. import org.l2jmobius.gameserver.data.xml.CrossEventData;
  21. import org.l2jmobius.gameserver.model.actor.Player;
  22. import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
  23. import org.l2jmobius.gameserver.model.holders.CrossEventHolder;
  24. import org.l2jmobius.gameserver.model.holders.CrossEventNormalRewardHolder;
  25. import org.l2jmobius.gameserver.network.GameClient;
  26. import org.l2jmobius.gameserver.network.ServerPackets;
  27. import org.l2jmobius.gameserver.network.serverpackets.ServerPacket;

  28. public class ExCrossEventInfo extends ServerPacket
  29. {
  30.        
  31.         int ITEM_TO_PLAY_ID = Inventory.EINHASAD_COIN_ID;
  32.         private final Player _player;
  33.         final List<CrossEventNormalRewardHolder> cellRewards;
  34.        
  35.         public ExCrossEventInfo(Player player)
  36.         {
  37.                 _player = player;
  38.                 cellRewards = CrossEventData.getInstance().getCellRewards();
  39.         }
  40.        
  41.         @Override
  42.         protected void writeImpl(GameClient client, WritableBuffer buffer)
  43.         {
  44.                 ServerPackets.EX_CROSS_EVENT_INFO.writeId(this, buffer);
  45.                 buffer.writeByte(1); // bOnEvent
  46.                
  47.                 buffer.writeInt(0); // <_CrossBlock> blocks
  48.                
  49.                 buffer.writeInt((int) _player.getInventory().getItemByItemId(ITEM_TO_PLAY_ID).getCount()); // nCoupon

  50.                 buffer.writeInt(_player.getCrossRewards()); // nRareRewardCnt
  51.                
  52.                 buffer.writeInt(4); // nRemainResetCnt
  53.                 buffer.writeInt(4); // nMaxResetCnt
  54.                 buffer.writeLong(1209599); // nEndSeconds
  55.         }
  56. }
Скопировать код







Добро пожаловать artace.ru - творческий сектор (https://artace.ru/) Powered by Discuz! X3.5