public override Task Write(SourceBufferWriter buf, SourceDemo demo) { buf.Write(TransferId); buf.Write(FileName); buf.Write(FileRequested); return(Task.CompletedTask); }
public override Task Read(SourceBufferReader buf, SourceDemo demo) { TransferId = buf.ReadUInt32(); FileName = buf.ReadString(); FileRequested = buf.ReadBoolean(); return(Task.CompletedTask); }
public MutableStringTableEntry(SourceDemo demoRef, MutableStringTable tableRef, StringTableEntryData?eData, string entryName) { _demoRef = demoRef; _tableRef = tableRef; EntryData = eData; EntryName = entryName; }
public override Task Write(SourceBufferWriter buf, SourceDemo demo) { buf.WriteInt16(Protocol); buf.WriteInt32(ServerCount); buf.WriteBoolean(IsHltv); buf.WriteBoolean(IsDedicated); buf.WriteInt32(ClientCrc); buf.WriteUInt16(MaxClasses); buf.WriteInt32(MapCrc); buf.WriteByte(PlayerSlot); buf.WriteByte(MaxClients); if (Unk.HasValue) { if (demo.Protocol == 4) { buf.WriteInt32(Unk.Value); } else if (demo.NetworkProtocol == 24) { buf.WriteInt32(Unk.Value); } } buf.WriteString(GameDir.AsSpan()); buf.WriteString(MapName.AsSpan()); buf.WriteString(SkyName.AsSpan()); buf.WriteString(HostName.AsSpan()); return(Task.CompletedTask); }
public override Task Write(SourceBufferWriter buf, SourceDemo demo) { buf.WriteBits(Events, 9); buf.WriteBits(Data.Length, 20); buf.WriteBytes(Data); return(Task.CompletedTask); }
public override Task Write(SourceBufferWriter buf, SourceDemo demo) { buf.WriteInt16(MenuType); buf.WriteInt32(Data.Length); buf.WriteBytes(Data); return(Task.CompletedTask); }
public override Task Write(SourceBufferWriter buf, SourceDemo demo) { buf.WriteInt32(Tick); buf.WriteInt16(HostFrameTime); buf.WriteInt16(HostFrameTimeStdDeviation); return(Task.CompletedTask); }
public override Task Write(SourceBufferWriter buf, SourceDemo demo) { buf.WriteInt16((short)Angle.X); buf.WriteInt16((short)Angle.Y); buf.WriteInt16((short)Angle.Z); return(Task.CompletedTask); }
public override Task Read(SourceBufferReader buf, SourceDemo demo) { Protocol = buf.ReadInt16(); ServerCount = buf.ReadInt32(); IsHltv = buf.ReadBoolean(); IsDedicated = buf.ReadBoolean(); ClientCrc = buf.ReadInt32(); MaxClasses = buf.ReadUInt16(); MapCrc = buf.ReadInt32(); PlayerSlot = buf.ReadByte(); MaxClients = buf.ReadByte(); if (demo.Protocol == 4) { Unk = buf.ReadInt32(); } else if (demo.NetworkProtocol == 24) { Unk = buf.ReadBits(96); } TickInterval = buf.ReadSingle(); OperatingSystem = buf.ReadChar(); GameDir = buf.ReadString(); MapName = buf.ReadString(); SkyName = buf.ReadString(); HostName = buf.ReadString(); return(Task.CompletedTask); }
public override Task Read(SourceBufferReader buf, SourceDemo demo) { Tick = buf.ReadInt32(); HostFrameTime = buf.ReadInt16(); HostFrameTimeStdDeviation = buf.ReadInt16(); return(Task.CompletedTask); }
public override Task Read(SourceBufferReader buf, SourceDemo demo) { EntityIndex = buf.ReadBits(11); ClassId = buf.ReadBits(9); buf.SeekBits(buf.ReadBits(11)); return(Task.CompletedTask); }
public override Task Write(SourceBufferWriter buf, SourceDemo demo) { buf.WriteBoolean(NeedsDecoder); buf.WriteInt16(Length); buf.WriteBytes(Data); return(Task.CompletedTask); }
public override Task Write(SourceBufferWriter buf, SourceDemo demo) { if (Rest != null) { buf.Write(Rest); } return(Task.CompletedTask); }
public override Task Write(SourceBufferWriter buf, SourceDemo demo) { buf.WriteByte(FromClient); buf.WriteByte(Proximity); buf.WriteUInt16(Length); buf.WriteBytes(Data); return(Task.CompletedTask); }
public override Task Read(SourceBufferReader buf, SourceDemo demo) { FromClient = buf.ReadByte(); Proximity = buf.ReadByte(); Length = buf.ReadUInt16(); buf.SeekBits(Length); return(Task.CompletedTask); }
public override Task Write(SourceBufferWriter buf, SourceDemo demo) { buf.WriteBits(EntityIndex, 11); buf.WriteBits(ClassId, 9); buf.WriteBits(Data.Length, 11); buf.WriteBytes(Data); return(Task.CompletedTask); }
private EntitySnapshot(SourceDemo demoRef, Entity?[] entities, uint engineTick) { _demoRef = demoRef; Entities = entities; _nonNullEnts = new TreeSet <int>(); _nonNullEnts.AddSorted(entities.Select((e, i) => (e, i)).Where(t => t.e != null).Select(t => t.i)); EngineTick = engineTick; }
public override Task Read(SourceBufferReader buf, SourceDemo demo) { NeedsDecoder = buf.ReadBoolean(); Length = buf.ReadInt16(); buf.SeekBits(Length); //Data = buf.ReadBytes(Length); return(Task.CompletedTask); }
internal StringTablesManager(SourceDemo demoRef) { _demoRef = demoRef; _privateTables = new List <MutableStringTable>(); Tables = new Dictionary <string, MutableStringTable>(); TableReadable = new Dictionary <string, bool>(); CreationLookup = new List <SvcCreateStringTable>(); }
public static IEnumerable <int> GetPauseTicks(SourceDemo demo) { return (from packet in demo.FilterForPacket <Packet>() from messageTup in packet.MessageStream where messageTup.message?.GetType() == typeof(SvcSetPause) where ((SvcSetPause)messageTup.message).IsPaused select packet.Tick); }
public override Task Write(SourceBufferWriter buf, SourceDemo demo) { buf.WriteBits(ConVars.Count, 8); foreach (var convar in ConVars) { buf.WriteString(convar.Name.AsSpan()); buf.WriteString(convar.Value.AsSpan()); } return(Task.CompletedTask); }
public override Task Read(SourceBufferReader buf, SourceDemo demo) { TableId = buf.ReadBits(5); if (buf.ReadBoolean()) { NumChangedEntries = buf.ReadInt16(); } buf.SeekBits(buf.ReadBits(20)); return(Task.CompletedTask); }
public static IEnumerable <ConsoleCmd> GetCheatCommands(SourceDemo demo) { Regex r = new Regex(new[] { "host_timescale", "god", "sv_cheats +1", "buddha", "host_framerate", "sv_accelerate", "gravity", "sv_airaccelerate", "noclip", "impulse", "ent_", "sv_gravity", "upgrade_portalgun", "phys_timescale", "notarget", "give", "fire_energy_ball", "_spt_", "plugin_load", "!picker", "(?<!swit)ch_", "tas_", "r_", "sv_", "mat_" }.SequenceToString(")|(", "(", ")"), RegexOptions.IgnoreCase); return(demo.CmdRegexMatches(r).Select(t => t.cmd)); }
public override Task Read(SourceBufferReader buf, SourceDemo demo) { Relative = buf.ReadBoolean(); Angle = new QAngle ( buf.ReadInt16(), buf.ReadInt16(), buf.ReadInt16() ); return(Task.CompletedTask); }
public override Task Write(SourceBufferWriter buf, SourceDemo demo) { buf.WriteBoolean(ReliableSound); if (ReliableSound) { buf.WriteUBits(Sounds, 8); } buf.WriteBits(Data.Length, (ReliableSound) ? 8 : 16); buf.WriteBytes(Data); return(Task.CompletedTask); }
public static void ChangeDemoDir(SourceDemo demo, Stream s, string newDir) { void Write(byte[] buf) => s.Write(buf, 0, buf.Length); string old = demo.Header.GameDirectory; if (old == newDir) { // no difference Write(demo.Reader.Data); return; } int lenDiff = newDir.Length - old.Length; BitStreamReader bsr = demo.Reader; byte[] dirBytes = Encoding.ASCII.GetBytes(newDir); Write(bsr.ReadBytes(796)); Write(dirBytes); // header doesn't matter but I change it anyway Write(new byte[260 - newDir.Length]); bsr.SkipBytes(260); Write(bsr.ReadBytes(12)); byte[] tmp = BitConverter.GetBytes((uint)(bsr.ReadUInt() + lenDiff)); if (!BitConverter.IsLittleEndian) { tmp = tmp.Reverse().ToArray(); } Write(tmp); foreach (SignOn signOn in demo.FilterForPacket <SignOn>().Where(signOn => signOn.FilterForMessage <SvcServerInfo>().Any())) { // catch up to signOn packet int byteCount = (signOn.Reader.AbsoluteBitIndex - bsr.AbsoluteBitIndex) / 8; Write(bsr.ReadBytes(byteCount)); bsr.SkipBits(signOn.Reader.BitLength); BitStreamWriter bsw = new BitStreamWriter(); BitStreamReader signOnReader = signOn.Reader; bsw.WriteBits(signOnReader.ReadRemainingBits()); signOnReader = signOnReader.FromBeginning(); int bytesToMessageStreamSize = demo.DemoInfo.MaxSplitscreenPlayers * 76 + 8; signOnReader.SkipBytes(bytesToMessageStreamSize); // edit the message stream length - read uint, and edit at index before the reading of said uint bsw.EditIntAtIndex((int)(signOnReader.ReadUInt() + lenDiff), signOnReader.CurrentBitIndex - 32, 32); // actually change the game dir SvcServerInfo serverInfo = signOn.FilterForMessage <SvcServerInfo>().Single(); int editIndex = serverInfo.GameDirBitIndex - signOn.Reader.AbsoluteBitIndex; bsw.RemoveBitsAtIndex(editIndex, old.Length * 8); bsw.InsertBitsAtIndex(dirBytes, editIndex, newDir.Length * 8); Write(bsw.AsArray); } Write(bsr.ReadRemainingBits().bytes); }
public override Task Read(SourceBufferReader buf, SourceDemo demo) { Position = buf.ReadVectorBitCoord(); DecalTextureIndex = buf.ReadUBits(9); if (buf.ReadBoolean()) { EntityIndex = buf.ReadUBits(11); ModelIndex = buf.ReadUBits(11); } LowPriority = buf.ReadBoolean(); return(Task.CompletedTask); }
public override Task Read(SourceBufferReader buf, SourceDemo demo) { ReliableSound = buf.ReadBoolean(); Sounds = (ReliableSound) ? 1 : buf.ReadUBits(8); var length = (ReliableSound) ? buf.ReadUBits(8) : buf.ReadUBits(16); buf.SeekBits((int)length); return(Task.CompletedTask); }
public override Task Read(SourceBufferReader buf, SourceDemo demo) { MaxEntries = buf.ReadBits(11); IsDelta = buf.ReadBoolean(); DeltaFrom = (IsDelta) ? buf.ReadInt32() : 0; BaseLine = buf.ReadBoolean(); UpdatedEntries = buf.ReadBits(11); var length = buf.ReadBits(20); UpdateBaseline = buf.ReadBoolean(); buf.SeekBits(length); return(Task.CompletedTask); }
// writes a edited version of the given demo to the stream // this is all manually hacked together and it shall stay this way for now public static void RemoveCaptions(SourceDemo demo, Stream s) { void Write(byte[] buf) => s.Write(buf, 0, buf.Length); Packet[] closeCaptionPackets = demo.FilterForPacket <Packet>() .Where(packet => packet.FilterForMessage <SvcUserMessage>() .Any(frame => frame.MessageType == UserMessageType.CloseCaption)).ToArray(); if (closeCaptionPackets.Length == 0) { Write(demo.Reader.Data); return; } int changedPackets = 0; Write(demo.Header.Reader.ReadRemainingBits().bytes); foreach (PacketFrame frame in demo.Frames) { if (frame.Packet != closeCaptionPackets[changedPackets]) { Write(frame.Reader.ReadRemainingBits().bytes); // write frames that aren't changed } else { Packet p = (Packet)frame.Packet; BitStreamWriter bsw = new BitStreamWriter(frame.Reader.BitLength / 8); var last = p.MessageStream.Last().message; int len = last.Reader.AbsoluteStart - frame.Reader.AbsoluteStart + last.Reader.BitLength; bsw.WriteBits(frame.Reader.ReadBits(len), len); int msgSizeOffset = p.MessageStream.Reader.AbsoluteStart - frame.Reader.AbsoluteStart; int typeInfoLen = demo.DemoInfo.NetMsgTypeBits + demo.DemoInfo.UserMessageLengthBits + 8; bsw.RemoveBitsAtIndices(p.FilterForUserMessage <CloseCaption>() .Select(caption => (caption.Reader.AbsoluteStart - frame.Reader.AbsoluteStart - typeInfoLen, caption.Reader.BitLength + typeInfoLen))); bsw.WriteUntilByteBoundary(); bsw.EditIntAtIndex((bsw.BitLength - msgSizeOffset - 32) >> 3, msgSizeOffset, 32); Write(bsw.AsArray); // if we've edited all the packets, write the rest of the data in the demo if (++changedPackets == closeCaptionPackets.Length) { BitStreamReader tmp = demo.Reader; tmp.SkipBits(frame.Reader.AbsoluteStart + frame.Reader.BitLength); Write(tmp.ReadRemainingBits().bytes); break; } } } }