コード例 #1
0
        private PlayerInfoKeyPair ReadOffsets(BinaryReader reader, long startOffset, byte[] key, byte keyStart)
        {
            var offset  = startOffset > 0? startOffset:0;
            var keyData = new PlayerInfoKeyPair();

            keyData.KeyNameLength = keyStart;
            keyData.KeyId         = key;
            reader.BaseStream.Seek(offset, SeekOrigin.Begin);
            try
            {
                while (reader.BaseStream.Position < reader.BaseStream.Length)
                {
                    keyData.KeyOffset = reader.BaseStream.Position;
                    var b      = reader.ReadByte();
                    var backOf = reader.BaseStream.Position;
                    if (b == keyStart)
                    {
                        var scan = reader.ReadBytes(key.Length);
                        if (scan.SequenceEqual(key))
                        {
                            keyData.ValueOffset = reader.BaseStream.Position;
                            return(keyData);
                        }
                        reader.BaseStream.Seek(backOf, SeekOrigin.Begin);
                    }
                }
            }
            catch
            {
            }
            return(null);
        }
コード例 #2
0
ファイル: PlayerInfoWriter.cs プロジェクト: odd-sky/TQVaultAE
 /// <summary>
 /// Updates the raw file only if the value has changed.
 /// </summary>
 /// <param name="writer">data writer</param>
 /// <param name="data">data</param>
 /// <param name="newValue">new value to write</param>
 /// <returns></returns>
 private bool UpdateIfChanged(BinaryWriter writer, PlayerInfoKeyPair data, int newValue)
 {
     if (newValue != data.Value4byte)
     {
         data.Value4byte = newValue;
         WriteKeyValue(writer, data);
         ///set modified to true to notify program the player.chr file needs to be updated
         _modified = true;
         return(true);
     }
     return(false);
 }
コード例 #3
0
 protected void WriteKeyValue(BinaryWriter writer, PlayerInfoKeyPair keyPair)
 {
     writer.BaseStream.Seek(keyPair.ValueOffset, SeekOrigin.Begin);
     if (typeof(Single) == keyPair.Type)
     {
         writer.Write(Convert.ToSingle(keyPair.Value4byte));
     }
     else if (typeof(Int32) == keyPair.Type)
     {
         writer.Write(keyPair.Value4byte);
     }
     else
     {
         writer.Write(keyPair.Value4byte);
     }
 }