Advertisement
tensador125

Random Craft System Interlude v1

Jun 20th, 2023 (edited)
1,327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 21.68 KB | Gaming | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P OrionRev28
  3. diff --git files/game/config/main/L2jOrion.ini files/game/config/main/L2jOrion.ini
  4. index 97ef069..126f1bc 100644
  5. --- files/game/config/main/L2jOrion.ini
  6. +++ files/game/config/main/L2jOrion.ini
  7. @@ -511,3 +511,13 @@
  8.  
  9.  BlackCouponId = 6392
  10.  
  11. +#==========================================================================
  12. +#   RANDOM CRAFT SYSTEM NPC - ID - CONSUME - REFRESH - CREATE - ITEMS
  13. +#==========================================================================
  14. +
  15. +RandomCraftItemId = 57
  16. +
  17. +RandomCraftConsumeRefresh = 50000
  18. +
  19. +RandromCraftConsumeCreate = 300000
  20. +
  21. diff --git files/game/data/xml/RandomCraft.xml files/game/data/xml/RandomCraft.xml
  22. new file mode 100644
  23. index 0000000..c4972de
  24. --- /dev/null
  25. +++ files/game/data/xml/RandomCraft.xml
  26. @@ -0,0 +1,27 @@
  27. +<?xml version="1.0" encoding="UTF-8"?>
  28. +    <rewards>
  29. +        <item id="6392" count="1" chance="10" />
  30. +        <item id="5714" count="1" chance="10" />
  31. +        <item id="5715" count="1" chance="10" />
  32. +        <item id="5720" count="1" chance="10" />
  33. +        <item id="5727" count="1" chance="10" />
  34. +        <item id="5709" count="1" chance="10" />
  35. +        <item id="5765" count="1" chance="10" />
  36. +        <item id="5768" count="1" chance="10" />
  37. +        <item id="5777" count="1" chance="10" />
  38. +        <item id="5778" count="1" chance="10" />
  39. +        <item id="5779" count="1" chance="10" />
  40. +        <item id="5780" count="1" chance="10" />
  41. +        <item id="5787" count="1" chance="10" />
  42. +        <item id="5788" count="1" chance="10" />
  43. +        <item id="5783" count="1" chance="10" />
  44. +        <item id="5784" count="1" chance="10" />
  45. +        <item id="5781" count="1" chance="10" />
  46. +        <item id="5644" count="1" chance="20" />
  47. +        <item id="5706" count="1" chance="20" />
  48. +        <item id="5704" count="1" chance="20" />
  49. +        <item id="6372" count="1" chance="25" />
  50. +        <item id="6377" count="1" chance="50" />
  51. +        <item id="6367" count="1" chance="40" />
  52. +    </rewards>
  53. +
  54. diff --git src/Base/RandomCraftSystem/RandomCraftItem.java src/Base/RandomCraftSystem/RandomCraftItem.java
  55. new file mode 100644
  56. index 0000000..3687699
  57. --- /dev/null
  58. +++ src/Base/RandomCraftSystem/RandomCraftItem.java
  59. @@ -0,0 +1,48 @@
  60. +package Base.RandomCraftSystem;
  61. +
  62. +import l2jorion.game.datatables.sql.ItemTable;
  63. +import l2jorion.game.templates.L2Item;
  64. +
  65. +/**
  66. + * @author Terius
  67. + */
  68. +
  69. +public class RandomCraftItem
  70. +{
  71. +   private int id;
  72. +   private int cantidad;
  73. +   private double probabilidad;
  74. +  
  75. +   public RandomCraftItem(int id, int cantidad, double probabilidad)
  76. +   {
  77. +       this.id = id;
  78. +       this.cantidad = cantidad;
  79. +       this.probabilidad = probabilidad;
  80. +   }
  81. +  
  82. +   public int getId()
  83. +   {
  84. +       return id;
  85. +   }
  86. +  
  87. +   public int getCantidad()
  88. +   {
  89. +       return cantidad;
  90. +   }
  91. +  
  92. +   public double getProbabilidad()
  93. +   {
  94. +       return probabilidad;
  95. +   }
  96. +  
  97. +   public String getIcon()
  98. +   {
  99. +       return getItem().getIcon();
  100. +   }
  101. +  
  102. +   public L2Item getItem()
  103. +   {
  104. +       return ItemTable.getInstance().getTemplate(id);
  105. +   }
  106. +  
  107. +}
  108. diff --git src/Base/RandomCraftSystem/RandomCraftXML.java src/Base/RandomCraftSystem/RandomCraftXML.java
  109. new file mode 100644
  110. index 0000000..242304e
  111. --- /dev/null
  112. +++ src/Base/RandomCraftSystem/RandomCraftXML.java
  113. @@ -0,0 +1,83 @@
  114. +package Base.RandomCraftSystem;
  115. +
  116. +import java.io.File;
  117. +import java.util.HashMap;
  118. +import java.util.Map;
  119. +
  120. +import org.w3c.dom.Document;
  121. +import org.w3c.dom.NamedNodeMap;
  122. +import org.w3c.dom.Node;
  123. +
  124. +import Base.Data.XMLDocument;
  125. +
  126. +/**
  127. + * @author Terius
  128. + */
  129. +
  130. +public class RandomCraftXML extends XMLDocument
  131. +{
  132. +   private Map<Integer, RandomCraftItem> items;
  133. +  
  134. +   public RandomCraftXML()
  135. +   {
  136. +       items = new HashMap<>();
  137. +       load();
  138. +   }
  139. +  
  140. +   public static RandomCraftXML getInstance()
  141. +   {
  142. +       return SingletonHolder.INSTANCE;
  143. +   }
  144. +  
  145. +   private static class SingletonHolder
  146. +   {
  147. +       protected static final RandomCraftXML INSTANCE = new RandomCraftXML();
  148. +   }
  149. +  
  150. +   @Override
  151. +   protected void load()
  152. +   {
  153. +       loadDocument("./data/xml/RandomCraft.xml");
  154. +       LOG.info("RandomCraftItemData: Loaded " + items.size() + " items.");
  155. +   }
  156. +  
  157. +   @Override
  158. +   protected void parseDocument(Document doc, File file)
  159. +   {
  160. +       try
  161. +       {
  162. +           final Node root = doc.getFirstChild();
  163. +          
  164. +           for (Node node = root.getFirstChild(); node != null; node = node.getNextSibling())
  165. +           {
  166. +               if (!"item".equalsIgnoreCase(node.getNodeName()))
  167. +               {
  168. +                   continue;
  169. +               }
  170. +              
  171. +               NamedNodeMap attrs = node.getAttributes();
  172. +               int id = Integer.parseInt(attrs.getNamedItem("id").getNodeValue());
  173. +               int cantidad = Integer.parseInt(attrs.getNamedItem("count").getNodeValue());
  174. +               double probabilidad = Double.parseDouble(attrs.getNamedItem("chance").getNodeValue());
  175. +              
  176. +               RandomCraftItem item = new RandomCraftItem(id, cantidad, probabilidad);
  177. +               items.put(id, item);
  178. +           }
  179. +       }
  180. +       catch (Exception e)
  181. +       {
  182. +           // LOG.warning("RandomCraftItemData: Error while loading items: " + e);
  183. +           e.printStackTrace();
  184. +       }
  185. +   }
  186. +  
  187. +   public Map<Integer, RandomCraftItem> getItems()
  188. +   {
  189. +       return items;
  190. +   }
  191. +  
  192. +   public RandomCraftItem getItemById(int id)
  193. +   {
  194. +       return items.get(id);
  195. +   }
  196. +}
  197. diff --git src/l2jorion/Config.java src/l2jorion/Config.java
  198. index 06bdba7..3f1eab1 100644
  199. --- src/l2jorion/Config.java
  200. +++ src/l2jorion/Config.java
  201. @@ -2530,6 +2530,10 @@
  202.    
  203.     public static int BLACK_COUPON_ID;
  204.    
  205. +   public static int RANDOM_CRAFT_ITEM_ID_CONSUME;
  206. +   public static int RANDOM_CRAFT_ITEM_CONSUME_REFRESH;
  207. +   public static int RANDOM_CRAFT_ITEM_CONSUME_CREATE;
  208. +  
  209.     public static void loadL2jOrionConfig()
  210.     {
  211.         final String L2jOrion = ConfigLoader.L2jOrion_CONFIG_FILE;
  212. @@ -2551,6 +2555,12 @@
  213.            
  214.             BLACK_COUPON_ID = Integer.parseInt(L2jOrionSettings.getProperty("BlackCouponId", "6392"));
  215.            
  216. +           RANDOM_CRAFT_ITEM_ID_CONSUME = Integer.parseInt(L2jOrionSettings.getProperty("RandomCraftItemId", "57"));
  217. +          
  218. +           RANDOM_CRAFT_ITEM_CONSUME_REFRESH = Integer.parseInt(L2jOrionSettings.getProperty("RandomCraftConsumeRefresh", "50000"));
  219. +          
  220. +           RANDOM_CRAFT_ITEM_CONSUME_CREATE = Integer.parseInt(L2jOrionSettings.getProperty("RandromCraftConsumeCreate", "300000"));
  221. +          
  222.             ALLOW_FREIGHT_AUGMENTED = Boolean.parseBoolean(L2jOrionSettings.getProperty("AllowFreightAugmentedItem", "False"));
  223.             ANNOUNCE_BOSS_UNDER_ATTACK = Boolean.parseBoolean(L2jOrionSettings.getProperty("AnnounceBossUnderAttack", "False"));
  224.             LIVE_CASTING_CHECK = Boolean.parseBoolean(L2jOrionSettings.getProperty("LiveCastingCheck", "False"));
  225. diff --git src/l2jorion/game/GameServer.java src/l2jorion/game/GameServer.java
  226. index 543cccd..fc177e3 100644
  227. --- src/l2jorion/game/GameServer.java
  228. +++ src/l2jorion/game/GameServer.java
  229. @@ -12,6 +12,7 @@
  230.  import java.util.logging.LogManager;
  231.  
  232.  import Base.Data.IconTable;
  233. +import Base.RandomCraftSystem.RandomCraftXML;
  234.  import l2jorion.Config;
  235.  import l2jorion.ConfigLoader;
  236.  import l2jorion.ServerType;
  237. @@ -496,6 +497,9 @@
  238.         VoicedCommandHandler.getInstance();
  239.         CommunityBoardManager.getInstance();
  240.        
  241. +       Util.printSection("RandomCraft - Terius");
  242. +       RandomCraftXML.getInstance();
  243. +      
  244.         IconTable.getInstance();
  245.        
  246.         LOG.info("AutoChatHandler: Loaded " + AutoChatHandler.getInstance().size() + " handlers");
  247. diff --git src/l2jorion/game/model/actor/instance/L2PcInstance.java src/l2jorion/game/model/actor/instance/L2PcInstance.java
  248. index b35e5f3..9d13dd2 100644
  249. --- src/l2jorion/game/model/actor/instance/L2PcInstance.java
  250. +++ src/l2jorion/game/model/actor/instance/L2PcInstance.java
  251. @@ -22,6 +22,7 @@
  252.  import java.util.concurrent.TimeUnit;
  253.  import java.util.concurrent.locks.ReentrantLock;
  254.  
  255. +import Base.RandomCraftSystem.RandomCraftItem;
  256.  import javolution.text.TextBuilder;
  257.  import javolution.util.FastMap;
  258.  import javolution.util.FastSet;
  259. @@ -306,6 +307,8 @@
  260.    
  261.     private int _bossZoneId = 0;
  262.    
  263. +   private List<RandomCraftItem> generatedCraftItems;
  264. +  
  265.     private int _autofarm_radius = 0;
  266.     private String _autofarm_mode = "None";
  267.     private Location _autofarm_distance;
  268. @@ -20117,6 +20120,21 @@
  269.         _weeklyBoardOnlineBeginTime = System.currentTimeMillis();
  270.     }
  271.    
  272. +   public List<RandomCraftItem> getGeneratedCraftItems()
  273. +   {
  274. +       return generatedCraftItems;
  275. +   }
  276. +  
  277. +   public void setGeneratedCraftItems(List<RandomCraftItem> items)
  278. +   {
  279. +       generatedCraftItems = items;
  280. +   }
  281. +  
  282. +   public void clearGeneratedCraftItems()
  283. +   {
  284. +       generatedCraftItems.clear();
  285. +   }
  286. +  
  287.     @Override
  288.     public boolean isBot()
  289.     {
  290. diff --git src/l2jorion/game/model/actor/instance/L2RandomCraftInstance.java src/l2jorion/game/model/actor/instance/L2RandomCraftInstance.java
  291. new file mode 100644
  292. index 0000000..a528388
  293. --- /dev/null
  294. +++ src/l2jorion/game/model/actor/instance/L2RandomCraftInstance.java
  295. @@ -0,0 +1,452 @@
  296. +package l2jorion.game.model.actor.instance;
  297. +
  298. +import java.sql.Connection;
  299. +import java.sql.PreparedStatement;
  300. +import java.sql.ResultSet;
  301. +import java.sql.SQLException;
  302. +import java.util.ArrayList;
  303. +import java.util.LinkedList;
  304. +import java.util.List;
  305. +import java.util.Map;
  306. +import java.util.Random;
  307. +
  308. +import Base.RandomCraftSystem.RandomCraftItem;
  309. +import Base.RandomCraftSystem.RandomCraftXML;
  310. +import l2jorion.Config;
  311. +import l2jorion.game.ai.CtrlIntention;
  312. +import l2jorion.game.network.serverpackets.ActionFailed;
  313. +import l2jorion.game.network.serverpackets.ItemList;
  314. +import l2jorion.game.network.serverpackets.MoveToPawn;
  315. +import l2jorion.game.network.serverpackets.MyTargetSelected;
  316. +import l2jorion.game.network.serverpackets.NpcHtmlMessage;
  317. +import l2jorion.game.network.serverpackets.ValidateLocation;
  318. +import l2jorion.game.templates.L2NpcTemplate;
  319. +import l2jorion.util.database.L2DatabaseFactory;
  320. +
  321. +/**
  322. + * @author Terius
  323. + */
  324. +
  325. +public class L2RandomCraftInstance extends L2NpcInstance
  326. +{
  327. +   private boolean hasGeneratedItems;
  328. +   List<RandomCraftItem> items = new LinkedList<>();
  329. +  
  330. +   public L2RandomCraftInstance(int objectId, L2NpcTemplate template)
  331. +   {
  332. +       super(objectId, template);
  333. +       setHasGeneratedItems(false);
  334. +   }
  335. +  
  336. +   @Override
  337. +   public void onAction(L2PcInstance player)
  338. +   {
  339. +       if (this != player.getTarget())
  340. +       {
  341. +           player.setTarget(this);
  342. +           player.sendPacket(new MyTargetSelected(getObjectId(), 0));
  343. +           player.sendPacket(new ValidateLocation(this));
  344. +       }
  345. +       else
  346. +       {
  347. +           if (!canInteract(player))
  348. +           {
  349. +               player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
  350. +           }
  351. +           else
  352. +           {
  353. +               // Gira el jugador para enfrentar la instancia
  354. +               player.sendPacket(new MoveToPawn(player, this, L2NpcInstance.INTERACTION_DISTANCE));
  355. +              
  356. +               if (hasRandomAnimation())
  357. +               {
  358. +                   onRandomAnimation();
  359. +               }
  360. +              
  361. +               loadGeneratedItems(player);
  362. +              
  363. +               showHtmlWindow(player);
  364. +              
  365. +               // Enviar ActionFailed al jugador para evitar quedarse atascado
  366. +               player.sendPacket(ActionFailed.STATIC_PACKET);
  367. +           }
  368. +       }
  369. +   }
  370. +  
  371. +   @Override
  372. +   public void onBypassFeedback(L2PcInstance player, String command)
  373. +   {
  374. +       if (command.startsWith("refresh"))
  375. +       {
  376. +           // Verifique si el jugador tiene el artículo requerido (ID 57) y la cantidad (50000)
  377. +           L2ItemInstance item57 = player.getInventory().getItemByItemId(Config.RANDOM_CRAFT_ITEM_ID_CONSUME);
  378. +           if (item57 != null && item57.getCount() >= Config.RANDOM_CRAFT_ITEM_CONSUME_REFRESH)
  379. +           {
  380. +               // Cargue al jugador el artículo requerido (ID 57) y la cantidad (50000)
  381. +               player.getInventory().destroyItemByItemId("Random Craft", Config.RANDOM_CRAFT_ITEM_ID_CONSUME, Config.RANDOM_CRAFT_ITEM_CONSUME_REFRESH, player, this);
  382. +              
  383. +               generateItems(player);
  384. +               showHtmlWindow(player);
  385. +               player.sendPacket(new ItemList(player, true));
  386. +              
  387. +               // Almacene los elementos generados en la base de datos para el jugador
  388. +               saveGeneratedItems(player);
  389. +           }
  390. +           else
  391. +           {
  392. +               player.sendMessage("Necesitas al menos 50000 Adena para actualizar Random Craft.");
  393. +           }
  394. +       }
  395. +       else if (command.startsWith("create"))
  396. +       {
  397. +           // Eliminar los elementos generados para el jugador de la tabla RandomCraftItem
  398. +           deleteGeneratedItems(player);
  399. +          
  400. +           createItem(player);
  401. +           showHtmlWindow(player);
  402. +       }
  403. +   }
  404. +  
  405. +   private void generateItems(L2PcInstance player)
  406. +   {
  407. +       List<RandomCraftItem> items = new LinkedList<>();
  408. +       RandomCraftXML randomCraftXML = RandomCraftXML.getInstance();
  409. +       Map<Integer, RandomCraftItem> craftItems = randomCraftXML.getItems();
  410. +      
  411. +       // Genera 4 elementos únicos para cada jugador en función de la probabilidad
  412. +       List<Integer> selectedItems = new ArrayList<>();
  413. +       while (selectedItems.size() < 4)
  414. +       {
  415. +           int itemId = getRandomItem(craftItems);
  416. +           if (!selectedItems.contains(itemId))
  417. +           {
  418. +               selectedItems.add(itemId);
  419. +               items.add(craftItems.get(itemId));
  420. +           }
  421. +       }
  422. +      
  423. +       // Asignar los elementos generados al jugador
  424. +       player.setGeneratedCraftItems(items);
  425. +       setHasGeneratedItems(true);
  426. +      
  427. +   }
  428. +  
  429. +   private void deleteGeneratedItems(L2PcInstance player)
  430. +   {
  431. +       Connection con = null;
  432. +       PreparedStatement stmt = null;
  433. +      
  434. +       try
  435. +       {
  436. +           con = L2DatabaseFactory.getInstance().getConnection();
  437. +           stmt = con.prepareStatement("DELETE FROM RandomCraftItem WHERE object_id = ?");
  438. +           stmt.setInt(1, player.getObjectId());
  439. +           stmt.execute();
  440. +       }
  441. +       catch (SQLException e)
  442. +       {
  443. +           e.printStackTrace();
  444. +       }
  445. +       finally
  446. +       {
  447. +           // Cerrar recursos
  448. +           try
  449. +           {
  450. +               if (stmt != null)
  451. +               {
  452. +                   stmt.close();
  453. +               }
  454. +           }
  455. +           catch (SQLException e)
  456. +           {
  457. +               e.printStackTrace();
  458. +           }
  459. +           try
  460. +           {
  461. +               if (con != null)
  462. +               {
  463. +                   con.close();
  464. +               }
  465. +           }
  466. +           catch (SQLException e)
  467. +           {
  468. +               e.printStackTrace();
  469. +           }
  470. +       }
  471. +   }
  472. +  
  473. +   private void saveGeneratedItems(L2PcInstance player)
  474. +   {
  475. +       Connection con = null;
  476. +       PreparedStatement stmt = null;
  477. +       try
  478. +       {
  479. +           con = L2DatabaseFactory.getInstance().getConnection();
  480. +           stmt = con.prepareStatement("DELETE FROM RandomCraftItem WHERE object_id = ?");
  481. +           stmt.setInt(1, player.getObjectId());
  482. +           stmt.execute();
  483. +           stmt.close();
  484. +          
  485. +           stmt = con.prepareStatement("INSERT INTO RandomCraftItem (object_id, item_id, amount, chance) VALUES (?, ?, ?, ?)");
  486. +           stmt.setInt(1, player.getObjectId());
  487. +           List<RandomCraftItem> items = player.getGeneratedCraftItems();
  488. +           if (items != null)
  489. +           {
  490. +               for (RandomCraftItem item : items)
  491. +               {
  492. +                   stmt.setInt(2, item.getId());
  493. +                   stmt.setInt(3, item.getCantidad());
  494. +                   stmt.setDouble(4, item.getProbabilidad());
  495. +                   stmt.addBatch(); // Agregar la consulta al lote (batch)
  496. +               }
  497. +               stmt.executeBatch(); // Ejecutar el lote de consultas
  498. +           }
  499. +           stmt.close();
  500. +       }
  501. +       catch (SQLException e)
  502. +       {
  503. +           e.printStackTrace();
  504. +       }
  505. +       finally
  506. +       {
  507. +           // Cerrar recursos
  508. +           try
  509. +           {
  510. +               if (stmt != null)
  511. +               {
  512. +                   stmt.close();
  513. +               }
  514. +           }
  515. +           catch (SQLException e)
  516. +           {
  517. +               e.printStackTrace();
  518. +           }
  519. +           try
  520. +           {
  521. +               if (con != null)
  522. +               {
  523. +                   con.close();
  524. +               }
  525. +           }
  526. +           catch (SQLException e)
  527. +           {
  528. +               e.printStackTrace();
  529. +           }
  530. +       }
  531. +   }
  532. +  
  533. +   private void loadGeneratedItems(L2PcInstance player)
  534. +   {
  535. +       Connection con = null;
  536. +       PreparedStatement stmt = null;
  537. +       ResultSet rset = null;
  538. +      
  539. +       try
  540. +       {
  541. +           con = L2DatabaseFactory.getInstance().getConnection();
  542. +           stmt = con.prepareStatement("SELECT item_id, amount, chance FROM RandomCraftItem WHERE object_id = ?");
  543. +           stmt.setInt(1, player.getObjectId());
  544. +           rset = stmt.executeQuery();
  545. +          
  546. +           List<RandomCraftItem> items = new LinkedList<>();
  547. +           while (rset.next())
  548. +           {
  549. +               int itemId = rset.getInt("item_id");
  550. +               int amount = rset.getInt("amount");
  551. +               int chance = rset.getInt("chance");
  552. +               RandomCraftItem item = new RandomCraftItem(itemId, amount, chance);
  553. +               items.add(item);
  554. +           }
  555. +          
  556. +           player.setGeneratedCraftItems(items);
  557. +           setHasGeneratedItems(!items.isEmpty());
  558. +          
  559. +       }
  560. +       catch (SQLException e)
  561. +       {
  562. +           e.printStackTrace();
  563. +       }
  564. +       finally
  565. +       {
  566. +           // Cerrar recursos
  567. +           try
  568. +           {
  569. +               if (stmt != null)
  570. +               {
  571. +                   stmt.close();
  572. +               }
  573. +           }
  574. +           catch (SQLException e)
  575. +           {
  576. +               e.printStackTrace();
  577. +           }
  578. +           try
  579. +           {
  580. +               if (con != null)
  581. +               {
  582. +                   con.close();
  583. +               }
  584. +           }
  585. +           catch (SQLException e)
  586. +           {
  587. +               e.printStackTrace();
  588. +           }
  589. +       }
  590. +   }
  591. +  
  592. +   private int getRandomItem(Map<Integer, RandomCraftItem> craftItems)
  593. +   {
  594. +       // Calcular la suma de probabilidad total
  595. +       double totalProbability = 0;
  596. +       for (RandomCraftItem item : craftItems.values())
  597. +       {
  598. +           totalProbability += item.getProbabilidad();
  599. +       }
  600. +      
  601. +       // Generar un valor aleatorio entre 0 y la probabilidad total
  602. +       Random random = new Random();
  603. +       double randomValue = random.nextDouble() * totalProbability;
  604. +      
  605. +       // Seleccione el elemento en función de la probabilidad
  606. +       double cumulativeProbability = 0;
  607. +       for (RandomCraftItem item : craftItems.values())
  608. +       {
  609. +           cumulativeProbability += item.getProbabilidad();
  610. +           if (randomValue <= cumulativeProbability)
  611. +           {
  612. +               return item.getId();
  613. +           }
  614. +       }
  615. +      
  616. +       // Si no se selecciona ningún artículo, devolver un artículo al azar
  617. +       List<Integer> itemIds = new ArrayList<>(craftItems.keySet());
  618. +       int index = random.nextInt(itemIds.size());
  619. +       return itemIds.get(index);
  620. +   }
  621. +  
  622. +   private void createItem(L2PcInstance player)
  623. +   {
  624. +       // Compruebe si la lista de elementos está vacía
  625. +       List<RandomCraftItem> items = player.getGeneratedCraftItems();
  626. +       if (items == null || items.isEmpty())
  627. +       {
  628. +           player.sendMessage("Necesita actualizar para poder crear un elemento aleatorio.");
  629. +           return;
  630. +       }
  631. +      
  632. +       // Obtenga un elemento aleatorio de la lista de elementos generados
  633. +       Random random = new Random();
  634. +       int index = random.nextInt(items.size());
  635. +       RandomCraftItem craftItem = items.get(index);
  636. +      
  637. +       // Cargue al jugador el artículo con ID 57 y cantidad 300000
  638. +       L2ItemInstance item57 = player.getInventory().getItemByItemId(Config.RANDOM_CRAFT_ITEM_ID_CONSUME);
  639. +       if (item57 != null && item57.getCount() >= Config.RANDOM_CRAFT_ITEM_CONSUME_CREATE)
  640. +       {
  641. +           player.getInventory().destroyItemByItemId("Random Craft", Config.RANDOM_CRAFT_ITEM_ID_CONSUME, Config.RANDOM_CRAFT_ITEM_CONSUME_CREATE, player, this);
  642. +          
  643. +           // Dar el artículo al jugado
  644. +           L2ItemInstance itemInstance = player.getInventory().addItem("Random Craft", craftItem.getId(), craftItem.getCantidad(), player, this);
  645. +           if (itemInstance != null)
  646. +           {
  647. +               player.sendPacket(new ItemList(player, true));
  648. +              
  649. +               // Envía un mensaje al jugador con el nombre del artículo y la cantidad.
  650. +               String message = "¡Felicidades! Has recibido " + craftItem.getItem().getName() + " (Cantidad: " + craftItem.getCantidad() + ")";
  651. +               player.sendMessage(message);
  652. +              
  653. +               // Borrar la lista de elementos para el jugador
  654. +               player.clearGeneratedCraftItems();
  655. +               setHasGeneratedItems(false);
  656. +               return;
  657. +           }
  658. +       }
  659. +      
  660. +       player.sendMessage("Necesitas al menos 300000 Adena para crear un elemento aleatorio.");
  661. +   }
  662. +  
  663. +   private void showHtmlWindow(L2PcInstance player)
  664. +   {
  665. +       StringBuilder html = new StringBuilder();
  666. +       html.append("<html><body>");
  667. +       html.append("<center>Bienvenido a Random Craft System!</center>");
  668. +       html.append("<br>");
  669. +       html.append("<center>Podras Crear 1 item entre los 4 que salgan random!</center>");
  670. +       html.append("<br>");
  671. +       html.append("<center>Les Deseo Mucha Suerte</center>");
  672. +       html.append("<br>");
  673. +       html.append("<br>");
  674. +      
  675. +       List<RandomCraftItem> items = player.getGeneratedCraftItems();
  676. +       if (items == null || items.isEmpty())
  677. +       {
  678. +           html.append("<center>La Lista Esta Vacia Dale a Refresh</center>");
  679. +       }
  680. +       else
  681. +       {
  682. +           // Generar los iconos de los artículos en forma horizontal
  683. +           for (RandomCraftItem item : items)
  684. +           {
  685. +               html.append("<img src=\"L2UI.SquareGray\" width=295 height=1>");
  686. +               html.append("<div align=center>");
  687. +               html.append("<table>");
  688. +               html.append("<tr>");
  689. +               html.append("<td>");
  690. +               html.append("<img src=").append(item.getIcon()).append(" width=32 height=32>");
  691. +               html.append("</td>");
  692. +               html.append("<td width=260>");
  693. +               html.append("<font color=LEVEL>").append(item.getItem().getName()).append("</font>");
  694. +              
  695. +               html.append("</td>");
  696. +               html.append("</tr>");
  697. +               html.append("</table>");
  698. +               html.append("</div>");
  699. +               html.append("<img src=\"L2UI.SquareGray\" width=295 height=1>");
  700. +               html.append("<br>");
  701. +           }
  702. +       }
  703. +      
  704. +       html.append("<br>");
  705. +       html.append("<br>");
  706. +       html.append("<center>");
  707. +       html.append("<table>");
  708. +       html.append("<tr>");
  709. +       html.append("<td width=75 height=21>");
  710. +       html.append("<button value=\"Refresh\" action=\"bypass -h npc_").append(getObjectId()).append("_refresh\" width=75 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">");
  711. +       html.append("</td>");
  712. +       html.append("<td width=75 height=21>");
  713. +       html.append("<button value=\"Create\" action=\"bypass -h npc_").append(getObjectId()).append("_create\" width=75 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">");
  714. +       html.append("</td>");
  715. +       html.append("</tr>");
  716. +       html.append("</table>");
  717. +       html.append("</center>");
  718. +      
  719. +       html.append("</body></html>");
  720. +      
  721. +       showHtmlWindow(player, html.toString());
  722. +   }
  723. +  
  724. +   private void showHtmlWindow(L2PcInstance player, String htmlContent)
  725. +   {
  726. +       NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  727. +       html.setHtml(htmlContent);
  728. +      
  729. +       player.sendPacket(html);
  730. +   }
  731. +  
  732. +   /**
  733. +    * @return the hasGeneratedItems
  734. +    */
  735. +   public boolean isHasGeneratedItems()
  736. +   {
  737. +       return hasGeneratedItems;
  738. +   }
  739. +  
  740. +   /**
  741. +    * @param hasGeneratedItems the hasGeneratedItems to set
  742. +    */
  743. +   public void setHasGeneratedItems(boolean hasGeneratedItems)
  744. +   {
  745. +       this.hasGeneratedItems = hasGeneratedItems;
  746. +   }
  747. +}
  748.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement