private void MessageNewUserMsg() { Int32 messageStartOffset = parser.BitBuffer.CurrentByte; // read message Byte id = parser.BitBuffer.ReadByte(); SByte length = parser.BitBuffer.ReadSByte(); String name = parser.BitBuffer.ReadString(16); parser.AddUserMessage(id, length, name); // FIXME: clean this up if (!demo.ConvertNetworkProtocol() && name != "CDChallenge" && name != "CDSalt") { return; } if (demo.Game == null || demo.Game.UserMessages == null) { return; } Byte newId; if (demo.Game.UserMessages.ContainsKey(name)) { newId = demo.Game.UserMessages[name]; } else { // cheating death // TODO: probably should have a list of "bad" user messages to remove... // TODO: should remove these messages even when not converting network protocols if (name == "CDChallenge" || name == "CDSalt") { // remove message Int32 messageFinishOffset = parser.BitBuffer.CurrentByte; parser.BitBuffer.SeekBytes(messageStartOffset - 1, SeekOrigin.Begin); parser.BitBuffer.RemoveBytes(messageFinishOffset - messageStartOffset + 1); // +1 for message id return; } // user message doesn't exist in CS 1.6. shouldn't happen, but meh... // TODO: use an id unused by compatibleUserMessageTable //newId = (Byte?)id; newId = firstFreeUserMessage; if (firstFreeUserMessage == 255) { throw new NoFreeUserMessageException(); } firstFreeUserMessage++; demo.Game.UserMessages.Add(name, newId); } BitWriter bitWriter = new BitWriter(); bitWriter.WriteByte((Byte)newId); bitWriter.WriteSByte(length); bitWriter.WriteString(name, 16); // insert new message ReWriteMessage(messageStartOffset, bitWriter.Data); }
private void MessageNewUserMsg() { Int32 messageStartOffset = parser.BitBuffer.CurrentByte; // read message Byte id = parser.BitBuffer.ReadByte(); SByte length = parser.BitBuffer.ReadSByte(); String name = parser.BitBuffer.ReadString(16); parser.AddUserMessage(id, length, name); // FIXME: clean this up if (!demo.ConvertNetworkProtocol() && name != "CDChallenge" && name != "CDSalt") { return; } if (demo.Game == null || demo.Game.UserMessages == null) { return; } Byte newId; if (demo.Game.UserMessages.ContainsKey(name)) { newId = demo.Game.UserMessages[name]; } else { // cheating death // TODO: probably should have a list of "bad" user messages to remove... // TODO: should remove these messages even when not converting network protocols if (name == "CDChallenge" || name == "CDSalt") { // remove message Int32 messageFinishOffset = parser.BitBuffer.CurrentByte; parser.BitBuffer.SeekBytes(messageStartOffset - 1, SeekOrigin.Begin); parser.BitBuffer.RemoveBytes(messageFinishOffset - messageStartOffset + 1); // +1 for message id return; } // user message doesn't exist in CS 1.6. shouldn't happen, but meh... // TODO: use an id unused by compatibleUserMessageTable //newId = (Byte?)id; newId = firstFreeUserMessage; if (firstFreeUserMessage == 255) { throw new NoFreeUserMessageException(); } firstFreeUserMessage++; demo.Game.UserMessages.Add(name, newId); } BitWriter bitWriter = new BitWriter(); bitWriter.WriteByte((Byte)newId); bitWriter.WriteSByte(length); bitWriter.WriteString(name, 16); // insert new message ReWriteMessage(messageStartOffset, bitWriter.Data); }