public void SaveData()
        {
            Save.ExtractME1Package(0, "save.upk");
            ME1Package pcc = MEPackageHandler.OpenME1Package("save.upk");

            File.Delete("save.upk");
            byte[] buff = pcc.Exports[1].Data;
            List <PropertyReader.Property> props = PropertyReader.getPropList(pcc.Exports[1]);
            int   v;
            float f;

            foreach (PropertyReader.Property p in props)
            {
                string name = pcc.getNameEntry(p.Name);
                switch (name)
                {
                case "m_nResourceCredits":
                    v    = Convert.ToInt32(textBox1.Text);
                    buff = WriteInt(buff, p.offend - 4, v);
                    break;

                case "m_nResourceGrenades":
                    v    = Convert.ToInt32(textBox2.Text);
                    buff = WriteInt(buff, p.offend - 4, v);
                    break;

                case "m_fResourceMedigel":
                    f    = Convert.ToSingle(textBox3.Text);
                    buff = WriteFloat(buff, p.offend - 4, f);
                    break;

                case "m_fResourceSalvage":
                    f    = Convert.ToSingle(textBox4.Text);
                    buff = WriteFloat(buff, p.offend - 4, f);
                    break;
                }
            }
            pcc.Exports[1].Data = buff;
            pcc.save();
            Save.ImportME1Package(0, "save.upk");
            File.Delete("save.upk");
            v    = Convert.ToInt32(textBox5.Text);
            buff = Save.Files[1].memory.ToArray();
            buff = WriteInt(buff, 0x4A7, v); //Paragon
            v    = Convert.ToInt32(textBox6.Text);
            buff = WriteInt(buff, 0x4A3, v); //Renegade
            SaveGame.SaveFileEntry e = Save.Files[1];
            e.memory      = new MemoryStream(buff);
            Save.Files[1] = e;
        }
        public void replaceTlkwithFile(ME1Package pcc, int Index)
        {
            /* converts Huffmann Tree to binary form */
            byte[] treeBuffer = ConvertHuffmanTreeToBuffer();

            List <EncodedString> encodedStrings = new List <EncodedString>();
            int i = 0;

            foreach (var entry in _inputData)
            {
                if (entry.Flags == 0)
                {
                    if (entry.StringID > 0)
                    {
                        entry.index = -1;
                    }
                    else
                    {
                        entry.index = 0;
                    }
                }
                else
                {
                    entry.index = i;
                    i++;
                    List <BitArray> binaryData   = new List <BitArray>();
                    int             binaryLength = 0;
                    /* for every character in a string, put it's binary code into data array */
                    foreach (char c in entry.data)
                    {
                        binaryData.Add(_huffmanCodes[c]);
                        binaryLength += _huffmanCodes[c].Count;
                    }
                    byte[] buffer = BitArrayListToByteArray(binaryData, binaryLength);
                    encodedStrings.Add(new EncodedString(entry.data.Length, buffer.Length, buffer));
                }
            }

            /* get properties from object we're replacing*/
            byte[] properties = pcc.Exports[Index].Data.Take(40).ToArray();

            MemoryStream m = new MemoryStream();

            /* writing properties */
            m.Write(properties, 0, 40);
            m.Seek(0x1C, SeekOrigin.Begin);
            m.Write(BitConverter.GetBytes(_inputData.Count), 0, 4);
            m.Seek(0, SeekOrigin.End);

            /* writing entries */
            m.Write(BitConverter.GetBytes(_inputData.Count), 0, 4);
            foreach (TLKEntry entry in _inputData)
            {
                m.Write(BitConverter.GetBytes(entry.StringID), 0, 4);
                m.Write(BitConverter.GetBytes(entry.Flags), 0, 4);
                m.Write(BitConverter.GetBytes(entry.index), 0, 4);
            }

            /* writing HuffmanTree */
            m.Write(treeBuffer, 0, treeBuffer.Length);

            /* writing data */
            m.Write(BitConverter.GetBytes(encodedStrings.Count), 0, 4);
            foreach (EncodedString enc in encodedStrings)
            {
                m.Write(BitConverter.GetBytes(enc.stringLength), 0, 4);
                m.Write(BitConverter.GetBytes(enc.encodedLength), 0, 4);
                m.Write(enc.binaryData, 0, enc.encodedLength);
            }

            byte[] buff = m.ToArray();
            pcc.Exports[Index].Data = buff;
            pcc.save(pcc.FileName);
        }
Exemple #3
0
        public void serializeTalkfileToExport(ME1Package pcc, IExportEntry export, bool savePackage = false)
        {
            /* converts Huffmann Tree to binary form */
            byte[] treeBuffer = ConvertHuffmanTreeToBuffer();

            var encodedStrings = new List <EncodedString>();
            int i = 0;

            foreach (var entry in _inputData)
            {
                if (entry.Flags == 0)
                {
                    if (entry.StringID > 0)
                    {
                        entry.Index = -1;
                    }
                    else
                    {
                        entry.Index = 0;
                    }
                }
                else
                {
                    entry.Index = i;
                    i++;
                    var binaryData   = new List <BitArray>();
                    int binaryLength = 0;

                    /* for every character in a string, put it's binary code into data array */
                    foreach (char c in entry.ASCIIData)
                    {
                        binaryData.Add(_huffmanCodes[c]);
                        binaryLength += _huffmanCodes[c].Count;
                    }
                    byte[] buffer = BitArrayListToByteArray(binaryData, binaryLength);
                    encodedStrings.Add(new EncodedString(entry.ASCIIData.Length, buffer.Length, buffer));
                }
            }


            /* writing properties */
            export.WriteProperty(new IntProperty(_inputData.Count, "m_nHashTableSize"));

            MemoryStream m = new MemoryStream();

            /* writing entries */
            m.Write(BitConverter.GetBytes(_inputData.Count), 0, 4);
            foreach (TLKStringRef entry in _inputData)
            {
                m.Write(BitConverter.GetBytes(entry.StringID), 0, 4);
                m.Write(BitConverter.GetBytes(entry.Flags), 0, 4);
                m.Write(BitConverter.GetBytes(entry.Index), 0, 4);
            }

            /* writing HuffmanTree */
            m.Write(treeBuffer, 0, treeBuffer.Length);

            /* writing data */
            m.Write(BitConverter.GetBytes(encodedStrings.Count), 0, 4);
            foreach (EncodedString enc in encodedStrings)
            {
                m.Write(BitConverter.GetBytes(enc.stringLength), 0, 4);
                m.Write(BitConverter.GetBytes(enc.encodedLength), 0, 4);
                m.Write(enc.binaryData, 0, enc.encodedLength);
            }

            byte[] buff = m.ToArray();
            export.setBinaryData(buff);
            if (savePackage)
            {
                pcc.save(pcc.FileName);
            }
        }