View difference between Paste ID: WZmyiKzZ and qASs5ECS
SHOW: | | - or go back to the newest paste.
1
### Eclipse Workspace Patch 1.0
2
#P L2jMega_Interlude
3
+data/xml/CapsuleBox.xml
4
+<?xml version="1.0" encoding="utf-8"?>
5
+<CapsuleBox>
6
+	<capsuled_items ID="6393"  PlayerLevel="1"> <!-- Mage Starter Pack LVL 1-->
7
+		<item itemId="177" min="1" max="1" enchantLevel="0"  chance="100"/> 
8
+		<item itemId="1101" min="1" max="1" enchantLevel="0" chance="100"/> 
9
+		<item itemId="1104" min="1" max="1" enchantLevel="0" chance="100"/> 
10
+		<item itemId="908" min="1" max="1" enchantLevel="0" chance="100"/> 
11
+		<item itemId="115" min="1" max="1" enchantLevel="0" chance="100"/> 
12
+		<item itemId="115" min="1" max="1" enchantLevel="0" chance="100"/> 
13
+		<item itemId="877" min="1" max="1" enchantLevel="0" chance="100"/> 
14
+		<item itemId="877" min="1" max="1" enchantLevel="0" chance="100"/> 
15
+		<item itemId="3948" min="1" max="10" enchantLevel="0" chance="100"/> 
16
+	</capsuled_items>
17
+	<capsuled_items ID="6388"  PlayerLevel="1"> <!-- Fighter Starter Pack LVL 1-->
18
+		<item itemId="68" min="1" max="1" enchantLevel="0" chance="100"/> 
19
+		<item itemId="711" min="1" max="1" enchantLevel="0" chance="100"/> 
20
+		<item itemId="715" min="1" max="1" enchantLevel="0" chance="100"/> 
21
+		<item itemId="908" min="1" max="1" enchantLevel="0" chance="100"/> 
22
+		<item itemId="115" min="1" max="1" enchantLevel="0" chance="100"/> 
23
+		<item itemId="115" min="1" max="1" enchantLevel="0" chance="100"/> 
24
+		<item itemId="877" min="1" max="1" enchantLevel="0" chance="100"/> 
25
+		<item itemId="877" min="1" max="1" enchantLevel="0" chance="100"/> 
26
+		<item itemId="1463" min="1" max="5" enchantLevel="0" chance="100"/> 
27
+	</capsuled_items>
28
+</CapsuleBox>
29
diff --git java/Base/CapsuleBox/CapsuleBoxData.java java/Base/CapsuleBox/CapsuleBoxData.java
30
new file mode 100644
31
index 0000000..2e76b8f
32
--- /dev/null
33
+++ java/Base/CapsuleBox/CapsuleBoxData.java
34
@@ -0,0 +1,97 @@
35
+package Base.CapsuleBox;
36
+
37
+import java.io.File;
38
+import java.util.HashMap;
39
+import java.util.Map;
40
+
41
+import org.w3c.dom.Document;
42
+import org.w3c.dom.NamedNodeMap;
43
+import org.w3c.dom.Node;
44
+
45
+import Base.Data.XMLDocument;
46
+
47
+public class CapsuleBoxData extends XMLDocument {
48
+    private Map<Integer, CapsuleBoxItem> capsuleBoxItems;
49
+
50
+    public CapsuleBoxData() {
51
+        capsuleBoxItems = new HashMap<>();
52
+        load();
53
+    }
54
+
55
+	public void reload()
56
+	{
57
+		capsuleBoxItems.clear();
58
+		load();
59
+	}  
60
+    
61
+    
62
+    public static CapsuleBoxData getInstance() {
63
+        return SingletonHolder.INSTANCE;
64
+    }
65
+
66
+    private static class SingletonHolder {
67
+        protected static final CapsuleBoxData INSTANCE = new CapsuleBoxData();
68
+    }
69
+
70
+    @Override
71
+    protected void load() {
72
+        loadDocument("./data/xml/CapsuleBox.xml");
73
+        LOG.info("CapsuleBoxData: Loaded " + capsuleBoxItems.size() + " items.");
74
+    }
75
+
76
+    @Override
77
+    protected void parseDocument(Document doc, File file) {
78
+        try {
79
+            final Node root = doc.getFirstChild();
80
+
81
+            for (Node node = root.getFirstChild(); node != null; node = node.getNextSibling()) {
82
+                if (!"capsuled_items".equalsIgnoreCase(node.getNodeName())) {
83
+                    continue;
84
+                }
85
+
86
+                NamedNodeMap attrs = node.getAttributes();
87
+                int id = Integer.parseInt(attrs.getNamedItem("ID").getNodeValue());
88
+                int playerLevel = Integer.parseInt(attrs.getNamedItem("PlayerLevel").getNodeValue());
89
+
90
+                CapsuleBoxItem capsuleBoxItem = new CapsuleBoxItem(id, playerLevel);
91
+
92
+                for (Node itemNode = node.getFirstChild(); itemNode != null; itemNode = itemNode.getNextSibling()) {
93
+                    if (!"item".equalsIgnoreCase(itemNode.getNodeName())) {
94
+                        continue;
95
+                    }
96
+
97
+                    NamedNodeMap itemAttrs = itemNode.getAttributes();
98
+                    int itemId = Integer.parseInt(itemAttrs.getNamedItem("itemId").getNodeValue());
99
+                    int amount = 1; // Default amount is 1
100
+                    if (itemAttrs.getNamedItem("min") != null && itemAttrs.getNamedItem("max") != null) {
101
+                        int min = Integer.parseInt(itemAttrs.getNamedItem("min").getNodeValue());
102
+                        int max = Integer.parseInt(itemAttrs.getNamedItem("max").getNodeValue());
103
+                        amount = getRandomAmount(min, max);
104
+                    }
105
+                    int enchantLevel = Integer.parseInt(itemAttrs.getNamedItem("enchantLevel").getNodeValue());
106
+                    int chance = Integer.parseInt(itemAttrs.getNamedItem("chance").getNodeValue());
107
+
108
+                    CapsuleBoxItem.Item item = new CapsuleBoxItem.Item(itemId, amount, enchantLevel, chance);
109
+                    capsuleBoxItem.addItem(item);
110
+                }
111
+
112
+                capsuleBoxItems.put(id, capsuleBoxItem);
113
+            }
114
+        } catch (Exception e) {
115
+            // LOG.warning("CapsuleBoxData: Error while loading items: " + e);
116
+            e.printStackTrace();
117
+        }
118
+    }
119
+
120
+    public Map<Integer, CapsuleBoxItem> getCapsuleBoxItems() {
121
+        return capsuleBoxItems;
122
+    }
123
+
124
+    public CapsuleBoxItem getCapsuleBoxItemById(int id) {
125
+        return capsuleBoxItems.get(id);
126
+    }
127
+
128
+    private static int getRandomAmount(int min, int max) {
129
+        return min + (int) (Math.random() * ((max - min) + 1));
130
+    }
131
+}
132
diff --git java/Base/CapsuleBox/CapsuleBoxItem.java java/Base/CapsuleBox/CapsuleBoxItem.java
133
new file mode 100644
134
index 0000000..93c0cc6
135
--- /dev/null
136
+++ java/Base/CapsuleBox/CapsuleBoxItem.java
137
@@ -0,0 +1,64 @@
138
+package Base.CapsuleBox;
139
+
140
+import java.util.ArrayList;
141
+import java.util.List;
142
+
143
+public class CapsuleBoxItem {
144
+    private int id;
145
+    private int playerLevel;
146
+    private List<Item> items;
147
+
148
+    public CapsuleBoxItem(int id, int playerLevel) {
149
+        this.id = id;
150
+        this.playerLevel = playerLevel;
151
+        items = new ArrayList<>();
152
+    }
153
+
154
+    public int getId() {
155
+        return id;
156
+    }
157
+
158
+    public int getPlayerLevel() {
159
+        return playerLevel;
160
+    }
161
+
162
+    public List<Item> getItems() {
163
+        return items;
164
+    }
165
+
166
+    public void addItem(Item item) {
167
+        items.add(item);
168
+    }
169
+
170
+    public static class Item {
171
+        private int itemId;
172
+        private int amount;
173
+        private int enchantLevel;
174
+        private int chance;
175
+
176
+        public Item(int itemId, int amount, int enchantLevel, int chance) {
177
+            this.itemId = itemId;
178
+            this.amount = amount;
179
+            this.enchantLevel = enchantLevel;
180
+            this.chance = chance;
181
+        }
182
+
183
+        public int getItemId() {
184
+            return itemId;
185
+        }
186
+
187
+        public int getAmount() {
188
+            return amount;
189
+        }
190
+
191
+        public int getEnchantLevel() {
192
+            return enchantLevel;
193
+        }
194
+
195
+        public int getChance() {
196
+            return chance;
197
+        }
198
+
199
+ 
200
+    }
201
+}
202
diff --git java/com/l2jmega/gameserver/GameServer.java java/com/l2jmega/gameserver/GameServer.java
203
index 948d4e4..12b0956 100644
204
--- java/com/l2jmega/gameserver/GameServer.java
205
+++ java/com/l2jmega/gameserver/GameServer.java
206
@@ -133,6 +133,7 @@
207
 import com.l2jmega.commons.mmocore.SelectorThread;
