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 |