Тема: Parser Skill
Показать сообщение отдельно
Непрочитано 04.01.2014, 07:15   #1
Заинтересовавшийся

Автор темы (Топик Стартер) Parser Skill

Добрый день.
Есть данная сборка: Тык
В ней по словам автора сломан Парсер скиллов...

Короче не сохраняются скиллы у персонажа, и соответсвенно не выдаются стартовые(которые должны быть при создании чара)

Как починить эту штуку?
Выручайте ребят.

сам парсер: (вроде этот)

Код:
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);
        }
    }
}
lCxAxAl вне форума