Item Box

accavit

Пляшущий с бубном
Участник
Сообщения
133
Розыгрыши
0
Решения
2
Репутация
0
Реакции
22
Баллы
220
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
Lucera 1.7
Я нашел сундук, при нажатии на который, он исчезает, и выдается случайный предмет (skill 2270-8) из регулируемого списка 'extractable_items'. Я хочу сделать так, чтобы сундук не открывался, если в инвентаре нет ключа к нему. То есть, сделать так, чтобы скилл потреблял 2 предмета. Как такое можно реализовать?
1627472230990.png
P.S. Пробовал рядом с числом 14000 дописывать второй итем и через запятую, и через точку с запятой... не работает.
 
Посмотри аналогию с кубиками, бафами и тд которые потребляют итемы.
 
Psycho, я вроде не помню, что какой-то скилл потреблял бы больше одного вида итема...
 
Psycho, я вроде не помню, что какой-то скилл потреблял бы больше одного вида итема...
А, проморгал, тебе 2 разных итема надо. Даже не знаю, не занимался подобной херней.
Если подобной херни не реализовано, то тебе придется ее реализовывать самому в ядре)
 
Я нашел сундук, при нажатии на который, он исчезает, и выдается случайный предмет (skill 2270-8) из регулируемого списка 'extractable_items'. Я хочу сделать так, чтобы сундук не открывался, если в инвентаре нет ключа к нему. То есть, сделать так, чтобы скилл потреблял 2 предмета. Как такое можно реализовать?
Посмотреть вложение 38241
P.S. Пробовал рядом с числом 14000 дописывать второй итем и через запятую, и через точку с запятой... не работает.
Без изменений в ядре ты не сделаешь это. А так как ты упорно едешь на этой сборке без исходов, то в твоем случае никак.
 
Deom, исходники есть. И я так понял, что в каком-то классе нужно создать переменную ItemConsumeId2 или что-то подобное. И сделать привязки этой переменной к существующим методам, но не как обязательный аргумент. А потом еще найти класс, в котором указан метод перебора значений из конкретных xml файлов скиллов
 
accavit, тогда смотри по примеру как у тебя берет 1 итем и дублируй.
 
Можно ItemConsumeId с int на int[] изменить просто.
 
Rolo, интересная идея, кстати! А как потом xml-ка будет работать? через запятую без пробела?
 
accavit, да, вроде того.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Java:
package handlers.skill;

import org.apache.log4j.Logger;
import ru.catssoftware.gameserver.handler.ICustomSkillHandler;
import ru.catssoftware.gameserver.handler.SkillHandler;
import ru.catssoftware.gameserver.model.L2Character;
import ru.catssoftware.gameserver.model.L2Skill;
import ru.catssoftware.gameserver.network.SystemMessageId;

import java.util.ArrayList;
import java.util.List;

public class SkillsCosts implements ICustomSkillHandler {

    private static final Logger _log = Logger.getLogger(SkillsCosts.class);

    private static final int[] skills_ids = {31557, 31606}; // айди скилов
    private static final int[][] items_ids = {{4037, 1}, {57, 100}}; // предметы
    public static List<ItemsList> items_list = new ArrayList<>();

    public static void main(String[] args) {
        SkillHandler.getInstance().registerCustomSkill(new SkillsCosts());

        for (int[] items : items_ids) {
            items_list.add(new ItemsList(items[0], items[1]));
        }
        _log.info("SkillHandlers: Loaded: SkillsCosts handlers");
        _log.info("SkillHandlers: Loaded: " + items_list.size());
    }

    @Override
    public void useSkill(L2Character activeChar, L2Skill skill, L2Character... targets) {
        SkillHandler.getInstance().handleCustomSkill(skill, activeChar, targets);
        for (ItemsList required_item : items_list) {
            if (required_item == null)
                continue;

            if (required_item.count > 0) {
                if (!activeChar.destroyItemByItemId("SkillLearn", required_item.id, required_item.count, null, true)) {
                    activeChar.sendPacket(SystemMessageId.FAILED_CHANGE_TARGET);
                    return;
                }
            }
        }
    }

    @Override
    public int[] getSkills() {
        return skills_ids;
    }

    public static class ItemsList {
        public int id;
        public int count;

        public ItemsList(int id, int count) {
            this.id = id;
            this.count = count;
        }
    }
}

помещается тут
Код:
\game\data\scripts\handlers\skill
 
Назад
Сверху Снизу