Ir para conteúdo
  • Cadastre-se
  • 0

Scroll Enchant Falhando como Blessed Enchant


[ADM]Mystogan

Pergunta

Alguem poderia fazer com que o Scroll Enchant Normal Falhar e voltar para o +0 como o Blessed Enchant Faz ? gostaria de fazer com que cada um tenha sua chance especifica 

 

/*
 * 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 2, 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 *
 * http://www.gnu.org/copyleft/gpl.html
 */
package net.sf.l2j.gameserver.clientpackets;

import java.util.logging.Logger;

import net.sf.l2j.Config;
import net.sf.l2j.gameserver.model.Inventory;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.serverpackets.EnchantResult;
import net.sf.l2j.gameserver.serverpackets.InventoryUpdate;
import net.sf.l2j.gameserver.serverpackets.ItemList;
import net.sf.l2j.gameserver.serverpackets.StatusUpdate;
import net.sf.l2j.gameserver.serverpackets.SystemMessage;
import net.sf.l2j.gameserver.templates.L2Item;
import net.sf.l2j.gameserver.templates.L2WeaponType;
import net.sf.l2j.gameserver.util.IllegalPlayerAction;
import net.sf.l2j.gameserver.util.Util;
import net.sf.l2j.util.Rnd;

public class RequestEnchantItem extends L2GameClientPacket
{
   protected static final Logger _log = Logger.getLogger(Inventory.class.getName());
   private static final String _C__58_REQUESTENCHANTITEM = "[C] 58 RequestEnchantItem";
   private static final int[] crystalScrolls =
   {
      731,
      732,
      949,
      950,
      953,
      954,
      957,
      958,
      961,
      962
   };
   
   private int _objectId;
   
   @Override
   protected void readImpl()
   {
      _objectId = 0;
      try
      {
         _objectId = readD();
      }
      catch (Exception e)
      {
      }
   }
   
   @Override
   public void runImpl()
   {
      L2PcInstance activeChar = getClient().getActiveChar();
      if ((activeChar == null) || (_objectId == 0))
      {
         return;
      }
      
      if (activeChar.isProcessingTransaction() || (activeChar.getPrivateStoreType() != 0))
      {
         activeChar.sendPacket(new SystemMessage(1688));
         activeChar.setActiveEnchantItem(null);
         activeChar.sendPacket(new EnchantResult(2));
         return;
      }
      
      L2ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId);
      L2ItemInstance scroll = activeChar.getActiveEnchantItem();
      
      if ((item == null) || (scroll == null))
      {
         activeChar.setActiveEnchantItem(null);
         activeChar.sendPacket(new EnchantResult(2));
         return;
      }
      
      // can't enchant rods and hero weapons
      if ((item.getItem().getItemType() == L2WeaponType.ROD) || (!Config.ALLOW_HERO_ENCHANT && (item.getItemId() >= 6611) && (item.getItemId() <= 6621)) || ((item.getItemId() >= 7816) && (item.getItemId() <= 7831)))
      {
         activeChar.sendPacket(new SystemMessage(SystemMessage.INAPPROPRIATE_ENCHANT_CONDITION));
         activeChar.setActiveEnchantItem(null);
         activeChar.sendPacket(new EnchantResult(2));
         return;
      }
      
      if (item.isWear())
      {
         Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant a weared Item", IllegalPlayerAction.PUNISH_KICK);
         activeChar.setActiveEnchantItem(null);
         activeChar.sendPacket(new EnchantResult(2));
         return;
      }
      
      switch (item.getLocation())
      {
         case INVENTORY:
         case PAPERDOLL:
         {
            if (item.getOwnerId() != activeChar.getObjectId())
            {
               activeChar.setActiveEnchantItem(null);
               activeChar.sendPacket(new EnchantResult(2));
               return;
            }
            break;
         }
         default:
         {
            Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to use enchant Exploit!", IllegalPlayerAction.PUNISH_KICKBAN);
            activeChar.setActiveEnchantItem(null);
            activeChar.sendPacket(new EnchantResult(2));
            return;
         }
      }
      
