public BBMessageContent(BaseBulletinBoard board, BulletinMessage msg) : base(0x71)
        {
            string poster  = SafeString(msg.PostedName);
            string subject = SafeString(msg.Subject);
            string time    = SafeString(msg.GetTimeAsString());

            EnsureCapacity(22 + poster.Length + subject.Length + time.Length);

            Stream.Write((byte)0x02);        // PacketID
            Stream.Write((int)board.Serial); // Bulletin board serial
            Stream.Write((int)msg.Serial);   // Message serial

            WriteString(poster);
            WriteString(subject);
            WriteString(time);

            Stream.Write((short)msg.PostedBody);
            Stream.Write((short)msg.PostedHue);

            int len = msg.PostedEquip.Length;

            if (len > 255)
            {
                len = 255;
            }

            Stream.Write((byte)len);

            for (int i = 0; i < len; ++i)
            {
                BulletinEquip eq = msg.PostedEquip[i];

                Stream.Write((short)eq.itemID);
                Stream.Write((short)eq.hue);
            }

            len = msg.Lines.Length;

            if (len > 255)
            {
                len = 255;
            }

            Stream.Write((byte)len);

            for (int i = 0; i < len; ++i)
            {
                WriteString(msg.Lines[i], true);
            }
        }
        public static void BBRemoveMessage(Mobile from, BaseBulletinBoard board, PacketReader pvSrc)
        {
            BulletinMessage msg = World.FindItem(pvSrc.ReadInt32()) as BulletinMessage;

            if (msg == null || msg.Parent != board)
            {
                return;
            }

            if (from.AccessLevel < AccessLevel.GameMaster && msg.Poster != from)
            {
                return;
            }

            msg.Delete();
        }
        public static void BBClientRequest(NetState state, PacketReader pvSrc)
        {
            Mobile from = state.Mobile;

            int packetID            = pvSrc.ReadByte();
            BaseBulletinBoard board = World.FindItem(pvSrc.ReadInt32()) as BaseBulletinBoard;

            if (board == null || !board.CheckRange(from))
            {
                return;
            }

            switch (packetID)
            {
            case 3: BBRequestContent(from, board, pvSrc); break;

            case 4: BBRequestHeader(from, board, pvSrc); break;

            case 5: BBPostMessage(from, board, pvSrc); break;

            case 6: BBRemoveMessage(from, board, pvSrc); break;
            }
        }