Просмотр полной версии : Заточка с Java
goodvin1709
01.02.2012, 14:40
У кого есть свой сервак Java поделитесь плиз исходником самой заточки
хочу увидеть как сервак генерирует саму заточку и от чего она зависит.
интересно же.
Суть на явах одна:
пример - шанс крафта 60%
i = random(100)
/генерируем функцией явы псевдослучайное число от 0 до 100
если i менше или равно 60 то собрали. Если выше то фейл.
на оффсервере там свой корейский способ вычисления этого числа,гдето видел формулу, но смысл тотже.
supernewbie
01.02.2012, 15:02
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.getEnc hantLevel() + 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().ge tInfo(21006, 1), activeChar);
activeChar.broadcastPacket(new SystemMessage(SystemMessage.C1_HAS_SUCCESSFULY_ENC HANTED_A__S2_S3).addName(activeChar).addNumber(ite mToEnchant.getEnchantLevel()).addItemName(itemToEn chant.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_ENCHAN T_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.getEquip Slot());
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_CRYS TALS);
activeChar.refreshExpertisePenalty();
}
}
На некоторых, а может быть и на всех java сборках шанс заточки не зависит от текущего уровня заточки вещи. То есть что +4 что +25 шанс успеха например 60%.
это уже детали реализации.
суть одна всеравно...
goodvin1709
01.02.2012, 19:46
Мда,тупо генерирует )Некакой изюминки)
vBulletin® v3.6.11, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot