Ejemplo n.º 1
0
        public BulletinBoardSendPostSummaryPacket(BulletinBoard Board, BulletinBoardPost Post)
            : base(0x71)
        {
            // Set the maximum size
            EnsureCapacity(1024);

            // Fill the packet data
            UnderlyingStream.Write((byte)BulletinPacket.PacketSubType.SendPostSummary);
            int BoardSerial = Board.Serial;

            if ((Post.RootParent != null) && (Post.RootParent is BulletinBoard))
            {
                BoardSerial = (((Item)(Post.RootParent)).Serial);
            }
            UnderlyingStream.Write((int)BoardSerial); // Bulletin Board Serial
            UnderlyingStream.Write((int)Post.Serial); // Post Serial
            int ParentSerial = Board.Serial;

            if ((Post.Parent != null) && ((Post.Parent is BulletinBoard) || (Post.Parent is BulletinBoardPost)))
            {
                ParentSerial = (((Item)(Post.Parent)).Serial);
            }
            UnderlyingStream.Write((int)(ParentSerial == BoardSerial ? 0 : ParentSerial)); // Parent Serial (if it is a reply)
            UnderlyingStream.Write((byte)(Post.Author.Length + 1));
            UnderlyingStream.WriteAsciiNull(Post.Author);
            UnderlyingStream.Write((byte)(Post.Subject.Length + 1));
            UnderlyingStream.WriteAsciiNull(Post.Subject);
            UnderlyingStream.Write((byte)(Post.Date.Length + 1));
            UnderlyingStream.WriteAsciiNull(Post.Date);

            // Log the raw packet info
            BulletinPacket.LogPacket("BulletinBoardSendPostSummaryPacket", UnderlyingStream.ToArray());
        }
Ejemplo n.º 2
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
            case 0:
            {
                m_BoardName   = reader.ReadString();
                m_MasterBoard = (BulletinBoard)reader.ReadItem();
                break;
            }
            }
        }
Ejemplo n.º 3
0
        public BulletinBoardOpenPacket(BulletinBoard Board)
            : base(0x71)
        {
            // Don't need much room here (just enough to take into account a
            // non-default bulletin board name)
            EnsureCapacity(256);

            // Get the name of the bulletin board
            string BoardName = Board.Name == null ? "Bulletin Board" : Board.Name;

            // Fill the packet data
            UnderlyingStream.Write((byte)BulletinPacket.PacketSubType.DisplayBoard);
            UnderlyingStream.Write((int)Board.Serial);
            UnderlyingStream.WriteAsciiNull(BoardName);

            // Log the raw packet info
            BulletinPacket.LogPacket("BulletinBoardOpenPacket", UnderlyingStream.ToArray());
        }
Ejemplo n.º 4
0
        public static BulletinBoard FindClosestBB(Mobile m, out double distance)
        {
            BulletinBoard closest = null;

            distance = double.MaxValue;
            double tempdist = 0;

            foreach (Item item in World.Items.Values)
            {
                if (item is BulletinBoard && item.Map == m.Map) //
                {
                    tempdist = m.GetDistanceToSqrt(item.Location);
                    if (tempdist < distance)
                    {
                        closest  = item as BulletinBoard;
                        distance = tempdist;
                    }
                }
            }

            return(closest);
        }
