public void AddMessageHandlers(HalfLifeDemoParser parser) { this.parser = parser; parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_event, MessageEvent); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_sound, MessageSound); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_serverinfo, MessageServerInfo); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_updateuserinfo, MessageUpdateUserInfo); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_deltadescription, MessageDeltaDescription); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_clientdata, MessageClientData); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_pings, MessagePings); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_spawnbaseline, MessageSpawnBaseline); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_newusermsg, MessageNewUserMsg); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_packetentities, MessagePacketEntities); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_deltapacketentities, MessageDeltaPacketEntities); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_resourcelist, MessageResourceList); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_hltv, MessageHltv); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_director, MessageDirector); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_voiceinit, MessageVoiceInit); parser.AddMessageHandler((Byte)HalfLifeDemoParser.MessageId.svc_timescale, MessageTimeScale); parser.AddUserMessageHandler("ClCorpse", MessageClCorpse); parser.AddUserMessageHandler("ScreenFade", MessageScreenFade); parser.AddUserMessageHandler("SendAudio", MessageSendAudio); parser.AddUserMessageHandler("TextMsg", MessageTextMsg); Procedure <String> removeMessage = (s) => { Int32 startOffset = parser.BitBuffer.CurrentByte; Int32 messageLength = parser.FindUserMessageLength(s); Int32 endOffset = parser.BitBuffer.CurrentByte + messageLength; parser.Seek(startOffset - 1, SeekOrigin.Begin); parser.BitBuffer.RemoveBytes(endOffset - startOffset + 1); }; parser.AddUserMessageHandler("CDChallenge", () => { removeMessage("CDChallenge"); }); parser.AddUserMessageHandler("CDSalt", () => { removeMessage("CDSalt"); }); }