Advertisement
Guest User

Untitled

a guest
Mar 5th, 2018
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.71 KB | None | 0 0
  1. /* L2jFrozen Project - www.l2jfrozen.com
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation; either version 2, or (at your option)
  6. * any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program; if not, write to the Free Software
  15. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  16. * 02111-1307, USA.
  17. *
  18. * http://www.gnu.org/copyleft/gpl.html
  19. */
  20. package com.l2jfrozen.gameserver.network.clientpackets;
  21.  
  22. import com.l2jfrozen.Config;
  23. import com.l2jfrozen.gameserver.datatables.xml.AugmentationData;
  24. import com.l2jfrozen.gameserver.model.L2World;
  25. import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  26. import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  27. import com.l2jfrozen.gameserver.network.SystemMessageId;
  28. import com.l2jfrozen.gameserver.network.serverpackets.ExVariationResult;
  29. import com.l2jfrozen.gameserver.network.serverpackets.InventoryUpdate;
  30. import com.l2jfrozen.gameserver.network.serverpackets.StatusUpdate;
  31. import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
  32. import com.l2jfrozen.gameserver.templates.L2Item;
  33. import com.l2jfrozen.gameserver.util.Util;
  34.  
  35. /**
  36. * Format:(ch) dddd
  37. * @author -Wooden-
  38. */
  39. public final class RequestRefine extends L2GameClientPacket
  40. {
  41. private int _targetItemObjId;
  42. private int _refinerItemObjId;
  43. private int _gemstoneItemObjId;
  44. private int _gemstoneCount;
  45.  
  46. @Override
  47. protected void readImpl()
  48. {
  49. _targetItemObjId = readD();
  50. _refinerItemObjId = readD();
  51. _gemstoneItemObjId = readD();
  52. _gemstoneCount = readD();
  53. }
  54.  
  55. @Override
  56. protected void runImpl()
  57. {
  58. final L2PcInstance activeChar = getClient().getActiveChar();
  59. if (activeChar == null)
  60. return;
  61.  
  62. final L2ItemInstance targetItem = (L2ItemInstance) L2World.getInstance().findObject(_targetItemObjId);
  63. final L2ItemInstance refinerItem = (L2ItemInstance) L2World.getInstance().findObject(_refinerItemObjId);
  64. final L2ItemInstance gemstoneItem = (L2ItemInstance) L2World.getInstance().findObject(_gemstoneItemObjId);
  65.  
  66. if (targetItem == null || refinerItem == null || gemstoneItem == null || targetItem.getOwnerId() != activeChar.getObjectId() || refinerItem.getOwnerId() != activeChar.getObjectId() || gemstoneItem.getOwnerId() != activeChar.getObjectId() || activeChar.getLevel() < 46) // must be lvl 46
  67. {
  68. activeChar.sendPacket(new ExVariationResult(0, 0, 0));
  69. activeChar.sendPacket(new SystemMessage(SystemMessageId.AUGMENTATION_FAILED_DUE_TO_INAPPROPRIATE_CONDITIONS));
  70. return;
  71. }
  72.  
  73. // unequip item
  74. if (targetItem.isEquipped())
  75. {
  76. activeChar.disarmWeapons();
  77. }
  78.  
  79. if (TryAugmentItem(activeChar, targetItem, refinerItem, gemstoneItem))
  80. {
  81. final int stat12 = 0x0000FFFF & targetItem.getAugmentation().getAugmentationId();
  82. final int stat34 = targetItem.getAugmentation().getAugmentationId() >> 16;
  83. activeChar.sendPacket(new ExVariationResult(stat12, stat34, 1));
  84. activeChar.sendPacket(new SystemMessage(SystemMessageId.THE_ITEM_WAS_SUCCESSFULLY_AUGMENTED));
  85. }
  86. else
  87. {
  88. activeChar.sendPacket(new ExVariationResult(0, 0, 0));
  89. activeChar.sendPacket(new SystemMessage(SystemMessageId.AUGMENTATION_FAILED_DUE_TO_INAPPROPRIATE_CONDITIONS));
  90. }
  91. }
  92.  
  93. boolean TryAugmentItem(final L2PcInstance player, final L2ItemInstance targetItem, final L2ItemInstance refinerItem, final L2ItemInstance gemstoneItem)
  94. {
  95. if (targetItem.isAugmented() || targetItem.isWear())
  96. {
  97. player.sendMessage("You can't augment items while you wear it");
  98. return false;
  99. }
  100.  
  101. if (player.isDead())
  102. {
  103. player.sendPacket(new SystemMessage(SystemMessageId.YOU_CANNOT_AUGMENT_ITEMS_WHILE_DEAD));
  104. return false;
  105. }
  106.  
  107. if (player.isSitting())
  108. {
  109. player.sendPacket(new SystemMessage(SystemMessageId.YOU_CANNOT_AUGMENT_ITEMS_WHILE_SITTING_DOWN));
  110. return false;
  111. }
  112.  
  113. if (player.isFishing())
  114. {
  115. player.sendPacket(new SystemMessage(SystemMessageId.YOU_CANNOT_AUGMENT_ITEMS_WHILE_FISHING));
  116. return false;
  117. }
  118.  
  119. if (player.isParalyzed())
  120. {
  121. player.sendPacket(new SystemMessage(SystemMessageId.YOU_CANNOT_AUGMENT_ITEMS_WHILE_PARALYZED));
  122. return false;
  123. }
  124.  
  125. if (player.getActiveTradeList() != null)
  126. {
  127. player.sendMessage("You cannot augment while trading");
  128. return false;
  129. }
  130.  
  131. if (player.getPrivateStoreType() != L2PcInstance.STORE_PRIVATE_NONE)
  132. {
  133. player.sendPacket(new SystemMessage(SystemMessageId.YOU_CANNOT_AUGMENT_ITEMS_WHILE_A_PRIVATE_STORE_OR_PRIVATE_WORKSHOP_IS_IN_OPERATION));
  134. return false;
  135. }
  136.  
  137. // check for the items to be in the inventory of the owner
  138. if (player.getInventory().getItemByObjectId(refinerItem.getObjectId()) == null)
  139. {
  140. Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " tried to refine an item with wrong LifeStone-id.", Config.DEFAULT_PUNISH);
  141. return false;
  142. }
  143.  
  144. if (player.getInventory().getItemByObjectId(targetItem.getObjectId()) == null)
  145. {
  146. Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " tried to refine an item with wrong Weapon-id.", Config.DEFAULT_PUNISH);
  147. return false;
  148. }
  149.  
  150. if (player.getInventory().getItemByObjectId(gemstoneItem.getObjectId()) == null)
  151. {
  152. Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " tried to refine an item with wrong Gemstone-id.", Config.DEFAULT_PUNISH);
  153. return false;
  154. }
  155.  
  156. final int itemGrade = targetItem.getItem().getItemGrade();
  157. final int itemType = targetItem.getItem().getType2();
  158. final int lifeStoneId = refinerItem.getItemId();
  159. final int gemstoneItemId = gemstoneItem.getItemId();
  160.  
  161. // is the refiner Item a life stone?
  162. if (lifeStoneId < 8723 || lifeStoneId > 8762)
  163. return false;
  164.  
  165. // must be a weapon, must be > d grade
  166. // TODO: can do better? : currently: using isdestroyable() as a check for hero / cursed weapons
  167. if (itemGrade < L2Item.CRYSTAL_C || itemType != L2Item.TYPE2_WEAPON || !targetItem.isDestroyable())
  168. return false;
  169.  
  170. // player must be able to use augmentation
  171. if (player.getPrivateStoreType() != L2PcInstance.STORE_PRIVATE_NONE || player.isDead() || player.isParalyzed() || player.isFishing() || player.isSitting())
  172. return false;
  173.  
  174. int modifyGemstoneCount = _gemstoneCount;
  175. final int lifeStoneLevel = getLifeStoneLevel(lifeStoneId);
  176. final int lifeStoneGrade = getLifeStoneGrade(lifeStoneId);
  177. switch (itemGrade)
  178. {
  179. case L2Item.CRYSTAL_C:
  180. if (player.getLevel() < 46 || gemstoneItemId != 2130)
  181. return false;
  182. modifyGemstoneCount = 20;
  183. break;
  184. case L2Item.CRYSTAL_B:
  185. if (player.getLevel() < 52 || gemstoneItemId != 2130)
  186. return false;
  187. modifyGemstoneCount = 30;
  188. break;
  189. case L2Item.CRYSTAL_A:
  190. if (player.getLevel() < 61 || gemstoneItemId != 2131)
  191. return false;
  192. modifyGemstoneCount = 20;
  193. break;
  194. case L2Item.CRYSTAL_S:
  195. if (player.getLevel() < 76 || gemstoneItemId != 2131)
  196. return false;
  197. modifyGemstoneCount = 25;
  198. break;
  199. }
  200.  
  201. // check if the lifestone is appropriate for this player
  202. switch (lifeStoneLevel)
  203. {
  204. case 1:
  205. if (player.getLevel() < 46)
  206. return false;
  207. break;
  208. case 2:
  209. if (player.getLevel() < 49)
  210. return false;
  211. break;
  212. case 3:
  213. if (player.getLevel() < 52)
  214. return false;
  215. break;
  216. case 4:
  217. if (player.getLevel() < 55)
  218. return false;
  219. break;
  220. case 5:
  221. if (player.getLevel() < 58)
  222. return false;
  223. break;
  224. case 6:
  225. if (player.getLevel() < 61)
  226. return false;
  227. break;
  228. case 7:
  229. if (player.getLevel() < 64)
  230. return false;
  231. break;
  232. case 8:
  233. if (player.getLevel() < 67)
  234. return false;
  235. break;
  236. case 9:
  237. if (player.getLevel() < 70)
  238. return false;
  239. break;
  240. case 10:
  241. if (player.getLevel() < 76)
  242. return false;
  243. break;
  244. }
  245.  
  246. // Check if player has all gemstorne on inventory
  247. if (gemstoneItem.getCount() - modifyGemstoneCount < 0)
  248. return false;
  249.  
  250. // consume the life stone
  251. if (!player.destroyItem("RequestRefine", refinerItem, null, false))
  252. return false;
  253.  
  254. // consume the gemstones
  255. player.destroyItem("RequestRefine", _gemstoneItemObjId, modifyGemstoneCount, null, false);
  256.  
  257. // generate augmentation
  258. targetItem.setAugmentation(AugmentationData.getInstance().generateRandomAugmentation(targetItem, lifeStoneLevel, lifeStoneGrade));
  259.  
  260. // finish and send the inventory update packet
  261. final InventoryUpdate iu = new InventoryUpdate();
  262. iu.addModifiedItem(targetItem);
  263. player.sendPacket(iu);
  264.  
  265. final StatusUpdate su = new StatusUpdate(player.getObjectId());
  266. su.addAttribute(StatusUpdate.CUR_LOAD, player.getCurrentLoad());
  267. player.sendPacket(su);
  268.  
  269. return true;
  270. }
  271.  
  272. private int getLifeStoneGrade(int itemId)
  273. {
  274. itemId -= 8723;
  275. if (itemId < 10)
  276. return 0; // normal grade
  277.  
  278. if (itemId < 20)
  279. return 1; // mid grade
  280.  
  281. if (itemId < 30)
  282. return 2; // high grade
  283.  
  284. return 3; // top grade
  285. }
  286.  
  287. private int getLifeStoneLevel(int itemId)
  288. {
  289. itemId -= 10 * getLifeStoneGrade(itemId);
  290. itemId -= 8722;
  291. return itemId;
  292. }
  293.  
  294. @Override
  295. public String getType()
  296. {
  297. return "[C] D0:2C RequestRefine";
  298. }
  299. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement