Ошибка: Безплатный телепорт в каты

Теги:
 
+
-
edit
 

Daedra

новичок

Если у игрока нету древней адены, то Priest телепортирует в катакомбы бесплатно.
Исправляется так:
Файл D:\L2Fortress\L2_Fortress\java\l2f\gameserver\model\instances\L2SignsPriestInstance.java
класс L2SignsPriestInstance
метод onBypassFeedback
Если я правильно понял строка 101
int ancientAdenaAmount = ancientAdena == null ? 0 : ancientAdena.getCount();
в переменной ancientAdenaAmount сохраняется количество древней адены в инвенторе игрока
Далее строка 394 - обработка команды телепорта в катакомбы:
code text
  1. if(ancientAdenaCost > 0)
  2. {
  3.   L2ItemInstance temp = player.getInventory().findItemByItemId(SevenSigns.ANCIENT_ADENA_ID);
  4.   if(temp != null && ancientAdenaCost > temp.getCount())
  5.   {
  6.     player.sendPacket(new SystemMessage(SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ADENA));
  7.     break;
  8.   }
  9.   player.getInventory().destroyItemByItemId(SevenSigns.ANCIENT_ADENA_ID, ancientAdenaCost, true, true);
  10. }

Ошибка кроется во втором условии, temp != null т.е. если древней нету вообще, то ничего и не забирается.
Этот код можно упростить так, одновременно исправляя ошибку бесплатного телепорта:
code text
  1. if(ancientAdenaCost > 0)
  2. {
  3.   if(ancientAdenaCost > ancientAdenaAmount)
  4.   {
  5.     player.sendPacket(new SystemMessage(SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ADENA));
  6.     break;
  7.   }
  8.   player.getInventory().destroyItemByItemId(SevenSigns.ANCIENT_ADENA_ID, ancientAdenaCost, true, true);
  9. }

Т.к. правильное количество древней, с учетом ее отсутствия вообще, мы получили выше по коду.
 
+
-
edit
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru