Example #1
0
        protected override void Parse(ref BitStreamReader bsr)
        {
            DataTableId = _classInfoRef == null
                                ? bsr.ReadUShort()
                                : (int)bsr.ReadUInt(DemoRef.DataTableParser.ServerClassBits);

            ClassName     = bsr.ReadNullTerminatedString();
            DataTableName = bsr.ReadNullTerminatedString();
        }
Example #2
0
        protected override void Parse(ref BitStreamReader bsr)
        {
            Message = bsr.ReadNullTerminatedString();
            Show    = bsr.ReadByte() != 0;
            int count = bsr.ReadByte();

            KeyValues = new List <KeyValuePair <string, string> >();
            for (int i = 0; i < count; i++)
            {
                KeyValues.Add(new KeyValuePair <string, string>(
                                  bsr.ReadNullTerminatedString(),
                                  bsr.ReadNullTerminatedString()));
            }
        }
Example #3
0
        protected override void Parse(ref BitStreamReader bsr)
        {
            Name = bsr.ReadNullTerminatedString();
            ushort entryCount = bsr.ReadUShort();

            if (entryCount > 0)
            {
                TableEntries = new List <StringTableEntry>(entryCount);
                for (int i = 0; i < entryCount; i++)
                {
                    var entry = new StringTableEntry(DemoRef, this);
                    TableEntries.Add(entry);
                    entry.ParseStream(ref bsr);
                }
            }
            if (bsr.ReadBool())
            {
                ushort classCount = bsr.ReadUShort();
                Classes = new List <StringTableClass>(classCount);
                for (int i = 0; i < classCount; i++)
                {
                    var @class = new StringTableClass(DemoRef);
                    Classes.Add(@class);
                    @class.ParseStream(ref bsr);
                }
            }
        }
 protected override void Parse(ref BitStreamReader bsr)
 {
     Destination = (TextMsgDestination)bsr.ReadByte();
     Messages    = new string[MessageCount];
     for (int i = 0; i < MessageCount; i++)
     {
         Messages[i] = bsr.ReadNullTerminatedString();
     }
 }
Example #5
0
        protected override void Parse(ref BitStreamReader bsr)
        {
            string str = bsr.ReadNullTerminatedString();             // yes

            if (str.Length != 0)
            {
                Values = str.ToCharArray().Select(c => (byte)((c - 'a') * 22)).ToArray();
            }
        }
Example #6
0
        protected override void Parse(ref BitStreamReader bsr)
        {
            ClientId    = bsr.ReadByte();
            Str         = bsr.ReadNullTerminatedString();
            WantsToChat = bsr.ReadByte() != 0;

            /*if (DemoInfo.NewDemoProtocol)
             *      Unknown = bsr.ReadByte() != 0;*/
        }
 protected override void Parse(ref BitStreamReader bsr)
 {
     Count = bsr.ReadByte();
     if (Count != 1)
     {
         DemoRef.LogError($"{GetType()} is borking, there should only be one string but count is {Count}");
     }
     KeyString = bsr.ReadNullTerminatedString();
 }
Example #8
0
 protected override void Parse(ref BitStreamReader bsr)
 {
     Name = bsr.ReadNullTerminatedString();
     if (bsr.ReadBool())
     {
         ushort dataLen = bsr.ReadUShort();
         Data = bsr.ReadStringOfLength(dataLen);
     }
 }
 protected override void Parse(ref BitStreamReader bsr)
 {
     Codec   = bsr.ReadNullTerminatedString();
     Quality = bsr.ReadByte();
     if (Quality == 255)
     {
         Unknown = bsr.ReadFloat();
     }
 }
Example #10
0
 protected override void Parse(ref BitStreamReader bsr)
 {
     Name = bsr.ReadNullTerminatedString();
     if (bsr.ReadBool())
     {
         ushort byteLen = bsr.ReadUShort();
         Debug.Assert(DemoRef.DataTableParser.FlattenedProps != null);
         EntryData = StringTableEntryDataFactory.CreateEntryData(DemoRef, null, TableRef.Name, Name);
         EntryData.ParseStream(bsr.SplitAndSkip(byteLen * 8));
     }
 }
 protected override void Parse(ref BitStreamReader bsr)
 {
     NeedsDecoder      = bsr.ReadBool();
     Name              = bsr.ReadNullTerminatedString();
     ExpectedPropCount = (int)bsr.ReadUInt(DemoInfo.Game == SourceGame.HL2_OE ? 9 : 10);
     SendProps         = new List <SendTableProp>(ExpectedPropCount);
     for (int i = 0; i < ExpectedPropCount; i++)
     {
         var sendProp = new SendTableProp(DemoRef, this);
         SendProps.Add(sendProp);
         sendProp.ParseStream(ref bsr);
     }
 }
        // src_main/common/netmessages.cpp  SVC_ServerInfo::WriteToBuffer
        protected override void Parse(ref BitStreamReader bsr)
        {
            NetworkProtocol = bsr.ReadUShort();
            ServerCount     = bsr.ReadUInt();
            IsHltv          = bsr.ReadBool();
            IsDedicated     = bsr.ReadBool();
            if (DemoInfo.IsLeft4Dead() && DemoInfo.Game >= SourceGame.L4D2_2147)
            {
                UnknownBit = bsr.ReadBool();
            }
            ClientCrc = bsr.ReadSInt();
            if (DemoInfo.NewDemoProtocol)             // unknown field, could be before ClientCrc
            {
                Unknown = bsr.ReadUInt();
            }
            MaxServerClasses = bsr.ReadUShort();
            if (NetworkProtocol == 24)
            {
                MapMD5 = bsr.ReadBytes(16);
            }
            else
            {
                MapCrc = bsr.ReadUInt();                 // network protocol < 18 according to p2 leak, but doesn't add up for l4d2 and p2
            }
            PlayerCount     = bsr.ReadByte();
            MaxClients      = bsr.ReadByte();
            TickInterval    = bsr.ReadFloat();
            Platform        = (char)bsr.ReadByte();
            GameDirBitIndex = bsr.AbsoluteBitIndex;
            GameDir         = bsr.ReadNullTerminatedString();
            MapName         = bsr.ReadNullTerminatedString();
            SkyName         = bsr.ReadNullTerminatedString();
            HostName        = bsr.ReadNullTerminatedString();
            if (DemoInfo.IsLeft4Dead() && DemoInfo.Game >= SourceGame.L4D2_2147)
            {
                MissionName  = bsr.ReadNullTerminatedString();
                MutationName = bsr.ReadNullTerminatedString();
            }
            if (NetworkProtocol == 24)
            {
                HasReplay = bsr.ReadBool();                 // protocol version >= 16
            }
            // there's a good change that the first SvcServerInfo parsed is parsed correctly
            // prevent the interval from being overwritten by subsequent, incorrectly detected, SvcServerInfo messages
            // TODO: check if changing tickrate mid game sends another SvcServerInfo
            if (!DemoInfo.HasParsedTickInterval)
            {
                DemoInfo.TickInterval          = TickInterval;
                DemoInfo.HasParsedTickInterval = true;
            }
            // this packet always(?) appears before the creation of any tables

            DemoRef.StringTablesManager.ClearCurrentTables();

            // init baselines here
            DemoRef.EntBaseLines = new EntityBaseLines(DemoRef, MaxServerClasses);
        }
        protected override void Parse(ref BitStreamReader bsr)
        {
            SendPropType = DemoInfo.SendPropTypes[(int)bsr.ReadUInt(5)];
            Name         = bsr.ReadNullTerminatedString();
            Flags        = (int)bsr.ReadUInt(DemoInfo.SendPropFlagBits);
            if (DemoInfo.NewDemoProtocol && !DemoInfo.IsLeft4Dead1())
            {
                Priority = bsr.ReadByte();
            }
            if (SendPropType == SendPropType.DataTable || DemoInfo.PropFlagChecker.HasFlag(Flags, PropFlag.Exclude))
            {
                ExcludeDtName = bsr.ReadNullTerminatedString();
            }
            else
            {
                switch (SendPropType)
                {
                case SendPropType.String:
                case SendPropType.Int:
                case SendPropType.Float:
                case SendPropType.Vector3:
                case SendPropType.Vector2:
                    LowValue  = bsr.ReadFloat();
                    HighValue = bsr.ReadFloat();
                    NumBits   = bsr.ReadUInt(DemoInfo.SendPropNumBitsToGetNumBits);
                    break;

                case SendPropType.Array:
                    NumElements = bsr.ReadUInt(10);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(SendPropType),
                                                          $"Invalid prop type: {SendPropType}");
                }
            }
        }
