public Type GetFirstUnsupportedParameter()
 {
     foreach (var param in InvokeParameters)
     {
         if (!GameConsoleParser.IsSupportedParameterType(param.Type))
         {
             return param.Type;
         }
     }
     return null;
 }
    public override void Invoke(string[] paramStrings)
    {
        if (paramStrings.Length == 1)
        {
            if (GameConsoleParser.Parse(paramStrings[0], InvokeParameters[0].Type, out object value))
            {
                if (CanSetValue())
                {
                    SetValue(value);

                    if (_saveMode != ConsoleVarAttribute.SaveMode.NotSaved)
                        SaveValue(value);
                }
                else
                {
                    Log.Warning($"Cannot set {DisplayName}'s value.");
                }
            }
            else
            {
                Log.Warning($"Type {InvokeParameters[0].Type.GetPrettyName()} expected.");
            }
        }
        else if (paramStrings.Length == 0)
        {
            if (CanGetValue())
            {
                GameConsole.Write($"{DisplayName} = {GetValue() ?? "null"}", GameConsole.LineColor.Command);
            }
            else
            {
                Log.Warning($"Cannot get {DisplayName}'s value.");
            }
        }
        else
        {
            Log.Warning($"Expecting 0 or 1 parameter.");
        }
    }