public static Weapon GetWeaponFromType(WeaponType type, bool isBase = false, bool canBeAnythingAndGreatSword = true) { int notAskedType = Random.Range(0, 100); if (!isBase && notAskedType < ChanceNotRaceWeaponPercent) { var tmpType = (WeaponType)Random.Range(0, System.Enum.GetNames(typeof(WeaponType)).Length); if (canBeAnythingAndGreatSword || tmpType != WeaponType.GreatSword) { type = tmpType; } } Rarity rarity = Rarity.Normal; if (!isBase) { if (Random.Range(0, 100) < RareWeaponAppearancePercent) { rarity = Rarity.Rare; } else if (Random.Range(0, 100) < MagicalWeaponAppearancePercent) { rarity = Rarity.Magical; } } var subType = Random.Range(0, WeaponTypeNames[type.GetHashCode()].Length); string name = GetWeaponNameFromRarity(type.GetHashCode(), subType, rarity /*, isBase*/); Weapon tmpWeapon = null; switch (type) { case WeaponType.Sword: tmpWeapon = GetBaseSword(); tmpWeapon.BaseDamage = SwordDamage[rarity.GetHashCode()]; break; case WeaponType.Spear: tmpWeapon = GetBaseSpear(); tmpWeapon.BaseDamage = SpearDamage[rarity.GetHashCode()]; break; case WeaponType.Club: tmpWeapon = GetBaseClub(); tmpWeapon.BaseDamage = ClubDamage[rarity.GetHashCode()]; break; case WeaponType.Knife: tmpWeapon = GetBaseKnife(); tmpWeapon.BaseDamage = KnifeDamage[rarity.GetHashCode()]; break; case WeaponType.Bow: tmpWeapon = GetBaseBow(); tmpWeapon.BaseDamage = BowDamage[rarity.GetHashCode()]; break; case WeaponType.Daggers: tmpWeapon = GetBaseDaggers(); tmpWeapon.BaseDamage = DaggersDamage[rarity.GetHashCode()]; break; case WeaponType.Hammer: tmpWeapon = GetBaseHammer(); tmpWeapon.BaseDamage = HammerDamage[rarity.GetHashCode()]; break; case WeaponType.Axe: tmpWeapon = GetBaseAxe(); tmpWeapon.BaseDamage = AxeDamage[rarity.GetHashCode()]; break; case WeaponType.GreatSword: tmpWeapon = GetBaseGreatSword(); tmpWeapon.BaseDamage = GreatSwordDamage[rarity.GetHashCode()]; break; case WeaponType.Gauntlets: tmpWeapon = GetBaseGauntlets(); tmpWeapon.BaseDamage = GauntletsDamage[rarity.GetHashCode()]; break; } tmpWeapon.Name = name; tmpWeapon.Rarity = rarity; var baseDamageFloat = tmpWeapon.BaseDamage * Helper.MultiplierFromPercent(1, Random.Range(-BaseInitDamageRangePercentage, BaseInitDamageRangePercentage + 1)); tmpWeapon.BaseDamage = (int)baseDamageFloat; tmpWeapon.WeaponParts = CreateWeaponPartsFromTypeSubType(type, subType, tmpWeapon.NbSkinParts); return(tmpWeapon); }