Прикрутить статы к биже

Reboot

Знаменитый
Пользователь
Сообщения
51
Розыгрыши
0
Репутация
1
Реакции
1
Баллы
1 250
Хроники
  1. Grand Cursade
Сборка
Мобиус
Каким образом в мобиусе можно прикрутить определенные статы к биже, путём Скила не катит, потому что статы даёт только одна бижа, к примеру есть стат матак на оружии, но как прикрутить маткспд к примеру и я так понимаю он даёт в точном числе, а как сделать проценты? Возможно ли это?
 
Ну так сделай 55902 скилл с полностью аналогичными статами (или какими тебе надо) и вставь его во вторую бижу. И всё.
 
Как вариант можешь глянуть Рубаху ольфа. <armor id="21580" name="Olf's T-shirt" type="NONE">
Если скиллы полностью не пашут. Может быть косяк в слишком высоком ID для шмоток. У меня в сборке стоит ограничение до 49к вроде. Возможно в этом проблема.
 
Попробуй вот так:
в game\data\stats\armorsets\sets.xml

<set id="999" minimumPieces="1">
<requiredItems>
<item id="91012" />
<item id="91013" />
</requiredItems>
<skills>
<skill id="55901" level="1" minimumPieces="1" />
<skill id="55901" level="2" minimumPieces="2" />
</skills>
</set>
Не уверен что сработает, первый раз сборку вижу
 
Maleficent, ты немного не понял, таких биж 12
Viostyle, скилы работают, но при надевании двух биж,дается один скилл.



Володя, не совсем то, смысл в том, что ты надеваешь бижу с id 91012, тебе добавляется скилл 55901, если же ты вторую бижу надеваешь такую же, тебе дается еще такой же скилл, если надеваешь 91013, то добавялется 55901 лвл 2
 
Какая-то крайне ужасная идея, но если уж на то пошло: сделай в каждой биже новый skill id, а в каждый новый skill id пропиши по одному уровню по порядку. Ну то есть, допустим, 55201 - 1 уровень скилла, 55202 - 2 уровень скилла, 55203 - 3 уровень скилла.
 
Даблпостинг!
А если будет две одинаковые бижутерии?

Maleficent, почти рабочая схема, загвоздка только в двух одинаковых бижах, получается одели две одинаковые серьги и нам должно дать 55203 3 лвл, но как?)
 
А если будет две одинаковые бижутерии?
Будет бонус только от одной. Напиши в описании этих предметов, что 2 предмета с одинаковым рангом не работают вместе, в твоей концепции это будет выглядеть весьма логично даже (вроде).
 
Систематическое нарушение: даблпостинг! РО на сутки, для изучения правил
Psycho, какую проверку?

Psycho, вот в Item добавление скила, но не вижу проверки, если скилл такой же не добавлять
Java:
/**
     * Method to retrieve skills linked to this item armor and weapon: passive skills etcitem: skills used on item use <-- ???
     * @return Skills linked to this item as SkillHolder[]
     */
    public List<ItemSkillHolder> getAllSkills()
    {
        return _skills;
    }
    
    /**
     * @param condition
     * @return {@code List} of {@link ItemSkillHolder} if item has skills and matches the condition, {@code null} otherwise
     */
    public List<ItemSkillHolder> getSkills(Predicate<ItemSkillHolder> condition)
    {
        if (_skills == null)
        {
            return null;
        }
        
        final List<ItemSkillHolder> result = new ArrayList<>();
        for (ItemSkillHolder skill : _skills)
        {
            if (condition.test(skill))
            {
                result.add(skill);
            }
        }
        return result;
    }
    
    /**
     * @param type
     * @return {@code List} of {@link ItemSkillHolder} if item has skills, {@code null} otherwise
     */
    public List<ItemSkillHolder> getSkills(ItemSkillType type)
    {
        if (_skills == null)
        {
            return null;
        }
        
        final List<ItemSkillHolder> result = new ArrayList<>();
        for (ItemSkillHolder skill : _skills)
        {
            if (skill.getType() == type)
            {
                result.add(skill);
            }
        }
        return result;
    }
    
    /**
     * Executes the action on each item skill with the specified type (If there are skills at all)
     * @param type
     * @param action
     */
    public void forEachSkill(ItemSkillType type, Consumer<ItemSkillHolder> action)
    {
        if (_skills != null)
        {
            for (ItemSkillHolder skill : _skills)
            {
                if (skill.getType() == type)
                {
                    action.accept(skill);
                }
            }
        }
    }
    
    public void addSkill(ItemSkillHolder holder)
    {
        if (_skills == null)
        {
            _skills = new ArrayList<>();
        }
        _skills.add(holder);
    }
 
ну да... а это к примеру мои фантазии, да?
XML:
    <item id="1" name="Short Sword" type="Weapon">
        <set name="icon" val="icon.weapon_small_sword_i00" />
        <set name="default_action" val="EQUIP" />
        <set name="weapon_type" val="SWORD" />
        <set name="bodypart" val="rhand" />
        <set name="damage_range" val="0;0;40;120" />
        <set name="immediate_effect" val="true" />
        <set name="material" val="STEEL" />
        <set name="weight" val="1600" />
        <set name="price" val="118" />
        <set name="soulshots" val="1" />
        <set name="spiritshots" val="1" />
        <stats>
            <stat type="pAtk">8</stat>
            <stat type="mAtk">6</stat>
            <stat type="rCrit">8</stat>
            <stat type="pAtkSpd">379</stat>
            <stat type="randomDamage">10</stat>
            <stat type="pAtkRange">40</stat>
        </stats>
    </item>
