private void AddModuleCampaign(GFFFile ModuleIfo, string HomeDirectory, string InstallDirectory)
{
byte[] GUIDData = ModuleIfo.TopLevelStruct.GetVoidDataSafe("Campaign_ID", null);
if (GUIDData == null || GUIDData.Length != 16)
return;
Guid CampaignGUID = new Guid(GUIDData);
string[] SearchDirs = new string[] { HomeDirectory, InstallDirectory };
//
// Attempt to locate a campaign.cam file with the same GUID as the
// module.
//
foreach (string PathName in SearchDirs)
{
string CampaignFolder = String.Format("{0}\\Campaigns", PathName);
if (!Directory.Exists(CampaignFolder))
continue;
foreach (string CampaignDir in Directory.EnumerateDirectories(CampaignFolder))
{
using (DirectoryResourceRepository Repository = new DirectoryResourceRepository(CampaignDir))
{
Repository.PopulateRepository();
IResourceEntry ResEntry = Repository.FindResource(new OEIResRef("campaign"), ResCAM);
if (ResEntry == null)
continue;
GFFFile CampaignCAM = new GFFFile(ResEntry.GetStream(false));
GUIDData = CampaignCAM.TopLevelStruct.GetVoidDataSafe("GUID", null);
if (GUIDData == null || GUIDData.Length != 16)
continue;
Guid ID = new Guid(GUIDData);
if (!CampaignGUID.Equals(ID))
continue;
Repositories.Add(new DirectoryResourceRepository(CampaignDir));
return;
}
}
}
}