Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Несколько видов стрел для одного лука.
#1
Сборка:
L2J
Задача:
Сделать возможным использование любого грейда стрел для любого грейда лука.

Написанный код:
Код:
    public L2ItemInstance findArrowForBow(L2Item bow)
    {
        if (bow == null)
            return null;
        FastList<L2ItemInstance> arrows = new FastList<L2ItemInstance>();
        arrows.add(getItemByItemId(17));
        arrows.add(getItemByItemId(30));
        arrows.add(getItemByItemId(38));
        arrows.add(getItemByItemId(39));
        
        L2ItemInstance arrow = null;
        if (arrows.contains(arrow));

        return arrow;
    }

Я только учусь, поэтому возможно предложенный метод реализации покажется кому-то странным.

Вопрос:
Как я всё это вижу.
1) Есть список из 4 итемов, стрел.
2) Есть "стрела", которая возвращается, если она есть в списке.
3) Но откуда она возьмётся, если она null?

Задача в том, чтобы проверить. Есть ли эта "стрела" в инвентаре. Тогда получится, что при удовлетворении обоих условий, будет возвращена "стрела". Одно условие написано. Как написать второе ума не приложу.

Добавлено через 44 минуты
Написал вот так. Осталась одна проблема. Стрелу нельзя "одеть". Она одевается только при одевании лука. Но это уже не здесь, конечно.
Код:
    public L2ItemInstance findArrowForBow(L2Item bow)
    {
        if (bow == null)
            return null;
        FastList<L2ItemInstance> arrows = new FastList<L2ItemInstance>();
        arrows.add(getItemByItemId(17));
        arrows.add(getItemByItemId(30));
        arrows.add(getItemByItemId(38));
        arrows.add(getItemByItemId(39));
        

        L2ItemInstance[] items = getItems();
        for(L2ItemInstance arrow : items){    
            if (arrows.contains(arrow))

        return arrow;
    }
        return null;
        

    }
Ответ
#2
Также пытаюсь это сделать... только на уровне клиента
вот что нарыл:
Engine.u

Цитата:struct native NAtkConsumeItemParam
{
var int BowItemID;
var int BowUseItemID;
};

В клиенте, в дев моде (без серва), стрелы меняются в зависимости от лука.
Если заменить модель дропа стрел (etcitemgrp.dat), стрелы меняются.

К чему виду, грейд "привязан" к ИД предмета. Где оно привязано - х*й его знает =(
:gun1::es:
Ответ
#3
Respect Написал:Также пытаюсь это сделать... только на уровне клиента
вот что нарыл:
Engine.u



В клиенте, в дев моде (без серва), стрелы меняются в зависимости от лука.
Если заменить модель дропа стрел (etcitemgrp.dat), стрелы меняются.

К чему виду, грейд "привязан" к ИД предмета. Где оно привязано - х*й его знает =(
В клиенте привязки нет. Исходный код привязки вот, Inventory.java:
Код:
public L2ItemInstance findArrowForBow(L2Item bow)
    {
        if (bow == null)
            return null;

        L2ItemInstance arrow = null;

        switch (bow.getItemGradeSPlus())
        {
            default:
            case L2Item.CRYSTAL_NONE:
                arrow = getItemByItemId(17);
                break; // Wooden arrow
            case L2Item.CRYSTAL_D:
                arrow = (arrow = getItemByItemId(1341)) != null ? arrow : getItemByItemId(22067);
                break; // Bone arrow
            case L2Item.CRYSTAL_C:
                arrow = (arrow = getItemByItemId(1342)) != null ? arrow : getItemByItemId(22068);
                break; // Fine steel arrow
            case L2Item.CRYSTAL_B:
                arrow = (arrow = getItemByItemId(1343)) != null ? arrow : getItemByItemId(22069);
                break; // Silver arrow
            case L2Item.CRYSTAL_A:
                arrow = (arrow = getItemByItemId(1344)) != null ? arrow : getItemByItemId(22070);
                break; // Mithril arrow
            case L2Item.CRYSTAL_S:
                arrow = (arrow = getItemByItemId(1345)) != null ? arrow : getItemByItemId(22071);
                break; // Shining arrow
        }

        // Get the L2ItemInstance corresponding to the item identifier and return it
        return arrow;
    }

Этот кусок я и заменил. Я добился того, чтобы стрелы можно было использовать разные. Проблема в том, что стрелу нельзя "переодеть" даблкликом. Думаю, что я её просто запихну в другой слот, свободный. Тогда можно будет переодевать. Но это уже завтра.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Несколько Фракций AFERA 7 2,600 06-01-2016, 10:53 AM
Последний пост: LifeGame32
  Несколько вопросов. xJak 15 3,022 10-19-2012, 01:13 PM
Последний пост: FullMetal
  Несколько вопросов Tpek 3 2,001 04-05-2011, 11:49 PM
Последний пост: Plush_Hero
  Несколько сетей для игры ла2 Ayub 2 2,307 08-28-2010, 03:26 PM
Последний пост: Ayub
  Непонятка с квестом. Вместо одного предмета, даёт 2 или 3. Rus. 2 2,367 01-22-2010, 11:32 PM
Последний пост: incognito

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


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