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);
        }
Exemplo n.º 2
0
        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);
        }