Example #1
0
        public int Compare(object a, object b)
        {
            ThreadEntry tea = ( ThreadEntry )a;
            ThreadEntry teb = ( ThreadEntry )b;

            if (tea.EntryType == ThreadType.Sticky && teb.EntryType != ThreadType.Sticky)
            {
                return(-9000);
            }
            else if (teb.EntryType == ThreadType.Sticky && tea.EntryType != ThreadType.Sticky)
            {
                return(9000);
            }
            else if (tea.EntryType == ThreadType.Sticky && teb.EntryType == ThreadType.Sticky)
            {
                return(teb.LastPostTime.CompareTo(tea.LastPostTime));
            }
            else if (tea.EntryType == ThreadType.Announcement && teb.EntryType != ThreadType.Announcement)
            {
                return(-5000);
            }
            else if (teb.EntryType == ThreadType.Announcement && tea.EntryType != ThreadType.Announcement)
            {
                return(5000);
            }
            else if (tea.EntryType == ThreadType.Announcement && teb.EntryType == ThreadType.Announcement)
            {
                return(teb.LastPostTime.CompareTo(tea.LastPostTime));
            }
            else
            {
                return(teb.LastPostTime.CompareTo(tea.LastPostTime));
            }
        }
Example #2
0
        public PostGump(Mobile pm, bool newThread, ThreadEntry te, string previousText) : base(0, 0)
        {
            if (!newThread)
            {
                m_ThreadEntry = te;
            }

            m_Lines     = new ArrayList();
            m_Player    = pm;
            m_NewThread = newThread;
            Closable    = true;
            Disposable  = true;
            Dragable    = true;
            Resizable   = false;
            AddPage(0);
            AddBackground(10, 15, 477, 467, 9200);
            AddLabel(22, 38, 0, @"Subject:");
            AddImageTiled(21, 58, 447, 21, 2624);
//            AddAlphaRegion( 21, 58, 446, 20 );
            AddImageTiled(21, 58, 446, 20, 2624);
            AddImageTiled(22, 102, 446, 302, 2624);
//            AddAlphaRegion( 22, 101, 446, 302 );
            AddImageTiled(22, 101, 446, 302, 2624);
            AddButton(22, 409, 4029, 4029, ( int )Buttons.Reply, GumpButtonType.Reply, 0);
            AddLabel(55, 409, 0, @"Post");
            AddButton(22, 434, 4029, 4029, ( int )Buttons.LongMessage, GumpButtonType.Reply, 0);
            AddLabel(55, 434, 0, @"Long Post");
            AddLabel(22, 78, 0, @"Content:");
//            AddLabel( 306, 78, 0, @"Date:" );
            if (newThread)
            {
                AddLabel(202, 20, 0, @"New Post");
            }
            else
            {
                AddLabel(202, 20, 0, @"Post Reply");
            }

            if (newThread)
            {
                AddTextEntry(22, 59, 442, 20, 55, ( int )Buttons.TextEntry2, "");
            }
            else
            {
                AddHtml(22, 59, 442, 20, Color(m_ThreadEntry.Subject, LabelColor), false, false);
            }

            AddTextEntry(22, 102, 446, 304, 55, ( int )Buttons.TextEntry3, previousText);

            if (m_Player.AccessLevel >= AccessLevel.Counselor)
            {
                AddCheck(449, 411, 210, 211, false, ( int )Buttons.Checkbox1);
                AddLabel(378, 412, 0, @"Staff Only");
                AddCheck(350, 411, 210, 211, false, ( int )Buttons.Checkbox2);
                AddLabel(305, 412, 0, @"Sticky");
                AddCheck(279, 411, 210, 211, false, ( int )Buttons.Checkbox3);
                AddLabel(186, 412, 0, @"Announcement");
            }
        }
