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; }