Ejemplo n.º 5
0
        public PrisonerMessage(BaseCamp c, BaseEscortable escort)
            : base(c.Prisoner, null, "", null)
        {
            m_Camp = c;

            switch (Utility.Random(13))
            {
            case 0: Subject = "A kidnapping!"; break;

            case 1: Subject = "Help!"; break;

            case 2: Subject = "Help us, please!"; break;

            case 3: Subject = "Adventurers needed!"; break;

            case 4: Subject = "Seeking assistance"; break;

            case 5: Subject = "In need of aid"; break;

            case 6: Subject = "Canst thou help us?"; break;

            case 7: Subject = "Shall any save our friend?"; break;

            case 8: Subject = "A friend was kidnapped!"; break;

            case 9: Subject = "Heroes wanted!"; break;

            case 10: Subject = "Can any assist us?"; break;

            case 11: Subject = "Kidnapped!"; break;

            case 12: Subject = "Taken prisoner"; break;
            }

            double        distance;
            BulletinBoard board = FindClosestBB(c.Prisoner, out distance);

            List <String> myLines = new List <String>();

            string[] subtext1 = { "foul", "vile", "evil", "dark", "cruel", "vicious", "scoundrelly", "dastardly", "cowardly", "craven", "foul and monstrous", "monstrous", "hideous", "terrible", "cruel, evil", "truly vile", "vicious and cunning", "" };

            string camp;

            switch (c.Camp)
            {
            default:
            case CampType.Default: camp = ""; break;

            //case CampType.EvilMage: camp = "evil mages"; break;
            //case CampType.GoodMage: camp = "mages"; break;
            case CampType.Lizardman: camp = "lizardmen"; break;

            case CampType.Orc: camp = "orcs"; break;

            case CampType.Ratman: camp = "ratmen"; break;

            case CampType.Brigand: camp = "brigands"; break;
                //case CampType.Gypsy: camp = "gypsys"; break;
                //case CampType.Warlord: camp = "a warlord"; break;
            }

            myLines.Add(String.Format("Help us please! {0} hath", escort.Name));
            myLines.Add(String.Format("been kidnapped by "));
            myLines.Add(String.Format("{0} {1}!", subtext1[Utility.Random(subtext1.Length)], camp));
            myLines.Add(String.Format("We believe that {0} is held at", escort.Female ? "she" : "he"));

            int  xLong = 0, yLat = 0;
            int  xMins = 0, yMins = 0;
            bool xEast = false, ySouth = false;

            if (Sextant.Format(c.Location, c.Map, ref xLong, ref yLat, ref xMins, ref yMins, ref xEast, ref ySouth))
            {
                myLines.Add(String.Format("{0}o {1}'{2}, {3}o {4}'{5}", yLat, yMins, ySouth ? "S" : "N", xLong, xMins, xEast ? "E" : "W"));
            }

            /*myLines.Add(String.Format("{0}"));
            *  myLines.Add(String.Format("{0}."));
            *  myLines.Add(String.Format("{0}"));*/

            Lines = myLines.ToArray();

            if (board != null)
            {
                board.AddItem(this);
            }
            else
            {
                Delete();
            }
        }