208
 import com.l2jmega.commons.util.SysUtil;
209
 
210
+import Base.CapsuleBox.CapsuleBoxData;
211
 import Base.RandomCraft.RandomCraftXML;
212
 import Base.Skin.DressMeData;
213
 import hwid.Hwid;
214
@@ -489,6 +490,10 @@
215
 			DressMeData.getInstance();
216
 		}
217
 		
218
+		StringUtil.printSection("CapsuleBox - Terius");
219
+		CapsuleBoxData.getInstance();
220
+		
221
+		
222
 		StringUtil.printSection("RandomCraft - Terius");
223
 		RandomCraftXML.getInstance();
224
 		
225
diff --git java/com/l2jmega/gameserver/handler/ItemHandler.java java/com/l2jmega/gameserver/handler/ItemHandler.java
226
index 8f41315..862cf95 100644
227
--- java/com/l2jmega/gameserver/handler/ItemHandler.java
228
+++ java/com/l2jmega/gameserver/handler/ItemHandler.java
229
@@ -58,6 +58,7 @@
230
 import com.l2jmega.gameserver.handler.itemhandlers.clan.SkillVitality;
231
 import com.l2jmega.gameserver.handler.itemhandlers.clan.SkillWithstandAttack;
232
 import com.l2jmega.gameserver.handler.itemhandlers.custom.AllyNameChange;
