With the forging interface in the latest patches I made a calculation for the upgrading quality wich give the same calculations as the client.
If you use it, you will have to adapt it to your source.
I hope this will help someone.
Code:
public static bool UpgradeQuality(ItemInfo Item, List<ItemInfo> Items)
{
if (Item.IsWeapon)
{
ItemType Data;
if (!Kernel.ItemTypes.TryGetValue(Item.ItemID + 1, out Data))
return false;
if (Item.ItemData.RequiredLevel == 1)
return false;
if (Data.RequiredLevel < 120)
{
double Chance = 0;
double Percentage = 100;
switch (Item.ItemID % 10)
{
case 9://SUPER
return false;
case 8://ELITE
Percentage = 20;
if (Item.ItemData.RequiredLevel <= 70)
Percentage = 20;
else
for (int i = 70; i < Data.RequiredLevel; i += 5)
Percentage -= 1;
break;
case 7://UNIQUE
Percentage = 33;
if (Item.ItemData.RequiredLevel <= 70)
Percentage = 33;
else
for (int i = 70; i < Data.RequiredLevel; i += 5)
Percentage -= 2;
break;
case 6://REFINED
Percentage = 50;
if (Item.ItemData.RequiredLevel <= 70)
Percentage = 100;
else
for (int i = 70; i < Data.RequiredLevel; i += 5)
Percentage -= 2.5;
break;
default://NORMAL
Percentage = 100;
if (Item.ItemData.RequiredLevel <= 70)
Percentage = 100;
else
for (int i = 70; i < Data.RequiredLevel; i += 5)
Percentage -= 5;
break;
}
foreach (var DragonBall in Items)
{
if (DragonBall.ItemID == 720028)//DB_SCROLL
Chance += Percentage * 10;
else if (DragonBall.ItemID == 1088000)//DRAGONBALL
Chance += Percentage;
}
return Calculations.PercentSuccess(Chance);
}
else
{
double Chance = 0;
double Percentage = 0;
switch (Item.ItemID % 10)
{
case 9://SUPER
return false;
case 8://ELITE
Percentage = 10;
for (int i = 120; i < Data.RequiredLevel; i += 1)
Percentage -= 0.2;
break;
case 7://UNIQUE
Percentage = 16;
for (int i = 120; i < Data.RequiredLevel; i += 1)
Percentage -= 0.4;
break;
case 6://REFINED
Percentage = 25;
for (int i = 120; i < Data.RequiredLevel; i += 1)
Percentage -= 0.5;
break;
default://NORMAL
Percentage = 50;
for (int i = 120; i < Data.RequiredLevel; i += 1)
Percentage -= 1;
break;
}
foreach (var DragonBall in Items)
{
if (DragonBall.ItemID == 720028)//DB_SCROLL
Chance += ((100 / Percentage) * 10);
else if (DragonBall.ItemID == 1088000)//DRAGONBALL
Chance += (100 / Percentage);
}
return Calculations.PercentSuccess(Chance);
}
}
return false;
}