Example #3
0
        public ThreadGump(Mobile pm, ThreadEntry te) : base(0, 0)
        {
            m_ThreadEntry = te;
            m_Player      = pm;
            if (m_ThreadEntry != null && !m_ThreadEntry.Deleted)
            {
                m_ThreadEntry.AddViewer(pm);
            }

            Closable   = true;
            Disposable = true;
            Dragable   = true;
            Resizable  = false;
            AddPage(0);
            AddBackground(9, 15, 477, 412, 9200);
            AddButton(450, 20, 1151, 1151, ( int )Buttons.Close, GumpButtonType.Reply, 0);
            AddLabel(22, 24, 0, @"Subject:");

            if (m_ThreadEntry != null && !m_ThreadEntry.Deleted)
            {
                AddLabel(22, 64, 0, @"Author: " + ((m_ThreadEntry.ThreadCreator == null) ? "unknown author" : m_ThreadEntry.ThreadCreator.Name));
            }

            if (m_ThreadEntry != null && !m_ThreadEntry.Deleted)
            {
                AddLabel(306, 64, 0, @"Date: " + m_ThreadEntry.CreationTime.ToShortDateString() + m_ThreadEntry.CreationTime.ToShortTimeString());
            }

            AddImageTiled(21, 44, 447, 21, 2624);
//            AddAlphaRegion( 21, 44, 446, 20 );
            AddImageTiled(21, 44, 446, 20, 2624);

            if (m_ThreadEntry != null && !m_ThreadEntry.Deleted)
            {
                AddHtml(23, 46, 446, 20, Color(m_ThreadEntry.Subject, LabelColor), false, false);
            }

            AddImageTiled(22, 88, 446, 302, 2624);
//            AddAlphaRegion( 22, 87, 446, 302 );
            AddImageTiled(22, 87, 446, 302, 2624);

            if (m_ThreadEntry != null && !m_ThreadEntry.Deleted)
            {
                AddHtml(24, 89, 446, 302, Color(m_ThreadEntry.GetThreadInfo(), LabelColor), false, true);
            }

            AddButton(22, 395, 4029, 4029, ( int )Buttons.Reply, GumpButtonType.Reply, 0);
            AddLabel(54, 395, 0, @"Reply");
            if (m_Player.AccessLevel >= ForumCore.ThreadDeleteAccessLevel || ForumCore.Moderators.Contains(m_Player))
            {
                AddLabel(149, 395, 0, @"Delete");
                AddButton(117, 395, 4020, 4020, ( int )Buttons.Delete, GumpButtonType.Reply, 0);
            }
            if (m_Player.AccessLevel >= ForumCore.ThreadLockAccesLevel || ForumCore.Moderators.Contains(m_Player))
            {
                AddButton(219, 395, 4017, 4017, ( int )Buttons.Lock, GumpButtonType.Reply, 0);
                AddLabel(253, 396, 0, m_ThreadEntry.Locked ? "Unlock" : "Lock");
            }
        }
Example #4
0
        private static bool CheckAutoCleanupDate(ThreadEntry te)
        {
            DateTime today = DateTime.Now;

            if (today.Date.Day - te.LastPostTime.Date.Day > AutoCleanupDays)
            {
                return(true);
            }

            return(false);
        }
        public ThreadGump( Mobile pm, ThreadEntry te ) : base( 0, 0 )
		{
            m_ThreadEntry = te;
            m_Player = pm;
            if( m_ThreadEntry != null && !m_ThreadEntry.Deleted )
                m_ThreadEntry.AddViewer( pm );

            Closable = true;
            Disposable = true;
            Dragable = true;
            Resizable = false;
            AddPage( 0 );
            AddBackground( 9, 15, 477, 412, 9200 );
            AddButton( 450, 20, 1151, 1151, ( int )Buttons.Close, GumpButtonType.Reply, 0 );
            AddLabel( 22, 24, 0, @"Subject:" );

            if( m_ThreadEntry != null && !m_ThreadEntry.Deleted )
                AddLabel( 22, 64, 0, @"Author: " + (( m_ThreadEntry.ThreadCreator == null ) ? "unknown author" : m_ThreadEntry.ThreadCreator.Name));

            if( m_ThreadEntry != null && !m_ThreadEntry.Deleted )
                AddLabel( 306, 64, 0, @"Date: " + m_ThreadEntry.CreationTime.ToShortDateString() + m_ThreadEntry.CreationTime.ToShortTimeString() );

            AddImageTiled( 21, 44, 447, 21, 2624 );
//            AddAlphaRegion( 21, 44, 446, 20 );
			AddImageTiled(21, 44, 446, 20, 2624);

            if( m_ThreadEntry != null && !m_ThreadEntry.Deleted )
                AddHtml( 23, 46, 446, 20, Color( m_ThreadEntry.Subject, LabelColor ), false, false );

            AddImageTiled( 22, 88, 446, 302, 2624 );
//            AddAlphaRegion( 22, 87, 446, 302 );
			AddImageTiled(22, 87, 446, 302, 2624);

            if( m_ThreadEntry != null && !m_ThreadEntry.Deleted )
                AddHtml( 24, 89, 446, 302, Color( m_ThreadEntry.GetThreadInfo(), LabelColor ), false, true );

            AddButton( 22, 395, 4029, 4029, ( int )Buttons.Reply, GumpButtonType.Reply, 0 );
            AddLabel( 54, 395, 0, @"Reply" );
            if( m_Player.AccessLevel >= ForumCore.ThreadDeleteAccessLevel || ForumCore.Moderators.Contains( m_Player ) )
            {
                AddLabel( 149, 395, 0, @"Delete" );
                AddButton( 117, 395, 4020, 4020, ( int )Buttons.Delete, GumpButtonType.Reply, 0 );
            }
            if( m_Player.AccessLevel >= ForumCore.ThreadLockAccesLevel || ForumCore.Moderators.Contains( m_Player ) )
            {
                AddButton( 219, 395, 4017, 4017, ( int )Buttons.Lock, GumpButtonType.Reply, 0 );
                AddLabel( 253, 396, 0, m_ThreadEntry.Locked ? "Unlock" : "Lock" );
            }
		}
