Java Код:
int safeEnchantLevel = itemToEnchant.
getItem().
getBodyPart() == L2Item.
SLOT_FULL_ARMOR ? Config.
SAFE_ENCHANT_FULL_BODY : Config.
SAFE_ENCHANT_COMMON;
double chance;
if(itemToEnchant.
getEnchantLevel() < safeEnchantLevel
)
chance =
100;
else if(itemType == L2Item.
TYPE2_WEAPON)
chance = removedScroll.
isCrystallEnchantScroll() ? Config.
ENCHANT_CHANCE_CRYSTAL_WEAPON : Config.
ENCHANT_CHANCE_WEAPON;
else if(itemType == L2Item.
TYPE2_SHIELD_ARMOR)
chance = removedScroll.
isCrystallEnchantScroll() ? Config.
ENCHANT_CHANCE_CRYSTAL_ARMOR : Config.
ENCHANT_CHANCE_ARMOR;
else if(itemType == L2Item.
TYPE2_ACCESSORY)
chance = removedScroll.
isCrystallEnchantScroll() ? Config.
ENCHANT_CHANCE_CRYSTAL_ACCESSORY : Config.
ENCHANT_CHANCE_ACCESSORY;
else
{
System.
out.
println("WTF? Request to enchant " + itemToEnchant.
getItemId());
activeChar.
sendPacket(EnchantResult.
CANCEL);
activeChar.
sendActionFailed();
activeChar.
sendPacket(Msg.
SYSTEM_ERROR);
inventory.
addItem(removedScroll
);
return;
}
if(scroll.
isDivineEnchantScroll()) // Item Mall divine
chance =
100;
else if(scroll.
isItemMallEnchantScroll()) // Item Mall normal/ancient
chance +=
10;
if(removedCatalyst !=
null)
chance += removedCatalyst.
getCatalystPower();
if(Rnd.
chance(chance
))
{
itemToEnchant.
setEnchantLevel(itemToEnchant.
getEnchantLevel() +
1);
itemToEnchant.
updateDatabase();
activeChar.
sendPacket(new InventoryUpdate
().
addModifiedItem(itemToEnchant
));
Log.
add(activeChar.
getName() +
"|Successfully enchanted|" + itemToEnchant.
getItemId() +
"|to+" + itemToEnchant.
getEnchantLevel() +
"|" + chance,
"enchants");
Log.
LogItem(activeChar, Log.
EnchantItem, itemToEnchant
);
activeChar.
sendPacket(EnchantResult.
SUCESS);
if(itemToEnchant.
getEnchantLevel() >=
(itemType == L2Item.
TYPE2_WEAPON ?
6 :
5))
{
activeChar.
altUseSkill(SkillTable.
getInstance().
getInfo(21006,
1), activeChar
);
activeChar.
broadcastPacket(new SystemMessage
(SystemMessage.
C1_HAS_SUCCESSFULY_ENCHANTED_A__S2_S3).
addName(activeChar
).
addNumber(itemToEnchant.
getEnchantLevel()).
addItemName(itemToEnchant.
getItemId()));
}
}
else
{
Log.
add(activeChar.
getName() +
"|Failed to enchant|" + itemToEnchant.
getItemId() +
"|+" + itemToEnchant.
getEnchantLevel() +
"|" + chance,
"enchants");
if(scroll.
isBlessedEnchantScroll()) // фейл, но заточка блесед
{
itemToEnchant.
setEnchantLevel(0);
activeChar.
sendPacket(new InventoryUpdate
().
addModifiedItem(itemToEnchant
));
activeChar.
sendPacket(Msg.
FAILED_IN_BLESSED_ENCHANT_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
activeChar.
sendPacket(EnchantResult.
BLESSED_FAILED);
}
else if(scroll.
isAncientEnchantScroll()) // фейл, но заточка ancient
activeChar.
sendPacket(EnchantResult.
ANCIENT_FAILED);
else
// фейл, разбиваем вещь
{
if(itemToEnchant.
isEquipped())
inventory.
unEquipItemInSlot(itemToEnchant.
getEquipSlot());
L2ItemInstance destroyedItem = inventory.
destroyItem(itemToEnchant.
getObjectId(),
1,
true);
if(destroyedItem ==
null)
{
_log.
warning("failed to destroy " + itemToEnchant.
getObjectId() +
" after unsuccessful enchant attempt by char " + activeChar.
getName());
activeChar.
sendActionFailed();
return;
}
Log.
LogItem(activeChar, Log.
EnchantItemFail, itemToEnchant
);
if(crystalId >
0)
{
L2ItemInstance crystalsToAdd = ItemTable.
getInstance().
createItem(crystalId
);
int count =
(int) (itemToEnchant.
getItem().
getCrystalCount() *
0.
87);
if(destroyedItem.
getEnchantLevel() >
3)
count += itemToEnchant.
getItem().
getCrystalCount() *
0.
25 *
(destroyedItem.
getEnchantLevel() -
3);
if(count <
1)
count =
1;
crystalsToAdd.
setCount(count
);
inventory.
addItem(crystalsToAdd
);
Log.
LogItem(activeChar, Log.
Sys_GetItem, crystalsToAdd
);
activeChar.
sendPacket(new EnchantResult
(1, crystalsToAdd.
getItemId(), count
), SystemMessage.
obtainItems(crystalId, count,
0));
}
else
activeChar.
sendPacket(EnchantResult.
FAILED_NO_CRYSTALS);
activeChar.
refreshExpertisePenalty();
}
}