/// <summary> /// <para>Returns a <see cref="BonusAttribute"/> array populated with '<paramref name="numOfAttr"/>' unique random attributes /// chosen from '<paramref name="randAttrs"/>' array -or- returns null if a null or empty array is supplied.</para> /// </summary> public static BonusAttribute[] GetRandomAttributes(BonusAttribute[] randAttrs, int numOfAttr) { BonusAttribute[] toAttrs = null; if (randAttrs != null && randAttrs.Length > 0 && numOfAttr > 0) { toAttrs = new BonusAttribute[numOfAttr]; int avail = 0; List <int> numList = new List <int>(); for (int i = 0; i < randAttrs.Length; ++i) { numList.Add(avail++); } if (numOfAttr > randAttrs.Length) { numOfAttr = randAttrs.Length; } int v; for (int i = 0; i < numOfAttr; ++i) { v = Utility.Random(avail--); toAttrs[i] = randAttrs[numList[v]]; numList.RemoveAt(v); } } return(toAttrs); }
/// <summary> /// <para>Returns a <see cref="BonusAttribute"/> array populated with '<paramref name="numOfAttr"/>' unique random attributes /// chosen from '<paramref name="randAttrs"/>' array -or- returns null if a null or empty array is supplied.</para> /// </summary> public static BonusAttribute[] GetRandomAttributes( BonusAttribute[] randAttrs, int numOfAttr ) { BonusAttribute[] toAttrs = null; if ( randAttrs != null && randAttrs.Length > 0 && numOfAttr > 0) { toAttrs = new BonusAttribute[numOfAttr]; int avail = 0; List<int> numList = new List<int>(); for ( int i = 0; i < randAttrs.Length; ++i ) numList.Add( avail++ ); if ( numOfAttr > randAttrs.Length ) numOfAttr = randAttrs.Length; int v; for ( int i = 0; i < numOfAttr; ++i ) { v = Utility.Random(avail--); toAttrs[i] = randAttrs[numList[v]]; numList.RemoveAt(v); } } return toAttrs; }
public static void RemoveAttrsFrom( Item item, BonusAttribute[] attributes ) { if ( attributes != null && attributes.Length > 0 ) { int cold = 0, nrgy = 0, fire = 0, pois = 0, chaos = 0, direct = 0; for ( int i = 0; i < attributes.Length; i++ ) { if ( attributes[i].Attribute == null ) continue; Type attrType = attributes[i].Attribute.GetType(); if ( attrType == typeof( AosAttribute ) ) { if ( item is IAosAttributes ) RemoveAttribute( ((IAosAttributes)item).Attributes, (AosAttribute)attributes[i].Attribute, attributes[i].Amount ); } else if ( attrType == typeof( AosArmorAttribute ) ) { if ( (AosArmorAttribute)attributes[i].Attribute == AosArmorAttribute.DurabilityBonus ) RemoveDurability( item, attributes[i].Amount ); else if ( item is BaseArmor ) RemoveAttribute( ((BaseArmor)item).ArmorAttributes, (AosArmorAttribute)attributes[i].Attribute, attributes[i].Amount ); else if ( item is BaseOtherEquipable ) RemoveAttribute( ((BaseOtherEquipable)item).ArmorAttributes, (AosArmorAttribute)attributes[i].Attribute, attributes[i].Amount ); } else if ( attrType == typeof( AosWeaponAttribute ) ) { if ( (AosWeaponAttribute)attributes[i].Attribute == AosWeaponAttribute.DurabilityBonus ) RemoveDurability( item, attributes[i].Amount ); else if ( item is BaseWeapon ) RemoveAttribute( ((BaseWeapon)item).WeaponAttributes, (AosWeaponAttribute)attributes[i].Attribute, attributes[i].Amount ); } else if ( attrType == typeof( AosElementAttribute ) ) { if ( item is BaseWeapon ) { switch ( (AosElementAttribute)attributes[i].Attribute ) { case AosElementAttribute.Cold: cold = attributes[i].Amount; break; case AosElementAttribute.Energy: nrgy = attributes[i].Amount; break; case AosElementAttribute.Fire: fire = attributes[i].Amount; break; case AosElementAttribute.Poison: pois = attributes[i].Amount; break; case AosElementAttribute.Chaos: chaos = attributes[i].Amount; break; case AosElementAttribute.Direct: direct = attributes[i].Amount; break; } } } else if ( attrType == typeof( ResistanceType ) ) { if ( item is BaseArmor ) RemoveResistance( (BaseArmor)item, (ResistanceType)attributes[i].Attribute, attributes[i].Amount ); } } if ( item is BaseWeapon ) RemoveElementDamages( (BaseWeapon)item, cold, nrgy, fire, pois, chaos, direct ); } }
/// <summary> /// <para>Returns a <see cref="BonusAttribute"/> array populated with one unique random attribute /// chosen from '<paramref name="randAttrs"/>' array -or- returns null if a null or empty array is supplied.</para> /// </summary> public static BonusAttribute[] GetRandomAttributes( BonusAttribute[] randAttrs ) { return GetRandomAttributes( randAttrs, 1 ); }