protected override void Parse(ref BitStreamReader bsr) { DataTableId = _classInfoRef == null ? bsr.ReadUShort() : (int)bsr.ReadUInt(DemoRef.DataTableParser.ServerClassBits); ClassName = bsr.ReadNullTerminatedString(); DataTableName = bsr.ReadNullTerminatedString(); }
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())); } }
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(); } }
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(); } }
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(); }
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(); } }
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}"); } } }
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)); }
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(); }
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; } } } }
protected override void Parse(ref BitStreamReader bsr) { TauntName = bsr.ReadNullTerminatedString(); AwardSilently = bsr.ReadByte() != 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(); }
protected override void Parse(ref BitStreamReader bsr) { Unknown = bsr.ReadSInt(); CallbackStr = bsr.ReadNullTerminatedString(); }
protected override void Parse(ref BitStreamReader bsr) { TransferId = bsr.ReadUInt(); FileName = bsr.ReadNullTerminatedString(); FileFlags = (NetFileFlags)bsr.ReadUInt(DemoInfo.NumNetFileFlagBits); }
protected override void Parse(ref BitStreamReader bsr) { Cookie = bsr.ReadSInt(); CvarName = bsr.ReadNullTerminatedString(); }