private Dictionary<Bonus, int> GetBonusesFor(Item item, int quality)
{
var bonuses = new Dictionary<Bonus, int>();
// Weapons (except bows)
if (item.HasTag("/weapon/") && !item.HasTag("/bow/|/bow01|/crossbow/"))
{
// Balance
if (quality >= 98)
bonuses[Bonus.Balance] = 10;
else if (quality >= 95)
bonuses[Bonus.Balance] = 9;
else if (quality >= 92)
bonuses[Bonus.Balance] = 8;
else if (quality >= 90)
bonuses[Bonus.Balance] = 7;
else if (quality >= 85)
bonuses[Bonus.Balance] = 6;
else if (quality >= 80)
bonuses[Bonus.Balance] = 5;
else if (quality >= 70)
bonuses[Bonus.Balance] = 4;
else if (quality >= 60)
bonuses[Bonus.Balance] = 3;
else if (quality >= 50)
bonuses[Bonus.Balance] = 2;
else if (quality >= 30)
bonuses[Bonus.Balance] = 1;
// Critical
if (quality >= 95)
bonuses[Bonus.Critical] = 5;
else if (quality >= 90)
bonuses[Bonus.Critical] = 4;
else if (quality >= 80)
bonuses[Bonus.Critical] = 3;
else if (quality >= 70)
bonuses[Bonus.Critical] = 2;
else if (quality >= 50)
bonuses[Bonus.Critical] = 1;
// Max Attack
if (quality >= 75)
bonuses[Bonus.AttackMax] = 2;
else if (quality >= 20)
bonuses[Bonus.AttackMax] = 1;
else if (quality < -80)
bonuses[Bonus.AttackMax] = -1;
// Min Attack
if (quality >= 75)
bonuses[Bonus.AttackMin] = 2;
else if (quality >= 20)
bonuses[Bonus.AttackMin] = 1;
else if (quality < -80)
bonuses[Bonus.AttackMin] = -1;
// Durability
if (quality >= 80)
{
bonuses[Bonus.Durability] = 5;
bonuses[Bonus.DurabilityMax] = 5;
}
else if (quality >= 60)
{
bonuses[Bonus.Durability] = 4;
bonuses[Bonus.DurabilityMax] = 4;
}
else if (quality >= 50)
{
bonuses[Bonus.Durability] = 3;
bonuses[Bonus.DurabilityMax] = 3;
}
else if (quality >= 45)
{
bonuses[Bonus.Durability] = 2;
bonuses[Bonus.DurabilityMax] = 2;
}
else if (quality >= 40)
{
bonuses[Bonus.Durability] = 1;
bonuses[Bonus.DurabilityMax] = 1;
}
else if (quality >= -20)
{
}
else if (quality >= -60)
{
bonuses[Bonus.Durability] = -2;
bonuses[Bonus.DurabilityMax] = 0;
}
else if (quality >= -80)
{
bonuses[Bonus.Durability] = -2;
bonuses[Bonus.DurabilityMax] = -1;
}
else
{
bonuses[Bonus.Durability] = -3;
bonuses[Bonus.DurabilityMax] = -2;
}
}
// Bows
else if (item.HasTag("/bow/|/bow01/|/crossbow/"))
{
// Balance
if (quality >= 98)
bonuses[Bonus.Balance] = 5;
else if (quality >= 80)
bonuses[Bonus.Balance] = 4;
else if (quality >= 70)
bonuses[Bonus.Balance] = 3;
else if (quality >= 50)
bonuses[Bonus.Balance] = 2;
else if (quality >= 30)
bonuses[Bonus.Balance] = 1;
// Critical
if (quality >= 98)
bonuses[Bonus.Critical] = 5;
else if (quality >= 95)
bonuses[Bonus.Critical] = 4;
else if (quality >= 80)
bonuses[Bonus.Critical] = 3;
else if (quality >= 70)
bonuses[Bonus.Critical] = 2;
else if (quality >= 10)
bonuses[Bonus.Critical] = 1;
// Max Attack
if (quality >= 90)
bonuses[Bonus.AttackMax] = 2;
else if (quality >= 10)
bonuses[Bonus.AttackMax] = 1;
else
bonuses[Bonus.AttackMax] = -1;
// Min Attack
if (quality >= 95)
bonuses[Bonus.AttackMin] = 2;
else if (quality >= 30)
bonuses[Bonus.AttackMin] = 1;
else if (quality < -10)
bonuses[Bonus.AttackMin] = -1;
// Durability
if (quality >= 98)
{
bonuses[Bonus.Durability] = 3;
bonuses[Bonus.DurabilityMax] = 3;
}
else if (quality >= 90)
{
bonuses[Bonus.Durability] = 2;
bonuses[Bonus.DurabilityMax] = 2;
}
else if (quality >= 50)
{
bonuses[Bonus.Durability] = 1;
bonuses[Bonus.DurabilityMax] = 1;
}
else if (quality >= -10)
{
}
else if (quality >= -30)
{
bonuses[Bonus.Durability] = -1;
bonuses[Bonus.DurabilityMax] = -1;
}
else
{
bonuses[Bonus.Durability] = -2;
bonuses[Bonus.DurabilityMax] = -2;
}
}
// Armors and clothes
else if (item.HasTag("/armor/cloth/|/armor/lightarmor/|/armor/heavyarmor/"))
{
// Defense
if (quality >= 90)
bonuses[Bonus.Defense] = 1;
// Protection
if (quality >= 95)
bonuses[Bonus.Protection] = 3;
else if (quality >= 75)
bonuses[Bonus.Protection] = 2;
else if (quality >= 50)
bonuses[Bonus.Protection] = 1;
// Durability
if (quality >= 80)
{
bonuses[Bonus.Durability] = 5;
bonuses[Bonus.DurabilityMax] = 5;
}
else if (quality >= 70)
{
bonuses[Bonus.Durability] = 4;
bonuses[Bonus.DurabilityMax] = 4;
}
else if (quality >= 55)
{
bonuses[Bonus.Durability] = 3;
bonuses[Bonus.DurabilityMax] = 3;
}
else if (quality >= 35)
{
bonuses[Bonus.Durability] = 2;
bonuses[Bonus.DurabilityMax] = 2;
}
else if (quality >= -20)
{
}
else if (quality >= -60)
{
bonuses[Bonus.Durability] = -2;
bonuses[Bonus.DurabilityMax] = 0;
}
else if (quality >= -80)
{
bonuses[Bonus.Durability] = -2;
bonuses[Bonus.DurabilityMax] = -1;
}
else
{
bonuses[Bonus.Durability] = -3;
bonuses[Bonus.DurabilityMax] = -2;
}
}
// Gloves and Gauntles
else if (item.HasTag("/hand/glove/|/hand/gauntlet/"))
{
// Protection
if (quality >= 80)
bonuses[Bonus.Protection] = 1;
}
// Boots, Shoes, and Greaves
else if (item.HasTag("/foot/shoes/|/foot/armorboots/"))
{
// Durability
if (quality >= 95)
{
bonuses[Bonus.Durability] = 5;
bonuses[Bonus.DurabilityMax] = 5;
}
else if (quality >= 85)
{
bonuses[Bonus.Durability] = 4;
bonuses[Bonus.DurabilityMax] = 4;
}
else if (quality >= 60)
{
bonuses[Bonus.Durability] = 3;
bonuses[Bonus.DurabilityMax] = 3;
}
else if (quality >= 40)
{
bonuses[Bonus.Durability] = 2;
bonuses[Bonus.DurabilityMax] = 2;
}
else if (quality >= 20)
{
bonuses[Bonus.Durability] = 1;
bonuses[Bonus.DurabilityMax] = 1;
}
else if (quality >= -20)
{
}
else if (quality >= -60)
{
bonuses[Bonus.Durability] = -2;
bonuses[Bonus.DurabilityMax] = 0;
}
else if (quality >= -80)
{
bonuses[Bonus.Durability] = -2;
bonuses[Bonus.DurabilityMax] = -1;
}
else
{
bonuses[Bonus.Durability] = -3;
bonuses[Bonus.DurabilityMax] = -2;
}
}
// Shields
else if (item.HasTag("/lefthand/shield/"))
{
// Defense
if (quality >= 90)
bonuses[Bonus.Defense] = 1;
// Durability
if (quality >= 95)
{
bonuses[Bonus.Durability] = 5;
bonuses[Bonus.DurabilityMax] = 5;
}
else if (quality >= 90)
{
bonuses[Bonus.Durability] = 4;
bonuses[Bonus.DurabilityMax] = 4;
}
else if (quality >= 85)
{
bonuses[Bonus.Durability] = 3;
bonuses[Bonus.DurabilityMax] = 3;
}
else if (quality >= 80)
{
bonuses[Bonus.Durability] = 2;
bonuses[Bonus.DurabilityMax] = 2;
}
else if (quality >= 40)
{
bonuses[Bonus.Durability] = 1;
bonuses[Bonus.DurabilityMax] = 1;
}
else if (quality >= -20)
{
}
else if (quality >= -60)
{
bonuses[Bonus.Durability] = -2;
bonuses[Bonus.DurabilityMax] = 0;
}
else if (quality >= -80)
{
bonuses[Bonus.Durability] = -2;
bonuses[Bonus.DurabilityMax] = -1;
}
else
{
bonuses[Bonus.Durability] = -3;
bonuses[Bonus.DurabilityMax] = -2;
}
}
// Hats
else if (item.HasTag("/headgear/"))
{
// Durability
if (quality >= 90)
{
bonuses[Bonus.Durability] = 1;
bonuses[Bonus.DurabilityMax] = 1;
}
}
// Helmets
else if (item.HasTag("/helmet/"))
{
// Durability
if (quality >= 80)
{
bonuses[Bonus.Durability] = 1;
bonuses[Bonus.DurabilityMax] = 1;
}
}
// Robes
else if (item.HasTag("/robe/"))
{
if (quality >= 80)
{
bonuses[Bonus.Durability] = 1;
bonuses[Bonus.DurabilityMax] = 1;
}
}
return bonuses;
}