01-04-2014, 07:15 AM
Добрый день.
Есть данная сборка: Тык
В ней по словам автора сломан Парсер скиллов...
Короче не сохраняются скиллы у персонажа, и соответсвенно не выдаются стартовые(которые должны быть при создании чара)
Как починить эту штуку?
Выручайте ребят.
сам парсер: (вроде этот)
Есть данная сборка: Тык
В ней по словам автора сломан Парсер скиллов...
Короче не сохраняются скиллы у персонажа, и соответсвенно не выдаются стартовые(которые должны быть при создании чара)
Как починить эту штуку?
Выручайте ребят.
сам парсер: (вроде этот)
Код:
package westeros.gameserver.data.xml.parser;
import org.dom4j.Element;
import westeros.gameserver.Config;
import westeros.gameserver.data.xml.holder.SkillHolder;
import westeros.gameserver.data.xml.holder.SystemMessageHolder;
import westeros.gameserver.model.Skill;
import westeros.gameserver.serverpackets.SystemMessage;
import westeros.gameserver.skills.SkillType;
import westeros.gameserver.skills.effects.EffectTemplate;
import westeros.gameserver.stats.StatTemplate;
import westeros.gameserver.stats.conditions.Condition;
import westeros.gameserver.templates.StatsSet;
import java.io.File;
import java.util.Iterator;
/**
*
* @author Monithly
*/
public class SkillParser extends StatParser<SkillHolder>
{
private static final SkillParser _instance = new SkillParser();
public SkillParser()
{
super(SkillHolder.getInstance());
}
public static SkillParser getInstance()
{
return _instance;
}
@Override
public File getXMLDir()
{
return new File(Config.DATAPACK_ROOT, "data/skills/");
}
@Override
public boolean isIgnored(File f)
{
return false;
}
@Override
public String getDTDFileName()
{
return "skill.dtd";
}
@Override
protected void readData(final Element rootElement)
{
Skill skill;
for (Iterator<Element> skillElementIterator = rootElement.elementIterator(); skillElementIterator.hasNext();)
{
final Element skillElement = skillElementIterator.next();
final StatsSet set = new StatsSet();
set.set("skill_id", skillElement.attributeValue("id"));
set.set("level", skillElement.attributeValue("level"));
set.set("name", skillElement.attributeValue("name"));
for (Iterator<Element> subIterator = skillElement.elementIterator("param"); subIterator.hasNext();)
{
final Element subElement = subIterator.next();
set.set(subElement.attributeValue("name"), subElement.attributeValue("value"));
}
skill = set.getEnum("skillType", SkillType.class).makeSkill(set);
for (Iterator<Element> subIterator = skillElement.elementIterator(); subIterator.hasNext();)
{
final Element subElement = subIterator.next();
switch (subElement.getName())
{
case "cond":
{
final Condition condition = parseFirstCond(subElement);
if (condition != null)
{
if (subElement.attribute("msgId") != null)
{
final SystemMessage sm = SystemMessageHolder.getInstance().get(Integer.parseInt(subElement.attributeValue("msgId")));
if (sm != null)
{
if (sm.haveArguments())
{
sm.addSkillName(skill);
}
condition.setSystemMsg(sm);
}
}
skill.attach(condition);
}
break;
}
case "triggers":
{
parseTriggers(subElement, skill);
break;
}
case "for":
{
parseParams(subElement, skill);
break;
}
}
}
getHolder().addSkill(skill);
}
}
protected void parseEffect(final Element element, final StatTemplate template)
{
final StatsSet set = new StatsSet();
set.set("name", element.attributeValue("name"));
if (element.attribute("count") != null)
{
set.set("count", Integer.decode(element.attributeValue("count")));
}
if (element.attribute("time") != null)
{
set.set("time", element.attributeValue("time"));
}
if (element.attribute("val") != null)
{
set.set("value", element.attributeValue("val"));
}
if (element.attribute("abnormal") != null)
{
set.set("abnormal", element.attributeValue("abnormal"));
}
if (element.attribute("stackTypes") != null)
{
set.set("stackTypes", element.attributeValue("stackTypes"));
}
if (element.attribute("stackOrder") != null)
{
set.set("stackOrder", element.attributeValue("stackOrder"));
}
if (element.attribute("applyOnCaster") != null)
{
set.set("applyOnCaster", element.attributeValue("applyOnCaster"));
}
if (element.attribute("applyOnSummon") != null)
{
set.set("applyOnSummon", element.attributeValue("applyOnSummon"));
}
if (element.attribute("displayId") != null)
{
set.set("displayId", element.attributeValue("displayId"));
}
if (element.attribute("displayLevel") != null)
{
set.set("displayLevel", element.attributeValue("displayLevel"));
}
if (element.attribute("chance") != null)
{
set.set("chance", element.attributeValue("chance"));
}
if (element.attribute("cancelOnAction") != null)
{
set.set("cancelOnAction", element.attributeValue("cancelOnAction"));
}
if (element.attribute("isOffensive") != null)
{
set.set("isOffensive", element.attributeValue("isOffensive"));
}
if (element.attribute("isReflectable") != null)
{
set.set("isReflectable", element.attributeValue("isReflectable"));
}
final EffectTemplate eff = new EffectTemplate(set);
parseParams(element, eff);
((Skill) template).attach(eff);
}
@Override
protected void parseParam(final Element element, final StatTemplate template) throws Exception
{
if (element.getName().equalsIgnoreCase("effect"))
{
if (template instanceof EffectTemplate)
{
throw new RuntimeException("Nested effects");
}
parseEffect(element, template);
}
else if (template instanceof EffectTemplate)
{
if (element.getName().equalsIgnoreCase("def"))
{
((EffectTemplate) template).addParam(element.attributeValue("name"), element.attributeValue("val"));
}
else if (element.getName().equalsIgnoreCase("triggers"))
{
parseTriggers(element, template);
}
else
{
final Condition cond = parseCond(element);
if (cond != null)
{
((EffectTemplate) template).attachCond(cond);
}
}
}
else
{
super.parseParam(element, template);
}
}
}