Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Capsule Box Item

Iniciado por Jerry, Ago 02, 2025, 02:09 PM

Tema anterior - Siguiente tema

Jerry

### Eclipse Workspace Patch 1.0
#P L2J_4Team_Classic_Interlude
+dist/game/data/xml/CapsuleBox.xml
+<?xml version="1.0" encoding="utf-8"?>
+<CapsuleBox>
+	<capsuled_items ID="6393"  PlayerLevel="1"> <!-- Mage Starter Pack LVL 1-->
+		<item itemId="177" min="1" max="1" enchantLevel="0"  chance="100"/> 
+		<item itemId="1101" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="1104" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="908" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="115" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="115" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="877" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="877" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="3948" min="1" max="10" enchantLevel="0" chance="100"/> 
+	</capsuled_items>
+	<capsuled_items ID="6392"  PlayerLevel="1"> <!-- Fighter Starter Pack LVL 1-->
+		<item itemId="68" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="711" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="715" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="908" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="115" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="115" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="877" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="877" min="1" max="1" enchantLevel="0" chance="100"/> 
+		<item itemId="1463" min="1" max="5" enchantLevel="0" chance="100"/> 
+	</capsuled_items>
+</CapsuleBox>
diff --git java/Base/CapsuleBox/CapsuleBoxData.java java/Base/CapsuleBox/CapsuleBoxData.java
new file mode 100644
index 0000000..2e76b8f
--- /dev/null
+++ java/Base/CapsuleBox/CapsuleBoxData.java
@@ -0,0 +1,97 @@
+package Base.CapsuleBox;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+import Base.Data.XMLDocument;
+
+public class CapsuleBoxData extends XMLDocument {
+    private Map<Integer, CapsuleBoxItem> capsuleBoxItems;
+
+    public CapsuleBoxData() {
+        capsuleBoxItems = new HashMap<>();
+        load();
+    }
+
+	public void reload()
+	{
+		capsuleBoxItems.clear();
+		load();
+	}  
+    
+    
+    public static CapsuleBoxData getInstance() {
+        return SingletonHolder.INSTANCE;
+    }
+
+    private static class SingletonHolder {
+        protected static final CapsuleBoxData INSTANCE = new CapsuleBoxData();
+    }
+
+    @Override
+    protected void load() {
+        loadDocument("./data/xml/CapsuleBox.xml");
+        LOG.info("CapsuleBoxData: Loaded " + capsuleBoxItems.size() + " items.");
+    }
+
+    @Override
+    protected void parseDocument(Document doc, File file) {
+        try {
+            final Node root = doc.getFirstChild();
+
+            for (Node node = root.getFirstChild(); node != null; node = node.getNextSibling()) {
+                if (!"capsuled_items".equalsIgnoreCase(node.getNodeName())) {
+                    continue;
+                }
+
+                NamedNodeMap attrs = node.getAttributes();
+                int id = Integer.parseInt(attrs.getNamedItem("ID").getNodeValue());
+                int playerLevel = Integer.parseInt(attrs.getNamedItem("PlayerLevel").getNodeValue());
+
+                CapsuleBoxItem capsuleBoxItem = new CapsuleBoxItem(id, playerLevel);
+
+                for (Node itemNode = node.getFirstChild(); itemNode != null; itemNode = itemNode.getNextSibling()) {
+                    if (!"item".equalsIgnoreCase(itemNode.getNodeName())) {
+                        continue;
+                    }
+
+                    NamedNodeMap itemAttrs = itemNode.getAttributes();
+                    int itemId = Integer.parseInt(itemAttrs.getNamedItem("itemId").getNodeValue());
+                    int amount = 1; // Default amount is 1
+                    if (itemAttrs.getNamedItem("min") != null && itemAttrs.getNamedItem("max") != null) {
+                        int min = Integer.parseInt(itemAttrs.getNamedItem("min").getNodeValue());
+                        int max = Integer.parseInt(itemAttrs.getNamedItem("max").getNodeValue());
+                        amount = getRandomAmount(min, max);
+                    }
+                    int enchantLevel = Integer.parseInt(itemAttrs.getNamedItem("enchantLevel").getNodeValue());
+                    int chance = Integer.parseInt(itemAttrs.getNamedItem("chance").getNodeValue());
+
+                    CapsuleBoxItem.Item item = new CapsuleBoxItem.Item(itemId, amount, enchantLevel, chance);
+                    capsuleBoxItem.addItem(item);
+                }
+
+                capsuleBoxItems.put(id, capsuleBoxItem);
+            }
+        } catch (Exception e) {
+            // LOG.warning("CapsuleBoxData: Error while loading items: " + e);
+            e.printStackTrace();
+        }
+    }
+
+    public Map<Integer, CapsuleBoxItem> getCapsuleBoxItems() {
+        return capsuleBoxItems;
+    }
+
+    public CapsuleBoxItem getCapsuleBoxItemById(int id) {
+        return capsuleBoxItems.get(id);
+    }
+
+    private static int getRandomAmount(int min, int max) {
+        return min + (int) (Math.random() * ((max - min) + 1));
+    }
+}
diff --git java/Base/CapsuleBox/CapsuleBoxItem.java java/Base/CapsuleBox/CapsuleBoxItem.java
new file mode 100644
index 0000000..93c0cc6
--- /dev/null
+++ java/Base/CapsuleBox/CapsuleBoxItem.java
@@ -0,0 +1,64 @@
+package Base.CapsuleBox;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CapsuleBoxItem {
+    private int id;
+    private int playerLevel;
+    private List<Item> items;
+
+    public CapsuleBoxItem(int id, int playerLevel) {
+        this.id = id;
+        this.playerLevel = playerLevel;
+        items = new ArrayList<>();
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public int getPlayerLevel() {
+        return playerLevel;
+    }
+
+    public List<Item> getItems() {
+        return items;
+    }
+
+    public void addItem(Item item) {
+        items.add(item);
+    }
+
+    public static class Item {
+        private int itemId;
+        private int amount;
+        private int enchantLevel;
+        private int chance;
+
+        public Item(int itemId, int amount, int enchantLevel, int chance) {
+            this.itemId = itemId;
+            this.amount = amount;
+            this.enchantLevel = enchantLevel;
+            this.chance = chance;
+        }
+
+        public int getItemId() {
+            return itemId;
+        }
+
+        public int getAmount() {
+            return amount;
+        }
+
+        public int getEnchantLevel() {
+            return enchantLevel;
+        }
+
+        public int getChance() {
+            return chance;
+        }
+
+ 
+    }
+}
diff --git java/com/l2j4team/gameserver/GameServer.java java/com/l2j4team/gameserver/GameServer.java
index 948d4e4..12b0956 100644
--- java/com/l2j4team/gameserver/GameServer.java
+++ java/com/l2j4team/gameserver/GameServer.java
@@ -133,6 +133,7 @@
 import com.l2j4team.commons.mmocore.SelectorThread;
 import com.l2j4team.commons.util.SysUtil;
 
+import Base.CapsuleBox.CapsuleBoxData;
 import Base.RandomCraft.RandomCraftXML;
 import Base.Skin.DressMeData;
 import hwid.Hwid;
@@ -489,6 +490,10 @@
 			DressMeData.getInstance();
 		}
 		
