Вход

Просмотр полной версии : Заточка с Java


goodvin1709
01.02.2012, 14:40
У кого есть свой сервак Java поделитесь плиз исходником самой заточки
хочу увидеть как сервак генерирует саму заточку и от чего она зависит.
интересно же.

mira
01.02.2012, 15:01
Суть на явах одна:
пример - шанс крафта 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();
}
}

Yegor
01.02.2012, 16:35
На некоторых, а может быть и на всех java сборках шанс заточки не зависит от текущего уровня заточки вещи. То есть что +4 что +25 шанс успеха например 60%.

mira
01.02.2012, 18:10
это уже детали реализации.
суть одна всеравно...

goodvin1709
01.02.2012, 19:46
Мда,тупо генерирует )Некакой изюминки)