diff --git a/OpenRA.Game/ObjectCreator.cs b/OpenRA.Game/ObjectCreator.cs index 763c751b07..f71eaea062 100755 --- a/OpenRA.Game/ObjectCreator.cs +++ b/OpenRA.Game/ObjectCreator.cs @@ -52,7 +52,10 @@ namespace OpenRA { var type = mod.First.GetType( mod.Second + "." + className, false ); if( type == null ) continue; - var ctors = type.GetConstructors( BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance ).Where( x => x.HasAttribute() ).ToList(); + var flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance; + var ctors = type.GetConstructors( flags ) + .Where( x => x.HasAttribute() ).ToList(); + if( ctors.Count == 0 ) return (T)CreateBasic( type ); else if( ctors.Count == 1 ) @@ -75,9 +78,8 @@ namespace OpenRA var a = new object[ p.Length ]; for( int i = 0 ; i < p.Length ; i++ ) { - var attrs = p[ i ].GetCustomAttributes(); - if( attrs.Length != 1 ) throw new InvalidOperationException( "ObjectCreator: argument in [UseCtor] doesn't have [Param]" ); - var key = attrs[ 0 ].ParamName ?? p[i].Name; + var attr = p[ i ].GetCustomAttributes().FirstOrDefault(); + var key = (attr != null ? attr.ParamName : null) ?? p[i].Name; if ( !args.ContainsKey(key) ) throw new InvalidOperationException("ObjectCreator: key `{0}' not found".F(key)); a[ i ] = args[ key ]; }