Beispiel #1
0
 public override Task Write(SourceBufferWriter buf, SourceDemo demo)
 {
     buf.Write(TransferId);
     buf.Write(FileName);
     buf.Write(FileRequested);
     return(Task.CompletedTask);
 }
Beispiel #2
0
 public override Task Read(SourceBufferReader buf, SourceDemo demo)
 {
     TransferId    = buf.ReadUInt32();
     FileName      = buf.ReadString();
     FileRequested = buf.ReadBoolean();
     return(Task.CompletedTask);
 }
Beispiel #3
0
 public MutableStringTableEntry(SourceDemo demoRef, MutableStringTable tableRef, StringTableEntryData?eData, string entryName)
 {
     _demoRef  = demoRef;
     _tableRef = tableRef;
     EntryData = eData;
     EntryName = entryName;
 }
Beispiel #4
0
 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);
 }
Beispiel #6
0
 public override Task Write(SourceBufferWriter buf, SourceDemo demo)
 {
     buf.WriteInt16(MenuType);
     buf.WriteInt32(Data.Length);
     buf.WriteBytes(Data);
     return(Task.CompletedTask);
 }
Beispiel #7
0
 public override Task Write(SourceBufferWriter buf, SourceDemo demo)
 {
     buf.WriteInt32(Tick);
     buf.WriteInt16(HostFrameTime);
     buf.WriteInt16(HostFrameTimeStdDeviation);
     return(Task.CompletedTask);
 }
Beispiel #8
0
 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);
 }
Beispiel #9
0
 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);
 }
Beispiel #10
0
 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);
 }
Beispiel #12
0
 public override Task Write(SourceBufferWriter buf, SourceDemo demo)
 {
     buf.WriteBoolean(NeedsDecoder);
     buf.WriteInt16(Length);
     buf.WriteBytes(Data);
     return(Task.CompletedTask);
 }
Beispiel #13
0
 public override Task Write(SourceBufferWriter buf, SourceDemo demo)
 {
     if (Rest != null)
     {
         buf.Write(Rest);
     }
     return(Task.CompletedTask);
 }
Beispiel #14
0
 public override Task Write(SourceBufferWriter buf, SourceDemo demo)
 {
     buf.WriteByte(FromClient);
     buf.WriteByte(Proximity);
     buf.WriteUInt16(Length);
     buf.WriteBytes(Data);
     return(Task.CompletedTask);
 }
Beispiel #15
0
 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;
 }
Beispiel #18
0
 public override Task Read(SourceBufferReader buf, SourceDemo demo)
 {
     NeedsDecoder = buf.ReadBoolean();
     Length       = buf.ReadInt16();
     buf.SeekBits(Length);
     //Data = buf.ReadBytes(Length);
     return(Task.CompletedTask);
 }
Beispiel #19
0
 internal StringTablesManager(SourceDemo demoRef)
 {
     _demoRef       = demoRef;
     _privateTables = new List <MutableStringTable>();
     Tables         = new Dictionary <string, MutableStringTable>();
     TableReadable  = new Dictionary <string, bool>();
     CreationLookup = new List <SvcCreateStringTable>();
 }
Beispiel #20
0
 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);
 }
Beispiel #26
0
        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);
        }
Beispiel #29
0
        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;
                    }
                }
            }
        }