Example #6
0
        public PostGump(Mobile pm, bool newThread, ThreadEntry te, string previousText)
            : base(0, 0)
        {
            if (!newThread)
                m_ThreadEntry = te;

            m_Lines = new ArrayList();
            m_Player = pm;
            m_NewThread = newThread;
            Closable = true;
            Disposable = true;
            Dragable = true;
            Resizable = false;
            AddPage(0);
            AddBackground(10, 15, 477, 467, 9200);
            AddLabel(22, 38, 0, @"Subject:");
            AddImageTiled(21, 58, 447, 21, 2624);
            AddAlphaRegion(21, 58, 446, 20);
            AddImageTiled(22, 102, 446, 302, 2624);
            AddAlphaRegion(22, 101, 446, 302);
            AddButton(22, 409, 4029, 4029, (int)Buttons.Reply, GumpButtonType.Reply, 0);
            AddLabel(55, 409, 0, @"Post Now");
            AddButton(22, 434, 4029, 4029, (int)Buttons.LongMessage, GumpButtonType.Reply, 0);
            AddLabel(55, 434, 0, @"Copy message from a book. Use it for 240+ characters messages.");
            AddLabel(55, 459, 0, @"");
            AddLabel(22, 78, 0, @"Message:");
            AddLabel(306, 78, 0, @"Date:");
            if (newThread)
                AddLabel(202, 20, 0, @"New Topic");
            else
                AddLabel(202, 20, 0, @"Reply Topic");

            if (newThread)
                AddTextEntry(22, 59, 442, 20, 38, (int)Buttons.TextEntry2, "");
            else
                AddHtml(22, 59, 442, 20, Color(m_ThreadEntry.Subject, LabelColor), false, false);

            AddTextEntry(22, 102, 446, 304, 38, (int)Buttons.TextEntry3, previousText);

            if (m_Player.AccessLevel >= AccessLevel.Counselor)
            {
                AddCheck(449, 411, 210, 211, false, (int)Buttons.Checkbox1);
                AddLabel(378, 412, 0, @"For Staff");
                AddCheck(350, 411, 210, 211, false, (int)Buttons.Checkbox2);
                AddLabel(305, 412, 0, @" Fixed");
                AddCheck(279, 411, 210, 211, false, (int)Buttons.Checkbox3);
                AddLabel(186, 412, 0, @" Announcement");
            }
        }