Ejemplo n.º 6
0
        public EscortMessage(Mobile m)
            : base(m, null, "", null)
        {
            m_Mobile = m;

            BaseEscortable escort  = m as BaseEscortable;
            String         subtext = "";

            switch (m.GetType().Name)
            {
            case "EscortableHealer1": subtext = "Greetings! I am a poor healer who seeks a worthy escort. I can offer some small pay to any doughty warrior able to assist me. It is imperative that I reach my destination, or innocents may perish!"; break;

            case "Peasant": subtext = "'Tis a terrible thing to be a parent with an ungrateful child! Yet such is my situation. Because of the poor behavior and lack of character of this offspring of mine, I am obliged to foster them away from home. So now I am in need of an able escort of good character who might serve as role model, and who can ensure that my child reaches their destination safely. I shall let my child post their whereabouts so that thou mayst meet with them and arrange terms." + "---"; break;

            case "BrideGroom": subtext = "I am so happy! I am to be married, and my life will finally be complete! Alas, I am no warrior, and the wedding is not to take place here. I am in need of an escort, for the roads are treacherous and my future spouse would be sad indeed to hear that an ettin ate me before the wedding."; break;

            case "EscortableMage1": subtext = "Wizard seeks escort to a conference."; break;

            case "Merchant": subtext = "Reputable merchant seeks able warriors to serve as mercantile escort. Pay is scale; we prefer to hire experienced mercenaries."; break;

            case "Messenger": subtext = "I am one of Lord British's couriers, and I seek an able warrior to escort me safely, as the message I carry is of utmost importance to the realm!"; break;

            case "Noble": subtext = "'Tis a bit of a problem to admit it, but our normally trustworthy household guard seem to have broken his leg! If thou art able with a weapon, we are pleased to take applications for his replacement, to serve as guard and escort on our forthcoming journey."; break;

            default:
            case "SeekerOfAdventure": subtext = "I've always wished for adventure! Now I can have it at last! My weaponsmaster in school always said I was a dab hand with a blade, and I am afire with the love of adventure! Plus I have money. So if you are willing to hire on as my bodyguard and join me as we seek the deepest depths of the Abyss, and as we conquer dragons with the rapid flick of our sharp swords, disregarding all danger and ignorant of fear, seek me out! Cowards need not apply!"; break;
            }

            switch (Utility.Random(9))
            {
            case 0: Subject = "Escort needed"; break;

            case 1: Subject = "Guard needed"; break;

            case 2: Subject = "I need an escort!"; break;

            case 3: Subject = "Traveling companion?"; break;

            case 4: Subject = "Seeking companion"; break;

            case 5: Subject = "Now hiring"; break;

            case 6: Subject = "Hiring a guard"; break;

            case 7: Subject = "Hiring an escort"; break;

            case 8: Subject = "Seeking escort"; break;
            }

            double        distance;
            BulletinBoard board = FindClosestBB(m, out distance);

            String direction;

            if (m.GetDirectionTo(board) == Direction.North)
            {
                direction = "South";//North
            }
            else if (m.GetDirectionTo(board) == Direction.South)
            {
                direction = "North";//South
            }
            else if (m.GetDirectionTo(board) == Direction.East)
            {
                direction = "West";//East
            }
            else if (m.GetDirectionTo(board) == Direction.West)
            {
                direction = "East";//West
            }
            else if (m.GetDirectionTo(board) == Direction.Up)
            {
                direction = "Southeast";//Northwest
            }
            else if (m.GetDirectionTo(board) == Direction.Left)
            {
                direction = "Northeast";//Southwest
            }
            else if (m.GetDirectionTo(board) == Direction.Right)
            {
                direction = "Southwest";//Northeast
            }
            else if (m.GetDirectionTo(board) == Direction.Down)
            {
                direction = "Northwest";//Southeast
            }
            else
            {
                direction = "in some direction.";
            }

            String line = String.Format("{0} I can be found {1} {2} of here. When thou dost find me, look at me close to accept the task of taking me to {3}. {4}", subtext, (distance < 50 ? "a fair distance" : "a long way"), direction, escort.Destination, escort.Name);

            Lines = MakeLines(line);

            if (board != null)
            {
                board.AddItem(this);
            }
            else
            {
                Delete();
            }
            //board.AddItem(this);
        }
Ejemplo n.º 7
0
        public BulletinBoardSendPostSummaryPacket(BulletinBoard Board, BulletinBoardPost Post)
            : base(0x71)
        {
            // Set the maximum size
            EnsureCapacity(1024);

            // Fill the packet data
            UnderlyingStream.Write((byte)BulletinPacket.PacketSubType.SendPostSummary);
            int BoardSerial = Board.Serial;
            if ((Post.RootParent != null) && (Post.RootParent is BulletinBoard))
                BoardSerial = (((Item)(Post.RootParent)).Serial);
            UnderlyingStream.Write((int)BoardSerial); // Bulletin Board Serial
            UnderlyingStream.Write((int)Post.Serial); // Post Serial
            int ParentSerial = Board.Serial;
            if ((Post.Parent != null) && ((Post.Parent is BulletinBoard) || (Post.Parent is BulletinBoardPost)))
                ParentSerial = (((Item)(Post.Parent)).Serial);
            UnderlyingStream.Write((int)(ParentSerial == BoardSerial ? 0 : ParentSerial)); // Parent Serial (if it is a reply)
            UnderlyingStream.Write((byte)(Post.Author.Length + 1));
            UnderlyingStream.WriteAsciiNull(Post.Author);
            UnderlyingStream.Write((byte)(Post.Subject.Length + 1));
            UnderlyingStream.WriteAsciiNull(Post.Subject);
            UnderlyingStream.Write((byte)(Post.Date.Length + 1));
            UnderlyingStream.WriteAsciiNull(Post.Date);

            // Log the raw packet info
            BulletinPacket.LogPacket("BulletinBoardSendPostSummaryPacket", UnderlyingStream.ToArray());
        }
