RequestNewEnchantTry L2jMobius

pupunka1337

Путник
Пользователь
Сообщения
9
Розыгрыши
0
Репутация
0
Реакции
0
Баллы
12
Запрещено публиковать исходный код без BB-кода — CODE
Хроники
  1. Prologue: Prelude of War
Исходники
Присутствуют
Сборка
L2jMobius
Пытаюсь понять что не так, если синтез успешен
1 Браслеты, брошь, камни: при успешном синтезе не продолжает синтезить дальше на следующий левел
2 Бенир: при успешном либо неуспешном синтезе просто останавливается
3 Не работает кнопка отмена


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 <[URL='http://www.gnu.org/licenses/']Licenses - GNU Project - Free Software Foundation[/URL]>.
 */
package org.l2jmobius.gameserver.network.clientpackets.compound;

import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.data.xml.CombinationItemsData;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.request.CompoundRequest;
import org.l2jmobius.gameserver.model.item.combination.CombinationItem;
import org.l2jmobius.gameserver.model.item.combination.CombinationItemReward;
import org.l2jmobius.gameserver.model.item.combination.CombinationItemType;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
import org.l2jmobius.gameserver.network.serverpackets.compound.ExEnchantFail;
import org.l2jmobius.gameserver.network.serverpackets.compound.ExEnchantOneFail;
import org.l2jmobius.gameserver.network.serverpackets.compound.ExEnchantSucess;

/**
 * @author UnAfraid
 */
public class RequestNewEnchantTry implements ClientPacket
{
   @Override
   public void run(GameClient client)
   {
      final Player player = client.getPlayer();
      if (player == null)
      {
         return;
      }
     
      if (player.isInStoreMode())
      {
         player.sendPacket(SystemMessageId.YOU_CANNOT_DO_THAT_WHILE_IN_A_PRIVATE_STORE_OR_PRIVATE_WORKSHOP);
         player.sendPacket(ExEnchantOneFail.STATIC_PACKET);
         return;
      }
     
      if (player.isProcessingTransaction() || player.isProcessingRequest())
      {
         player.sendPacket(SystemMessageId.YOU_CANNOT_USE_THIS_SYSTEM_DURING_TRADING_PRIVATE_STORE_AND_WORKSHOP_SETUP);
         player.sendPacket(ExEnchantOneFail.STATIC_PACKET);
         return;
      }
     
      final CompoundRequest request = player.getRequest(CompoundRequest.class);
      if ((request == null) || request.isProcessing())
      {
         player.sendPacket(ExEnchantFail.STATIC_PACKET);
         return;
      }
     
      request.setProcessing(true);
     
      final Item itemOne = request.getItemOne();
      final Item itemTwo = request.getItemTwo();
      if ((itemOne == null) || (itemTwo == null))
      {
         player.sendPacket(ExEnchantFail.STATIC_PACKET);
         player.removeRequest(request.getClass());
         return;
      }
     
      // Lets prevent using same item twice. Also stackable item check.
      if ((itemOne.getObjectId() == itemTwo.getObjectId()) && (!itemOne.isStackable() || (player.getInventory().getInventoryItemCount(itemOne.getTemplate().getId(), -1) < 2)))
      {
         player.sendPacket(new ExEnchantFail(itemOne.getId(), itemTwo.getId()));
         player.removeRequest(request.getClass());
         return;
      }
     
      final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemOne.getEnchantLevel(), itemTwo.getId());
     
      // Not implemented or not able to merge!
      if (combinationItem == null)
      {
         player.sendPacket(new ExEnchantFail(itemOne.getId(), itemTwo.getId()));
         player.removeRequest(request.getClass());
         return;
      }
     
      if (combinationItem.getCommission() > player.getAdena())
      {
         client.sendPacket(new ExEnchantFail(itemOne.getId(), itemTwo.getId()));
         player.removeRequest(request.getClass());
         player.sendPacket(SystemMessageId.NOT_ENOUGH_ADENA);
         return;
      }
     
      if (player.destroyItem("Compound-Item-One", itemOne, 1, null, true) && player.destroyItem("Compound-Item-Two", itemTwo, 1, null, true) && ((combinationItem.getCommission() <= 0) || player.reduceAdena("Compound-Commission", combinationItem.getCommission(), player, true)))
      {
         final double random = (Rnd.nextDouble() * 100);
         final boolean success = random <= combinationItem.getChance();
         final CombinationItemReward rewardItem = combinationItem.getReward(success ? CombinationItemType.ON_SUCCESS : CombinationItemType.ON_FAILURE);
         final Item item = player.addItem("Compound-Result", rewardItem.getId(), rewardItem.getCount(), null, true);
         if (success)
         {
            player.sendPacket(new ExEnchantSucess(item.getId()));
         }
         else
         {
            player.sendPacket(new ExEnchantFail(itemOne.getId(), itemTwo.getId()));
         }
      }
     
      final InventoryUpdate iu = new InventoryUpdate();
      if (itemOne.isStackable() && (itemOne.getCount() > 0))
      {
         iu.addModifiedItem(itemOne);
      }
      else
      {
         iu.addRemovedItem(itemOne);
      }
      if (itemTwo.isStackable() && (itemTwo.getCount() > 0))
      {
         iu.addModifiedItem(itemTwo);
      }
      else
      {
         iu.addRemovedItem(itemTwo);
      }
      player.sendInventoryUpdate(iu);
     
      player.removeRequest(request.getClass());
   }
}
 
Hi.

Try add this line player.sendMessage("Here 1");

to track where the flow enter and leave.

U will be able to track where u get stuck.

Also maybe it is a client side problem.

I make a new augment and in the end was client side issue
 
Нужно слать S_EX_ENCHANT_SUCCESS с правильной структурой, второй аргумент ItemEnchant (int)

S_EX_ENCHANT_FAIL туда же, там 2й аргумент ItemEnchant (int)
 
Hi.

Try add this line player.sendMessage("Here 1");

to track where the flow enter and leave.

U will be able to track where u get stuck.

Also maybe it is a client side problem.

I make a new augment and in the end was client side issue
Tyvm

Нужно слать S_EX_ENCHANT_SUCCESS с правильной структурой, второй аргумент ItemEnchant (int)

S_EX_ENCHANT_FAIL туда же, там 2й аргумент ItemEnchant (int)
S_EX_ENCHANT_SUCCESS это со стороны сервера?
 
Последнее редактирование модератором:
S_EX_ENCHANT_SUCCESS это со стороны сервера?
Код:
if (success)
         {
            player.sendPacket(new ExEnchantSucess(item.getId()));
         }
         else
         {
            player.sendPacket(new ExEnchantFail(itemOne.getId(), itemTwo.getId()));
         }

вот они у тебя, внутрь не смотрел но скорее всего в ExEnchantSucess нету одно int, а в ExEnchantFail вместо itemTwo.getId() должен быть 0
 
Спасибо, попробую это применить
Заметил что после sucсess в код с этим "item" ничего не делает

Полагаю что при успехе он должен брать item(результат успешного синтеза) и начинать все по новой но уже с item(результат успешного синтеза) и новый itemTwo
 
Назад
Сверху Снизу