Parser Skill - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II

Lineage II
Дискуссии на тему создания, настройки и обслуживания серверов Lineage 2. При поддержке: Премиум услуги по рекламе

Закрытая тема
Опции темы
Непрочитано 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 вне форума
Непрочитано 04.01.2014, 08:13   #2
Аватар для SoniPro
Супергерой

По умолчанию Re: Parser Skill

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

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

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

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

Код:
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);
        }
    }
}
офф:
Свернуть ↑Развернуть ↓
SoniPro вне форума
Непрочитано 04.01.2014, 08:15   #3
Изгнанные

По умолчанию Re: Parser Skill

Цитата:
Сообщение от SoniPro Посмотреть сообщение
офф:
Свернуть ↑Развернуть ↓
КАКАЯ РАЗНИЦА ОТКУДА ОН СКАЧАЛ ЕСЛИ ПРОСИЛ ПОМОЩИ ?

Последний раз редактировалось <~Kp@$o†ka~>; 05.01.2014 в 06:08.
<~Kp@$o†ka~> вне форума
Непрочитано 04.01.2014, 08:33   #4
Аватар для Aristocrat
Мастер

По умолчанию Re: Parser Skill

Сюда скоро вообще перестанут кто-либо заглядывать, с таким отношением к новичкам.
Останутся старички с датой регистрации 2007-2008 и администрация.
Совсем зазвездились, товарищи.

Я в свое время пришел на этот форум только потому, что тут было адекватное отношение к новичкам. Админы помогали, отвечали на вопросы некоторые, модераторы не страдали синдромом вахтера и не принимали любой пост, как смертельную угрозу существованию ЗГ.
Даже срачи были уютными, без обязательного перехода на скриптов.
Aristocrat вне форума
Сказали спасибо:
Непрочитано 04.01.2014, 09:00   #5
Аватар для WoWan-SM
Герой

По умолчанию Re: Parser Skill

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

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

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

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

Код:
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);
        }
    }
}
На яндекс диск выложи сборку.
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™
Непрочитано 04.01.2014, 09:00   #6
Изгнанные

По умолчанию Re: Parser Skill

Цитата:
Сообщение от Aristocrat Посмотреть сообщение
Сюда скоро вообще перестанут кто-либо заглядывать, с таким отношением к новичкам.
Останутся старички с датой регистрации 2007-2008 и администрация.
Совсем зазвездились, товарищи.

Я в свое время пришел на этот форум только потому, что тут было адекватное отношение к новичкам. Админы помогали, отвечали на вопросы некоторые, модераторы не страдали синдромом вахтера и не принимали любой пост, как смертельную угрозу существованию ЗГ.
Даже срачи были уютными, без обязательного перехода на скриптов.
просто автор темы привел ссылку
на сторонний портал думаю это и задело SoniPro

Последний раз редактировалось <~Kp@$o†ka~>; 05.01.2014 в 04:05.
<~Kp@$o†ka~> вне форума
Непрочитано 04.01.2014, 09:13   #7
Аватар для SoniPro
Супергерой

По умолчанию Re: Parser Skill

Цитата:
Сообщение от Aristocrat Посмотреть сообщение
Сюда скоро вообще перестанут кто-либо заглядывать, с таким отношением к новичкам.
Останутся старички с датой регистрации 2007-2008 и администрация.
Совсем зазвездились, товарищи.

Я в свое время пришел на этот форум только потому, что тут было адекватное отношение к новичкам. Админы помогали, отвечали на вопросы некоторые, модераторы не страдали синдромом вахтера и не принимали любой пост, как смертельную угрозу существованию ЗГ.
Даже срачи были уютными, без обязательного перехода на скриптов.
Далеко не любой пост. Они качают сборки с гавнофорума и идут сюда с ними в надежде, что жители этого форума будут им все править.
SoniPro вне форума
Непрочитано 04.01.2014, 09:41   #8
Заинтересовавшийся

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

Кхм, сударь, а откуда нам еще качать?
Скачали мы вообще с MEGA.

Добавлено через 40 минут
http://yadi.sk/d/RSzDyRrrFRBam
Вот сборка на ЯДе

Последний раз редактировалось lCxAxAl; 04.01.2014 в 10:22. Причина: Добавлено сообщение
lCxAxAl вне форума
Непрочитано 04.01.2014, 10:37   #9
Аватар для SoniPro
Супергерой

По умолчанию Re: Parser Skill

Цитата:
Сообщение от lCxAxAl Посмотреть сообщение
Кхм, сударь, а откуда нам еще качать?
Скачали мы вообще с MEGA.

Добавлено через 40 минут
http://yadi.sk/d/RSzDyRrrFRBam
Вот сборка на ЯДе
Вот и задавайте вопросы свои там, где скачали.
SoniPro вне форума
Непрочитано 04.01.2014, 10:47   #10
Аватар для Aristocrat
Мастер

По умолчанию Re: Parser Skill

Цитата:
Вот и задавайте вопросы свои там, где скачали.
Хотел бы я на это посмотреть)
MEGA это https://mega.co.nz
Aristocrat вне форума
Закрытая тема


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мануал! Установка ява сервера SF, RT, ST etc. PROGRAMMATOR Тех-документация 567 28.02.2021 18:13
Гс Ошибка Литион Lineage II 20 03.02.2013 00:56
Помогите с компилом Daan Raven Работа со скриптами 12 13.01.2013 21:15
Адаптируем SQL BimBom Работа со скриптами 9 14.10.2009 15:14
Сервер RedLine rev 0007x0001SE Каратель Lineage II 30 02.04.2009 14:58


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 21:31. Часовой пояс GMT +3.

Вверх