GOODPower

Untitled

Mar 18th, 2014
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.77 KB | None | 0 0
  1. package l2p.gameserver.clientpackets;
  2.  
  3. import l2p.gameserver.Config;
  4. import l2p.gameserver.data.xml.holder.EnchantItemHolder;
  5. import l2p.gameserver.model.Player;
  6. import l2p.gameserver.model.items.ItemInstance;
  7. import l2p.gameserver.model.items.PcInventory;
  8. import l2p.gameserver.serverpackets.components.SystemMsg;
  9. import l2p.gameserver.serverpackets.ExPutEnchantTargetItemResult;
  10. import l2p.gameserver.templates.item.support.EnchantScroll;
  11. import l2p.gameserver.utils.ItemFunctions;
  12. import l2p.gameserver.utils.Log;
  13.  
  14. public class RequestExTryToPutEnchantTargetItem extends L2GameClientPacket
  15. {
  16.     private int _objectId;
  17.  
  18.     @Override
  19.     protected void readImpl()
  20.     {
  21.         _objectId = readD();
  22.     }
  23.  
  24.     @Override
  25.     protected void runImpl()
  26.     {
  27.         Player player = getClient().getActiveChar();
  28.         if(player == null)
  29.             return;
  30.  
  31.         if(player.isActionsDisabled() || player.isInStoreMode() || player.isInTrade())
  32.         {
  33.             player.sendPacket(ExPutEnchantTargetItemResult.FAIL);
  34.             player.setEnchantScroll(null);
  35.             return;
  36.         }
  37.  
  38.         PcInventory inventory = player.getInventory();
  39.         ItemInstance itemToEnchant = inventory.getItemByObjectId(_objectId);
  40.         ItemInstance scroll = player.getEnchantScroll();
  41.  
  42.         if(itemToEnchant == null || scroll == null)
  43.         {
  44.             player.sendPacket(ExPutEnchantTargetItemResult.FAIL);
  45.             player.setEnchantScroll(null);
  46.             return;
  47.         }
  48.  
  49.         Log.add(player.getName() + "|Trying to put enchant|" + itemToEnchant.getItemId() + "|+" + itemToEnchant.getEnchantLevel() + "|" + itemToEnchant.getObjectId(), "enchants");
  50.  
  51.         int scrollId = scroll.getItemId();
  52.         int itemId = itemToEnchant.getItemId();
  53.  
  54.         EnchantScroll enchantScroll = EnchantItemHolder.getInstance().getEnchantScroll(scrollId);
  55.  
  56.         if(!itemToEnchant.canBeEnchanted(enchantScroll == null) || itemToEnchant.isStackable())
  57.         {
  58.             player.sendPacket(ExPutEnchantTargetItemResult.FAIL);
  59.             player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
  60.             player.setEnchantScroll(null);
  61.             return;
  62.         }
  63.  
  64.         if(itemToEnchant.getLocation() != ItemInstance.ItemLocation.INVENTORY && itemToEnchant.getLocation() != ItemInstance.ItemLocation.PAPERDOLL)
  65.         {
  66.             player.sendPacket(ExPutEnchantTargetItemResult.FAIL);
  67.             player.sendPacket(SystemMsg.INAPPROPRIATE_ENCHANT_CONDITIONS);
  68.             player.setEnchantScroll(null);
  69.             return;
  70.         }
  71.  
  72.         if(player.isInStoreMode())
  73.         {
  74.             player.sendPacket(ExPutEnchantTargetItemResult.FAIL);
  75.             player.sendPacket(SystemMsg.YOU_CANNOT_ENCHANT_WHILE_OPERATING_A_PRIVATE_STORE_OR_PRIVATE_WORKSHOP);
  76.             player.setEnchantScroll(null);
  77.             return;
  78.         }
  79.  
  80.         if((scroll = inventory.getItemByObjectId(scroll.getObjectId())) == null)
  81.         {
  82.             player.sendPacket(ExPutEnchantTargetItemResult.FAIL);
  83.             player.setEnchantScroll(null);
  84.             return;
  85.         }
  86.  
  87.         if(enchantScroll == null)
  88.         {
  89.             doPutOld(player, itemToEnchant, scroll);
  90.             //player.sendPacket(ExPutEnchantTargetItemResult.FAIL);
  91.             //player.setEnchantScroll(null);
  92.             return;
  93.         }
  94.  
  95.         if(enchantScroll.getItems().size() > 0)
  96.         {
  97.             if(!enchantScroll.getItems().contains(itemId))
  98.             {
  99.                 player.sendPacket(ExPutEnchantTargetItemResult.FAIL);
  100.                 player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
  101.                 player.setEnchantScroll(null);
  102.                 return;
  103.             }
  104.         }
  105.         else
  106.         {
  107.             if(!enchantScroll.getGrades().contains(itemToEnchant.getCrystalType()))
  108.             {
  109.                 player.sendPacket(ExPutEnchantTargetItemResult.FAIL);
  110.                 player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
  111.                 player.setEnchantScroll(null);
  112.                 return;
  113.             }
  114.         }
  115.  
  116.         if(enchantScroll.getMaxEnchant() != -1 && itemToEnchant.getEnchantLevel() >= enchantScroll.getMaxEnchant())
  117.         {
  118.             player.sendPacket(ExPutEnchantTargetItemResult.FAIL);
  119.             player.sendPacket(SystemMsg.INAPPROPRIATE_ENCHANT_CONDITIONS);
  120.             player.setEnchantScroll(null);
  121.             return;
  122.         }
  123.  
  124.         // Запрет на заточку чужих вещей, баг может вылезти на серверных лагах
  125.         if(itemToEnchant.getOwnerId() != player.getObjectId())
  126.         {
  127.             player.sendPacket(ExPutEnchantTargetItemResult.FAIL);
  128.             player.setEnchantScroll(null);
  129.             return;
  130.         }
  131.  
  132.         player.sendPacket(ExPutEnchantTargetItemResult.SUCCESS);
  133.     }
  134.  
  135.     @Deprecated
  136.     private static void doPutOld(Player activeChar, ItemInstance itemToEnchant, ItemInstance scroll)
  137.     {
  138.         int crystalId = ItemFunctions.getEnchantCrystalId(itemToEnchant, scroll, null);
  139.  
  140.         if(crystalId == -1)
  141.         {
  142.             activeChar.sendPacket(new ExPutEnchantTargetItemResult(0));
  143.             activeChar.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
  144.             activeChar.setEnchantScroll(null);
  145.             return;
  146.         }
  147.  
  148.         int scrollId = scroll.getItemId();
  149.  
  150.         if(scrollId == 13540 && itemToEnchant.getItemId() != 13539)
  151.         {
  152.             activeChar.sendPacket(new ExPutEnchantTargetItemResult(0));
  153.             activeChar.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
  154.             activeChar.setEnchantScroll(null);
  155.             return;
  156.         }
  157.  
  158.         // ольф 21580(21581/21582)
  159.         if((scrollId == 21581 || scrollId == 21582) && itemToEnchant.getItemId() != 21580)
  160.         {
  161.             activeChar.sendPacket(new ExPutEnchantTargetItemResult(0));
  162.             activeChar.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
  163.             activeChar.setEnchantScroll(null);
  164.             return;
  165.         }
  166.  
  167.         // TODO: [pchayka] временный хардкод до улучения системы описания свитков заточки
  168.         if(ItemFunctions.isDestructionWpnEnchantScroll(scrollId) && itemToEnchant.getEnchantLevel() >= 15 || ItemFunctions.isDestructionArmEnchantScroll(scrollId) && itemToEnchant.getEnchantLevel() >= 6)
  169.         {
  170.             activeChar.sendPacket(new ExPutEnchantTargetItemResult(0));
  171.             activeChar.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
  172.             activeChar.setEnchantScroll(null);
  173.             return;
  174.         }
  175.  
  176.         boolean fail = false;
  177.         switch(itemToEnchant.getItemId())
  178.         {
  179.             case 13539:
  180.                 if(itemToEnchant.getEnchantLevel() >= Config.ENCHANT_MAX_MASTER_YOGI_STAFF)
  181.                     fail = true;
  182.                 break;
  183.             case 21580:
  184.                 if(itemToEnchant.getEnchantLevel() >= 9)
  185.                     fail = true;
  186.                 break;
  187.             default:
  188.                 if(itemToEnchant.getEnchantLevel() >= Config.ENCHANT_MAX)
  189.                     fail = true;
  190.                 break;
  191.         }
  192.  
  193.         if(fail)
  194.         {
  195.             activeChar.sendPacket(new ExPutEnchantTargetItemResult(0));
  196.             activeChar.sendPacket(SystemMsg.INAPPROPRIATE_ENCHANT_CONDITIONS);
  197.             activeChar.setEnchantScroll(null);
  198.             return;
  199.         }
  200.  
  201.         // Запрет на заточку чужих вещей, баг может вылезти на серверных лагах
  202.         if(itemToEnchant.getOwnerId() != activeChar.getObjectId())
  203.         {
  204.             activeChar.sendPacket(new ExPutEnchantTargetItemResult(0));
  205.             activeChar.setEnchantScroll(null);
  206.             return;
  207.         }
  208.  
  209.         activeChar.sendPacket(new ExPutEnchantTargetItemResult(1));
  210.     }
  211. }
Advertisement
Add Comment
Please, Sign In to add comment