XCom 2 mod fixing mod - https://steamcommunity.com/sharedfiles/filedetails/?id=2845224452
class X2DLCInfo_SMGCosting extends X2DownloadableContentInfo;

static function OnPostTemplatesCreated() {
    local X2ItemTemplateManager Mgr;
    local array<X2DataTemplate> SrcTemplates;
    local array<X2DataTemplate> DestTemplates;
    local int iDiff;

    Mgr = class'X2ItemTemplateManager'.static.GetItemTemplateManager();
    if (Mgr == none) {
        `LOG("ERROR :: failed to find Template Manager.",, 'SMGCosting');
        return;
    }

    if (!GetTemplates(Mgr, 'AssaultRifle_MG_Schematic', SrcTemplates))
        return;
    if (!GetTemplates(Mgr, 'SMG_MG_Schematic', DestTemplates))
        return;

    // Assumes that there's the same number of difficulty levels
    for (iDiff = 0; iDiff < SrcTemplates.Length; iDiff++) {
        X2ItemTemplate(DestTemplates[iDiff]).Cost = X2ItemTemplate(SrcTemplates[iDiff]).Cost;
    }

    if (!GetTemplates(Mgr, 'AssaultRifle_BM_Schematic', SrcTemplates))
        return;
    if (!GetTemplates(Mgr, 'SMG_BM_Schematic', DestTemplates))
        return;

    // Assumes that there's the same number of difficulty levels
    for (iDiff = 0; iDiff < SrcTemplates.Length; iDiff++) {
        X2ItemTemplate(DestTemplates[iDiff]).Cost = X2ItemTemplate(SrcTemplates[iDiff]).Cost;
    }
}

static private function bool GetTemplates(const X2ItemTemplateManager Mgr, const name TemplateName, out array<X2DataTemplate> Templates) {
    Mgr.FindDataTemplateAllDifficulties(TemplateName, Templates);
    if (Templates.Length == 0) {
	`LOG("ERROR :: failed to find Templates for" @ TemplateName,, 'SMGCosting');
	return false;
    }
    return true;
}