}
PcInventory inventory = activeChar.getInventory();
if (inventory != null)
{
L2ItemInstance item = inventory.getItemByObjectId(_objectId);
if (item == null || item.isWear())
{
ActionFailed af = new ActionFailed();
activeChar.sendPacket(af);
return;
}
int itemId = item.getItemId();
if ((itemId >= 6611 && itemId <= 6621) || itemId == 6842)
return;
if (_count > item.getCount())
{
_count = activeChar.getInventory().getItemByObjectId(_objectId)
.getCount();
}
}
L2ItemInstance itemToRemove = activeChar.getInventory()
.getItemByObjectId(_objectId);
if (itemToRemove == null || itemToRemove.isWear())
{
return;
}
if (!itemToRemove.getItem().isCrystallizable()
|| (itemToRemove.getItem().getCrystalCount() <= 0)
|| (itemToRemove.getItem().getCrystalType() == L2Item.CRYSTAL_NONE))
{
_log.warning("" + activeChar.getObjectId()
+ " tried to crystallize "
+ itemToRemove.getItem().getItemId());
return;
}
// Check if the char can crystallize C items and return if false;
if (itemToRemove.getItem().getCrystalType() == L2Item.CRYSTAL_C
&& skillLevel <= 1)
{
SystemMessage sm = new SystemMessage(
SystemMessageId.CRYSTALLIZE_LEVEL_TOO_LOW);
activeChar.sendPacket(sm);
sm = null;
ActionFailed af = new ActionFailed();
activeChar.sendPacket(af);
return;
}
// Check if the user can crystallize B items and return if false;
if (itemToRemove.getItem().getCrystalType() == L2Item.CRYSTAL_B
&& skillLevel <= 2)
{
SystemMessage sm = new SystemMessage(
SystemMessageId.CRYSTALLIZE_LEVEL_TOO_LOW);
activeChar.sendPacket(sm);
sm = null;
ActionFailed af = new ActionFailed();
activeChar.sendPacket(af);
return;
}
// Check if the user can crystallize A items and return if false;
if (itemToRemove.getItem().getCrystalType() == L2Item.CRYSTAL_A
&& skillLevel <= 3)
{
SystemMessage sm = new SystemMessage(
SystemMessageId.CRYSTALLIZE_LEVEL_TOO_LOW);
activeChar.sendPacket(sm);
sm = null;
ActionFailed af = new ActionFailed();
activeChar.sendPacket(af);
return;
}
// Check if the user can crystallize S items and return if false;
if (itemToRemove.getItem().getCrystalType() == L2Item.CRYSTAL_S
&& skillLevel <= 4)
{
SystemMessage sm = new SystemMessage(
SystemMessageId.CRYSTALLIZE_LEVEL_TOO_LOW);
activeChar.sendPacket(sm);
sm = null;
ActionFailed af = new ActionFailed();
activeChar.sendPacket(af);
return;
}
activeChar.setInCrystallize(true);
// unequip if needed
if (itemToRemove.isEquipped())
{
L2ItemInstance[] unequiped = activeChar.getInventory()
.unEquipItemInSlotAndRecord(itemToRemove.getEquipSlot());
InventoryUpdate iu = new InventoryUpdate();
for (int i = 0; i < unequiped.length; i++)
{
iu.addModifiedItem(unequiped[i]);
}
activeChar.sendPacket(iu);
// activeChar.updatePDef();
// activeChar.updatePAtk();
// activeChar.updateMDef();
// activeChar.updateMAtk();
// activeChar.updateAccuracy();
// activeChar.updateCriticalChance();
}
// remove from inventory
L2ItemInstance removedItem = activeChar.getInventory().destroyItem(
"Crystalize", _objectId, _count, activeChar, null);
// add crystals
int crystalId = itemToRemove.getItem().getCrystalItemId();
int crystalAmount = itemToRemove.getCrystalCount();
L2ItemInstance createditem = activeChar.getInventory().addItem(
"Crystalize", crystalId, crystalAmount, activeChar,
itemToRemove);
SystemMessage sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
sm.addItemName(crystalId);
sm.addNumber(crystalAmount);
activeChar.sendPacket(sm);
sm = null;
// send inventory update
if (!Config.FORCE_INVENTORY_UPDATE)
{
InventoryUpdate iu = new InventoryUpdate();
if (removedItem.getCount() == 0)
iu.addRemovedItem(removedItem);
else
iu.addModifiedItem(removedItem);
if (createditem.getCount() != crystalAmount)
iu.addModifiedItem(createditem);
else
iu.addNewItem(createditem);
activeChar.sendPacket(iu);