233
+import com.l2jmega.gameserver.handler.itemhandlers.custom.CapsuleBox_System;
234
 import com.l2jmega.gameserver.handler.itemhandlers.custom.ClanFull;
235
 import com.l2jmega.gameserver.handler.itemhandlers.custom.ClanNameChange;
236
 import com.l2jmega.gameserver.handler.itemhandlers.custom.ClassItem;
237
@@ -131,6 +132,7 @@
238
 		registerItemHandler(new Aio30days());
239
 		registerItemHandler(new AioEterno());
240
 		registerItemHandler(new LuckBox());
241
+		registerItemHandler(new CapsuleBox_System());
242
 		registerItemHandler(new ClanFull());
243
 		registerItemHandler(new NoblesItem());
244
 		registerItemHandler(new Vip24h());
245
diff --git java/com/l2jmega/gameserver/handler/admincommandhandlers/AdminAdmin.java java/com/l2jmega/gameserver/handler/admincommandhandlers/AdminAdmin.java
246
index 9bf868d..1d0907c 100644
247
--- java/com/l2jmega/gameserver/handler/admincommandhandlers/AdminAdmin.java
248
+++ java/com/l2jmega/gameserver/handler/admincommandhandlers/AdminAdmin.java
249
@@ -4,6 +4,7 @@
250
 
