entity.MapForms.MapForm.fixSystemLinkToolStripMenuItem_Click C# (CSharp) Method

fixSystemLinkToolStripMenuItem_Click() private method

The fix system link tool strip menu item_ click.
private fixSystemLinkToolStripMenuItem_Click ( object sender, EventArgs e ) : void
sender object The sender.
e System.EventArgs The e.
return void
        private void fixSystemLinkToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int count = 0;
            List<int> ids = new List<int>();
            for (int x = 0; x < map.IndexHeader.metaCount; x++)
            {
                switch (map.MetaInfo.TagType[x])
                {
                    case "bipd":
                    case "bloc":
                    case "ctrl":

                    case "jpt!":
                    case "mach":

                    case "scen":
                    case "ssce":
                    case "vehi":
                        ids.Add(map.MetaInfo.Ident[x]);
                        count++;
                        break;
                    case "eqip":
                    case "garb":
                    case "proj":
                        ids.Add(map.MetaInfo.Ident[x]);
                        ids.Add(map.MetaInfo.Ident[x]);
                        count += 2;
                        break;
                    case "weap":
                        ids.Add(map.MetaInfo.Ident[x]);
                        ids.Add(map.MetaInfo.Ident[x]);
                        ids.Add(map.MetaInfo.Ident[x]);
                        count += 3;
                        break;
                }
            }

            map.OpenMap(MapTypes.Internal);
            Meta m = new Meta(map);
            m.ReadMetaFromMap(3, true);

            try
            {
                IFPIO io = IFPHashMap.GetIfp("scnr", map.HaloVersion);
                m.headersize = io.headerSize;
                m.scanner.ScanWithIFP(ref io);

                MetaSplitter metasplit = new MetaSplitter();
                metasplit.SplitWithIFP(ref io, ref m, map);

                for (int x = 0; x < metasplit.Header.Chunks[0].ChunkResources.Count; x++)
                {
                    // Offset 984 = [SCNR] Predicted Resources
                    if (metasplit.Header.Chunks[0].ChunkResources[x].offset == 984)
                    {
                        MetaSplitter.SplitReflexive reflex =
                            (MetaSplitter.SplitReflexive)metasplit.Header.Chunks[0].ChunkResources[x];

                        // count = # of chunks incl. added/removed
                        // reflex.Chunks.Count = # of chunks listed in Predicted Resources (?)
                        int diff = count - reflex.Chunks.Count;

                        // Add/Remove chunks to match the difference
                        for (int y = 0; y < diff; y++)
                        {
                            MetaSplitter.SplitReflexive MetaChunk = new MetaSplitter.SplitReflexive();
                            MetaChunk.splitReflexiveType = MetaSplitter.SplitReflexive.SplitReflexiveType.Chunk;
                            MetaChunk.chunksize = 4;

                            MetaChunk.MS = new MemoryStream(4);
                            reflex.Chunks.Add(MetaChunk);
                        }

                        for (int y = 0; y < reflex.Chunks.Count; y++)
                        {
                            BinaryWriter BW = new BinaryWriter(reflex.Chunks[y].MS);
                            BW.Write(ids[y]);
                        }

                        metasplit.Header.Chunks[0].ChunkResources[x] = reflex;
                        break;
                    }
                }

                Meta newmeta = MetaBuilder.BuildMeta(metasplit, map);

                map.OpenMap(MapTypes.Internal);

                map.ChunkTools.Add(newmeta);
                map.CloseMap();

                // info.OpenMap(MapTypes.Internal);
                // info.BW.BaseStream.Position = m.offset + r.translation;
                // for (int x = 0; x < count; x++)
                // {
                // info.BW.Write(ids[x]);
                // }
                // info.CloseMap();
                map = Map.Refresh(map);
                MessageBox.Show("Done");
            }
            catch (Exception ex)
            {
                Global.ShowErrorMsg(string.Empty, ex);
            }
        }
MapForm