Ejemplo n.º 8
0
        public BulletinBoardOpenPacket(BulletinBoard Board)
            : base(0x71)
        {
            // Don't need much room here (just enough to take into account a
            // non-default bulletin board name)
            EnsureCapacity(256);

            // Get the name of the bulletin board
            string BoardName = Board.Name == null ? "Bulletin Board" : Board.Name;

            // Fill the packet data
            UnderlyingStream.Write((byte)BulletinPacket.PacketSubType.DisplayBoard);
            UnderlyingStream.Write((int)Board.Serial);
            UnderlyingStream.WriteAsciiNull(BoardName);

            // Log the raw packet info
            BulletinPacket.LogPacket("BulletinBoardOpenPacket", UnderlyingStream.ToArray());
        }
Ejemplo n.º 9
0
        public BulletinBoardFillItemsPacket6(BulletinBoard Board)
            : base(0x3c)
        {
            // Since the maximum size of a packet is 65535 and the overhead of the
            // segment is 19 characters, lets ensure the maximum capacity is available
            EnsureCapacity(65535);

            // There will be a check to allow only a maximum of 3072 posts to be shown
            // on a single bulletin board
            // 3072x19 bytes for an item segment = 58368 bytes (should be very safe)

            // Get all of the items associated with this bulletin board
            //ArrayList OriginalPosts = Board.Items;
            //List<Item> OriginalPosts = Board.Items;
            List<Item> OriginalPosts = new List<Item>();
            foreach (Item item in World.Items.Values)
            {
                // Add each global post to the global post list
                if (item is BulletinBoardPost)
                {
                    //all posts go on every messagebaord
                    //if (item.Parent == Board)
                    OriginalPosts.Add(item);
                }
            }

            // Do a deep copy of each post on the board (need to do this so that
            // the replies can be added to the outgoing message without modifiying
            // the original array list)
            List<Item> AllPosts = new List<Item>();
            //ArrayList AllPosts = new ArrayList(OriginalPosts.Count);
            foreach (BulletinBoardPost OriginalPost in OriginalPosts)
                AllPosts.Add(OriginalPost);

            // Add any global posts to the top of the new list.
            // Global posts can not be replied to since they don't belong to
            // a specific bulletin board.
            if (BulletinBoardGlobalPostList.m_GlobalPostList.Count > 0)
                AllPosts.InsertRange(0, BulletinBoardGlobalPostList.m_GlobalPostList);

            // Collect any replies to posts and insert them into the array list
            // as long as the array list contains less than 3072 items
            for (int x = 0; x < AllPosts.Count; x++)
            {
                // Get the current post object in the list
                BulletinBoardPost Post = AllPosts[x] as BulletinBoardPost;

                // Check if the object retrieved from the list was a post
                if (Post != null)
                {
                    // Check to see if this post item has any child posts
                    if (Post.Items.Count > 0)
                    {
                        // Collect all child posts (replies) and insert them
                        // into the original array list after the current posts
                        // position.
                        foreach (BulletinBoardPost Reply in Post.Items)
                            AllPosts.Add(Reply); // Add the reply posts to the end
                    }
                }
            }

            // Fill in the mandatory pieces of the packet
            UnderlyingStream.Write((short)AllPosts.Count);

            // Check each root item for any children
            foreach (BulletinBoardPost Post in AllPosts)
            {
                UnderlyingStream.Write((int)Post.Serial);
                UnderlyingStream.Write((byte)0x0E); // Model High
                UnderlyingStream.Write((byte)0xB0); // Model Low
                UnderlyingStream.Write((byte)0x00); // Unknown
                UnderlyingStream.Write((byte)0x00); // Items In Stack High
                UnderlyingStream.Write((byte)0x00); // Items In Stack Low
                UnderlyingStream.Write((byte)0x00); // X Position High
                UnderlyingStream.Write((byte)0x3A); // X Position Low
                UnderlyingStream.Write((byte)0x00); // Y Position High
                UnderlyingStream.Write((byte)0x3A); // Y Position Low
                UnderlyingStream.Write((int)Board.Serial);
                UnderlyingStream.Write((byte)0x00); // Colour High
                UnderlyingStream.Write((byte)0x00); // Colour Low
            }

            // Log the raw packet info
            BulletinPacket.LogPacket("BulletinBoardFillItemsPacket6", UnderlyingStream.ToArray());
        }
