Reanimation06

l2jmobius c6 interlude - recovery item enchant broken

Feb 25th, 2024
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 19.71 KB | Gaming | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P L2J_Mobius_C6_Interlude
  3. diff --git dist/game/config/General.ini dist/game/config/General.ini
  4. index 2c9ca99..95ed0c2 100644
  5. --- dist/game/config/General.ini
  6. +++ dist/game/config/General.ini
  7. @@ -711,3 +711,9 @@
  8.  RandomCraftConsumeRefresh = 50000
  9.  
  10.  RandromCraftConsumeCreate = 300000
  11. +
  12. +#======================================================================================
  13. +#   BLACK COUPON RECOVERY 1 ITEM ENCHANT FAILED - ID ITEM CONSUME AFTER RECOVER ITEM
  14. +#======================================================================================
  15. +
  16. +BlackCouponId = 6392
  17. diff --git java/Base/RecoverySystem/ItemRecoveryManager.java java/Base/RecoverySystem/ItemRecoveryManager.java
  18. new file mode 100644
  19. index 0000000..f1097da
  20. --- /dev/null
  21. +++ java/Base/RecoverySystem/ItemRecoveryManager.java
  22. @@ -0,0 +1,286 @@
  23. +package Base.RecoverySystem;
  24. +
  25. +import java.sql.Connection;
  26. +import java.sql.PreparedStatement;
  27. +import java.sql.ResultSet;
  28. +import java.sql.SQLException;
  29. +import java.util.HashMap;
  30. +import java.util.Map;
  31. +
  32. +import org.l2jmobius.Config;
  33. +import org.l2jmobius.commons.database.DatabaseFactory;
  34. +import org.l2jmobius.gameserver.data.ItemTable;
  35. +import org.l2jmobius.gameserver.model.actor.Player;
  36. +import org.l2jmobius.gameserver.model.item.instance.Item;
  37. +
  38. +public class ItemRecoveryManager
  39. +{
  40. +   private final Map<Integer, Integer> validEnchantLevels;
  41. +  
  42. +   public ItemRecoveryManager()
  43. +   {
  44. +       validEnchantLevels = new HashMap<>();
  45. +       loadValidEnchantLevels();
  46. +   }
  47. +  
  48. +   public void recoverSelectedItem(Player player, int itemId, int enchantLevel)
  49. +   {
  50. +      
  51. +       Item recoveryItem = player.getInventory().getItemByItemId(Config.BLACK_COUPON_ID);
  52. +       if ((recoveryItem == null) || (recoveryItem.getCount() < 1))
  53. +       {
  54. +           player.sendMessage("No tienes suficientes items para recuperar este item.");
  55. +           return;
  56. +       }
  57. +      
  58. +       if (!isValidEnchantLevel(itemId, enchantLevel, player.getObjectId()))
  59. +       {
  60. +           player.sendMessage("No puedes recuperar este item con ese nivel de enchant.");
  61. +           return;
  62. +       }
  63. +      
  64. +       if (!isValidRecoveryItem(itemId, player.getObjectId()))
  65. +       {
  66. +           player.sendMessage("No puedes recuperar este item.");
  67. +           return;
  68. +       }
  69. +      
  70. +       Item recoveredItem = ItemTable.getInstance().createItem("RecoverItem", itemId, 1, player, null);
  71. +       recoveredItem.setEnchantLevel(enchantLevel);
  72. +      
  73. +       player.getInventory().addItem("RecoverItem", recoveredItem, player, player);
  74. +      
  75. +       player.destroyItemByItemId("RecoveryCost", Config.BLACK_COUPON_ID, 1, null, true);
  76. +
  77. +       player.sendPacket(new ItemList(player, true));
  78. +
  79. +       removeRecoverableItem(itemId, player.getObjectId());
  80. +      
  81. +       String itemName = recoveredItem.getItemName();
  82. +       String message = "Has recuperado el item " + itemName;
  83. +       if (enchantLevel > 0)
  84. +       {
  85. +           message += " +" + enchantLevel;
  86. +       }
  87. +       player.sendMessage(message);
  88. +   }
  89. +  
  90. +   public boolean isValidRecoveryItem(int itemId, int objectId)
  91. +   {
  92. +       Connection con = null;
  93. +       PreparedStatement statement = null;
  94. +       ResultSet resultSet = null;
  95. +      
  96. +       try
  97. +       {
  98. +           con = DatabaseFactory.getConnection();
  99. +           String sql = "SELECT item_id FROM item_recover WHERE object_id = ? AND item_id = ?";
  100. +           statement = con.prepareStatement(sql);
  101. +           statement.setInt(1, objectId);
  102. +           statement.setInt(2, itemId);
  103. +           resultSet = statement.executeQuery();
  104. +          
  105. +           return resultSet.next();
  106. +          
  107. +       }
  108. +       catch (SQLException e)
  109. +       {
  110. +           e.printStackTrace();
  111. +       }
  112. +       finally
  113. +       {
  114. +           try
  115. +           {
  116. +               if (resultSet != null)
  117. +               {
  118. +                   resultSet.close();
  119. +               }
  120. +           }
  121. +           catch (SQLException e)
  122. +           {
  123. +               e.printStackTrace();
  124. +           }
  125. +          
  126. +           try
  127. +           {
  128. +               if (statement != null)
  129. +               {
  130. +                   statement.close();
  131. +               }
  132. +           }
  133. +           catch (SQLException e)
  134. +           {
  135. +               e.printStackTrace();
  136. +           }
  137. +          
  138. +           try
  139. +           {
  140. +               if (con != null)
  141. +               {
  142. +                   con.close();
  143. +               }
  144. +           }
  145. +           catch (SQLException e)
  146. +           {
  147. +               e.printStackTrace();
  148. +           }
  149. +       }
  150. +      
  151. +       return false;
  152. +   }
  153. +  
  154. +   public boolean isValidEnchantLevel(int itemId, int enchantLevel, int objectId)
  155. +   {
  156. +       Connection con = null;
  157. +       PreparedStatement statement = null;
  158. +       ResultSet resultSet = null;
  159. +      
  160. +       try
  161. +       {
  162. +           con = DatabaseFactory.getConnection();
  163. +           String sql = "SELECT enchant_level FROM item_recover WHERE object_id = ? AND item_id = ?";
  164. +           statement = con.prepareStatement(sql);
  165. +           statement.setInt(1, objectId);
  166. +           statement.setInt(2, itemId);
  167. +           resultSet = statement.executeQuery();
  168. +          
  169. +           if (resultSet.next())
  170. +           {
  171. +               int validEnchantLevel = resultSet.getInt("enchant_level");
  172. +               return enchantLevel == validEnchantLevel;
  173. +           }
  174. +       }
  175. +       catch (SQLException e)
  176. +       {
  177. +           e.printStackTrace();
  178. +       }
  179. +       finally
  180. +       {
  181. +           try
  182. +           {
  183. +               if (resultSet != null)
  184. +               {
  185. +                   resultSet.close();
  186. +               }
  187. +           }
  188. +           catch (SQLException e)
  189. +           {
  190. +               e.printStackTrace();
  191. +           }
  192. +           try
  193. +           {
  194. +               if (statement != null)
  195. +               {
  196. +                   statement.close();
  197. +               }
  198. +           }
  199. +           catch (SQLException e)
  200. +           {
  201. +               e.printStackTrace();
  202. +           }
  203. +           try
  204. +           {
  205. +               if (con != null)
  206. +               {
  207. +                   con.close();
  208. +               }
  209. +           }
  210. +           catch (SQLException e)
  211. +           {
  212. +               e.printStackTrace();
  213. +           }
  214. +       }
  215. +      
  216. +       return false;
  217. +   }
  218. +  
  219. +   public void removeRecoverableItem(int itemId, int objectId)
  220. +   {
  221. +       Connection con = null;
  222. +       PreparedStatement statement = null;
  223. +      
  224. +       try
  225. +       {
  226. +           con = DatabaseFactory.getConnection();
  227. +           String sql = "DELETE FROM item_recover WHERE item_id = ? AND object_id = ?";
  228. +           statement = con.prepareStatement(sql);
  229. +           statement.setInt(1, itemId);
  230. +           statement.setInt(2, objectId);
  231. +           statement.executeUpdate();
  232. +       }
  233. +       catch (SQLException e)
  234. +       {
  235. +          
  236. +           e.printStackTrace();
  237. +       }
  238. +       finally
  239. +       {
  240. +           try
  241. +           {
  242. +               if (statement != null)
  243. +               {
  244. +                   statement.close();
  245. +               }
  246. +               if (con != null)
  247. +               {
  248. +                   con.close();
  249. +               }
  250. +           }
  251. +           catch (SQLException e)
  252. +           {
  253. +              
  254. +               e.printStackTrace();
  255. +           }
  256. +       }
  257. +   }
  258. +  
  259. +   private void loadValidEnchantLevels()
  260. +   {
  261. +       Connection con = null;
  262. +       PreparedStatement statement = null;
  263. +       ResultSet resultSet = null;
  264. +      
  265. +       try
  266. +       {
  267. +           con = DatabaseFactory.getConnection();
  268. +           String sql = "SELECT item_id, enchant_level FROM item_recover";
  269. +           statement = con.prepareStatement(sql);
  270. +           resultSet = statement.executeQuery();
  271. +          
  272. +           while (resultSet.next())
  273. +           {
  274. +               int itemId = resultSet.getInt("item_id");
  275. +               int enchantLevel = resultSet.getInt("enchant_level");
  276. +              
  277. +               validEnchantLevels.put(itemId, enchantLevel);
  278. +           }
  279. +       }
  280. +       catch (SQLException e)
  281. +       {
  282. +          
  283. +           e.printStackTrace();
  284. +       }
  285. +       finally
  286. +       {
  287. +           try
  288. +           {
  289. +               if (resultSet != null)
  290. +               {
  291. +                   resultSet.close();
  292. +               }
  293. +               if (statement != null)
  294. +               {
  295. +                   statement.close();
  296. +               }
  297. +               if (con != null)
  298. +               {
  299. +                   con.close();
  300. +               }
  301. +           }
  302. +           catch (SQLException e)
  303. +           {
  304. +              
  305. +               e.printStackTrace();
  306. +           }
  307. +       }
  308. +   }
  309. +  
  310. +}
  311. \ No newline at end of file
  312. diff --git java/Base/RecoverySystem/RecoverableItem.java java/Base/RecoverySystem/RecoverableItem.java
  313. new file mode 100644
  314. index 0000000..379e9d6
  315. --- /dev/null
  316. +++ java/Base/RecoverySystem/RecoverableItem.java
  317. @@ -0,0 +1,111 @@
  318. +package Base.RecoverySystem;
  319. +
  320. +import java.sql.Connection;
  321. +import java.sql.PreparedStatement;
  322. +import java.sql.SQLException;
  323. +
  324. +import org.l2jmobius.commons.database.DatabaseFactory;
  325. +import org.l2jmobius.gameserver.data.ItemTable;
  326. +import org.l2jmobius.gameserver.model.item.ItemTemplate;
  327. +
  328. +public class RecoverableItem
  329. +{
  330. +   private final int objectId;
  331. +   private final int itemId;
  332. +   private final String itemName;
  333. +   private final int enchantLevel;
  334. +   private boolean selected;
  335. +  
  336. +   public RecoverableItem(int objectId, int itemId, String itemName, int enchantLevel)
  337. +   {
  338. +       this.objectId = objectId;
  339. +       this.itemId = itemId;
  340. +       this.itemName = itemName;
  341. +       this.enchantLevel = enchantLevel;
  342. +       this.selected = false;
  343. +   }
  344. +  
  345. +   public int getObjectId()
  346. +   {
  347. +       return objectId;
  348. +   }
  349. +  
  350. +   public int getItemId()
  351. +   {
  352. +       return itemId;
  353. +   }
  354. +  
  355. +   public String getItemName()
  356. +   {
  357. +       return itemName;
  358. +   }
  359. +  
  360. +   public int getEnchantLevel()
  361. +   {
  362. +       return enchantLevel;
  363. +   }
  364. +  
  365. +   public void saveBrokenItemInfo()
  366. +   {
  367. +       Connection con = null;
  368. +       PreparedStatement statement = null;
  369. +      
  370. +       try
  371. +       {
  372. +           con = DatabaseFactory.getConnection();
  373. +           String sql = "INSERT INTO item_recover (object_id, item_id, item_name, enchant_level) VALUES (?, ?, ?, ?)";
  374. +           statement = con.prepareStatement(sql);
  375. +           statement.setInt(1, objectId);
  376. +           statement.setInt(2, itemId);
  377. +           statement.setString(3, itemName);
  378. +           statement.setInt(4, enchantLevel);
  379. +           statement.execute();
  380. +       }
  381. +       catch (SQLException e)
  382. +       {
  383. +          
  384. +           e.printStackTrace();
  385. +       }
  386. +       finally
  387. +       {
  388. +          
  389. +           try
  390. +           {
  391. +               if (statement != null)
  392. +               {
  393. +                   statement.close();
  394. +               }
  395. +               if (con != null)
  396. +               {
  397. +                   con.close();
  398. +               }
  399. +           }
  400. +           catch (SQLException e)
  401. +           {
  402. +              
  403. +               e.printStackTrace();
  404. +           }
  405. +       }
  406. +   }
  407. +  
  408. +   public boolean isSelected()
  409. +   {
  410. +       return selected;
  411. +   }
  412. +  
  413. +   public void setSelected(boolean selected)
  414. +   {
  415. +       this.selected = selected;
  416. +   }
  417. +  
  418. +   public String getIcon()
  419. +   {
  420. +       return getItem().getIcon(itemId);
  421. +   }
  422. +  
  423. +   public ItemTemplate getItem()
  424. +   {
  425. +       return ItemTable.getInstance().getTemplate(itemId);
  426. +   }
  427. +  
  428. +}
  429. \ No newline at end of file
  430. diff --git java/org/l2jmobius/Config.java java/org/l2jmobius/Config.java
  431. index 66735d1..290d922 100644
  432. --- java/org/l2jmobius/Config.java
  433. +++ java/org/l2jmobius/Config.java
  434. @@ -128,6 +128,8 @@
  435.     public static int RANDOM_CRAFT_ITEM_ID_CONSUME;
  436.     public static int RANDOM_CRAFT_ITEM_CONSUME_REFRESH;
  437.     public static int RANDOM_CRAFT_ITEM_CONSUME_CREATE;
  438. +  
  439. +   public static int BLACK_COUPON_ID;
  440.     public static boolean SHOW_GM_LOGIN;
  441.     public static boolean GM_STARTUP_INVISIBLE;
  442.     public static boolean GM_SPECIAL_EFFECT;
  443. @@ -1301,7 +1303,7 @@
  444.         RANDOM_CRAFT_ITEM_CONSUME_REFRESH = generalConfig.getInt("RandomCraftConsumeRefresh", 50000);
  445.        
  446.         RANDOM_CRAFT_ITEM_CONSUME_CREATE = generalConfig.getInt("RandromCraftConsumeCreate", 300000);
  447. -      
  448. +       BLACK_COUPON_ID = generalConfig.getInt("BlackCouponId", 6392);
  449.         ALT_DEV_NO_QUESTS = generalConfig.getBoolean("AltDevNoQuests", false);
  450.         ALT_DEV_NO_SPAWNS = generalConfig.getBoolean("AltDevNoSpawns", false);
  451.         ALT_DEV_NO_SCRIPT = generalConfig.getBoolean("AltDevNoScript", false);
  452. diff --git java/org/l2jmobius/gameserver/handler/ItemHandler.java java/org/l2jmobius/gameserver/handler/ItemHandler.java
  453. index 6af36f0..4d7df14 100644
  454. --- java/org/l2jmobius/gameserver/handler/ItemHandler.java
  455. +++ java/org/l2jmobius/gameserver/handler/ItemHandler.java
  456. @@ -40,6 +40,7 @@
  457.  import org.l2jmobius.gameserver.handler.itemhandlers.FishShots;
  458.  import org.l2jmobius.gameserver.handler.itemhandlers.Harvester;
  459.  import org.l2jmobius.gameserver.handler.itemhandlers.HeroCustomItem;
  460. +import org.l2jmobius.gameserver.handler.itemhandlers.Item_Recover;
  461.  import org.l2jmobius.gameserver.handler.itemhandlers.JackpotSeed;
  462.  import org.l2jmobius.gameserver.handler.itemhandlers.MOSKey;
  463.  import org.l2jmobius.gameserver.handler.itemhandlers.MapForestOfTheDead;
  464. @@ -124,6 +125,7 @@
  465.         registerItemHandler(new SpecialXMas());
  466.         registerItemHandler(new SpiritShot());
  467.         registerItemHandler(new SummonItems());
  468. +       registerItemHandler(new Item_Recover());
  469.        
  470.         LOGGER.info("ItemHandler: Loaded " + _datatable.size() + " handlers.");
  471.     }
  472. diff --git java/org/l2jmobius/gameserver/handler/itemhandlers/Item_Recover.java java/org/l2jmobius/gameserver/handler/itemhandlers/Item_Recover.java
  473. new file mode 100644
  474. index 0000000..880fec9
  475. --- /dev/null
  476. +++ java/org/l2jmobius/gameserver/handler/itemhandlers/Item_Recover.java
  477. @@ -0,0 +1,169 @@
  478. +package org.l2jmobius.gameserver.handler.itemhandlers;
  479. +
  480. +import java.sql.Connection;
  481. +import java.sql.PreparedStatement;
  482. +import java.sql.ResultSet;
  483. +import java.sql.SQLException;
  484. +import java.util.ArrayList;
  485. +import java.util.List;
  486. +
  487. +import org.l2jmobius.Config;
  488. +import org.l2jmobius.commons.database.DatabaseFactory;
  489. +import org.l2jmobius.gameserver.handler.IItemHandler;
  490. +import org.l2jmobius.gameserver.model.actor.Playable;
  491. +import org.l2jmobius.gameserver.model.actor.Player;
  492. +import org.l2jmobius.gameserver.model.item.instance.Item;
  493. +import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
  494. +import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
  495. +
  496. +import Base.RecoverySystem.RecoverableItem;
  497. +
  498. +/**
  499. + * @author Terius
  500. + */
  501. +public class Item_Recover implements IItemHandler
  502. +{
  503. +  
  504. +   private static final int[] ITEM_IDS =
  505. +   {
  506. +       Config.BLACK_COUPON_ID
  507. +   };
  508. +  
  509. +   @Override
  510. +   public void useItem(Playable playable, Item item)
  511. +   {
  512. +       if (!(playable instanceof Player))
  513. +       {
  514. +           return;
  515. +       }
  516. +      
  517. +       Player activeChar = (Player) playable;
  518. +      
  519. +       openRecoveryWindow(activeChar);
  520. +   }
  521. +  
  522. +   private static void openRecoveryWindow(Player player)
  523. +   {
  524. +      
  525. +       List<RecoverableItem> recoverableItems = getRecoverableItems(player.getObjectId());
  526. +      
  527. +       if (recoverableItems.isEmpty())
  528. +       {
  529. +          
  530. +           player.sendMessage("No hay items recuperables disponibles.");
  531. +           return;
  532. +       }
  533. +      
  534. +       NpcHtmlMessage html = new NpcHtmlMessage(1);
  535. +      
  536. +       String content = generateRecoveryList(recoverableItems);
  537. +       html.setHtml(content);
  538. +      
  539. +       player.sendPacket(html);
  540. +       player.sendPacket(ActionFailed.STATIC_PACKET);
  541. +   }
  542. +  
  543. +   private static String generateRecoveryList(List<RecoverableItem> recoverableItems)
  544. +   {
  545. +      
  546. +       StringBuilder sb = new StringBuilder();
  547. +       sb.append("<html><body><center><font color=\"LEVEL\">Items Recuperables</font><br><br>");
  548. +      
  549. +       sb.append("<font color=\"FF0000\">Solo puedes recuperar 1 item a la vez.</font><br>");
  550. +      
  551. +       for (RecoverableItem item : recoverableItems)
  552. +       {
  553. +           sb.append("<img src=\"L2UI.SquareGray\" width=295 height=1>");
  554. +           sb.append("<table>");
  555. +          
  556. +           sb.append("<tr>");
  557. +           sb.append("<td>");
  558. +           sb.append("<img src=\"").append(item.getIcon()).append("\" width=32 height=32>");
  559. +           sb.append("</td>");
  560. +           sb.append("<td width=210><font color=\"FFFFFF\">").append(item.getItemName()).append("</font>");
  561. +          
  562. +           int enchantLevel = item.getEnchantLevel();
  563. +           if (enchantLevel > 0)
  564. +           {
  565. +               sb.append(" <font color=\"00FF00\">+").append(enchantLevel).append("</font>");
  566. +           }
  567. +          
  568. +           sb.append("</td>");
  569. +          
  570. +           int itemId = item.getItemId();
  571. +           sb.append("<td><button value=\"Recuperar\" action=\"bypass -h recoverSelectedItem ").append(itemId).append(" ").append(enchantLevel).append("\" width=75 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\"></td>");
  572. +          
  573. +           sb.append("</tr>");
  574. +          
  575. +           sb.append("</table>");
  576. +           sb.append("<img src=\"L2UI.SquareGray\" width=295 height=1>");
  577. +           sb.append("<br>");
  578. +       }
  579. +      
  580. +       sb.append("</center></body></html>");
  581. +       return sb.toString();
  582. +   }
  583. +  
  584. +   private static List<RecoverableItem> getRecoverableItems(int objectId)
  585. +   {
  586. +       List<RecoverableItem> recoverableItems = new ArrayList<>();
  587. +       Connection con = null;
  588. +       PreparedStatement statement = null;
  589. +       ResultSet resultSet = null;
  590. +      
  591. +       try
  592. +       {
  593. +           con = DatabaseFactory.getConnection();
  594. +           String sql = "SELECT item_id, item_name, enchant_level FROM item_recover WHERE object_id = ? ORDER BY id DESC LIMIT 10";
  595. +           statement = con.prepareStatement(sql);
  596. +           statement.setInt(1, objectId);
  597. +           resultSet = statement.executeQuery();
  598. +          
  599. +           while (resultSet.next())
  600. +           {
  601. +               int itemId = resultSet.getInt("item_id");
  602. +               String itemName = resultSet.getString("item_name");
  603. +               int enchantLevel = resultSet.getInt("enchant_level");
  604. +              
  605. +               RecoverableItem item = new RecoverableItem(objectId, itemId, itemName, enchantLevel);
  606. +               recoverableItems.add(item);
  607. +           }
  608. +       }
  609. +       catch (SQLException e)
  610. +       {
  611. +          
  612. +           e.printStackTrace();
  613. +       }
  614. +       finally
  615. +       {
  616. +           try
  617. +           {
  618. +               if (resultSet != null)
  619. +               {
  620. +                   resultSet.close();
  621. +               }
  622. +               if (statement != null)
  623. +               {
  624. +                   statement.close();
  625. +               }
  626. +               if (con != null)
  627. +               {
  628. +                   con.close();
  629. +               }
  630. +           }
  631. +           catch (SQLException e)
  632. +           {
  633. +              
  634. +               e.printStackTrace();
  635. +           }
  636. +       }
  637. +      
  638. +       return recoverableItems;
  639. +   }
  640. +  
  641. +   @Override
  642. +   public int[] getItemIds()
  643. +   {
  644. +       return ITEM_IDS;
  645. +   }
  646. +}
  647. \ No newline at end of file
  648. diff --git java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java
  649. index 1b2276f..990f455 100644
  650. --- java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java
  651. +++ java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java
  652. @@ -39,6 +39,8 @@
  653.  import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
  654.  import org.l2jmobius.gameserver.util.GMAudit;
  655.  
  656. +import Base.RecoverySystem.ItemRecoveryManager;
  657. +
  658.  public class RequestBypassToServer implements ClientPacket
  659.  {
  660.     // S
  661. @@ -120,6 +122,19 @@
  662.                     npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(player.getX(), player.getY(), player.getZ(), 0));
  663.                 }
  664.             }
  665. +           else if (_command.startsWith("recoverSelectedItem"))
  666. +           {
  667. +               String[] bypassParts = _command.split(" ");
  668. +               if (bypassParts.length >= 3)
  669. +               {
  670. +                   int itemId = Integer.parseInt(bypassParts[1]);
  671. +                   int enchantLevel = Integer.parseInt(bypassParts[2]);
  672. +                  
  673. +                   ItemRecoveryManager itemRecoveryManager = new ItemRecoveryManager();
  674. +                   itemRecoveryManager.recoverSelectedItem(player, itemId, enchantLevel);
  675. +               }
  676. +           }
  677. +          
  678.             else if (_command.startsWith("player_help "))
  679.             {
  680.                 final String path = _command.substring(12);
  681. diff --git java/org/l2jmobius/gameserver/network/clientpackets/RequestEnchantItem.java java/org/l2jmobius/gameserver/network/clientpackets/RequestEnchantItem.java
  682. index 296484a..9430db4 100644
  683. --- java/org/l2jmobius/gameserver/network/clientpackets/RequestEnchantItem.java
  684. +++ java/org/l2jmobius/gameserver/network/clientpackets/RequestEnchantItem.java
  685. @@ -16,7 +16,12 @@
  686.   */
  687.  package org.l2jmobius.gameserver.network.clientpackets;
  688.  
  689. +import java.sql.Connection;
  690. +import java.sql.PreparedStatement;
  691. +import java.sql.SQLException;
  692. +
  693.  import org.l2jmobius.Config;
  694. +import org.l2jmobius.commons.database.DatabaseFactory;
  695.  import org.l2jmobius.commons.network.ReadablePacket;
  696.  import org.l2jmobius.commons.util.Rnd;
  697.  import org.l2jmobius.gameserver.enums.IllegalActionPunishmentType;
  698. @@ -733,6 +738,8 @@
  699.                     player.broadcastUserInfo();
  700.                    
  701.                     final World world = World.getInstance();
  702. +                   saveBrokenItemInfo(player.getObjectId(), item.getItemId(), item.getItemName(), item.getEnchantLevel());
  703. +                  
  704.                     world.removeObject(destroyItem);
  705.                 }
  706.                 else if (blessedScroll)
  707. @@ -756,4 +763,47 @@
  708.         player.sendPacket(new ItemList(player, false)); // TODO update only the enchanted item
  709.         player.broadcastUserInfo();
  710.     }
  711. +  
  712. +   private static void saveBrokenItemInfo(int objectId, int itemId, String itemName, int enchantLevel)
  713. +   {
  714. +       Connection con = null;
  715. +       PreparedStatement statement = null;
  716. +      
  717. +       try
  718. +       {
  719. +           con = DatabaseFactory.getConnection();
  720. +           String sql = "INSERT INTO item_recover (object_id, item_id, item_name, enchant_level) VALUES (?, ?, ?, ?)";
  721. +           statement = con.prepareStatement(sql);
  722. +           statement.setInt(1, objectId);
  723. +           statement.setInt(2, itemId);
  724. +           statement.setString(3, itemName);
  725. +           statement.setInt(4, enchantLevel);
  726. +           statement.execute();
  727. +       }
  728. +       catch (SQLException e)
  729. +       {
  730. +          
  731. +           e.printStackTrace();
  732. +       }
  733. +       finally
  734. +       {
  735. +          
  736. +           try
  737. +           {
  738. +               if (statement != null)
  739. +               {
  740. +                   statement.close();
  741. +               }
  742. +               if (con != null)
  743. +               {
  744. +                   con.close();
  745. +               }
  746. +           }
  747. +           catch (SQLException e)
  748. +           {
  749. +              
  750. +               e.printStackTrace();
  751. +           }
  752. +       }
  753. +   }
  754.  }
  755.  
Add Comment
Please, Sign In to add comment