public static Armour Generate(int itemLevelMin, int itemLevelMax) { #region Item prefixes. string[] prefix = new string[] { "Thorny", "Spiny", "Barbed", "Jagged", "Shining", "Incandescent", "Glimmering", "Glittering", "Glowing", "Radiating", "Pulsing", "Seething", "Blazing", "Scintillating", "Monk's", "Prior's", "Abbot's", "Exarch's", "Protective", "Strong-Willed", "Resolute", "Fearless", "Dauntless", "Indomitable", "Unassailable", "Unfaltering", "Pixie's", "Gremlin's", "Boggart's", "Naga's", "Djinn's", "Seraphim's", "Hale", "Healthy", "Vigorous", "Rapturous", "Prime", "Sanguine", "Stalwart", "Stout", "Robust", "Rotund", "Virile", "Athlete's", "Fecund", "Beryl", "Mazarine", "Blue", "Zaffre", "Cobalt", "Azure", "Sapphire", "Cerulean", "Aqua", "Opalescent", "Gentian", "Chalybeous", "Agile", "Dancer's", "Acrobat's", "Fleet", "Blurred", "Phased", "Flea's", "Fawn's", "Ram's", "Shade's", "Ghost's", "Spectre's", "Wraith's", "Phantasm's", "Nightmare's", "Mirage's", "Illusion's", "Musquito's", "Moth's", "Butterfly's", "Wasp's", "Dragonfly's", "Hummingbird's", "Lacqured", "Studded", "Ribbed", "Fortified", "Plated", "Carapaced", "Oyster's", "Urchin's", "Nautilus'", "Crocile's", "Reinforced", "Layered", "Lobstered", "Buttressed", "Thickened", "Girded", "Impregnable", "Impenetrable", "Beetle's", "Crab's", "Armadillo's", "Rhino's", "Elephant's", "Mammoth's" }; #endregion #region Item suffixes. string[] suffix = new string[] { "of the Lost", "of Banishment", "of Eviction", "of Expulsion", "of Exile", "of Barneth", "of the Inuit", "of the Seal", "of the Yeti", "of the Penguin", "of the Walrus", "of the Polar Bear", "of the Ice", "of Haast", "of Vibrance", "of Exuberance", "of the Whelpling", "of the Salamander", "of the Drake", "of the Kiln", "of the Furnace", "of the Volcano", "of the Magma", "of the Pupil", "of the Student", "of the Prodigy", "of the Augur", "of the Philosopher", "of the Sage", "of the Savant", "of the Virtuoso", "of the Genius", "of the Newt", "of the Lizard", "of the Flatworm", "of the Starfish", "of the Hydra", "of the Troll", "of the Phoenix", "of the Cloud", "of the Squall", "of the Storm", "of the Thunderhead", "of the Tempest", "of the Maelstrom", "of the Lighting", "of the Worthy", "of the Apt", "of Thick Skin", "of Stone Skin", "of Iron Skin", "of Steel Skin", "of Adamantite Skin", "of Corundum Skin", "of the Mongoose", "of the Lynx", "of the Fox", "of the Falcon", "of the Panther", "of the Leopard", "of the Jaguar", "of the Phantom", "of the Wind", "of Dampening", "of Numbing", "of the Brute", "of the Wrestler", "of the Bear", "of the Lion", "of the Gorilla", "of the Goliath", "of the Leviathan", "of the Titan", "of the Gods" }; #endregion #region Stats that need to be defined. string itemName; int strength = 0; int intelligence = 0; int dexterity = 0; int health = 0; int mana = 0; int armour = 0; double healthRegen = 0; double manaRegen = 0; double physicalResist = 0; double elementalResist = 0; double fireResist = 0; double lightningResist = 0; double coldResist = 0; double poisonResist = 0; double physicalDamage = 0; double elementalDamage = 0; double fireDamage = 0; double lightningDamage = 0; double coldDamage = 0; double poisonDamage = 0; Equip slot = 0; Type type = 0; int strengthReq = 1; int intelligenceReq = 1; int dexterityReq = 1; int price = 0; #endregion int itemLevel = random.Next(itemLevelMin, itemLevelMax + 1); int prefixChoice = random.Next(prefix.Length); int suffixChoice = random.Next(suffix.Length); slot = Equip.Chest; itemName = ""; type = (Type)random.Next(3); #region Name generation. // Head names. if (slot.Equals(Equip.Head) && type.Equals(Type.Heavy)) { itemName = prefix[prefixChoice] + " Helmet " + suffix[suffixChoice]; } else if (slot.Equals(Equip.Head) && type.Equals(Type.Medium)) { itemName = prefix[prefixChoice] + " Cap " + suffix[suffixChoice]; } else if (slot.Equals(Equip.Head) && type.Equals(Type.Light)) { itemName = prefix[prefixChoice] + " Hood " + suffix[suffixChoice]; } // Chest names. if (slot.Equals(Equip.Chest) && type.Equals(Type.Heavy)) { itemName = prefix[prefixChoice] + " Chestplate " + suffix[suffixChoice]; } else if (slot.Equals(Equip.Chest) && type.Equals(Type.Medium)) { itemName = prefix[prefixChoice] + " Jacket " + suffix[suffixChoice]; } else if (slot.Equals(Equip.Chest) && type.Equals(Type.Light)) { itemName = prefix[prefixChoice] + " Robes " + suffix[suffixChoice]; } #endregion #region Affix minimum and maximum, affix cap and affix chooser. int affixMinimum = 0; int affixMaximum = 0; if (itemLevel > 10) { affixMinimum = 1; } if (itemLevel > 25) { affixMinimum = 2; } if (itemLevel > 45) { affixMinimum = 3; } if (itemLevel > 5) { affixMaximum = 1; } if (itemLevel > 15) { affixMaximum = 2; } if (itemLevel > 30) { affixMaximum = 3; } if (itemLevel > 50) { affixMaximum = 4; } if (itemLevel > 70) { affixMaximum = 5; } int affixAmount = random.Next(affixMinimum, affixMaximum + 1); if (itemLevel > 80) { affixAmount = 5; } List <Affix> affixes = new List <Affix>(); for (int i = 0; i < affixAmount; i++) { int affixChooser = random.Next(20); affixes.Add((Affix)affixChooser); } #endregion // Set base armour if (type.Equals(Type.Heavy)) { armour = random.Next((int)(7 * Math.Pow(1.024, itemLevel)), (int)(10 * Math.Pow(1.036, itemLevel))); } else if (type.Equals(Type.Medium)) { armour = random.Next((int)(7 * Math.Pow(1.023, itemLevel)), (int)(10 * Math.Pow(1.035, itemLevel))); } else if (type.Equals(Type.Light)) { armour = random.Next((int)(7 * Math.Pow(1.022, itemLevel)), (int)(10 * Math.Pow(1.034, itemLevel))); } #region Generate values for chosen affixes. foreach (Affix affix in affixes) { // Strength if (affix.Equals(Affix.Strength)) { strength = random.Next((int)(5 * Math.Pow(1.038, itemLevel))); } // Intelligence if (affix.Equals(Affix.Intelligence)) { intelligence = random.Next((int)(5 * Math.Pow(1.038, itemLevel))); } // Dexterity if (affix.Equals(Affix.Dexterity)) { dexterity = random.Next((int)(5 * Math.Pow(1.038, itemLevel))); } // Health if (affix.Equals(Affix.Health)) { if (type.Equals(Type.Heavy)) { health = random.Next((int)(5 * Math.Pow(1.043, itemLevel))); } else if (type.Equals(Type.Medium)) { health = random.Next((int)(5 * Math.Pow(1.042, itemLevel))); } else if (type.Equals(Type.Light)) { health = random.Next((int)(5 * Math.Pow(1.041, itemLevel))); } } // Mana if (affix.Equals(Affix.Mana)) { if (type.Equals(Type.Heavy)) { mana = random.Next((int)(5 * Math.Pow(1.039, itemLevel))); } else if (type.Equals(Type.Medium)) { mana = random.Next((int)(5 * Math.Pow(1.040, itemLevel))); } else if (type.Equals(Type.Light)) { mana = random.Next((int)(5 * Math.Pow(1.0441, itemLevel))); } } // Armour if (affix.Equals(Affix.Armour)) { if (type.Equals(Type.Heavy)) { armour += random.Next((int)(4 * Math.Pow(1.024, itemLevel))); } else if (type.Equals(Type.Medium)) { armour += random.Next((int)(4 * Math.Pow(1.023, itemLevel))); } else if (type.Equals(Type.Light)) { armour += random.Next((int)(4 * Math.Pow(1.021, itemLevel))); } } // Health Regeneration if (affix.Equals(Affix.HealthRegen)) { healthRegen = random.Next((int)(5 * Math.Pow(1.02, itemLevel))); } // Mana Regeneration if (affix.Equals(Affix.ManaRegen)) { manaRegen = random.Next((int)(5 * Math.Pow(1.03, itemLevel))); } // Physical Resistance if (affix.Equals(Affix.PhysicalResist)) { physicalResist = random.Next(21) * 0.01; } // Elemental Resistance if (affix.Equals(Affix.ElementalResist)) { elementalResist = random.Next(21) * 0.01; } // Fire Resistance if (affix.Equals(Affix.FireResist)) { fireResist = random.Next(21) * 0.01; } // Lightning Resistance if (affix.Equals(Affix.LightningResist)) { lightningResist = random.Next(21) * 0.01; } // Cold Resistance if (affix.Equals(Affix.ColdResist)) { coldResist = random.Next(21) * 0.01; } // Poison Resistance if (affix.Equals(Affix.PoisonResist)) { poisonResist = random.Next(21) * 0.01; } // Physical Damage if (affix.Equals(Affix.PhysicalDamage)) { physicalDamage = random.Next(21) * 0.01; } // Elemental Damage if (affix.Equals(Affix.ElementalDamage)) { elementalDamage = random.Next(21) * 0.01; } // Fire Damage if (affix.Equals(Affix.FireDamage)) { fireDamage = random.Next(21) * 0.01; } // Lightning Damage if (affix.Equals(Affix.LightningDamage)) { lightningDamage = random.Next(21) * 0.01; } // Cold Damage if (affix.Equals(Affix.ColdDamage)) { coldDamage = random.Next(21) * 0.01; } // Poison Damage if (affix.Equals(Affix.PoisonDamage)) { poisonDamage = random.Next(21) * 0.01; } } #endregion // Strength requirement if (strength > 0 || type.Equals(Type.Heavy) || physicalDamage > 0 || physicalResist > 0 || healthRegen > 0 || health > 0) { strengthReq = random.Next((int)(5 * Math.Pow(1.029, itemLevel)), (int)(5 * Math.Pow(1.036, itemLevel))); } // Intelligence requirement if (intelligence > 0 || type.Equals(Type.Light) || elementalDamage > 0 || elementalResist > 0 || mana > 0) { intelligenceReq = random.Next((int)(5 * Math.Pow(1.029, itemLevel)), (int)(5 * Math.Pow(1.036, itemLevel))); } // Dexterity requirement if (dexterity > 0 || type.Equals(Type.Medium) || physicalDamage > 0) { dexterityReq = random.Next((int)(5 * Math.Pow(1.029, itemLevel)), (int)(5 * Math.Pow(1.036, itemLevel))); } // Buy and sell price price = (int)(20 * Math.Pow(1.024, itemLevel)); // Up the item ID. id++; return(new Armour(itemName, slot, type, itemLevel, strengthReq, intelligenceReq, dexterityReq, strength, intelligence, dexterity, health, mana, armour, healthRegen, manaRegen, physicalResist, elementalResist, fireResist, lightningResist, coldResist, poisonResist, physicalDamage, elementalDamage, fireDamage, lightningDamage, coldDamage, poisonDamage, price, id)); }