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;
}