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

Запрет ношения вещей не соответствующие грейду персонажа

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

Всем привет!)

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

К примеру чтоб я на 39 лвле не смог одеть Ц грейд.

исходники Acis

Вот в L2PcInstance нашел код по грейд пенальти.

    public void refreshExpertisePenalty()
    {
        int armorPenalty = 0;
        boolean weaponPenalty = false;
        
        for (ItemInstance item : getInventory().getPaperdollItems())
        {
            if (item.getItemType() != EtcItemType.ARROW && item.getItem().getCrystalType().getId() > getExpertiseIndex())
            {
                if (item.isWeapon())
                    weaponPenalty = true;
                else
                    armorPenalty += (item.getItem().getBodyPart() == Item.SLOT_FULL_ARMOR) ? 2 : 1;
            }
        }

Соответственно все условия и проверки есть, при не соответствии с уровнем мне выдает пенальти, но каким образом добавить запрет именно на вещи?

Подскажите в каком направлении копать)

Заранее благодарю)

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

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


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

Что-то типо такого


 
if (item.isWeapon())
                  player.sendPacket(ActionFailed.STATIC_PACKET);

                  player.sendMassage("Вы не можете одеть оружие не по грейду");

                  return;

             else
                  player.sendPacket(ActionFailed.STATIC_PACKET);

                  player.sendMassage("Вы не можете одеть броню не по грейду");

                   return;

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

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


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

Что-то типо такого

 

 

 if (item.isWeapon())

                  player.sendPacket(ActionFailed.STATIC_PACKET);

                  player.sendMassage("Вы не можете одеть оружие не по грейду");

                  return;

             else

                  player.sendPacket(ActionFailed.STATIC_PACKET);

                  player.sendMassage("Вы не можете одеть броню не по грейду");

                   return;

Пробовал, но как в этом методе вызывать player`a?

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


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

Всем привет!)

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

К примеру чтоб я на 39 лвле не смог одеть Ц грейд.

исходники Acis

Вот в L2PcInstance нашел код по грейд пенальти.

    public void refreshExpertisePenalty(L2PcInstance player)
    {
        int armorPenalty = 0;
        boolean weaponPenalty = false;
        
        for (ItemInstance item : getInventory().getPaperdollItems())
        {
            if (item.getItemType() != EtcItemType.ARROW && item.getItem().getCrystalType().getId() > getExpertiseIndex())
            {
                if (item.isWeapon())
                    weaponPenalty = true;
                else
                    armorPenalty += (item.getItem().getBodyPart() == Item.SLOT_FULL_ARMOR) ? 2 : 1;
            }
        }

Соответственно все условия и проверки есть, при не соответствии с уровнем мне выдает пенальти, но каким образом добавить запрет именно на вещи?

Подскажите в каком направлении копать)

Заранее благодарю)

 

Так что ли, попробуй

 

refreshExpertisePenalty(L2PcInstance player)

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

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


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

И такой вариант пробовал - не помогает)

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

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


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

И такой вариант пробовал - не помогает)

Ошибку бьёт? Или просто вещи одеваются?

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


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

Решение так и не нашли)

кто нибудь из более опытных кодеров подскажите куда копать пожалуйста)

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


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

Решение так и не нашли)

кто нибудь из более опытных кодеров подскажите куда копать пожалуйста)

package net.sf.l2j.gameserver.network.clientpackets;
Класс UseItem

if (item.isEquipable())// дет 184 ст
		{
			if (activeChar.isCastingNow() || activeChar.isCastingSimultaneouslyNow())
			{
				activeChar.sendPacket(SystemMessageId.CANNOT_USE_ITEM_WHILE_USING_MAGIC);
				return;
			}
			// тут проверку

item.getItem().getCrystalType() какой грейд. и проверять уровень игрока

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


Ссылка на сообщение
Поделиться на другие сайты
package net.sf.l2j.gameserver.network.clientpackets;
Класс UseItem

if (item.isEquipable())// дет 184 ст
		{
			if (activeChar.isCastingNow() || activeChar.isCastingSimultaneouslyNow())
			{
				activeChar.sendPacket(SystemMessageId.CANNOT_USE_ITEM_WHILE_USING_MAGIC);
				return;
			}
			// тут проверку

item.getItem().getCrystalType() какой грейд. и проверять уровень игрока

 

на каждый грейд получается нужно будет писать отдельное условие и проверку?

if (item.getItemType() != EtcItemType.ARROW && item.getItem().getCrystalType().getId() > getExpertiseIndex())

вот такая проверка вообще не канает) оно даже не видит getExpertiseIndex и бьет эррор.

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

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


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

а не пробовал содать статический  класс в него передать   player  из него вытащить ссылку и работать с ней.

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

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


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

на каждый грейд получается нужно будет писать отдельное условие и проверку?

if (item.getItemType() != EtcItemType.ARROW && item.getItem().getCrystalType().getId() > getExpertiseIndex())

вот такая проверка вообще не канает) оно даже не видит getExpertiseIndex и бьет эррор.

			boolean useitem = true;
			
			switch (item.getItem().getCrystalType())
			{
				case S:
					if (activeChar.getLevel() > 75)
					{
						useitem = false;
					}
					break;
				case A:
					if (activeChar.getLevel() > 60)
					{
						useitem = false;
					}
					break;
				case B:
					if (activeChar.getLevel() > 51)
					{
						useitem = false;
					}
					break;
				case C:
					if (activeChar.getLevel() > 39)
					{
						useitem = false;
					}
					break;
				case D:
					if (activeChar.getLevel() > 19)
					{
						useitem = false;
					}
					break;
				default:
					useitem = false;
					break;
			}
			
			if (useitem)
			{
				activeChar.sendPacket(SystemMessageId.CANNOT_EQUIP_ITEM_DUE_TO_BAD_CONDITION);
				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
				return;
			} 

 

 

  • Upvote 1

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


Ссылка на сообщение
Поделиться на другие сайты
			boolean useitem = true;
			
			switch (item.getItem().getCrystalType())
			{
				case S:
					if (activeChar.getLevel() > 75)
					{
						useitem = false;
					}
					break;
				case A:
					if (activeChar.getLevel() > 60)
					{
						useitem = false;
					}
					break;
				case B:
					if (activeChar.getLevel() > 51)
					{
						useitem = false;
					}
					break;
				case C:
					if (activeChar.getLevel() > 39)
					{
						useitem = false;
					}
					break;
				case D:
					if (activeChar.getLevel() > 19)
					{
						useitem = false;
					}
					break;
				default:
					useitem = false;
					break;
			}
			
			if (useitem)
			{
				activeChar.sendPacket(SystemMessageId.CANNOT_EQUIP_ITEM_DUE_TO_BAD_CONDITION);
				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
				return;
			} 

 

 

Спасибо большое) Помогло)

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


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

и нафига такие извращения?

просто доработать скиллы пенальти, дающиеся при неподходящем грейде и все

чтобы они так сильно резали статы, что было бы просто невыгодно надевать неподходящие по уровню вещи

к примеру чтоб пенальни умножала атаку/защиту на 0.01 - много ли навоюет игрок с 1% от обычного значения статы?

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


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

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

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

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

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

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

Войти

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

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

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

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

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