Ejemplo n.º 10
0
        public BulletinBoardFillItemsPacket(BulletinBoard Board)
            : base(0x3c)
        {
            // Since the maximum size of a packet is 65535 and the overhead of the
            // segment is 19 characters, lets ensure the maximum capacity is available
            EnsureCapacity(65535);

            // There will be a check to allow only a maximum of 3072 posts to be shown
            // on a single bulletin board
            // 3072x19 bytes for an item segment = 58368 bytes (should be very safe)

            // Get all of the items associated with this bulletin board
            //ArrayList OriginalPosts = Board.Items;
            //List<Item> OriginalPosts = Board.Items;
            List <Item> OriginalPosts = new List <Item>();

            foreach (Item item in World.Items.Values)
            {
                // Add each global post to the global post list
                if (item is BulletinBoardPost)
                {
                    //all posts go on every messagebaord
                    //if (item.Parent == Board)
                    OriginalPosts.Add(item);
                }
            }

            // Do a deep copy of each post on the board (need to do this so that
            // the replies can be added to the outgoing message without modifiying
            // the original array list)
            List <Item> AllPosts = new List <Item>();

            //ArrayList AllPosts = new ArrayList(OriginalPosts.Count);
            foreach (BulletinBoardPost OriginalPost in OriginalPosts)
            {
                AllPosts.Add(OriginalPost);
            }

            // Add any global posts to the top of the new list.
            // Global posts can not be replied to since they don't belong to
            // a specific bulletin board.
            if (BulletinBoardGlobalPostList.m_GlobalPostList.Count > 0)
            {
                AllPosts.InsertRange(0, BulletinBoardGlobalPostList.m_GlobalPostList);
            }

            // Collect any replies to posts and insert them into the array list
            // as long as the array list contains less than 3072 items
            for (int x = 0; x < AllPosts.Count; x++)
            {
                // Get the current post object in the list
                BulletinBoardPost Post = AllPosts[x] as BulletinBoardPost;

                // Check if the object retrieved from the list was a post
                if (Post != null)
                {
                    // Check to see if this post item has any child posts
                    if (Post.Items.Count > 0)
                    {
                        // Collect all child posts (replies) and insert them
                        // into the original array list after the current posts
                        // position.
                        foreach (BulletinBoardPost Reply in Post.Items)
                        {
                            AllPosts.Add(Reply); // Add the reply posts to the end
                        }
                    }
                }
            }

            // Fill in the mandatory pieces of the packet
            UnderlyingStream.Write((short)AllPosts.Count);

            // Check each root item for any children
            foreach (BulletinBoardPost Post in AllPosts)
            {
                UnderlyingStream.Write((int)Post.Serial);
                UnderlyingStream.Write((byte)0x0E); // Model High
                UnderlyingStream.Write((byte)0xB0); // Model Low
                UnderlyingStream.Write((byte)0x00); // Unknown
                UnderlyingStream.Write((byte)0x00); // Items In Stack High
                UnderlyingStream.Write((byte)0x00); // Items In Stack Low
                UnderlyingStream.Write((byte)0x00); // X Position High
                UnderlyingStream.Write((byte)0x3A); // X Position Low
                UnderlyingStream.Write((byte)0x00); // Y Position High
                UnderlyingStream.Write((byte)0x3A); // Y Position Low
                UnderlyingStream.Write((byte)0x00);
                UnderlyingStream.Write((int)Board.Serial);
                UnderlyingStream.Write((byte)0x00); // Colour High
                UnderlyingStream.Write((byte)0x00); // Colour Low
            }

            // Log the raw packet info
            BulletinPacket.LogPacket("BulletinBoardFillItemsPacket", UnderlyingStream.ToArray());
        }