+		StringUtil.printSection("CapsuleBox - Terius");
+		CapsuleBoxData.getInstance();
+		
+		
 		StringUtil.printSection("RandomCraft - Terius");
 		RandomCraftXML.getInstance();
 		
diff --git java/com/l2j4team/gameserver/handler/ItemHandler.java java/com/l2j4team/gameserver/handler/ItemHandler.java
index 8f41315..862cf95 100644
--- java/com/l2j4team/gameserver/handler/ItemHandler.java
+++ java/com/l2j4team/gameserver/handler/ItemHandler.java
@@ -58,6 +58,7 @@
 import com.l2j4team.gameserver.handler.itemhandlers.clan.SkillVitality;
 import com.l2j4team.gameserver.handler.itemhandlers.clan.SkillWithstandAttack;
 import com.l2j4team.gameserver.handler.itemhandlers.custom.AllyNameChange;
+import com.l2j4team.gameserver.handler.itemhandlers.custom.CapsuleBox_System;
 import com.l2j4team.gameserver.handler.itemhandlers.custom.ClanFull;
 import com.l2j4team.gameserver.handler.itemhandlers.custom.ClanNameChange;
 import com.l2j4team.gameserver.handler.itemhandlers.custom.ClassItem;
@@ -131,6 +132,7 @@
 		registerItemHandler(new Aio30days());
 		registerItemHandler(new AioEterno());
 		registerItemHandler(new LuckBox());
