OverWorld/LostWorld

  • Автор темы Автор темы kick
  • Дата начала Дата начала

kick

Предвестник
Administrator
За веру и верность форуму
Отец-основатель
Сообщения
6 972
Розыгрыши
22
Решения
1
Репутация
6 046
Реакции
6 831
Баллы
2 688
Java:
/**
    * Проверяет возможность носить эту вещь.
    *
    * @return null, если вещь носить можно, либо SystemMessage, который можно показать игроку
    */
    public final static IBroadcastPacket checkIfCanEquip(Player player, ItemInstance item)
    {
        //FIXME [G1ta0] черезмерный хардкод, переделать на условия
        int itemId = item.getItemId();
        int targetSlot = item.getTemplate().getBodyPart();
        Clan clan = player.getClan();

        // камаэли и хеви/робы/щиты/сигилы
        if(player.getRace() == Race.kamael && (item.getItemType() == ArmorType.HEAVY || item.getItemType() == ArmorType.MAGIC || item.getItemType() == ArmorType.SIGIL || item.getItemType() == WeaponType.NONE))
            return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

        // не камаэли и рапиры/арбалеты/древние мечи
        if(player.getRace() != Race.kamael && (item.getItemType() == WeaponType.CROSSBOW || item.getItemType() == WeaponType.RAPIER || item.getItemType() == WeaponType.ANCIENTSWORD))
            return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

        if(itemId >= 7850 && itemId <= 7859 && player.getLvlJoinedAcademy() == 0) // Clan Oath Armor
            return SystemMsg.THIS_ITEM_CAN_ONLY_BE_WORN_BY_A_MEMBER_OF_THE_CLAN_ACADEMY;

        if(isClanApellaItem(itemId) && player.getPledgeClass().ordinal() < Rank.ELDER.ordinal())
            return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

        // Замковые короны, доступные для всех членов клана
        if(ArrayUtils.contains(ItemTemplate.ITEM_ID_CASTLE_CIRCLET, itemId) && (clan == null || itemId != ItemTemplate.ITEM_ID_CASTLE_CIRCLET[clan.getCastle()]))
            return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

        // Корона лидера клана, владеющего замком
        if(itemId == 6841 && (clan == null || !player.isClanLeader() || clan.getCastle() == 0))
            return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

        // Нельзя одевать оружие, если уже одето проклятое оружие. Проверка двумя способами, для надежности.
        if(targetSlot == ItemTemplate.SLOT_LR_HAND || targetSlot == ItemTemplate.SLOT_L_HAND || targetSlot == ItemTemplate.SLOT_R_HAND)
        {
            if(itemId != player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND) && CursedWeaponsManager.getInstance().isCursed(player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND)))
                return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;
            if(player.isCursedWeaponEquipped() && itemId != player.getCursedWeaponEquippedId())
                return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;
        }

        // Плащи
        if(item.getTemplate().isCloak())
        {
            // Can be worn by Knights or higher ranks who own castle
            if(item.getName().contains("Knight") && (player.getPledgeClass().ordinal() < Rank.KNIGHT.ordinal() || player.getCastle() == null))
                return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

            // Плащи для камаэлей
            if(item.getName().contains("Kamael") && player.getRace() != Race.kamael)
                return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

            // Плащи можно носить только с S80 или S84 сетом
            if(!player.getOpenCloak())
                return SystemMsg.THE_CLOAK_CANNOT_BE_EQUIPPED_BECAUSE_YOUR_ARMOR_SET_IS_NOT_COMPLETE;
        }

        if(targetSlot == ItemTemplate.SLOT_DECO)
        {
            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;
            for(int slot = Inventory.PAPERDOLL_DECO1; slot <= Inventory.PAPERDOLL_DECO6; slot++)
            {
                deco = player.getInventory().getPaperdollItem(slot);
                if(deco != null)
                {
                    if(deco == item)
                        return null; // талисман уже одет и количество слотов больше нуля
                    // Проверяем на количество слотов и одинаковые талисманы
                    if(--count <= 0 || deco.getItemId() == itemId)
                        return new SystemMessage(SystemMsg.YOU_CANNOT_EQUIP_S1_BECAUSE_YOU_DO_NOT_HAVE_ANY_AVAILABLE_SLOTS).addItemName(itemId);
                }
            }
        }
        return null;
    }
 

Назад
Сверху Снизу