взято из одной версий сборок мобиуса
вроде ясно и наглядно все на тему того как приписываются статы вещам
что мешает еще нужных стат добавить в предмет?
вряд ли у мобиуса жестко прописано что "вещи можно добавлять только определенный список стат"

нет, если тебе надо не прибавлять/задавать, а умножать статы то может и да - такое не прокатит и тогда уж разве что с скиллами и кондишнами в них изощряться.

можно извратится через листенеры эквипа - чтобы он давал/забирал скиллы если одеты определенные предметы.
к примеру одета одна штука бижи - первый уровень скилла, если две - второй.
для примера, для овера, выдача различных уровней скилла 27717 и скиллов 27721-27724 в зависимости от количества одетых драг. камней 6 уровня (больших)
Java:
package listeners.items;

import org.apache.commons.lang3.ArrayUtils;

import l2p.gameserver.data.holder.SkillHolder;
import l2p.gameserver.listener.item.OnItemEquipListener;
import l2p.gameserver.model.Playable;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.actor.listener.ItemListenerList;
import l2p.gameserver.model.items.Inventory;
import l2p.gameserver.model.items.ItemInstance;
import l2p.gameserver.model.skills.Skill;
import l2p.gameserver.network.s2c.SkillCoolTime;
import l2p.gameserver.scripts.ScriptFile;

/**
 * @author Gaikotsu
 */
public class Jewels implements ScriptFile
{
    private static final int[] Level6Jewels = { 28376, 28377, 28378, 28379, 28380, 28383, 47687, 47688, 47689, 47690, 47691, 47692, 47693, 47694, 47695, 47696, 47697, 47698, 47699, 47700, 47920, 47921, 47922, 47923 };

    private static final Skill[] GreaterGemstoneBlessing = {
        SkillHolder.getInstance().getSkill(27717, 1),
        SkillHolder.getInstance().getSkill(27717, 2),
        SkillHolder.getInstance().getSkill(27717, 3),
        SkillHolder.getInstance().getSkill(27717, 4),
        SkillHolder.getInstance().getSkill(27717, 5),
        SkillHolder.getInstance().getSkill(27717, 6) };

    private static final Skill[] LaVieEnRoseEnergy = {
        SkillHolder.getInstance().getSkill(27721, 1),
        SkillHolder.getInstance().getSkill(27722, 1),
        SkillHolder.getInstance().getSkill(27723, 1),
        SkillHolder.getInstance().getSkill(27724, 1) };

    private static final ItemEquipListener _listener = new ItemEquipListener();

    @Override
    public void onLoad()
    {
        ItemListenerList.addGlobal(_listener);
    }

    @Override
    public void onReload()
    {
        ItemListenerList.removeGlobal(_listener);
    }

    private static int getEquppedJewelsCount(Player player)
    {
        int count = 0;

        for (int slot = Inventory.PAPERDOLL_JEWEL_1; slot <= Inventory.PAPERDOLL_JEWEL_6; slot++)
        {
            ItemInstance item = player.getInventory().getPaperdollItem(slot);

            if (item != null && ArrayUtils.contains(Level6Jewels, item.getId()))
                count++;
        }

        return count;
    }

    public static class ItemEquipListener implements OnItemEquipListener
    {
        @Override
        public void onEquip(ItemInstance item, Playable actor)
        {
            if (!actor.isPlayer())
                return;

            Player player = actor.getPlayer();
            int count = getEquppedJewelsCount(player);

            player.addSkill(GreaterGemstoneBlessing[count - 1], false);

            if (count > 2)
            {
                for (int i = 0; i < LaVieEnRoseEnergy.length; i++)
                {
                    if (i == (count - 3))
                    {
                        player.addSkill(LaVieEnRoseEnergy[i], false);

                        if (player.isSkillDisabled(LaVieEnRoseEnergy[i]))
                            player.sendPacket(new SkillCoolTime(player));
                    }
                    else
                        player.removeSkill(LaVieEnRoseEnergy[i], false);
                }
            }

            if (!player.getInventory().isRefresh)
                player.sendSkillList(false);
        }

        @Override
        public void onUnequip(ItemInstance item, Playable actor)
        {
            if (!actor.isPlayer())
                return;

            Player player = actor.getPlayer();
            int count = getEquppedJewelsCount(player);

            if (count > 0)
            {
                player.addSkill(GreaterGemstoneBlessing[count - 1], false);

                if (count > 1)
                {
                    for (int i = 0; i < LaVieEnRoseEnergy.length; i++)
                    {
                        if (i == (count - 3))
                        {
                            player.addSkill(LaVieEnRoseEnergy[i], false);

                            if (player.isSkillDisabled(LaVieEnRoseEnergy[i]))
                                player.sendPacket(new SkillCoolTime(player));
                        }
                        else
                            player.removeSkill(LaVieEnRoseEnergy[i], false);
                    }
                }
            }
            else
                player.removeSkill(GreaterGemstoneBlessing[0], false);

            if (!player.getInventory().isRefresh)
                player.sendSkillList(false);
        }

        @Override
        public boolean checkCondition(ItemInstance item)
        {
            return item.isJewel() && ArrayUtils.contains(Level6Jewels, item.getId());
        }
    }
}

Еще можно попробовать через enchant options давать - вроде бы если там статы даются не через скиллы, а напрямую то дублирование позволительно. не могу утверждать это на 100%, но проверить то думаю будет недолго.
 
Последнее редактирование:
Реакции: KATE

    Reboot

    Баллов: 7
    Спасибо

    KATE

    Баллов: 9
    9