      if (activeChar.getActiveWarehouse() != null)
      {
         activeChar.setActiveWarehouse(null);
      }
      
      int itemType2 = item.getItem().getType2();
      
      boolean blessedScroll = false;
      boolean enchantItem = false;
      int crystalId = 0;
      
      /** pretty code ;D */
      switch (item.getItem().getCrystalType())
      {
         case L2Item.CRYSTAL_S:
            crystalId = 1462;
            switch (scroll.getItemId())
            {
               case 959:
               case 961:
               case 6577:
                  if (itemType2 == L2Item.TYPE2_WEAPON)
                  {
                     enchantItem = true;
                  }
                  break;
               case 960:
               case 962:
               case 6578:
                  if ((itemType2 == L2Item.TYPE2_SHIELD_ARMOR) || (itemType2 == L2Item.TYPE2_ACCESSORY))
                  {
                     enchantItem = true;
                  }
                  break;
            }
            break;
         case L2Item.CRYSTAL_A:
            crystalId = 1461;
            switch (scroll.getItemId())
            {
               case 729:
               case 731:
               case 6569:
                  if (itemType2 == L2Item.TYPE2_WEAPON)
                  {
                     enchantItem = true;
                  }
                  break;
               case 730:
               case 732:
               case 6570:
                  if ((itemType2 == L2Item.TYPE2_SHIELD_ARMOR) || (itemType2 == L2Item.TYPE2_ACCESSORY))
                  {
                     enchantItem = true;
                  }
                  
                  break;
            }
            break;
         case L2Item.CRYSTAL_B:
            crystalId = 1460;
            switch (scroll.getItemId())
            {
               case 947:
               case 949:
               case 6571:
                  if (itemType2 == L2Item.TYPE2_WEAPON)
                  {
                     enchantItem = true;
                  }
                  break;
               case 948:
               case 950:
               case 6572:
                  if ((itemType2 == L2Item.TYPE2_SHIELD_ARMOR) || (itemType2 == L2Item.TYPE2_ACCESSORY))
                  {
                     enchantItem = true;
                  }
                  break;
            }
            break;
         case L2Item.CRYSTAL_C:
            crystalId = 1459;
            switch (scroll.getItemId())
            {
               case 951:
               case 953:
               case 6573:
                  if (itemType2 == L2Item.TYPE2_WEAPON)
                  {
                     enchantItem = true;
                  }
                  break;
               case 952:
               case 954:
               case 6574:
                  if ((itemType2 == L2Item.TYPE2_SHIELD_ARMOR) || (itemType2 == L2Item.TYPE2_ACCESSORY))
                  {
                     enchantItem = true;
                  }
                  break;
            }
            break;
         case L2Item.CRYSTAL_D:
            crystalId = 1458;
            switch (scroll.getItemId())
            {
               case 955:
               case 957:
               case 6575:
                  if (itemType2 == L2Item.TYPE2_WEAPON)
                  {
                     enchantItem = true;
                  }
                  break;
               case 956:
               case 958:
               case 6576:
                  if ((itemType2 == L2Item.TYPE2_SHIELD_ARMOR) || (itemType2 == L2Item.TYPE2_ACCESSORY))
                  {
                     enchantItem = true;
                  }
                  break;
            }
            break;
         
      }
      
      if (!enchantItem)
      {
         activeChar.sendPacket(new SystemMessage(SystemMessage.INAPPROPRIATE_ENCHANT_CONDITION));
         activeChar.setActiveEnchantItem(null);
         activeChar.sendPacket(new EnchantResult(2));
         return;
      }
      
      // Get the scroll type - Yesod
      if ((scroll.getItemId() >= 6569) && (scroll.getItemId() <= 6578))
      {
         blessedScroll = true;
      }
      else
      {
         for (int crystalscroll : crystalScrolls)
         {
            if (scroll.getItemId() == crystalscroll)
            {
               blessedScroll = true;
            }
            
            break;
            
         }
         
      }
      