Ejemplo n.º 11
0
        public static void BulletinBoardMessage(NetState state, PacketReader pvSrc)
        {
            try
            {
                // Log the incoming packet
                BulletinPacket.LogPacket("BulletinSendPostMessage", pvSrc.Buffer);

                // Get the player character who performed the action that sent the packet
                Mobile from = state.Mobile;

#if BULLETIN_DEBUG
                // Log to the console information about the selected posting
                Console.WriteLine("BulletinSendPostMessage: Post Requested from Mobile '{0}' {1}", from.Name, from.Serial);
#endif

                // Get the type of bulletin message (packet sub type)
                BulletinPacket.PacketSubType SubType = (BulletinPacket.PacketSubType)pvSrc.ReadByte();
#if BULLETIN_DEBUG
                Console.WriteLine("BulletinSendPostMessage: Sub-Type={0}", SubType.ToString());
#endif

                // Find the bulletin board this packet is referring to
                BulletinBoard Board = World.FindItem(pvSrc.ReadInt32()) as BulletinBoard;
                if (Board == null)
                {
                    return;
                }

#if BULLETIN_DEBUG
                // Log to the console information about the selected posting
                Console.WriteLine("BulletinSendPostMessage: Post Requested from Bulletin Board '{0}' {1} - Total Items = {2}", Board.Name, Board.Serial, Board.Items.Count);
#endif

                // Switch the message sub-type
                switch (SubType)
                {
                // Client wants to post a new message
                case BulletinPacket.PacketSubType.RequestPostCreation:
                {
                    from.SendAsciiMessage("You cannot post messages on this board.");
                    return;

                    // Make sure the client is still close enough to interact with the bulletin board
                    if (!from.InRange(Board.GetWorldLocation(), 2))
                    {
                        from.SendMessage("You are too far away from the board to post a message.");
                        return;
                    }

                    // Read in the next 4 bytes to see if this is a reply
                    BulletinBoardPost ReplyToPost = World.FindItem(pvSrc.ReadInt32()) as BulletinBoardPost;

                    // Check if the reply is to a global posting
                    if (ReplyToPost is BulletinBoardGlobalPost)
                    {
                        // Tell the player that they can not reply to this message
                        state.Mobile.SendMessage("You may not reply to this message.");
                        return;
                    }

                    // Get the length of the subject
                    short SubjectLength = pvSrc.ReadByte();

                    // Get the subject line including the terminatin NULL
                    string Subject = pvSrc.ReadString();

                    // Get the number of message lines
                    short MessageLines = pvSrc.ReadByte();

                    // Retrieve all of the lines in the message
                    string[] Message = new string[MessageLines];
                    for (int x = 0; x < Message.Length; x++)
                    {
                        short CurrentLineLength = pvSrc.ReadByte();
                        Message[x] = pvSrc.ReadString();
                    }

                    // Now that all of the data has been collected, create a BulletinBoardPost item
                    BulletinBoardPost NewPost = new BulletinBoardPost(Subject, from.Name, Message);

                    // Check if this is a reply to a previous post
                    if (ReplyToPost != null)
                    {
                        // Check if the post being replied to is a base post
                        // on the board.  Only base posts can be replied to.
                        // This code ensures that replies can only be done to
                        // base posts, and not to other replies
                        if (ReplyToPost.Parent == Board)
                        {
                            ReplyToPost.AddItem(NewPost);
                        }
                        else
                        {
                            ((Item)(ReplyToPost.Parent)).AddItem(NewPost);
                        }

                        // Send update to the client that a reply was posted
                        // This shows the new reply immediately on the board
                        // (Strange, but the client automatically does this part
                        //  if the posting is not a reply)
                        from.Send(new AddPostReplyItemPacket(NewPost));
                    }
                    else
                    {
                        // This is a new post, so add it to the boards item list
                        Board.AddItem(NewPost);
                    }

#if BULLETIN_DEBUG
                    // Log to the console information about the selected posting
                    Console.WriteLine("BulletinSendPostMessage: Added New Post {0} to Bulletin Board '{1}' {2} - Total Items = {3}", NewPost.Serial, Board.Name, Board.Serial, Board.Items.Count);
#endif
                    break;
                }

                // Client is requesting a summary of a posted message
                case BulletinPacket.PacketSubType.RequestPostSummary:
                {
                    // Try to find the post that this message is referring to
                    int PostSerial         = pvSrc.ReadInt32();
                    BulletinBoardPost Post = World.FindItem(PostSerial) as BulletinBoardPost;
                    if (Post == null)
                    {
                        Console.WriteLine("Unknown Bulletin Board Post Item - Serial: {0}", PostSerial);
                        return;
                    }

                    from.Send(new BulletinBoardSendPostSummaryPacket(Board, Post));
                    break;
                }

                // Client is requesting the full details of the post (the entire message)
                case BulletinPacket.PacketSubType.RequestPostMessage:
                {
                    // Make sure the client is still close enough to interact with the bulletin board
                    if (!from.InRange(Board.GetWorldLocation(), 2))
                    {
                        from.SendMessage("You are too far away from the board to read the message.");
                        return;
                    }

                    // Try to find the post that this message is referring to
                    int PostSerial         = pvSrc.ReadInt32();
                    BulletinBoardPost Post = World.FindItem(PostSerial) as BulletinBoardPost;
                    if (Post == null)
                    {
                        Console.WriteLine("Unknown Bulletin Board Post Item - Serial: {0}", PostSerial);
                        return;
                    }

                    from.Send(new BulletinBoardPostPacket(Post));
                    break;
                }

                // Client is requesting to remove a post
                case BulletinPacket.PacketSubType.RequestPostRemove:
                {
                    // Don't handle this situation at the moment
                    // The T2A client and the UOTD client behave differently
                    // so therefore, it's not handled at all for simplicity

                    /*
                     * // Try to find the post that this message is referring to
                     * int PostSerial = pvSrc.ReadInt32();
                     * BulletinBoardPost Post = World.FindItem( PostSerial ) as BulletinBoardPost;
                     * if ( Post == null )
                     * {
                     *  Console.WriteLine( "Unknown Bulletin Board Post Item - Serial: {0}", PostSerial );
                     *  return;
                     * }
                     *
                     * // Delete the post item
                     * Post.Delete();
                     */
                    break;
                }

                default:
                {
                    Console.WriteLine("BulletinBoardPost: Unknown Bulletin Board Message SubType: ", SubType);
                    break;
                }
                }
            }
            catch (System.Exception se)
            {
                Console.WriteLine(se.ToString());
            }

            return;
        }