public static int BuildObjects(Mobile from, Type type, Point3D start, Point3D end, string[] args, string[,] props, ArrayList packs) { Utility.FixPoints(ref start, ref end); PropertyInfo[] realProps = null; if (props != null) { realProps = new PropertyInfo[props.GetLength(0)]; PropertyInfo[] allProps = type.GetProperties(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public); for (int i = 0; i < realProps.Length; ++i) { PropertyInfo thisProp = null; string propName = props[i, 0]; for (int j = 0; thisProp == null && j < allProps.Length; ++j) { if (Insensitive.Equals(propName, allProps[j].Name)) { thisProp = allProps[j]; } } if (thisProp == null) { from.SendMessage("Property not found: {0}", propName); } else { CPA attr = Properties.GetCPA(thisProp); if (attr == null) { from.SendMessage("Property ({0}) not found.", propName); } else if (from.AccessLevel < attr.WriteLevel) { from.SendMessage("Setting this property ({0}) requires at least {1} access level.", propName, Mobile.GetAccessLevelName(attr.WriteLevel)); } else if (!thisProp.CanWrite) { from.SendMessage("Property ({0}) is read only.", propName); } else { realProps[i] = thisProp; } } } } ConstructorInfo[] ctors = type.GetConstructors(); for (int i = 0; i < ctors.Length; ++i) { ConstructorInfo ctor = ctors[i]; if (!IsConstructable(ctor)) { continue; } ParameterInfo[] paramList = ctor.GetParameters(); if (args.Length == paramList.Length) { object[] paramValues = ParseValues(paramList, args); if (paramValues == null) { continue; } int built = Build(from, start, end, ctor, paramValues, props, realProps, packs); if (built > 0) { return(built); } } } return(0); }