RequestRefine.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /*
  2. * Copyright (C) 2004-2015 L2J Server
  3. *
  4. * This file is part of L2J Server.
  5. *
  6. * L2J Server is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * L2J Server is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package com.l2jserver.gameserver.network.clientpackets;
  20. import com.l2jserver.gameserver.datatables.AugmentationData;
  21. import com.l2jserver.gameserver.model.L2Augmentation;
  22. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  23. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  24. import com.l2jserver.gameserver.network.SystemMessageId;
  25. import com.l2jserver.gameserver.network.serverpackets.ExVariationResult;
  26. import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
  27. import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
  28. /**
  29. * Format:(ch) dddd
  30. * @author -Wooden-
  31. */
  32. public final class RequestRefine extends AbstractRefinePacket
  33. {
  34. private static final String _C__D0_41_REQUESTREFINE = "[C] D0:41 RequestRefine";
  35. private int _targetItemObjId;
  36. private int _refinerItemObjId;
  37. private int _gemStoneItemObjId;
  38. private long _gemStoneCount;
  39. @Override
  40. protected void readImpl()
  41. {
  42. _targetItemObjId = readD();
  43. _refinerItemObjId = readD();
  44. _gemStoneItemObjId = readD();
  45. _gemStoneCount = readQ();
  46. }
  47. @Override
  48. protected void runImpl()
  49. {
  50. final L2PcInstance activeChar = getClient().getActiveChar();
  51. if (activeChar == null)
  52. {
  53. return;
  54. }
  55. L2ItemInstance targetItem = activeChar.getInventory().getItemByObjectId(_targetItemObjId);
  56. if (targetItem == null)
  57. {
  58. return;
  59. }
  60. L2ItemInstance refinerItem = activeChar.getInventory().getItemByObjectId(_refinerItemObjId);
  61. if (refinerItem == null)
  62. {
  63. return;
  64. }
  65. L2ItemInstance gemStoneItem = activeChar.getInventory().getItemByObjectId(_gemStoneItemObjId);
  66. if (gemStoneItem == null)
  67. {
  68. return;
  69. }
  70. if (!isValid(activeChar, targetItem, refinerItem, gemStoneItem))
  71. {
  72. activeChar.sendPacket(new ExVariationResult(0, 0, 0));
  73. activeChar.sendPacket(SystemMessageId.AUGMENTATION_FAILED_DUE_TO_INAPPROPRIATE_CONDITIONS);
  74. return;
  75. }
  76. final LifeStone ls = getLifeStone(refinerItem.getId());
  77. if (ls == null)
  78. {
  79. return;
  80. }
  81. final int lifeStoneLevel = ls.getLevel();
  82. final int lifeStoneGrade = ls.getGrade();
  83. if (_gemStoneCount != getGemStoneCount(targetItem.getItem().getItemGrade(), lifeStoneGrade))
  84. {
  85. activeChar.sendPacket(new ExVariationResult(0, 0, 0));
  86. activeChar.sendPacket(SystemMessageId.AUGMENTATION_FAILED_DUE_TO_INAPPROPRIATE_CONDITIONS);
  87. return;
  88. }
  89. // unequip item
  90. if (targetItem.isEquipped())
  91. {
  92. L2ItemInstance[] unequiped = activeChar.getInventory().unEquipItemInSlotAndRecord(targetItem.getLocationSlot());
  93. InventoryUpdate iu = new InventoryUpdate();
  94. for (L2ItemInstance itm : unequiped)
  95. {
  96. iu.addModifiedItem(itm);
  97. }
  98. activeChar.sendPacket(iu);
  99. activeChar.broadcastUserInfo();
  100. }
  101. // consume the life stone
  102. if (!activeChar.destroyItem("RequestRefine", refinerItem, 1, null, false))
  103. {
  104. return;
  105. }
  106. // consume the gemstones
  107. if (!activeChar.destroyItem("RequestRefine", gemStoneItem, _gemStoneCount, null, false))
  108. {
  109. return;
  110. }
  111. final L2Augmentation aug = AugmentationData.getInstance().generateRandomAugmentation(lifeStoneLevel, lifeStoneGrade, targetItem.getItem().getBodyPart(), refinerItem.getId(), targetItem);
  112. targetItem.setAugmentation(aug);
  113. final int stat12 = 0x0000FFFF & aug.getAugmentationId();
  114. final int stat34 = aug.getAugmentationId() >> 16;
  115. activeChar.sendPacket(new ExVariationResult(stat12, stat34, 1));
  116. InventoryUpdate iu = new InventoryUpdate();
  117. iu.addModifiedItem(targetItem);
  118. activeChar.sendPacket(iu);
  119. StatusUpdate su = new StatusUpdate(activeChar);
  120. su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad());
  121. activeChar.sendPacket(su);
  122. }
  123. @Override
  124. public String getType()
  125. {
  126. return _C__D0_41_REQUESTREFINE;
  127. }
  128. }