+		registerItemHandler(new CapsuleBox_System());
 		registerItemHandler(new ClanFull());
 		registerItemHandler(new NoblesItem());
 		registerItemHandler(new Vip24h());
diff --git java/com/l2j4team/gameserver/handler/admincommandhandlers/AdminAdmin.java java/com/l2j4team/gameserver/handler/admincommandhandlers/AdminAdmin.java
index 9bf868d..1d0907c 100644
--- java/com/l2j4team/gameserver/handler/admincommandhandlers/AdminAdmin.java
+++ java/com/l2j4team/gameserver/handler/admincommandhandlers/AdminAdmin.java
@@ -4,6 +4,7 @@
 
 import com.l2j4team.commons.lang.StringUtil;
 
+import Base.CapsuleBox.CapsuleBoxData;
 import Base.RandomCraft.RandomCraftXML;
 import Base.Skin.DressMeData;
 
@@ -210,6 +211,11 @@
 						RandomCraftXML.getInstance().reload();
 						activeChar.sendMessage("Random Craft have been reloaded.");
 					}
+					else if (type.startsWith("capsule")) 
+					{
+						CapsuleBoxData.getInstance().reload();
+						activeChar.sendMessage("Capsule Box have been reloaded.");
+					}
 					else if (type.startsWith("olly"))
 					{
 						OlyClassDamageManager.loadConfig();
diff --git java/com/l2j4team/gameserver/handler/itemhandlers/custom/CapsuleBox_System.java java/com/l2j4team/gameserver/handler/itemhandlers/custom/CapsuleBox_System.java
new file mode 100644
index 0000000..ebe42bf
--- /dev/null
+++ java/com/l2j4team/gameserver/handler/itemhandlers/custom/CapsuleBox_System.java
@@ -0,0 +1,58 @@
+package com.l2j4team.gameserver.handler.itemhandlers.custom;
+
+import com.l2j4team.gameserver.handler.IItemHandler;
+import com.l2j4team.gameserver.idfactory.IdFactory;
+import com.l2j4team.gameserver.model.actor.Playable;
+import com.l2j4team.gameserver.model.actor.instance.Player;
+import com.l2j4team.gameserver.model.item.instance.ItemInstance;
+import com.l2j4team.gameserver.network.serverpackets.MagicSkillUse;
+
+import com.l2j4team.commons.random.Rnd;
+
+import Base.CapsuleBox.CapsuleBoxData;
+import Base.CapsuleBox.CapsuleBoxItem;
+import Base.CapsuleBox.CapsuleBoxItem.Item;
+
+public class CapsuleBox_System implements IItemHandler {
+
+    @Override
+    public void useItem(Playable playable, ItemInstance item, boolean forceUse) {
+        if (!(playable instanceof Player))
+            return;
+
+        final Player activeChar = (Player) playable;
+        final int itemId = item.getItemId();
+
+        CapsuleBoxItem capsuleBoxItem = CapsuleBoxData.getInstance().getCapsuleBoxItemById(itemId);
+        if (capsuleBoxItem != null) {
+            if (activeChar.getLevel() < capsuleBoxItem.getPlayerLevel()) {
+                activeChar.sendMessage("Para Usar Esta Capsule Box Necesitas El LvL." + capsuleBoxItem.getPlayerLevel());
+                return;
+            }
+
+            ItemInstance toGive = null;
+            for (Item boxItem : capsuleBoxItem.getItems()) {
+                toGive = new ItemInstance(IdFactory.getInstance().getNextId(), boxItem.getItemId());
+                int random = Rnd.get(100);
+                if (random < boxItem.getChance()) {
+                    if (!toGive.isStackable()) {
+                        toGive.setEnchantLevel(boxItem.getEnchantLevel());
+                        activeChar.addItem("CapsuleBox", toGive, activeChar, true);
+                    } else {
+                        activeChar.addItem("CapsuleBox", boxItem.getItemId(), boxItem.getAmount(), activeChar, true);
+                    }
+                } else {
+                    
+                }
+                MagicSkillUse MSU = new MagicSkillUse(activeChar, activeChar, 2024, 1, 1, 0);
+                activeChar.broadcastPacket(MSU);
+               
+            }
+           
+        } else {
+            activeChar.sendMessage("This Capsule box expired or is invalid!");
+        }
+
+        playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
+    }
+}