}
else if (nodeName.equalsIgnoreCase("rewardlist"))
{
RewardType type = RewardType.valueOf(secondElement.attributeValue("type"));
boolean autoLoot = (secondElement.attributeValue("auto_loot") != null) && Boolean.parseBoolean(secondElement.attributeValue("auto_loot"));
RewardList list = new RewardList(type, autoLoot);
for (Iterator<org.dom4j.Element> nextIterator = secondElement.elementIterator(); nextIterator.hasNext();)
{
final org.dom4j.Element nextElement = nextIterator.next();
final String nextName = nextElement.getName();
if (nextName.equalsIgnoreCase("group"))
{
double enterChance = nextElement.attributeValue("chance") == null ? RewardList.MAX_CHANCE : Double.parseDouble(nextElement.attributeValue("chance")) * 10000;
RewardGroup group = (type == RewardType.SWEEP) || (type == RewardType.NOT_RATED_NOT_GROUPED) ? null : new RewardGroup(enterChance);
for (Iterator<org.dom4j.Element> rewardIterator = nextElement.elementIterator(); rewardIterator.hasNext();)
{
org.dom4j.Element rewardElement = rewardIterator.next();
RewardData data = parseReward(rewardElement);
if ((type == RewardType.SWEEP) || (type == RewardType.NOT_RATED_NOT_GROUPED))
{
warn("Can't load rewardlist from group: " + npcId + "; type: " + type);
}
else
{
group.addData(data);
}
}
if (group != null)
{
list.add(group);
}
}
else if (nextName.equalsIgnoreCase("reward"))
{
if ((type != RewardType.SWEEP) && (type != RewardType.NOT_RATED_NOT_GROUPED))
{
warn("Reward can't be without group(and not grouped): " + npcId + "; type: " + type);
continue;
}
RewardData data = parseReward(nextElement);
RewardGroup g = new RewardGroup(RewardList.MAX_CHANCE);
g.addData(data);
list.add(g);
}
}
if ((type == RewardType.RATED_GROUPED) || (type == RewardType.NOT_RATED_GROUPED))
{
if (!list.validate())
{
warn("Problems with rewardlist for npc: " + npcId + "; type: " + type);
}
}
template.putRewardList(type, list);
}
else if (nodeName.equalsIgnoreCase("skills"))
{
for (Iterator<org.dom4j.Element> nextIterator = secondElement.elementIterator(); nextIterator.hasNext();)
{
org.dom4j.Element nextElement = nextIterator.next();
int id = Integer.parseInt(nextElement.attributeValue("id"));
int level = Integer.parseInt(nextElement.attributeValue("level"));
if (id == 4416)
{
template.setRace(level);
}
Skill skill = SkillTable.getInstance().getInfo(id, level);
if (skill == null)
{
continue;
}
template.addSkill(skill);
}
}
else if (nodeName.equalsIgnoreCase("minions"))
{
for (Iterator<org.dom4j.Element> nextIterator = secondElement.elementIterator(); nextIterator.hasNext();)
{
org.dom4j.Element nextElement = nextIterator.next();
int id = Integer.parseInt(nextElement.attributeValue("npc_id"));
int count = Integer.parseInt(nextElement.attributeValue("count"));
template.addMinion(new MinionData(id, count));
}
}
else if (nodeName.equalsIgnoreCase("teach_classes"))
{
for (Iterator<org.dom4j.Element> nextIterator = secondElement.elementIterator(); nextIterator.hasNext();)
{
org.dom4j.Element nextElement = nextIterator.next();
int id = Integer.parseInt(nextElement.attributeValue("id"));
template.addTeachInfo(ClassId.VALUES[id]);
}
}
else if (nodeName.equalsIgnoreCase("absorblist"))
{
for (Iterator<org.dom4j.Element> nextIterator = secondElement.elementIterator(); nextIterator.hasNext();)
{
org.dom4j.Element nextElement = nextIterator.next();
int chance = Integer.parseInt(nextElement.attributeValue("chance"));
int cursedChance = nextElement.attributeValue("cursed_chance") == null ? 0 : Integer.parseInt(nextElement.attributeValue("cursed_chance"));
int minLevel = Integer.parseInt(nextElement.attributeValue("min_level"));
int maxLevel = Integer.parseInt(nextElement.attributeValue("max_level"));
boolean skill = (nextElement.attributeValue("skill") != null) && Boolean.parseBoolean(nextElement.attributeValue("skill"));
AbsorbInfo.AbsorbType absorbType = AbsorbInfo.AbsorbType.valueOf(nextElement.attributeValue("type"));
template.addAbsorbInfo(new AbsorbInfo(skill, absorbType, chance, cursedChance, minLevel, maxLevel));
}
}
else if (nodeName.equalsIgnoreCase("teleportlist"))
{
for (Iterator<org.dom4j.Element> sublistIterator = secondElement.elementIterator(); sublistIterator.hasNext();)
{
org.dom4j.Element subListElement = sublistIterator.next();
int id = Integer.parseInt(subListElement.attributeValue("id"));
List<TeleportLocation> list = new ArrayList<>();
for (Iterator<org.dom4j.Element> targetIterator = subListElement.elementIterator(); targetIterator.hasNext();)
{
org.dom4j.Element targetElement = targetIterator.next();
int itemId = Integer.parseInt(targetElement.attributeValue("item_id", "57"));
long price = Integer.parseInt(targetElement.attributeValue("price"));
int npcStringId = Integer.parseInt(targetElement.attributeValue("name"));
int castleId = Integer.parseInt(targetElement.attributeValue("castle_id", "0"));
TeleportLocation loc = new TeleportLocation(itemId, price, npcStringId, castleId);
loc.set(Location.parseLoc(targetElement.attributeValue("loc")));
list.add(loc);
}
template.addTeleportList(id, list.toArray(new TeleportLocation[list.size()]));
}
}
else if (nodeName.equalsIgnoreCase("walker_route"))
{
int id = Integer.parseInt(secondElement.attributeValue("id"));