      int chance = 0;
      int maxEnchantLevel = 0;
      
      if (item.getItem().getType2() == L2Item.TYPE2_WEAPON)
      {
         if (blessedScroll)
         {
            chance = Config.BLESSED_ENCHANT_CHANCE_WEAPON;
         }
         else
         {
            chance = Config.ENCHANT_CHANCE_WEAPON;
         }
         maxEnchantLevel = Config.ENCHANT_MAX_WEAPON;
      }
      else if (item.getItem().getType2() == L2Item.TYPE2_SHIELD_ARMOR)
      {
         if (blessedScroll)
         {
            chance = Config.BLESSED_ENCHANT_CHANCE_ARMOR;
         }
         else
         {
            chance = Config.ENCHANT_CHANCE_ARMOR;
         }
         maxEnchantLevel = Config.ENCHANT_MAX_ARMOR;
      }
      else if (item.getItem().getType2() == L2Item.TYPE2_ACCESSORY)
      {
         if (blessedScroll)
         {
            chance = Config.BLESSED_ENCHANT_CHANCE_JEWELRY;
         }
         else
         {
            chance = Config.ENCHANT_CHANCE_JEWELRY;
         }
         maxEnchantLevel = Config.ENCHANT_MAX_JEWELRY;
      }
      
      if ((item.getEnchantLevel() >= maxEnchantLevel) && (maxEnchantLevel != 0))
      {
         activeChar.sendPacket(new SystemMessage(SystemMessage.INAPPROPRIATE_ENCHANT_CONDITION));
         activeChar.setActiveEnchantItem(null);
         activeChar.sendPacket(new EnchantResult(2));
         return;
      }
      
      scroll = activeChar.getInventory().destroyItem("Enchant", scroll, activeChar, item);
      if (scroll == null)
      {
         activeChar.sendPacket(new SystemMessage(SystemMessage.NOT_ENOUGH_ITEMS));
         Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant with a scroll he doesnt have", Config.DEFAULT_PUNISH);
         activeChar.setActiveEnchantItem(null);
         activeChar.sendPacket(new EnchantResult(2));
         return;
      }
      
      if ((item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX) || ((item.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR) && (item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX_FULL)))
      {
         chance = 100;
      }
      
      boolean failed = false;
      SystemMessage sm;
      
