public void UpgradeItem(sbyte eqpslot, sbyte stoneslot)
{
Item eqpitem, stone;
if (!InventoryItems.TryGetValue(eqpslot, out eqpitem) ||
!InventoryItems.TryGetValue(stoneslot, out stone))
{
Log.WriteLine(LogLevel.Warn, "Invalid item enhancement: item slot does not exist.");
return;
}
Equip eqp;
if ((eqp = eqpitem as Equip) == null)
{
Log.WriteLine(LogLevel.Warn, "Character tried to upgrade non-equip item.");
return;
}
if (stone.Info.UpResource == 0)
{
Log.WriteLine(LogLevel.Warn, "Character tried to upgrade with non-upgrade item.");
return;
}
byte required = 0;
if (eqp.Upgrades <= 2) required = 2;
else if (eqp.Upgrades <= 5) required = 5;
else if (eqp.Upgrades <= 8) required = 8;
else required = 10;
if (stone.Info.UpResource != required)
{
Log.WriteLine(LogLevel.Warn, "Character is using a wrong upgrade stone.");
return;
}
UseOneItemStack(stone);
int rand = Program.Randomizer.Next(0, 200);
bool success = rand <= stone.Info.UpSucRation;
if (success)
{
eqp.Upgrades++;
Handler12.SendUpgradeResult(this, true);
}
else
{
//TODO: destroy item rate?
if (eqp.Upgrades > 0) --eqp.Upgrades;
Handler12.SendUpgradeResult(this, false);
}
Handler12.ModifyInventorySlot(this, 0x24, (byte)eqpslot, (byte)eqpslot, eqp);
}