Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Создание нового Skill_Trees
#1
Создаю новую ветку скилов, похожую на Fishing_skill_trees.

1) Сделал L2AttributeSkillLearn.java, внес туда это:
Код:
public final class L2AttributeSkillLearn
{
    // these two build the primary key
    private final int _id;
    private final int _level;

    // not needed, just for easier debug
    private final String _name;

    private final int _spCost;
    private final int _minLevel;
    private final int _costid;
    private final int _costcount;

    public L2AttributeSkillLearn(int id, int lvl, int minLvl, String name, int cost, int costid, int costcount)
    {
        _id = id;
        _level = lvl;
        _minLevel = minLvl;
        _name = name.intern();
        _spCost = cost;
        _costid = costid;
        _costcount = costcount;
    }

    /**
     * @return Returns the id.
     */
    public int getId()
    {
        return _id;
    }

    /**
     * @return Returns the level.
     */
    public int getLevel()
    {
        return _level;
    }

    /**
     * @return Returns the minLevel.
     */
    public int getMinLevel()
    {
        return _minLevel;
    }

    /**
     * @return Returns the name.
     */
    public String getName()
    {
        return _name;
    }

    /**
     * @return Returns the spCost.
     */
    public int getSpCost()
    {
        return _spCost;
    }

    public int getIdCost()
    {
        return _costid;
    }

    public int getCostCount()
    {
        return _costcount;
    }
}

2) в SkillTreeTable.java внес это:
Код:
int count6   = 0;

        try
        {
            _attributeSkillTrees = new FastList<L2AttributeSkillLearn>();

            PreparedStatement statement = con.prepareStatement("SELECT skill_id, level, name, min_level, sp, itemid, count FROM attribute_skill_trees ORDER BY skill_id, level");
            ResultSet skilltree5 = statement.executeQuery();

            int prevSkillId = -1;

            while (skilltree5.next())
            {
                int id = skilltree5.getInt("skill_id");
                int lvl = skilltree5.getInt("level");
                String name = skilltree5.getString("name");
                int minLvl = skilltree5.getInt("min_level");
                int cost = skilltree5.getInt("sp");
                int itemId = skilltree5.getInt("itemId");
                int itemCount = skilltree5.getInt("count");

                if (prevSkillId != id)
                    prevSkillId = id;

                L2AttributeSkillLearn skill = new L2AttributeSkillLearn(id, lvl, minLvl, name, cost, itemId, itemCount);
                                
                _attributeSkillTrees.add(skill);
            }

            skilltree5.close();
            statement.close();

            count6 = _attributeSkillTrees.size();
        }
        catch(Exception e)
        {
            _log.severe("Error while creating attribute skill table"+" "+ e);
        }

3) Создал новый инстанс аля вот
Код:
public class L2MasterInstance extends L2FolkInstance
{
    /**
     * @param objectId
     * @param template
     */
    public L2MasterInstance(int objectId, L2NpcTemplate template)
    {
        super(objectId, template);
    }

        @Override
        public String getHtmlPath(int npcId, int val)
        {
                String pom = "";

                if (val == 0)
                        pom = "" + npcId;
                else
                        pom = npcId + "-" + val;

                return "data/html/attribute/" + pom + ".htm";
        }
        private void showBuyWindow(L2PcInstance player, int val)
    {
        double taxRate = 0;
        if (getIsInTown()) taxRate = getCastle().getTaxRate();
        player.tempInvetoryDisable();
        if (Config.DEBUG) _log.fine("Showing buylist");
        L2TradeList list = TradeController.getInstance().getBuyList(val);

        if (list != null && list.getNpcId().equals(String.valueOf(getNpcId())))
        {
            BuyList bl = new BuyList(list, player.getAdena(), taxRate);
            player.sendPacket(bl);
        }
        else
        {
            _log.warning("possible client hacker: " + player.getName()
                + " attempting to buy from GM shop! < Ban him!");
            _log.warning("buylist id:" + val);
        }

        player.sendPacket(new ActionFailed());
    }

        private void showSellWindow(L2PcInstance player)
    {
        if (Config.DEBUG) _log.fine("Showing selllist");

        player.sendPacket(new SellList(player));

        if (Config.DEBUG) _log.fine("Showing sell window");

        player.sendPacket(new ActionFailed());
    }

        @Override
        public void onBypassFeedback(L2PcInstance player, String command)
        {
                if (command.startsWith("AttributeSkillList"))
                {
                        player.setSkillLearningClassId(player.getClassId());
                        showAttributeSkillList(player);
                }

                StringTokenizer st = new StringTokenizer(command, " ");
        String command2 = st.nextToken();

                if (command2.equalsIgnoreCase("Buy"))
        {
            if (st.countTokens() < 1) return;
            int val = Integer.parseInt(st.nextToken());
            showBuyWindow(player, val);
        }
        else if (command2.equalsIgnoreCase("Sell"))
        {
                showSellWindow(player);
        }
                else
                {
                        super.onBypassFeedback(player, command);
                }

        }

