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

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 25.03.2012, 08:25   #1
Аватар для finfan
fin-ex.corp

Автор темы (Топик Стартер) Создание нового Skill_Trees

Создаю новую ветку скилов, похожую на 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

В чем я оплошал? где мои кривые грабли не грабили?
finfan вне форума Отправить сообщение для finfan с помощью Skype™ Ответить с цитированием
Непрочитано 25.03.2012, 12:42   #2
Аватар для Drizzy

По умолчанию Re: Создание нового Skill_Trees

Дайте код из RequestAquireSkill, весь косяк кроется там
__________________
open-team.ru
Drizzy вне форума Отправить сообщение для Drizzy с помощью ICQ Ответить с цитированием
Непрочитано 25.03.2012, 13:30   #3
Аватар для finfan
fin-ex.corp

Автор темы (Топик Стартер) Re: Создание нового Skill_Trees

Цитата:
Сообщение от Drizzy Посмотреть сообщение
Дайте код из RequestAquireSkill, весь косяк кроется там
Код:
		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;
			}
		}
Весь метод

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

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

2 вопроса.

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



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

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

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

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

Последний раз редактировалось finfan; 25.03.2012 в 21:12. Причина: Добавлено сообщение
finfan вне форума Отправить сообщение для finfan с помощью Skype™ Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового класса / создание новой профессии marvellously Тех-документация 26 06.09.2017 02:52
Администратора нового сервера LA2 Herurg Рынок / Marketplace 12 29.01.2012 11:22
Строительство нового дц by JaFo JaFo Курилка / Yak floor 0 28.08.2011 08:40
Где в коде прописывается создание нового чара? Rus. Lineage II 1 19.08.2009 15:24


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

Вверх