      if (Rnd.get(100) < chance)
      {
         synchronized (item)
         {
            if (item.getOwnerId() != activeChar.getObjectId())
            {
               activeChar.sendPacket(new SystemMessage(SystemMessage.INAPPROPRIATE_ENCHANT_CONDITION));
               activeChar.setActiveEnchantItem(null);
               activeChar.sendPacket(new EnchantResult(2));
               return;
            }
            
            if ((item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY) && (item.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL))
            {
               activeChar.sendPacket(new SystemMessage(SystemMessage.INAPPROPRIATE_ENCHANT_CONDITION));
               activeChar.setActiveEnchantItem(null);
               activeChar.sendPacket(new EnchantResult(2));
               return;
            }
            
            if (item.getEnchantLevel() == 0)
            {
               sm = new SystemMessage(SystemMessage.S1_SUCCESSFULLY_ENCHANTED);
               sm.addItemName(item.getItemId());
               activeChar.sendPacket(sm);
            }
            else
            {
               sm = new SystemMessage(SystemMessage.S1_S2_SUCCESSFULLY_ENCHANTED);
               sm.addNumber(item.getEnchantLevel());
               sm.addItemName(item.getItemId());
               activeChar.sendPacket(sm);
            }
            
            item.setEnchantLevel(item.getEnchantLevel() + 1);
            item.updateDatabase();
         }
      }
      else
      {
         failed = true;
         
         if (!blessedScroll)
         {
            if (item.getEnchantLevel() > 0)
            {
               sm = new SystemMessage(SystemMessage.ENCHANTMENT_FAILED_S1_S2_EVAPORATED);
               sm.addNumber(item.getEnchantLevel());
               sm.addItemName(item.getItemId());
               activeChar.sendPacket(sm);
            }
            else
            {
               sm = new SystemMessage(SystemMessage.ENCHANTMENT_FAILED_S1_EVAPORATED);
               sm.addItemName(item.getItemId());
               activeChar.sendPacket(sm);
            }
            
            if (item.isEquipped())
            {
               if (item.getEnchantLevel() > 0)
               {
                  sm = new SystemMessage(SystemMessage.EQUIPMENT_S1_S2_REMOVED);
                  sm.addNumber(item.getEnchantLevel());
                  sm.addItemName(item.getItemId());
                  activeChar.sendPacket(sm);
               }
               else
               {
                  sm = new SystemMessage(SystemMessage.S1_DISARMED);
                  sm.addItemName(item.getItemId());
                  activeChar.sendPacket(sm);
               }
               
               L2ItemInstance[] unequiped = activeChar.getInventory().unEquipItemInSlotAndRecord(item.getEquipSlot());
               
               InventoryUpdate iu = new InventoryUpdate();
               for (L2ItemInstance element : unequiped)
               {
                  iu.addModifiedItem(element);
               }
               activeChar.sendPacket(iu);
               
               activeChar.broadcastUserInfo();
            }
            
            int count = item.getCrystalCount() - ((item.getItem().getCrystalCount() + 1) / 2);
            if (count < 1)
            {
               count = 1;
            }
            
            L2ItemInstance destroyItem = activeChar.getInventory().destroyItem("Enchant", item, activeChar, null);
            if (destroyItem == null)
            {
               activeChar.setActiveEnchantItem(null);
               activeChar.sendPacket(new EnchantResult(2));
               return;
            }
            
            L2ItemInstance crystals = activeChar.getInventory().addItem("Enchant", crystalId, count, activeChar, destroyItem);
            
            sm = new SystemMessage(SystemMessage.EARNED_S2_S1_s);
            sm.addItemName(crystals.getItemId());
            sm.addNumber(count);
            activeChar.sendPacket(sm);
            
            if (!Config.FORCE_INVENTORY_UPDATE)
            {
               InventoryUpdate iu = new InventoryUpdate();
               if (destroyItem.getCount() == 0)
               {
                  iu.addRemovedItem(destroyItem);
               }
               else
               {
                  iu.addModifiedItem(destroyItem);
               }
               iu.addItem(crystals);
               
               activeChar.sendPacket(iu);
            }
            else
            {
               activeChar.sendPacket(new ItemList(activeChar, true));
            }
            
            StatusUpdate su = new StatusUpdate(activeChar.getObjectId());
            su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad());
            activeChar.sendPacket(su);
            
            activeChar.broadcastUserInfo();
            
            L2World.getInstance().removeObject(destroyItem);
            activeChar.sendPacket(new EnchantResult(1));
         }
         else
         {
            activeChar.sendPacket(new SystemMessage(SystemMessage.BLESSED_ENCHANT_FAILED));
            
            item.setEnchantLevel(0);
            item.updateDatabase();
            activeChar.sendPacket(new EnchantResult(2));
         }
      }
      sm = null;
      
      StatusUpdate su = new StatusUpdate(activeChar.getObjectId());
      su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad());
      activeChar.sendPacket(su);
      
      su = null;
      
      if (!failed)
      {
         activeChar.sendPacket(new EnchantResult(0));
      }
      
      activeChar.sendPacket(new ItemList(activeChar, false)); // TODO update only the enchanted item
      activeChar.broadcastUserInfo();
      activeChar.setActiveEnchantItem(null);
      
   }
   
   /*
    * (non-Javadoc)
    * @see net.sf.l2j.gameserver.clientpackets.L2GameClientPacket#getType()
    */
   @Override
   public String getType()
   {
      return _C__58_REQUESTENCHANTITEM;
   }
}

Especialidade em DataPack / Client

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts recomendados

Até agora não há respostas para essa pergunta

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Processando...




×
×
  • Criar Novo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.