Example #14
0
        protected override void Parse(ref BitStreamReader bsr)
        {
            TableName  = bsr.ReadNullTerminatedString();
            MaxEntries = (short)bsr.ReadUShort();
            NumEntries = (int)bsr.ReadUInt(BitUtils.HighestBitIndex(MaxEntries) + 1);
            uint dataLen = bsr.ReadUInt(DemoInfo.IsLeft4Dead2() ? 21 : 20);

            UserDataFixedSize = bsr.ReadBool();
            UserDataSize      = (int)(UserDataFixedSize ? bsr.ReadUInt(12) : 0);
            UserDataSizeBits  = (int)(UserDataFixedSize ? bsr.ReadUInt(4) : 0);
            if (DemoRef.Header.NetworkProtocol >= 15)
            {
                Flags = (StringTableFlags)bsr.ReadUInt(DemoInfo.NewDemoProtocol ? 2 : 1);
            }

            DemoRef.StringTablesManager.CreateStringTable(this);
            TableUpdates = new StringTableUpdates(DemoRef, TableName, NumEntries, true);
            TableUpdates.ParseStream(bsr.SplitAndSkip(dataLen));
        }
Example #15
0
 protected override void Parse(ref BitStreamReader bsr)
 {
     X        = bsr.ReadFloat();
     Y        = bsr.ReadFloat();
     R1       = bsr.ReadByte();
     G1       = bsr.ReadByte();
     B1       = bsr.ReadByte();
     A1       = bsr.ReadByte();
     R2       = bsr.ReadByte();
     G2       = bsr.ReadByte();
     B2       = bsr.ReadByte();
     A2       = bsr.ReadByte();
     Effect   = (HudMsgEffect)bsr.ReadByte();
     FadeIn   = bsr.ReadFloat();
     FadeOut  = bsr.ReadFloat();
     HoldTime = bsr.ReadFloat();
     FxTime   = bsr.ReadFloat();
     Message  = bsr.ReadNullTerminatedString();
 }
Example #16
0
        protected override void Parse(ref BitStreamReader bsr)
        {
            Str = bsr.ReadNullTerminatedString();
            // HACK: to counter the horrid feats of L4D2 devs breaking protocol compatibility more than once without bumping any version,
            // we have to parse the first SvcPrint in the SignOn to identify versions of L4D2 that have changes. Check for the build number
            // on the string to identify the version
            if (DemoInfo.Game == SourceGame.L4D2_2042)
            {
                Match m = Regex.Match(Str, "Build: (\\d+)\nServer Number:");
                if (m.Success)
                {
                    switch (m.Groups[1].Value)
                    {
                    case "4710":
                        DemoInfo.Game = SourceGame.L4D2_2091;
                        break;

                    case "6403":
                        DemoInfo.Game = SourceGame.L4D2_2147;
                        break;
                    }
                }
            }
        }
Example #17
0
 protected override void Parse(ref BitStreamReader bsr)
 {
     TauntName     = bsr.ReadNullTerminatedString();
     AwardSilently = bsr.ReadByte() != 0;
 }
Example #18
0
 protected override void Parse(ref BitStreamReader bsr)
 {
     TokenName = bsr.ReadNullTerminatedString();
     Duration  = bsr.ReadSShort() * 0.1f;
     Flags     = (CloseCaptionFlags)bsr.ReadByte();
 }
 protected override void Parse(ref BitStreamReader bsr)
 {
     Reason = bsr.ReadNullTerminatedString();
 }
Example #20
0
 protected override void Parse(ref BitStreamReader bsr)
 {
     Unknown     = bsr.ReadSInt();
     CallbackStr = bsr.ReadNullTerminatedString();
 }
Example #21
0
 protected override void Parse(ref BitStreamReader bsr)
 {
     TransferId = bsr.ReadUInt();
     FileName   = bsr.ReadNullTerminatedString();
     FileFlags  = (NetFileFlags)bsr.ReadUInt(DemoInfo.NumNetFileFlagBits);
 }
Example #22
0
 protected override void Parse(ref BitStreamReader bsr)
 {
     Cookie   = bsr.ReadSInt();
     CvarName = bsr.ReadNullTerminatedString();
 }