Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Работа со скриптами (https://forum.zone-game.info/forumdisplay.php?f=37)
-   -   Несколько видов стрел для одного лука. (https://forum.zone-game.info/showthread.php?t=26181)

Archiel 27.01.2013 22:34

Несколько видов стрел для одного лука.
 
Сборка:
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;
               

        }


Respect 27.01.2013 23:51

Re: Несколько видов стрел для одного лука.
 
Также пытаюсь это сделать... только на уровне клиента
вот что нарыл:
Engine.u

Цитата:

struct native NAtkConsumeItemParam
{
var int BowItemID;
var int BowUseItemID;
};
В клиенте, в дев моде (без серва), стрелы меняются в зависимости от лука.
Если заменить модель дропа стрел (etcitemgrp.dat), стрелы меняются.

К чему виду, грейд "привязан" к ИД предмета. Где оно привязано - х*й его знает =(

Archiel 27.01.2013 23:55

Re: Несколько видов стрел для одного лука.
 
Цитата:

Сообщение от Respect (Сообщение 269691)
Также пытаюсь это сделать... только на уровне клиента
вот что нарыл:
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;
        }

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


Текущее время: 06:41. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot