public Weapon CreateWeapon(int itemLevel, bool useMaxModifier) { int minAverageDamage = 1 + (itemLevel); int maxAverageDamage = 2*minAverageDamage; // Find all weapons with an average damage less than the max we're looking for (eventually this will be all weapons) var weaponCandidates = weapons.Where(x => x.Damage.GetAverageValue() < maxAverageDamage); // Choose a random weapon from that list var weaponArchetype = weaponCandidates.OrderBy(x => dice.Random()).First(); // Add weapon levels to put it somewhere in our min to max range. // First get the min and max "multipliers" for the weapon that will keep it within the range int minMultiplier = 0; int maxMultiplier = 0; int i = 1; do { if (minMultiplier == 0 && weaponArchetype.Damage.GetAverageValue() * i > minAverageDamage) { minMultiplier = i; } if (weaponArchetype.Damage.GetAverageValue()*i > maxAverageDamage) { maxMultiplier = i - 1; break; } i++; } while (maxMultiplier == 0); // Now set the weapon's level to a multiplier in that range int randomMultiplier; if (useMaxModifier) { randomMultiplier = maxMultiplier; } else { randomMultiplier = dice.Random(minMultiplier, maxMultiplier); } var newWeapon = new Weapon(weaponArchetype) { Level = randomMultiplier - 1, Quantity = 1 }; return newWeapon; }
public void Clear() { CharacterName = null; Race = null; Class = null; Level = 0; Gold = 0; Experience = 0; Stats = null; Weapon = null; Inventory = null; SpellBook = null; CurrentDungeonLevel = 0; TotalNumberOfMonstersDefeated = 0; BossesDefeated = null; }