private Map(MpqArchive mapArchive) { using var infoStream = MpqFile.OpenRead(mapArchive, MapInfo.FileName); using var infoReader = new BinaryReader(infoStream); Info = infoReader.ReadMapInfo(); using var environmentStream = MpqFile.OpenRead(mapArchive, MapEnvironment.FileName); using var environmentReader = new BinaryReader(environmentStream); Environment = environmentReader.ReadMapEnvironment(); var extension = Info.ScriptLanguage switch { ScriptLanguage.Jass => ".j", ScriptLanguage.Lua => ".lua", _ => throw new InvalidEnumArgumentException(nameof(Info.ScriptLanguage), (int)Info.ScriptLanguage, typeof(ScriptLanguage)), }; if (MpqFile.Exists(mapArchive, $"war3map{extension}")) { using var scriptStream = MpqFile.OpenRead(mapArchive, $"war3map{extension}"); using var scriptReader = new StreamReader(scriptStream); Script = scriptReader.ReadToEnd(); } else if (MpqFile.Exists(mapArchive, $@"scripts\war3map{extension}")) { using var scriptStream = MpqFile.OpenRead(mapArchive, $@"scripts\war3map{extension}"); using var scriptReader = new StreamReader(scriptStream); Script = scriptReader.ReadToEnd(); } else { throw new FileNotFoundException($"Cannot find {Info.ScriptLanguage} map script."); } if (MpqFile.Exists(mapArchive, MapSounds.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapSounds.FileName); using var reader = new BinaryReader(fileStream); Sounds = reader.ReadMapSounds(); } if (MpqFile.Exists(mapArchive, MapCameras.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapCameras.FileName); using var reader = new BinaryReader(fileStream); Cameras = reader.ReadMapCameras(); } if (MpqFile.Exists(mapArchive, MapPathingMap.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapPathingMap.FileName); using var reader = new BinaryReader(fileStream); PathingMap = reader.ReadMapPathingMap(); } if (MpqFile.Exists(mapArchive, MapPreviewIcons.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapPreviewIcons.FileName); using var reader = new BinaryReader(fileStream); PreviewIcons = reader.ReadMapPreviewIcons(); } if (MpqFile.Exists(mapArchive, MapRegions.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapRegions.FileName); using var reader = new BinaryReader(fileStream); Regions = reader.ReadMapRegions(); } if (MpqFile.Exists(mapArchive, MapShadowMap.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapShadowMap.FileName); using var reader = new BinaryReader(fileStream); ShadowMap = reader.ReadMapShadowMap(); } if (MpqFile.Exists(mapArchive, MapImportedFiles.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapImportedFiles.FileName); using var reader = new BinaryReader(fileStream); ImportedFiles = reader.ReadMapImportedFiles(); } if (MpqFile.Exists(mapArchive, MapAbilityObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapAbilityObjectData.FileName); using var reader = new BinaryReader(fileStream); AbilityObjectData = reader.ReadAbilityObjectData(false); } if (MpqFile.Exists(mapArchive, MapBuffObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapBuffObjectData.FileName); using var reader = new BinaryReader(fileStream); BuffObjectData = reader.ReadBuffObjectData(false); } if (MpqFile.Exists(mapArchive, MapDestructableObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapDestructableObjectData.FileName); using var reader = new BinaryReader(fileStream); DestructableObjectData = reader.ReadDestructableObjectData(false); } if (MpqFile.Exists(mapArchive, MapDoodadObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapDoodadObjectData.FileName); using var reader = new BinaryReader(fileStream); DoodadObjectData = reader.ReadDoodadObjectData(false); } if (MpqFile.Exists(mapArchive, MapItemObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapItemObjectData.FileName); using var reader = new BinaryReader(fileStream); ItemObjectData = reader.ReadItemObjectData(false); } if (MpqFile.Exists(mapArchive, MapUnitObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapUnitObjectData.FileName); using var reader = new BinaryReader(fileStream); UnitObjectData = reader.ReadUnitObjectData(false); } if (MpqFile.Exists(mapArchive, MapUpgradeObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapUpgradeObjectData.FileName); using var reader = new BinaryReader(fileStream); UpgradeObjectData = reader.ReadUpgradeObjectData(false); } if (MpqFile.Exists(mapArchive, MapCustomTextTriggers.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapCustomTextTriggers.FileName); using var reader = new BinaryReader(fileStream); CustomTextTriggers = reader.ReadMapCustomTextTriggers(Encoding.UTF8); } if (MpqFile.Exists(mapArchive, MapTriggers.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapTriggers.FileName); using var reader = new BinaryReader(fileStream); Triggers = reader.ReadMapTriggers(TriggerData.Default); } if (MpqFile.Exists(mapArchive, MapTriggerStrings.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapTriggerStrings.FileName); using var reader = new StreamReader(fileStream); TriggerStrings = reader.ReadTriggerStrings(false); } if (MpqFile.Exists(mapArchive, MapDoodads.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapDoodads.FileName); using var reader = new BinaryReader(fileStream); Doodads = reader.ReadMapDoodads(); } if (MpqFile.Exists(mapArchive, MapUnits.FileName)) { using var fileStream = MpqFile.OpenRead(mapArchive, MapUnits.FileName); using var reader = new BinaryReader(fileStream); Units = reader.ReadMapUnits(); } }
public void TestFileProviderFileExists(string path, bool expected) { Assert.AreEqual(expected, MpqFile.Exists(path)); }
private Campaign(MpqArchive campaignArchive) { using var infoStream = MpqFile.OpenRead(campaignArchive, CampaignInfo.FileName); using var infoReader = new BinaryReader(infoStream); Info = infoReader.ReadCampaignInfo(); if (MpqFile.Exists(campaignArchive, CampaignImportedFiles.FileName)) { using var fileStream = MpqFile.OpenRead(campaignArchive, CampaignImportedFiles.FileName); using var reader = new BinaryReader(fileStream); ImportedFiles = reader.ReadCampaignImportedFiles(); } if (MpqFile.Exists(campaignArchive, CampaignAbilityObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(campaignArchive, CampaignAbilityObjectData.FileName); using var reader = new BinaryReader(fileStream); AbilityObjectData = reader.ReadCampaignAbilityObjectData(); } if (MpqFile.Exists(campaignArchive, CampaignBuffObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(campaignArchive, CampaignBuffObjectData.FileName); using var reader = new BinaryReader(fileStream); BuffObjectData = reader.ReadCampaignBuffObjectData(); } if (MpqFile.Exists(campaignArchive, CampaignDestructableObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(campaignArchive, CampaignDestructableObjectData.FileName); using var reader = new BinaryReader(fileStream); DestructableObjectData = reader.ReadCampaignDestructableObjectData(); } if (MpqFile.Exists(campaignArchive, CampaignDoodadObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(campaignArchive, CampaignDoodadObjectData.FileName); using var reader = new BinaryReader(fileStream); DoodadObjectData = reader.ReadCampaignDoodadObjectData(); } if (MpqFile.Exists(campaignArchive, CampaignItemObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(campaignArchive, CampaignItemObjectData.FileName); using var reader = new BinaryReader(fileStream); ItemObjectData = reader.ReadCampaignItemObjectData(); } if (MpqFile.Exists(campaignArchive, CampaignUnitObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(campaignArchive, CampaignUnitObjectData.FileName); using var reader = new BinaryReader(fileStream); UnitObjectData = reader.ReadCampaignUnitObjectData(); } if (MpqFile.Exists(campaignArchive, CampaignUpgradeObjectData.FileName)) { using var fileStream = MpqFile.OpenRead(campaignArchive, CampaignUpgradeObjectData.FileName); using var reader = new BinaryReader(fileStream); UpgradeObjectData = reader.ReadCampaignUpgradeObjectData(); } if (MpqFile.Exists(campaignArchive, CampaignTriggerStrings.FileName)) { using var fileStream = MpqFile.OpenRead(campaignArchive, CampaignTriggerStrings.FileName); using var reader = new StreamReader(fileStream); TriggerStrings = reader.ReadCampaignTriggerStrings(); } }