        public void showAttributeSkillList(L2PcInstance player)
        {
                L2AttributeSkillLearn[] skills = SkillTreeTable.getInstance().getAvailableAttributeSkills(player);
                AquireSkillList asl = new AquireSkillList(AquireSkillList.skillType.Fishing);

                int counts = 0;

        for (L2AttributeSkillLearn s : skills)
                {
                        L2Skill sk = SkillTable.getInstance().getInfo(s.getId(), s.getLevel());

                        if (sk == null)
                                continue;

                        counts++;
                        asl.addSkill(s.getId(), s.getLevel(), s.getLevel(), s.getSpCost(), 1);
                }

                if (counts == 0)
                {
                    NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
                    int minlevel = SkillTreeTable.getInstance().getMinLevelForNewSkill(player);

                    if (minlevel > 0)
            {
                // No more skills to learn, come back when you level.
                        SystemMessage sm = new SystemMessage(SystemMessageId.DO_NOT_HAVE_FURTHER_SKILLS_TO_LEARN);
                        sm.addNumber(minlevel);
                        player.sendPacket(sm);
                    }
            else
            {
                TextBuilder sb = new TextBuilder();
                sb.append("<html><head><body>");
                sb.append("Вы изучили все атрибуты.<br>");
                sb.append("</body></html>");
                html.setHtml(sb.toString());
                player.sendPacket(html);
                    }
                }
                else
                {
                    player.sendPacket(asl);
                }

                player.sendPacket(new ActionFailed());
        }
}

4) Создал attribute_skill_trees.sql
5) Создал .xml с новыми скилами/атрибутами
6) Создал html

Подхожу к тренеру, скил есть, все в ажуре, пытаюсь его изучить и мне выводится сообщение:
Код:
            if(counts == 0)
            {
                player.sendMessage("Нельзя изучить");
                return;
            }

из RequestAquireSkill.java

В чем я оплошал? где мои кривые грабли не грабили? Sad
Ответ
#2
Дайте код из RequestAquireSkill, весь косяк кроется там Smile
open-team.ru
Ответ
#3
Drizzy Написал:Дайте код из RequestAquireSkill, весь косяк кроется там Smile

Код:
        else if(_skillType == 1)
        {
            int costid = 0;
            int costcount = 0;
            // Skill Learn bug Fix
            L2SkillLearn[] skillsc = SkillTreeTable.getInstance().getAvailableSkills(player);

            for(L2SkillLearn s : skillsc)
            {
                L2Skill sk = SkillTable.getInstance().getInfo(s.getId(), s.getLevel());

                if(sk == null || sk != skill)
                {
                    continue;
                }

                counts++;
                costid = s.getIdCost();
                costcount = s.getCostCount();
                _requiredSp = s.getSpCost();
            }

            if(counts == 0)
            {
                player.sendMessage("Нельзя изучить");
                return;
            }

            if(player.getSp() >= _requiredSp)
            {
                if(!player.destroyItemByItemId("Consume", costid, costcount, trainer, false))
                {
                    // Haven't spellbook
                    player.sendPacket(new SystemMessage(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL));
                    return;
                }

                SystemMessage sm = new SystemMessage(SystemMessageId.DISSAPEARED_ITEM);
                sm.addNumber(costcount);
                sm.addItemName(costid);
                sendPacket(sm);
            }
            else
            {
                SystemMessage sm = new SystemMessage(SystemMessageId.NOT_ENOUGH_SP_TO_LEARN_SKILL);
                player.sendPacket(sm);
                return;
            }
        }

Весь метод Smile

Добавлено через 1 час 15 минут
Проблема решена Smile. Спасибо всем кто откликнулся Big Grin

Добавлено через 4 часа 21 минуту
Блеать, и снова я здесь >.<!

2 вопроса.

1) На рисунке, видно, что в окошке где должны находится итемы - пусто, почему? это проблема в клиенте или все таки где-то в исходах?

[Изображение: d710563aca24623ddf9bd23b9a8e6e2c.jpg]

2) Способность хоть и изучается, но не сохраняется у персонажа, т.е. при перезаходе в игру, способности нет и ее нужно изучать заново. Где лопатить?

==========================================================

Вопрос №1 уже решён, че делать со вторым я хз, охота застрелиться Smile
==========================================================

спасибо всем кто был в теме Smile Все сделанно!=D
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Создание новые скролов телепорта LegioNteam 12 3,253 08-08-2014, 01:22 AM
Последний пост: Donatte
  Создание ПВП зоны (Опены) ZIP 9 2,854 08-02-2014, 10:08 PM
Последний пост: ZIP
  Создание своего Рецепта >.< finfan 1 1,701 10-04-2013, 12:33 AM
Последний пост: gorodetskiy
  Создание итема KpoIIIuK 0 1,080 06-25-2013, 01:58 AM
Последний пост: KpoIIIuK
  Создание персонажа Raymon 1 1,634 01-22-2013, 08:04 PM
Последний пост: kolobrodik
  Создание нового Condition finfan 9 2,230 01-03-2013, 02:51 AM
Последний пост: ..Kirito..
  Создание соединения с бд Main 6 1,882 12-20-2012, 11:14 PM
Последний пост: Main
  Создание нового SkillTrees finfan 6 1,880 09-03-2012, 10:56 PM
Последний пост: finfan
  Создание новых SkillType, от подсказки не откажусь. finfan 3 1,893 04-10-2012, 08:06 PM
Последний пост: Nehrk
  Создание эффекта, похожего на агр. finfan 0 1,197 02-26-2012, 11:24 PM
Последний пост: finfan

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)