Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/aCis/data/xml/dropType.xml b/aCis/data/xml/dropType.xml
- new file mode 100644
- index 0000000..a30f1f7
- --- /dev/null
- +++ b/aCis/data/xml/dropType.xml
- @@ -0,0 +1,12 @@
- +<?xml version="1.0" encoding="UTF-8"?>
- +<list>
- +<!--
- +@param Integer npcId - select the npc id to dropped the items
- +@param String type - select the npc type for items to be dropped.
- +@param Integer itemId - the id of the dropped item.
- +@param Integer minDrop - the minimum quantity of dropped items.
- +@param Integer maxDrop - the maximum quantity of dropped items.
- +@param Integer chance - the chance to have a drop, under a 1000000 chance.
- +-->
- + <drops type="Monster" itemId="3470" minDrop="1" maxDrop="1" chance="1000000"/>
- +</list>
- \ No newline at end of file
- diff --git a/aCis/java/net/sf/l2j/gameserver/GameServer.java b/aCis/java/net/sf/l2j/gameserver/GameServer.java
- index d10ac2b..3c23a09 100644
- --- a/aCis/java/net/sf/l2j/gameserver/GameServer.java
- +++ b/aCis/java/net/sf/l2j/gameserver/GameServer.java
- @@ -60,6 +60,7 @@
- import net.sf.l2j.gameserver.data.xml.AugmentationData;
- import net.sf.l2j.gameserver.data.xml.DoorData;
- import net.sf.l2j.gameserver.data.xml.DressMeData;
- +import net.sf.l2j.gameserver.data.xml.DropTypeData;
- import net.sf.l2j.gameserver.data.xml.FishData;
- import net.sf.l2j.gameserver.data.xml.HennaData;
- import net.sf.l2j.gameserver.data.xml.HerbDropData;
- @@ -238,6 +239,7 @@
- StringUtil.printSection("NPCs");
- BufferManager.getInstance();
- + DropTypeData.getInstance();
- HerbDropData.getInstance();
- NpcData.getInstance();
- WalkerRouteData.getInstance();
- diff --git a/aCis/java/net/sf/l2j/gameserver/data/xml/DropTypeData.java b/aCis/java/net/sf/l2j/gameserver/data/xml/DropTypeData.java
- new file mode 100644
- index 0000000..2a6b225
- --- /dev/null
- +++ b/aCis/java/net/sf/l2j/gameserver/data/xml/DropTypeData.java
- @@ -0,0 +1,84 @@
- +package net.sf.l2j.gameserver.data.xml;
- +
- +import java.nio.file.Path;
- +import java.util.ArrayList;
- +import java.util.List;
- +
- +import net.sf.l2j.commons.data.xml.IXmlReader;
- +
- +import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
- +import net.sf.l2j.gameserver.model.item.DropCategory;
- +import net.sf.l2j.gameserver.model.item.DropType;
- +
- +import org.w3c.dom.Document;
- +
- +/**
- + * @author Williams
- + *
- + */
- +public class DropTypeData implements IXmlReader
- +{
- + private final List<DropType> _data = new ArrayList<>();
- +
- + public DropTypeData()
- + {
- + load();
- + }
- +
- + @Override
- + public void load()
- + {
- + parseFile("./data/xml/dropType.xml");
- + LOGGER.info("Loaded {} drop data.", _data.size());
- + }
- +
- + @Override
- + public void parseDocument(Document doc, Path path)
- + {
- + forEach(doc, "list", listNode ->
- + {
- + forEach(listNode, "drops", dropNode ->
- + {
- + final DropType data = new DropType(parseAttributes(dropNode));
- + final DropCategory category = new DropCategory(data.getItemId());
- +
- + if (ItemData.getInstance().getTemplate(data.getItemId()) == null)
- + {
- + LOGGER.warn("Droplist data for undefined itemId: {}.", data.getItemId());
- + return;
- + }
- +
- + category.addDropData(data, false);
- +
- + for (NpcTemplate template : NpcData.getInstance().getAllNpcs())
- + {
- + if (data.getType().equalsIgnoreCase(template.getType()) || data.getNpcId() == template.getNpcId())
- + template.addDropCategory(category);
- + }
- +
- + _data.add(data);
- + });
- + });
- + }
- +
- + public void reload()
- + {
- + _data.clear();
- + load();
- + }
- +
- + public List<DropType> getDrops()
- + {
- + return _data;
- + }
- +
- + public static DropTypeData getInstance()
- + {
- + return SingletonHolder.INSTANCE;
- + }
- +
- + private static class SingletonHolder
- + {
- + protected static final DropTypeData INSTANCE = new DropTypeData();
- + }
- +}
- \ No newline at end of file
- diff --git a/aCis/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java b/aCis/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java
- index f322922..2dc7f5c 100644
- --- a/aCis/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java
- +++ b/aCis/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java
- @@ -13,6 +13,7 @@
- import net.sf.l2j.gameserver.data.xml.AnnouncementData;
- import net.sf.l2j.gameserver.data.xml.DoorData;
- import net.sf.l2j.gameserver.data.xml.DressMeData;
- +import net.sf.l2j.gameserver.data.xml.DropTypeData;
- import net.sf.l2j.gameserver.data.xml.EnchantData;
- import net.sf.l2j.gameserver.data.xml.InstantTeleportData;
- import net.sf.l2j.gameserver.data.xml.ItemData;
- @@ -74,6 +75,11 @@
- CursedWeaponManager.getInstance().reload();
- player.sendMessage("Cursed weapons have been reloaded.");
- }
- + else if (type.startsWith("drop"))
- + {
- + DropTypeData.getInstance().reload();
- + player.sendMessage("Drop have been reloaded.");
- + }
- else if (type.startsWith("door"))
- {
- DoorData.getInstance().reload();
- @@ -160,7 +166,7 @@
- public void sendUsage(Player player)
- {
- player.sendMessage("Usage : //reload <admin|announcement|buylist|config>");
- - player.sendMessage("Usage : //reload <crest|cw|door|dress|enchant|htm|item|multisell|npc>");
- + player.sendMessage("Usage : //reload <crest|cw|drop|door|dress|enchant|htm|item|multisell|npc>");
- player.sendMessage("Usage : //reload <npcwalker|poly|script|skill|spree|teleport|zone>");
- }
- diff --git a/aCis/java/net/sf/l2j/gameserver/model/actor/template/NpcTemplate.java b/aCis/java/net/sf/l2j/gameserver/model/actor/template/NpcTemplate.java
- index 2bf8cca..0944739 100644
- --- a/aCis/java/net/sf/l2j/gameserver/model/actor/template/NpcTemplate.java
- +++ b/aCis/java/net/sf/l2j/gameserver/model/actor/template/NpcTemplate.java
- @@ -340,7 +340,38 @@
- }
- return list;
- }
- +
- + public final void addDropCategory(DropCategory category)
- + {
- + synchronized (_categories)
- + {
- + if (_categories.isEmpty())
- + _categories = new ArrayList<>(); // empty means _categories is instance of Collections.emptyList(); - cannot add items to this container
- + else
- + {
- + // category already exists, return
- + for (DropCategory cat : _categories)
- + {
- + if (cat.getCategoryType() == category.getCategoryType())
- + return;
- + }
- + }
- +
- + _categories.add(category);
- + }
- + }
- + public final void removeDropCategory(DropCategory category)
- + {
- + synchronized (_categories)
- + {
- + if (_categories.isEmpty())
- + return;
- +
- + _categories.remove(category);
- + }
- + }
- +
- /**
- * @return the {@link List} of all possible {@link DropData}s of this {@link NpcTemplate} linked to SPOIL behavior.
- */
- @@ -354,36 +385,7 @@
- }
- return list;
- }
- -
- - /**
- - * Add a {@link DropData} to a given category. If the category does not exist, create it.
- - * @param drop : The DropData to add.
- - * @param categoryType : The category type we refer.
- - */
- - public void addDropData(DropData drop, int categoryType)
- - {
- - final boolean isBossType = isType("RaidBoss") || isType("GrandBoss");
- -
- - synchronized (_categories)
- - {
- - // Category exists, stores the drop and return.
- - for (DropCategory cat : _categories)
- - {
- - if (cat.getCategoryType() == categoryType)
- - {
- - cat.addDropData(drop, isBossType);
- - return;
- - }
- - }
- -
- - // Category doesn't exist, create and store it.
- - final DropCategory cat = new DropCategory(categoryType);
- - cat.addDropData(drop, isBossType);
- -
- - _categories.add(cat);
- - }
- - }
- -
- +
- /**
- * @return the {@link List} of all {@link MinionData}.
- */
- diff --git a/aCis/java/net/sf/l2j/gameserver/model/item/DropType.java b/aCis/java/net/sf/l2j/gameserver/model/item/DropType.java
- new file mode 100644
- index 0000000..fa43cf8
- --- /dev/null
- +++ b/aCis/java/net/sf/l2j/gameserver/model/item/DropType.java
- @@ -0,0 +1,31 @@
- +package net.sf.l2j.gameserver.model.item;
- +
- +import net.sf.l2j.commons.data.StatSet;
- +
- +/**
- + * @author Williams
- + *
- + */
- +public class DropType extends DropData
- +{
- + private final String _type;
- + private final int _npcId;
- +
- + public DropType(StatSet set)
- + {
- + super(set.getInteger("itemId"), set.getInteger("minDrop"), set.getInteger("maxDrop"), set.getInteger("chance"));
- +
- + _npcId = set.getInteger("npcId", 0);
- + _type = set.getString("type", "");
- + }
- +
- + public int getNpcId()
- + {
- + return _npcId;
- + }
- +
- + public String getType()
- + {
- + return _type;
- + }
- +}
- \ No newline at end of file
Advertisement
Add Comment
Please, Sign In to add comment