Перейти к содержанию
Авторизация  
FourOnTheFloor

Как сделать что б Талисманы заменяли друг друга?

Рекомендуемые сообщения

Столкнулся с такой проблемой добавил на сервер Талисманы семени, но они надеваются все и дают статы всей толпой. Помогите сделать так что бы они заменяли друг друга.

Вот Скрипт Талисмана
<armor id="59105" name="Talisman of Longing">
        <set name="crystal_type" value="NONE"/>
        <set name="destroyable" value="true"/>
        <set name="dropable" value="false"/>
        <set name="icon" value="icon.etc_talisman_i01"/>
        <set name="sellable" value="false"/>
        <set name="tradeable" value="false"/>
        <set name="weight" value="150"/>
        <set name="type" value="NONE"/>
        <equip>
            <slot id="TALISMAN"/>
        </equip>
        <skills>
            <skill id="59105" level="1"/>
        </skills>
        <cond msgId="1507">
            <not>
                <player olympiad="true"/>
            </not>
        </cond>
    </armor>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. использовать один и тот же скилл для всех вариантов, просто разных уровней - тогда сколько бы не надел - скилл от них один фиг будет только один, максимального уровня из тех что одеты. из минусов - придется доработать листенеры equip/unequp, чтобы корректно обрабатывало ситуацию "одето несколько талисманов семени, сняли один - пассивка от них убрана".

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

3. разновидность 2-го варианта - ввести параметр "группы" для предметов и при попытке одевания талисманов проверять - не в одной ли группе надеваемый талисман и какой-то из уже одетых талисманов и соотвественно запрещать одевание при совпадении группы. Я к примеру у себя именно этот вариант использую для талисманов семени, богатства, а так же для драгоценных камней.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
36 минут назад, Gaikotsu сказал:

1. использовать один и тот же скилл для всех вариантов, просто разных уровней - тогда сколько бы не надел - скилл от них один фиг будет только один, максимального уровня из тех что одеты. из минусов - придется доработать листенеры equip/unequp, чтобы корректно обрабатывало ситуацию "одето несколько талисманов семени, сняли один - пассивка от них убрана".

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

3. разновидность 2-го варианта - ввести параметр "группы" для предметов и при попытке одевания талисманов проверять - не в одной ли группе надеваемый талисман и какой-то из уже одетых талисманов и соотвественно запрещать одевание при совпадении группы. Я к примеру у себя именно этот вариант использую для талисманов семени, богатства, а так же для драгоценных камней.

А как добавить в группу и кондишн?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
пример проверки по группе 
		if (targetSlot == ItemTemplate.SLOT_TALISMAN)
		{
			int count = player.getTalismanCount();

			if (count <= 0)
				return new SystemMessage(SystemMsg.YOU_CANNOT_WEAR_S1_BECAUSE_YOU_ARE_NOT_WEARING_A_BRACELET).addItemName(itemId);

			ItemInstance deco;
			int groupId = item.getTemplate().getGroupId();

			for (int slot = Inventory.PAPERDOLL_TALISMAN_1; slot <= Inventory.PAPERDOLL_TALISMAN_6; slot++)
			{
				deco = player.getInventory().getPaperdollItem(slot);

				if (deco != null)
				{
					if (deco == item)
						return null; // талисман уже одет и количество слотов больше нуля

					// Проверяем на количество слотов и одинаковые/похожие талисманы (находящиеся в одной группе)
					if (--count <= 0 || deco.getTemplate().getGroupId() == groupId)
						return new SystemMessage(SystemMsg.YOU_CANNOT_EQUIP_S1_BECAUSE_YOU_DO_NOT_HAVE_ANY_AVAILABLE_SLOTS).addItemName(itemId);
				}
			}
		}
		else if (targetSlot == ItemTemplate.SLOT_JEWEL)
		{
			int count = player.getJewelsCount();

			if (count <= 0)
				return new SystemMessage(SystemMsg.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS).addItemName(itemId);

			ItemInstance jewel;
			int groupId = item.getTemplate().getGroupId();

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

				if (jewel != null)
				{
					if (jewel == item)
						return null; // камень уже одет и количество слотов больше нуля

					// Проверяем на количество слотов и одинаковые/похожие камни (находящиеся в одной группе)
					if (--count <= 0 || jewel.getTemplate().getGroupId() == groupId)
						return SystemMsg.NO_EQUIPMENT_SLOT_AVAILABLE;
				}
			}
		}

проверка эта находится в методе checkIfCanEquip класса ItemFunctions (для овероподобных сборок)

группа предмета, если явно не задана - равна ид предмета

_groupId = set.getInteger("group_id", _itemId);

это из ItemTemplate

Hide  
Изменено пользователем Gaikotsu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...