Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
 public void TestFileProviderFileExists(string path, bool expected)
 {
     Assert.AreEqual(expected, MpqFile.Exists(path));
 }
Esempio n. 3
0
        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();
            }
        }