251
 import com.l2jmega.commons.lang.StringUtil;
252
 
253
+import Base.CapsuleBox.CapsuleBoxData;
254
 import Base.RandomCraft.RandomCraftXML;
255
 import Base.Skin.DressMeData;
256
 
257
@@ -210,6 +211,11 @@
258
 						RandomCraftXML.getInstance().reload();
259
 						activeChar.sendMessage("Random Craft have been reloaded.");
260
 					}
261
+					else if (type.startsWith("capsule")) 
262
+					{
263
+						CapsuleBoxData.getInstance().reload();
264
+						activeChar.sendMessage("Capsule Box have been reloaded.");
265
+					}
266
 					else if (type.startsWith("olly"))
267
 					{
268
 						OlyClassDamageManager.loadConfig();
269
diff --git java/com/l2jmega/gameserver/handler/itemhandlers/custom/CapsuleBox_System.java java/com/l2jmega/gameserver/handler/itemhandlers/custom/CapsuleBox_System.java
270
new file mode 100644
271
index 0000000..ebe42bf
272
--- /dev/null
273
+++ java/com/l2jmega/gameserver/handler/itemhandlers/custom/CapsuleBox_System.java
274
@@ -0,0 +1,58 @@
275
+package com.l2jmega.gameserver.handler.itemhandlers.custom;
276
+
277
+import com.l2jmega.gameserver.handler.IItemHandler;
278
+import com.l2jmega.gameserver.idfactory.IdFactory;
279
+import com.l2jmega.gameserver.model.actor.Playable;
280
+import com.l2jmega.gameserver.model.actor.instance.Player;
281
+import com.l2jmega.gameserver.model.item.instance.ItemInstance;
282
+import com.l2jmega.gameserver.network.serverpackets.MagicSkillUse;
283
+
284
+import com.l2jmega.commons.random.Rnd;
285
+
286
+import Base.CapsuleBox.CapsuleBoxData;
287
+import Base.CapsuleBox.CapsuleBoxItem;
288
+import Base.CapsuleBox.CapsuleBoxItem.Item;
289
+
290
+public class CapsuleBox_System implements IItemHandler {
291
+
292
+    @Override
293
+    public void useItem(Playable playable, ItemInstance item, boolean forceUse) {
294
+        if (!(playable instanceof Player))
295
+            return;
296
+
297
+        final Player activeChar = (Player) playable;
298
+        final int itemId = item.getItemId();
299
+
300
+        CapsuleBoxItem capsuleBoxItem = CapsuleBoxData.getInstance().getCapsuleBoxItemById(itemId);
301
+        if (capsuleBoxItem != null) {
302
+            if (activeChar.getLevel() < capsuleBoxItem.getPlayerLevel()) {
303
+                activeChar.sendMessage("Para Usar Esta Capsule Box Necesitas El LvL." + capsuleBoxItem.getPlayerLevel());
304
+                return;
305
+            }
306
+
307
+            ItemInstance toGive = null;
308
+            for (Item boxItem : capsuleBoxItem.getItems()) {
309
+                toGive = new ItemInstance(IdFactory.getInstance().getNextId(), boxItem.getItemId());
310
+                int random = Rnd.get(100);
311
+                if (random < boxItem.getChance()) {
312
+                    if (!toGive.isStackable()) {
313
+                        toGive.setEnchantLevel(boxItem.getEnchantLevel());
314
+                        activeChar.addItem("CapsuleBox", toGive, activeChar, true);
315
+                    } else {
316
+                        activeChar.addItem("CapsuleBox", boxItem.getItemId(), boxItem.getAmount(), activeChar, true);
317
+                    }
318
+                } else {
319
+                    
320
+                }
321
+                MagicSkillUse MSU = new MagicSkillUse(activeChar, activeChar, 2024, 1, 1, 0);
322
+                activeChar.broadcastPacket(MSU);
323
+               
324
+            }
325
+           
326
+        } else {
327
+            activeChar.sendMessage("This Capsule box expired or is invalid!");
328
+        }
329
+
330
+        playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
331
+    }
332
+}
333