Example #7
0
        private static void Load()
        {
            try
            {
                string SavePath = Path.Combine(m_SavePath, "forumdata.sig");

                using (FileStream fs = new FileStream(SavePath, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    BinaryReader     br     = new BinaryReader(fs);
                    BinaryFileReader reader = new BinaryFileReader(br);

                    int version = reader.ReadInt();
                    switch (version)
                    {
                    case 0:
                    {
                        m_PlayerStatistics = ReadPlayerStatistics(reader);
                        int count = reader.ReadInt();
                        for (int i = 0; i < count; i++)
                        {
                            ThreadEntry te = new ThreadEntry();
                            te.Deserialize(reader);
                            m_Threads.Add(te);
                        }
                        m_Moderators = reader.ReadMobileList();
                        m_ThreadDeleteAccessLevel = (AccessLevel)reader.ReadInt();
                        m_ThreadLockAccesLevel    = ( AccessLevel )reader.ReadInt();
                        m_AutoCleanup             = reader.ReadBool();
                        m_AutoCleanupDays         = reader.ReadInt();
                        m_MinPostCharactersCount  = reader.ReadInt();
                        m_MaxPostCharactersCount  = reader.ReadInt();
                        break;
                    }
                    }
                }

                m_Threads.Sort(new DateSort());
                Console.WriteLine("done");
                Console.WriteLine("---------");
            }
            catch (Exception err)
            {
                Console.WriteLine("An error occured while loading the forums...{0}", err.ToString());
                Console.WriteLine("---------");
            }
        }
Example #8
0
        private static int RemovedDeletedQueue(out int queue)
        {
            ArrayList toBeDeleted = new ArrayList();

            for (int i = 0; i < m_Threads.Count; i++)
            {
                ThreadEntry te = ( ThreadEntry )m_Threads[i];

                if (te.Deleted)
                {
                    toBeDeleted.Add(te);
                }
                else if (AutoCleanup)
                {
                    if (CheckAutoCleanupDate(te))
                    {
                        toBeDeleted.Add(te);
                    }
                }
            }

            queue = toBeDeleted.Count;

            if (toBeDeleted.Count > 0)
            {
                for (int i = 0; i < toBeDeleted.Count; i++)
                {
                    ThreadEntry te = ( ThreadEntry )toBeDeleted[i];
                    m_Threads.Remove(te);
                }

                return(toBeDeleted.Count);
            }
            else
            {
                return(0);
            }
        }
Example #9
0
        public void Post()
        {
            if (m_NewThread)
            {
                bool staff        = false;
                bool sticky       = false;
                bool announcement = false;

                for (int i = 0; i < m_Switches.Length; i++)
                {
                    if (m_Switches[i] == 4)
                    {
                        staff = true;
                    }
                    if (m_Switches[i] == 5)
                    {
                        sticky = true;
                    }
                    if (m_Switches[i] == 6)
                    {
                        announcement = true;
                    }
                }

                if (sticky && announcement)
                {
                    m_Player.SendMessage("Since you checked both sticky and announcement, this post was changed to sticky by default!");
                    announcement = false;
                }

                ThreadType type;

                if (sticky)
                {
                    type = ThreadType.Sticky;
                }
                else if (announcement)
                {
                    type = ThreadType.Announcement;
                }
                else
                {
                    type = ThreadType.RegularThread;
                }

                string post = GetText();

                PostEntry   pe = new PostEntry(m_Player, m_Player.Serial, post, DateTime.Now);
                ThreadEntry te = new ThreadEntry(m_Topic, pe, m_Player, DateTime.Now, ForumCore.ThreadNumber, type);

                if (staff)
                {
                    te.StaffMessage = true;
                }

                te.LastPostTime = DateTime.Now;

                ForumCore.Threads.Add(te);
                ForumCore.UpdatePlayerStatistics(m_Player);

                ForumCore.Threads.Sort(new DateSort());
                m_Player.CloseGump(typeof(ForumGump));
                m_Player.SendGump(new ForumGump(m_Player, 0));
            }
            else
            {
                string    post = GetText();
                PostEntry pe   = new PostEntry(m_Player, m_Player.Serial, post, DateTime.Now);

                m_ThreadEntry.AddPost(pe);
                m_ThreadEntry.LastPostTime = DateTime.Now;
                ForumCore.UpdatePlayerStatistics(m_Player);

                ForumCore.Threads.Sort(new DateSort());
                m_Player.CloseGump(typeof(ForumGump));
                m_Player.SendGump(new ForumGump(m_Player, 0));
            }
        }
Example #10
0
        public override void OnResponse(Server.Network.NetState sender, RelayInfo info)
        {
            Mobile m_Player = ( Mobile )sender.Mobile;

            if (m_Player == null)
            {
                return;
            }

            switch (info.ButtonID)
            {
            case 0:
            {
                ForumCore.Threads.Sort(new DateSort());
                m_Player.CloseGump(typeof(ForumGump));
                m_Player.SendGump(new ForumGump(m_Player, 0));
                break;
            }

            case 1:
            {
                if (m_NewThread)
                {
                    TextRelay topic = info.GetTextEntry(2);
                    TextRelay post  = info.GetTextEntry(3);

                    int[] switches = info.Switches;

                    bool staff        = false;
                    bool sticky       = false;
                    bool announcement = false;

                    for (int i = 0; i < switches.Length; i++)
                    {
                        if (switches[i] == 4)
                        {
                            staff = true;
                        }
                        if (switches[i] == 5)
                        {
                            sticky = true;
                        }
                        if (switches[i] == 6)
                        {
                            announcement = true;
                        }
                    }

                    if (sticky && announcement)
                    {
                        m_Player.SendMessage("Since you checked both sticky and announcement, this post was changed to sticky by default!");
                        announcement = false;
                    }

                    if (topic.Text.Length < ForumCore.MinPostCharactersCount)
                    {
                        m_Player.SendMessage("The subject of the post must be more then {0} characters in length.", ForumCore.MinPostCharactersCount.ToString());
                        m_Player.SendGump(this);
                        break;
                    }

                    if (post.Text.Length < ForumCore.MinPostCharactersCount)
                    {
                        m_Player.SendMessage("The content of the post must be more then {0} characters in length.", ForumCore.MinPostCharactersCount.ToString());
                        m_Player.SendGump(this);
                        break;
                    }

                    if (post.Text.Length > ForumCore.MaxPostCharactersCount)
                    {
                        m_Player.SendMessage("The content of the post must be less then {0} characters in length.", ForumCore.MaxPostCharactersCount.ToString());
                        m_Player.SendGump(new PostGump(m_Player, post.Text));
                        break;
                    }

                    ThreadType type;

                    if (sticky)
                    {
                        type = ThreadType.Sticky;
                    }
                    else if (announcement)
                    {
                        type = ThreadType.Announcement;
                    }
                    else
                    {
                        type = ThreadType.RegularThread;
                    }

                    PostEntry   pe = new PostEntry(m_Player, m_Player.Serial, post.Text, DateTime.Now);
                    ThreadEntry te = new ThreadEntry(topic.Text, pe, m_Player, DateTime.Now, ForumCore.ThreadNumber, type);

                    if (staff)
                    {
                        te.StaffMessage = true;
                    }

                    te.LastPostTime = DateTime.Now;

                    ForumCore.Threads.Add(te);
                    ForumCore.UpdatePlayerStatistics(m_Player);

                    ForumCore.Threads.Sort(new DateSort());
                    m_Player.CloseGump(typeof(ForumGump));
                    m_Player.SendGump(new ForumGump(m_Player, 0));
                }
                else
                {
                    TextRelay post = info.GetTextEntry(3);
                    PostEntry pe   = new PostEntry(m_Player, m_Player.Serial, post.Text, DateTime.Now);

                    m_ThreadEntry.AddPost(pe);
                    m_ThreadEntry.LastPostTime = DateTime.Now;
                    ForumCore.UpdatePlayerStatistics(m_Player);

                    ForumCore.Threads.Sort(new DateSort());
                    m_Player.CloseGump(typeof(ForumGump));
                    m_Player.SendGump(new ForumGump(m_Player, 0));
                }

                break;
            }

            case 7:
            {
                if (m_NewThread)
                {
                    TextRelay topic = info.GetTextEntry(2);

                    if (topic.Text.Length < ForumCore.MinPostCharactersCount)
                    {
                        m_Player.SendMessage("The subject of the post must be more then {0} characters in length.", ForumCore.MinPostCharactersCount.ToString());
                        m_Player.SendGump(this);
                        break;
                    }
                    m_Topic    = topic.Text;
                    m_Switches = info.Switches;
                }

                m_Player.Prompt = new LongPostLinesPrompt(this, m_Player);
                break;
            }
            }
        }
Example #11
0
        public override void OnResponse( Server.Network.NetState sender, RelayInfo info )
        {
            Mobile m_Player = ( Mobile )sender.Mobile;

            if( m_Player == null )
                return;

            switch( info.ButtonID )
            {
                case 0:
                    {
                        ForumCore.Threads.Sort( new DateSort() );
                        m_Player.CloseGump( typeof( ForumGump ) );
                        m_Player.SendGump( new ForumGump( m_Player, 0 ) );
                        break;
                    }
                case 1:
                    {
                        if( m_NewThread )
                        {
                            TextRelay topic = info.GetTextEntry( 2 );
                            TextRelay post = info.GetTextEntry( 3 );

                            int[] switches = info.Switches;

                            bool staff = false;
                            bool sticky = false;
                            bool announcement = false;

                            for( int i = 0; i < switches.Length; i++ )
                            {
                                if( switches[i] == 4)
                                    staff = true;
                                if( switches[i] == 5 )
                                    sticky = true;
                                if( switches[i] == 6 )
                                    announcement = true;                                
                            }

                            if( sticky && announcement )
                            {
                                m_Player.SendMessage( "Since you checked both sticky and announcement, this post was changed to sticky by default!" );
                                announcement = false;                                
                            }

                            if( topic.Text.Length < ForumCore.MinPostCharactersCount )
                            {
                                m_Player.SendMessage( "The subject of the post must be more then {0} characters in length.", ForumCore.MinPostCharactersCount.ToString() );
                                m_Player.SendGump( this );
                                break;
                            }

                            if( post.Text.Length < ForumCore.MinPostCharactersCount )
                            {
                                m_Player.SendMessage( "The content of the post must be more then {0} characters in length.", ForumCore.MinPostCharactersCount.ToString() );
                                m_Player.SendGump( this );
                                break;
                            }

                            if( post.Text.Length > ForumCore.MaxPostCharactersCount )
                            {
                                m_Player.SendMessage( "The content of the post must be less then {0} characters in length.", ForumCore.MaxPostCharactersCount.ToString() );
                                m_Player.SendGump( new PostGump( m_Player, post.Text ) );
                                break;
                            }

                            ThreadType type;

                            if( sticky )
                                type = ThreadType.Sticky;
                            else if( announcement )
                                type = ThreadType.Announcement;
                            else
                                type = ThreadType.RegularThread;

                            PostEntry pe = new PostEntry( m_Player, m_Player.Serial, post.Text, DateTime.Now );
                            ThreadEntry te = new ThreadEntry( topic.Text, pe, m_Player, DateTime.Now, ForumCore.ThreadNumber, type );

                            if( staff )
                                te.StaffMessage = true;

                            te.LastPostTime = DateTime.Now;

                            ForumCore.Threads.Add( te );
                            ForumCore.UpdatePlayerStatistics( m_Player );
                                                        
                            ForumCore.Threads.Sort( new DateSort() );
                            m_Player.CloseGump( typeof( ForumGump ) );
                            m_Player.SendGump( new ForumGump( m_Player, 0 ) );
                        }
                        else
                        {
                            TextRelay post = info.GetTextEntry( 3 );
                            PostEntry pe = new PostEntry( m_Player, m_Player.Serial, post.Text, DateTime.Now );
                            
                            m_ThreadEntry.AddPost( pe );
                            m_ThreadEntry.LastPostTime = DateTime.Now;
                            ForumCore.UpdatePlayerStatistics( m_Player );
  
                            ForumCore.Threads.Sort( new DateSort() );
                            m_Player.CloseGump( typeof( ForumGump ) );
                            m_Player.SendGump( new ForumGump( m_Player, 0 ) );
                        }
                        
                        break;
                    }
                case 7:
                    {
                        if( m_NewThread )
                        {
                            TextRelay topic = info.GetTextEntry( 2 );

                            if( topic.Text.Length < ForumCore.MinPostCharactersCount )
                            {
                                m_Player.SendMessage( "The subject of the post must be more then {0} characters in length.", ForumCore.MinPostCharactersCount.ToString() );
                                m_Player.SendGump( this );
                                break;
                            }                            
                            m_Topic = topic.Text;
                            m_Switches = info.Switches;
                        }

                        m_Player.Prompt = new LongPostLinesPrompt( this, m_Player );                        
                        break;

                    }
            }
        }
Example #12
0
        public void Post()
        {
            if( m_NewThread )
            {
                bool staff = false;
                bool sticky = false;
                bool announcement = false;

                for( int i = 0; i < m_Switches.Length; i++ )
                {
                    if( m_Switches[i] == 4 )
                        staff = true;
                    if( m_Switches[i] == 5 )
                        sticky = true;
                    if( m_Switches[i] == 6 )
                        announcement = true;
                }

                if( sticky && announcement )
                {
                    m_Player.SendMessage( "Since you checked both sticky and announcement, this post was changed to sticky by default!" );
                    announcement = false;
                }

                ThreadType type;

                if( sticky )
                    type = ThreadType.Sticky;
                else if( announcement )
                    type = ThreadType.Announcement;
                else
                    type = ThreadType.RegularThread;

                string post = GetText();

                PostEntry pe = new PostEntry( m_Player, m_Player.Serial, post, DateTime.Now );
                ThreadEntry te = new ThreadEntry( m_Topic, pe, m_Player, DateTime.Now, ForumCore.ThreadNumber, type );

                if( staff )
                    te.StaffMessage = true;

                te.LastPostTime = DateTime.Now;

                ForumCore.Threads.Add( te );
                ForumCore.UpdatePlayerStatistics( m_Player );

                ForumCore.Threads.Sort( new DateSort() );
                m_Player.CloseGump( typeof( ForumGump ) );
                m_Player.SendGump( new ForumGump( m_Player, 0 ) );
            }
            else
            {
                string post = GetText();
                PostEntry pe = new PostEntry( m_Player, m_Player.Serial, post, DateTime.Now );

                m_ThreadEntry.AddPost( pe );
                m_ThreadEntry.LastPostTime = DateTime.Now;
                ForumCore.UpdatePlayerStatistics( m_Player );

                ForumCore.Threads.Sort( new DateSort() );
                m_Player.CloseGump( typeof( ForumGump ) );
                m_Player.SendGump( new ForumGump( m_Player, 0 ) );
            }
        }
Example #13
0
		private static void Load()
		{
			try
			{
				string SavePath = Path.Combine( m_SavePath, "forumdata.sig" );

				using( FileStream fs = new FileStream( SavePath, FileMode.Open, FileAccess.Read, FileShare.Read ) )
				{
					BinaryReader br = new BinaryReader( fs );
					BinaryFileReader reader = new BinaryFileReader( br );

					int version = reader.ReadInt();
					switch( version )
					{
						case 0:
							{
								m_PlayerStatistics = ReadPlayerStatistics( reader );
								int count = reader.ReadInt();
								for( int i = 0; i < count; i++ )
								{
									ThreadEntry te = new ThreadEntry();
									te.Deserialize( reader );
									m_Threads.Add( te );
								}
								m_Moderators = reader.ReadMobileList();
								m_ThreadDeleteAccessLevel = (AccessLevel)reader.ReadInt();
								m_ThreadLockAccesLevel = ( AccessLevel )reader.ReadInt();
								m_AutoCleanup = reader.ReadBool();
								m_AutoCleanupDays = reader.ReadInt();
								m_MinPostCharactersCount = reader.ReadInt();
								m_MaxPostCharactersCount = reader.ReadInt();
								break;
							}
					}
				}

				m_Threads.Sort( new DateSort() );
				Console.WriteLine( "Loading...done" );
			}
			catch(Exception err)
			{
				Console.WriteLine( "An error occured while loading the forums...{0}", err.ToString() );
			}
		}
Example #14
0
		private static bool CheckAutoCleanupDate( ThreadEntry te )
		{
			DateTime today = DateTime.Now;

			if ( today.Date.Day - te.LastPostTime.Date.Day  > AutoCleanupDays )
				return true;

			return false;
		}
Example #15
0
        public ForumGump(Mobile pm, int page)
            : base(0, 0)
        {
            m_Player       = pm;
            m_Page         = page;
            m_PagedThreads = new ArrayList();
            Closable       = false;
            Disposable     = true;
            Dragable       = true;
            Resizable      = false;
            AddPage(0);
            AddBackground(71, 53, 618, 489, 9200);
            AddImage(631, 9, 5536);
            AddBlackAlpha(80, 63, 549, 63);
            AddImage(655, 368, 10411);
            AddImage(657, 181, 10410);
            AddImage(21, 481, 10402);
            AddButton(579, 160, 4008, 4008, (int)Buttons.CreditsButton, GumpButtonType.Reply, 0);
            AddButton(580, 187, 4014, 4014, (int)Buttons.HelpButton, GumpButtonType.Reply, 0);
            AddButton(94, 507, 4029, 4029, (int)Buttons.NewPostButton, GumpButtonType.Reply, 0);
            AddButton(400, 507, 4029, 4029, (int)Buttons.Cancel, GumpButtonType.Reply, 0);
            AddLabel(435, 507, 49, "Close");
            AddLabel(131, 507, 49, "New Topic");
            AddLabel(613, 161, 499, "Credits");
            AddLabel(614, 187, 499, "Help");
            AddLabel(87, 68, 499, "FORUM - Topics: " + ForumCore.Threads.Count.ToString() + " - Moderators: " + ForumCore.Moderators.Count.ToString());
            AddLabel(87, 93, 499, "There are currently " + NetState.Instances.Count + " users online.");
            AddLabel(535, 101, 499, "Version " + ForumCore.Version);
            AddLabel(80, 124, 499, " Status    Topic Title                            Visits/Replies");
            AddBlackAlpha(80, 144, 491, 354);

            bool pages = (ForumCore.Threads.Count > 10);
            bool more  = false;

            int index = m_Page * 10;

            if (index < 0)
            {
                index = 0;
            }

            int maxcount = index + 10;
            int offset   = 0;

            for (int i = index; i < ForumCore.Threads.Count; i++)
            {
                if (i >= maxcount)
                {
                    more = true;
                    break;
                }

                ThreadEntry te = (ThreadEntry)ForumCore.Threads[i];
                if (!te.Deleted && !(te.StaffMessage && m_Player.AccessLevel < AccessLevel.Counselor))
                {
                    bool viewed       = te.IsViewer(m_Player);
                    bool poster       = te.IsPoster(m_Player);
                    bool viewedUpdate = te.IsViewerSinceUpdate(m_Player);
                    m_PagedThreads.Add(te);

                    int buttonID;

                    if (te.IsPoster(m_Player) && te.IsViewerSinceUpdate(m_Player))
                    {
                        buttonID = 4011;
                    }
                    else if (te.IsPoster(m_Player))
                    {
                        buttonID = 4012;
                    }
                    else if (te.IsViewerSinceUpdate(m_Player))
                    {
                        buttonID = 4014;
                    }
                    else if (te.IsViewer(m_Player))
                    {
                        buttonID = 4015;
                    }
                    else
                    {
                        buttonID = 4014;
                    }

                    if (te.Locked)
                    {
                        buttonID = 4017;
                    }

                    AddButtonLabeled(100, (((35 * (i - index)) + 155) - offset), (i - (maxcount - (((m_Page + 1) * 10))) - index), buttonID, te.Subject, te.NumberOfViews.ToString(), te.NumberOfReplys.ToString(), te.StaffMessage, te.EntryType);
                }
                else
                {
                    maxcount++;
                    offset += 35;
                }
            }

            if (pages)
            {
                if (more)
                {
                    AddButton(644, 507, 5541, 5541, (int)Buttons.NextPage, GumpButtonType.Reply, 0);
                }

                if (m_Page > 0)
                {
                    AddButton(621, 507, 5538, 5538, (int)Buttons.PreviousPage, GumpButtonType.Reply, 0);
                }
            }
        }
Example #16
0
        public override void OnResponse(Server.Network.NetState sender, RelayInfo info)
        {
            m_Player = (Mobile)sender.Mobile;

            if (m_Player == null)
            {
                return;
            }

            switch (info.ButtonID)
            {
            default:    //Any Thread
            {
                ThreadEntry te = (ThreadEntry)m_PagedThreads[info.ButtonID];
                if (te != null && !te.Deleted)
                {
                    if (te.Deleted)
                    {
                        m_Player.SendMessage("That thread has been queued for deletion and may not be viewed!");
                        break;
                    }
                    te.AddViewerSinceUpdate(m_Player);
                    te.AddViewer(m_Player);

                    m_Player.CloseGump(typeof(ThreadGump));
                    m_Player.SendGump(new ThreadGump(m_Player, te));
                }
                break;
            }

            case 11:    //Credits
            {
                m_Player.CloseGump(typeof(ForumGump));
                m_Player.SendGump(new ForumGump(m_Player, m_Page));
                m_Player.CloseGump(typeof(CreditsGump));
                m_Player.SendGump(new CreditsGump());
                break;
            }

            case 12:    //Help
            {
                m_Player.CloseGump(typeof(ForumGump));
                m_Player.SendGump(new ForumGump(m_Player, m_Page));
                m_Player.CloseGump(typeof(HelpGump));
                m_Player.SendGump(new HelpGump());
                break;
            }

            case 13:    //New Post
            {
                m_Player.CloseGump(typeof(PostGump));
                m_Player.SendGump(new PostGump(m_Player));
                break;
            }

            case 14:    //Next Page
            {
                int page = m_Page + 1;
                m_Player.CloseGump(typeof(ForumGump));
                m_Player.SendGump(new ForumGump(m_Player, page));
                break;
            }

            case 15:    //Previous Page
            {
                int page = m_Page - 1;
                m_Player.CloseGump(typeof(ForumGump));
                m_Player.SendGump(new ForumGump(m_Player, page));
                break;
            }

            case 16:    //Cancel
            {
                break;
            }
            }
        }