|
@@ -15,29 +15,25 @@
|
|
package com.l2jserver.gameserver.datatables;
|
|
package com.l2jserver.gameserver.datatables;
|
|
|
|
|
|
import java.io.File;
|
|
import java.io.File;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.Map;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Level;
|
|
-import java.util.logging.Logger;
|
|
|
|
-
|
|
|
|
-import javolution.util.FastList;
|
|
|
|
|
|
|
|
import org.w3c.dom.Document;
|
|
import org.w3c.dom.Document;
|
|
import org.w3c.dom.NamedNodeMap;
|
|
import org.w3c.dom.NamedNodeMap;
|
|
import org.w3c.dom.Node;
|
|
import org.w3c.dom.Node;
|
|
|
|
|
|
import com.l2jserver.Config;
|
|
import com.l2jserver.Config;
|
|
|
|
+import com.l2jserver.gameserver.engines.DocumentParser;
|
|
import com.l2jserver.gameserver.model.L2ArmorSet;
|
|
import com.l2jserver.gameserver.model.L2ArmorSet;
|
|
import com.l2jserver.gameserver.model.holders.SkillHolder;
|
|
import com.l2jserver.gameserver.model.holders.SkillHolder;
|
|
-import com.l2jserver.util.XMLParser;
|
|
|
|
-import com.l2jserver.util.file.filter.XMLFilter;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
- * @author godson, Luno
|
|
|
|
|
|
+ * @author godson, Luno, UnAfraid
|
|
*/
|
|
*/
|
|
-public class ArmorSetsTable
|
|
|
|
|
|
+public class ArmorSetsTable extends DocumentParser
|
|
{
|
|
{
|
|
- private static Logger _log = Logger.getLogger(ArmorSetsTable.class.getName());
|
|
|
|
-
|
|
|
|
- private FastList<L2ArmorSet> _armorSets;
|
|
|
|
|
|
+ private Map<Integer, L2ArmorSet> _armorSets;
|
|
|
|
|
|
public static ArmorSetsTable getInstance()
|
|
public static ArmorSetsTable getInstance()
|
|
{
|
|
{
|
|
@@ -46,151 +42,138 @@ public class ArmorSetsTable
|
|
|
|
|
|
private ArmorSetsTable()
|
|
private ArmorSetsTable()
|
|
{
|
|
{
|
|
- _armorSets = new FastList<>();
|
|
|
|
- loadData();
|
|
|
|
|
|
+ _armorSets = new HashMap<>();
|
|
|
|
+ load();
|
|
}
|
|
}
|
|
|
|
|
|
- private final class Parser extends XMLParser
|
|
|
|
|
|
+ private void load()
|
|
{
|
|
{
|
|
- public Parser(File f)
|
|
|
|
- {
|
|
|
|
- super(f);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public void parseDoc(Document doc)
|
|
|
|
|
|
+ loadDirectory(new File(Config.DATAPACK_ROOT, "data/stats/armorsets"));
|
|
|
|
+ _log.log(Level.INFO, getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " Armor sets.");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ protected void parseDoc(Document doc)
|
|
|
|
+ {
|
|
|
|
+ NamedNodeMap attrs;
|
|
|
|
+ L2ArmorSet set;
|
|
|
|
+ for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
|
|
{
|
|
{
|
|
- NamedNodeMap attrs;
|
|
|
|
- L2ArmorSet set;
|
|
|
|
- Node att = null;
|
|
|
|
- for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
|
|
|
|
|
|
+ if ("list".equalsIgnoreCase(n.getNodeName()))
|
|
{
|
|
{
|
|
- if ("list".equalsIgnoreCase(n.getNodeName()))
|
|
|
|
|
|
+ for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
|
|
{
|
|
{
|
|
- for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
|
|
|
|
|
|
+ if ("set".equalsIgnoreCase(d.getNodeName()))
|
|
{
|
|
{
|
|
- if ("set".equalsIgnoreCase(d.getNodeName()))
|
|
|
|
|
|
+ set = new L2ArmorSet();
|
|
|
|
+ for (Node a = d.getFirstChild(); a != null; a = a.getNextSibling())
|
|
{
|
|
{
|
|
- set = new L2ArmorSet();
|
|
|
|
- _armorSets.add(set);
|
|
|
|
- for (Node a = d.getFirstChild(); a != null; a = a.getNextSibling())
|
|
|
|
|
|
+ attrs = a.getAttributes();
|
|
|
|
+ switch (a.getNodeName())
|
|
{
|
|
{
|
|
- attrs = a.getAttributes();
|
|
|
|
- try
|
|
|
|
|
|
+ case "chest":
|
|
|
|
+ {
|
|
|
|
+ set.addChest(getIntValue(attrs.getNamedItem("id")));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "feet":
|
|
|
|
+ {
|
|
|
|
+ set.addFeet(getIntValue(attrs.getNamedItem("id")));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "gloves":
|
|
|
|
+ {
|
|
|
|
+ set.addGloves(getIntValue(attrs.getNamedItem("id")));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "head":
|
|
|
|
+ {
|
|
|
|
+ set.addHead(getIntValue(attrs.getNamedItem("id")));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "legs":
|
|
|
|
+ {
|
|
|
|
+ set.addLegs(getIntValue(attrs.getNamedItem("id")));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "shield":
|
|
|
|
+ {
|
|
|
|
+ set.addShield(getIntValue(attrs.getNamedItem("id")));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "skill":
|
|
|
|
+ {
|
|
|
|
+ int skillId = getIntValue(attrs.getNamedItem("id"));
|
|
|
|
+ int skillLevel = getIntValue(attrs.getNamedItem("level"));
|
|
|
|
+ set.addSkill(new SkillHolder(skillId, skillLevel));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "shield_skill":
|
|
{
|
|
{
|
|
- if (attrs != null)
|
|
|
|
- att = attrs.getNamedItem("id");
|
|
|
|
- String name = a.getNodeName();
|
|
|
|
- if ("chest".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- set.addChest(Integer.parseInt(att.getNodeValue()));
|
|
|
|
- }
|
|
|
|
- else if ("feet".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- set.addFeet(Integer.parseInt(att.getNodeValue()));
|
|
|
|
- }
|
|
|
|
- else if ("gloves".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- set.addGloves(Integer.parseInt(att.getNodeValue()));
|
|
|
|
- }
|
|
|
|
- else if ("head".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- set.addHead(Integer.parseInt(att.getNodeValue()));
|
|
|
|
- }
|
|
|
|
- else if ("legs".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- set.addLegs(Integer.parseInt(att.getNodeValue()));
|
|
|
|
- }
|
|
|
|
- else if ("shield".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- set.addShield(Integer.parseInt(att.getNodeValue()));
|
|
|
|
- }
|
|
|
|
- else if ("skill".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- int skillId = Integer.parseInt(att.getNodeValue());
|
|
|
|
- int skillLevel = Integer.parseInt(attrs.getNamedItem("level").getNodeValue());
|
|
|
|
- set.addSkill(new SkillHolder(skillId, skillLevel));
|
|
|
|
- }
|
|
|
|
- else if ("shield_skill".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- int skillId = Integer.parseInt(att.getNodeValue());
|
|
|
|
- int skillLevel = Integer.parseInt(attrs.getNamedItem("level").getNodeValue());
|
|
|
|
- set.addShieldSkill(new SkillHolder(skillId, skillLevel));
|
|
|
|
- }
|
|
|
|
- else if ("enchant6skill".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- int skillId = Integer.parseInt(att.getNodeValue());
|
|
|
|
- int skillLevel = Integer.parseInt(attrs.getNamedItem("level").getNodeValue());
|
|
|
|
- set.addEnchant6Skill(new SkillHolder(skillId, skillLevel));
|
|
|
|
- }
|
|
|
|
- else if ("con".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- // TODO: Implement me
|
|
|
|
- }
|
|
|
|
- else if ("dex".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- // TODO: Implement me
|
|
|
|
- }
|
|
|
|
- else if ("str".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- // TODO: Implement me
|
|
|
|
- }
|
|
|
|
- else if ("men".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- // TODO: Implement me
|
|
|
|
- }
|
|
|
|
- else if ("wit".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- // TODO: Implement me
|
|
|
|
- }
|
|
|
|
- else if ("int".equalsIgnoreCase(name))
|
|
|
|
- {
|
|
|
|
- // TODO: Implement me
|
|
|
|
- }
|
|
|
|
|
|
+ int skillId = getIntValue(attrs.getNamedItem("id"));
|
|
|
|
+ int skillLevel = getIntValue(attrs.getNamedItem("level"));
|
|
|
|
+ set.addShieldSkill(new SkillHolder(skillId, skillLevel));
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
- catch (Exception e)
|
|
|
|
|
|
+ case "enchant6skill":
|
|
{
|
|
{
|
|
- _log.log(Level.WARNING, "Error while parsing set id: " + d.getAttributes().getNamedItem("id").getNodeValue() + " " + e.getMessage(), e);
|
|
|
|
|
|
+ int skillId = getIntValue(attrs.getNamedItem("id"));
|
|
|
|
+ int skillLevel = getIntValue(attrs.getNamedItem("level"));
|
|
|
|
+ set.addEnchant6Skill(new SkillHolder(skillId, skillLevel));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "con":
|
|
|
|
+ {
|
|
|
|
+ // TODO: Implement me
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "dex":
|
|
|
|
+ {
|
|
|
|
+ // TODO: Implement me
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "str":
|
|
|
|
+ {
|
|
|
|
+ // TODO: Implement me
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "men":
|
|
|
|
+ {
|
|
|
|
+ // TODO: Implement me
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "wit":
|
|
|
|
+ {
|
|
|
|
+ // TODO: Implement me
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case "int":
|
|
|
|
+ {
|
|
|
|
+ // TODO: Implement me
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ _armorSets.put(set.getChestId(), set);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private void loadData()
|
|
|
|
|
|
+ private int getIntValue(Node n)
|
|
{
|
|
{
|
|
- File dir = new File(Config.DATAPACK_ROOT, "data/stats/armorsets");
|
|
|
|
- if (dir.isDirectory())
|
|
|
|
- {
|
|
|
|
- for (File f : dir.listFiles(new XMLFilter()))
|
|
|
|
- {
|
|
|
|
- new Parser(f);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- _log.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't find folder: " + dir.getAbsolutePath());
|
|
|
|
- }
|
|
|
|
- _log.log(Level.INFO, getClass().getSimpleName() + ": Loaded " + _armorSets.size() + " Armor sets.");
|
|
|
|
|
|
+ return Integer.parseInt(n.getNodeValue());
|
|
}
|
|
}
|
|
|
|
|
|
public boolean setExists(int chestId)
|
|
public boolean setExists(int chestId)
|
|
{
|
|
{
|
|
- return getSet(chestId) != null;
|
|
|
|
|
|
+ return _armorSets.containsKey(chestId);
|
|
}
|
|
}
|
|
|
|
|
|
public L2ArmorSet getSet(int chestId)
|
|
public L2ArmorSet getSet(int chestId)
|
|
{
|
|
{
|
|
- for (L2ArmorSet set : _armorSets)
|
|
|
|
- {
|
|
|
|
- if (set.containsChest(chestId))
|
|
|
|
- return set;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return null;
|
|
|
|
|
|
+ return _armorSets.get(chestId);
|
|
}
|
|
}
|
|
|
|
|
|
@SuppressWarnings("synthetic-access")
|
|
@SuppressWarnings("synthetic-access")
|