public static int GetQuestRanking(Mobile m)
        {
            if (QuestRankList == null || m == null)
            {
                return(0);
            }

            RefreshQuestRankList();

            // go through the sorted list and calculate rank

            for (int i = 0; i < QuestRankList.Count; i++)
            {
                QuestRankEntry p = QuestRankList[i] as QuestRankEntry;
                // found the person?
                if (p.Quester == m)
                {
                    return(p.Rank);
                }
            }

            // rank 0 means unranked
            return(0);
        }
Example #2
0
            public TopQuestPlayersGump(XmlQuestPoints attachment)
                : base(0, 0)
            {
                if (QuestRankList == null || attachment == null)
                {
                    return;
                }

                m_attachment = attachment;

                int numberToDisplay = 20;
                int height          = numberToDisplay * 20 + 65;

                // prepare the page
                AddPage(0);

                int width = 740;

#if (FACTIONS)
                width = 790;
#endif

                AddBackground(0, 0, width, height, 5054);
                AddAlphaRegion(0, 0, width, height);
                AddImageTiled(20, 20, width - 40, height - 45, 0xBBC);
                AddLabel(20, 2, 55, "Top Quest Player Rankings");

                // guild filter
                AddLabel(40, height - 20, 55, "Filter by Guild");
                string filter = null;
                if (m_attachment != null)
                {
                    filter = m_attachment.guildFilter;
                }

                AddImageTiled(140, height - 20, 160, 19, 0xBBC);
                AddTextEntry(140, height - 20, 160, 19, 0, 200, filter);

                AddButton(20, height - 20, 0x15E1, 0x15E5, 200, GumpButtonType.Reply, 0);

                // name filter
                AddLabel(340, height - 20, 55, "Filter by Name");                 //
                string nfilter = null;
                if (m_attachment != null)
                {
                    nfilter = m_attachment.nameFilter;
                }

                AddImageTiled(440, height - 20, 160, 19, 0xBBC);
                AddTextEntry(440, height - 20, 160, 19, 0, 100, nfilter);

                AddButton(320, height - 20, 0x15E1, 0x15E5, 100, GumpButtonType.Reply, 0);

                RefreshQuestRankList();

                int xloc = 23;
                AddLabel(xloc, 20, 0, "Name");
                xloc += 177;
                AddLabel(xloc, 20, 0, "Guild");
#if (FACTIONS)
                xloc += 35;
                AddLabel(xloc, 20, 0, "Faction");
                xloc += 15;
#endif
                xloc += 50;
                AddLabel(xloc, 20, 0, "Points");
                xloc += 50;
                AddLabel(xloc, 20, 0, "Quests");
                xloc += 50;
                //AddLabel( xloc, 20, 0, "" );
                xloc += 70;
                AddLabel(xloc, 20, 0, "Rank");
                xloc += 45;
                AddLabel(xloc, 20, 0, "Change");
                xloc += 45;
                AddLabel(xloc, 20, 0, "Time at Rank");

                // go through the sorted list and display the top ranked players

                int y     = 40;
                int count = 0;
                for (int i = 0; i < QuestRankList.Count; i++)
                {
                    if (count >= numberToDisplay)
                    {
                        break;
                    }

                    QuestRankEntry r = QuestRankList[i] as QuestRankEntry;

                    if (r == null)
                    {
                        continue;
                    }

                    XmlQuestPoints a = r.QuestPointsAttachment;

                    if (a == null)
                    {
                        continue;
                    }

                    if (r.Quester != null && !r.Quester.Deleted && r.Rank > 0 && a != null && !a.Deleted)
                    {
                        string guildname = null;

                        if (r.Quester.Guild != null)
                        {
                            guildname = r.Quester.Guild.Abbreviation;
                        }

#if (FACTIONS)
                        string factionname = null;

                        if (r.Quester is PlayerMobile && ((PlayerMobile)r.Quester).FactionPlayerState != null)
                        {
                            factionname = ((PlayerMobile)r.Quester).FactionPlayerState.Faction.ToString();
                        }
#endif
                        // check for any ranking change and update rank date
                        if (r.Rank != a.Rank)
                        {
                            a.WhenRanked = DateTime.UtcNow;
                            if (a.Rank > 0)
                            {
                                a.DeltaRank = a.Rank - r.Rank;
                            }
                            a.Rank = r.Rank;
                        }

                        // check for guild filter
                        if (m_attachment != null && m_attachment.guildFilter != null && m_attachment.guildFilter.Length > 0)
                        {
                            // parse the comma separated list
                            var args = m_attachment.guildFilter.Split(',');
                            if (args != null)
                            {
                                bool found = false;
                                foreach (string arg in args)
                                {
                                    if (arg != null && guildname == arg.Trim())
                                    {
                                        found = true;
                                        break;
                                    }
                                }
                                if (!found)
                                {
                                    continue;
                                }
                            }
                        }

                        // check for name filter
                        if (m_attachment != null && m_attachment.nameFilter != null && m_attachment.nameFilter.Length > 0)
                        {
                            // parse the comma separated list
                            var args = m_attachment.nameFilter.Split(',');

                            if (args != null)
                            {
                                bool found = false;
                                foreach (string arg in args)
                                {
                                    if (arg != null && r.Quester.Name != null && (r.Quester.Name.ToLower().IndexOf(arg.Trim().ToLower()) >= 0))
                                    {
                                        found = true;
                                        break;
                                    }
                                }
                                if (!found)
                                {
                                    continue;
                                }
                            }
                        }

                        count++;

                        TimeSpan timeranked = DateTime.UtcNow - a.WhenRanked;

                        int days  = (int)timeranked.TotalDays;
                        int hours = (int)(timeranked.TotalHours - days * 24);
                        int mins  = (int)(timeranked.TotalMinutes - ((int)timeranked.TotalHours) * 60);

                        string quests = "???";
                        try
                        {
                            quests = a.QuestsCompleted.ToString();
                        }
                        catch
                        { }

                        xloc = 23;
                        AddLabel(xloc, y, 0, r.Quester.Name);
                        xloc += 177;
                        AddLabel(xloc, y, 0, guildname);
#if (FACTIONS)
                        xloc += 35;
                        AddLabelCropped(xloc, y, 60, 21, 0, factionname);
                        xloc += 15;
#endif
                        xloc += 50;
                        AddLabel(xloc, y, 0, a.Points.ToString());
                        xloc += 50;
                        AddLabel(xloc, y, 0, quests);
                        xloc += 50;
                        //AddLabel( xloc, y, 0, "" );
                        xloc += 70;
                        AddLabel(xloc, y, 0, a.Rank.ToString());

                        string label = null;

                        if (days > 0)
                        {
                            label += String.Format("{0} days ", days);
                        }
                        if (hours > 0)
                        {
                            label += String.Format("{0} hours ", hours);
                        }
                        if (mins > 0)
                        {
                            label += String.Format("{0} mins", mins);
                        }

                        if (label == null)
                        {
                            label = "just changed";
                        }

                        string deltalabel = a.DeltaRank.ToString();
                        int    deltahue   = 0;
                        if (a.DeltaRank > 0)
                        {
                            deltalabel = String.Format("+{0}", a.DeltaRank);
                            deltahue   = 68;
                        }
                        else if (a.DeltaRank < 0)
                        {
                            deltahue = 33;
                        }
                        xloc += 50;
                        AddLabel(xloc, y, deltahue, deltalabel);
                        xloc += 40;
                        AddLabel(xloc, y, 0, label);

                        y += 20;
                    }
                }
            }
Example #3
0
        public static void WriteQuestLeaderboardHtml(string filename, int nranks)
        {
            string dirname = Path.Combine(m_QuestLeaderboardSaveDirectory, filename);

            StreamWriter sw = new StreamWriter(dirname);

            if (sw == null)
            {
                Console.WriteLine("Error: unable to save HTML quest leaderboard to {0}", dirname);
                return;
            }
            sw.WriteLine("<TABLE border=\"1\" summary=\"This table gives quest leaderboard stats\"> ");
            sw.WriteLine("<CAPTION><B>Quest Leaderboard</B></CAPTION>");
#if (FACTIONS)
            sw.WriteLine("<TR><TH><TH>Player Name<TH>Guild<TH>Faction<TH>Points<TH>Quests<TH>Rank<TH>Change<TH>Time at current rank");
#else
            sw.WriteLine("<TR><TH><TH>Player Name<TH>Guild<TH>Points<TH>Quests<TH>Rank<TH>Change<TH>Time at current rank");
#endif
            // go through the sorted list and display the top ranked players

            for (int i = 0; i < QuestRankList.Count; i++)
            {
                if (nranks > 0 && i >= nranks)
                {
                    break;
                }

                QuestRankEntry r = QuestRankList[i] as QuestRankEntry;
                XmlQuestPoints a = r.QuestPointsAttachment;

                if (r.Quester != null && !r.Quester.Deleted && r.Rank > 0 && a != null && !a.Deleted)
                {
                    string guildname = null;

                    if (r.Quester.Guild != null)
                    {
                        guildname = r.Quester.Guild.Abbreviation;
                    }

                    // check for any ranking change and update rank date
                    if (r.Rank != a.Rank)
                    {
                        a.WhenRanked = DateTime.UtcNow;
                        if (a.Rank > 0)
                        {
                            a.DeltaRank = a.Rank - r.Rank;
                        }
                        a.Rank = r.Rank;
                    }

                    TimeSpan timeranked = DateTime.UtcNow - a.WhenRanked;

                    string quests = "???";
                    try
                    {
                        quests = a.QuestsCompleted.ToString();
                    }
                    catch
                    { }

#if (FACTIONS)
                    // write out the entry information
                    sw.WriteLine("<TR><TH><TD>{0}<TD>{1}<TD>{2}<TD>{3}<TD>{4}<TD>{5}<TD>{6}",
                                 r.Quester.Name,
                                 guildname,
                                 a.Points,
                                 quests,
                                 a.Rank,
                                 a.DeltaRank,
                                 timeranked
                                 );
#else
                    // write out the entry information
                    sw.WriteLine(
                        "<TR><TH><TD>{0}<TD>{1}<TD>{2}<TD>{3}<TD>{4}<TD>{5}<TD>{6}",
                        r.Quester.Name,
                        guildname,
                        a.Points,
                        quests,
                        a.Rank,
                        a.DeltaRank,
                        timeranked);
#endif
                }
            }
            sw.WriteLine("</TABLE>");
            sw.Close();
        }
Example #4
0
        public static void WriteQuestLeaderboardXml(string filename, int nranks)
        {
            string dirname = Path.Combine(m_QuestLeaderboardSaveDirectory, filename);

            StreamWriter sw = new StreamWriter(dirname);

            XmlTextWriter xf = new XmlTextWriter(sw);

            if (xf == null)
            {
                Console.WriteLine("Error: unable to save XML quest leaderboard to {0}", dirname);
                return;
            }

            xf.Formatting = Formatting.Indented;

            xf.WriteStartDocument(true);

            xf.WriteStartElement("QuestLeaderboard");

            if (nranks > 0)
            {
                xf.WriteAttributeString("nentries", nranks.ToString());
            }
            else
            {
                xf.WriteAttributeString("nentries", QuestRankList.Count.ToString());
            }

            // go through the sorted list and display the top ranked players

            for (int i = 0; i < QuestRankList.Count; i++)
            {
                if (nranks > 0 && i >= nranks)
                {
                    break;
                }

                QuestRankEntry r = QuestRankList[i] as QuestRankEntry;
                XmlQuestPoints a = r.QuestPointsAttachment;

                if (r.Quester != null && !r.Quester.Deleted && r.Rank > 0 && a != null && !a.Deleted)
                {
                    string guildname = null;

                    if (r.Quester.Guild != null)
                    {
                        guildname = r.Quester.Guild.Abbreviation;
                    }
#if (FACTIONS)
                    string factionname = null;

                    if (r.Quester is PlayerMobile && ((PlayerMobile)r.Quester).FactionPlayerState != null)
                    {
                        factionname = ((PlayerMobile)r.Quester).FactionPlayerState.Faction.ToString();
                    }
#endif
                    // check for any ranking change and update rank date
                    if (r.Rank != a.Rank)
                    {
                        a.WhenRanked = DateTime.UtcNow;
                        if (a.Rank > 0)
                        {
                            a.DeltaRank = a.Rank - r.Rank;
                        }
                        a.Rank = r.Rank;
                    }

                    TimeSpan timeranked = DateTime.UtcNow - a.WhenRanked;

                    // write out the entry information

                    xf.WriteStartElement("Entry");
                    xf.WriteAttributeString("number", i.ToString());

                    xf.WriteStartElement("Player");
                    xf.WriteString(r.Quester.Name);
                    xf.WriteEndElement();

                    xf.WriteStartElement("Guild");
                    xf.WriteString(guildname);
                    xf.WriteEndElement();
#if (FACTIONS)
                    xf.WriteStartElement("Faction");
                    xf.WriteString(factionname);
                    xf.WriteEndElement();
#endif
                    xf.WriteStartElement("Points");
                    xf.WriteString(a.Points.ToString());
                    xf.WriteEndElement();

                    string quests = "???";
                    try
                    {
                        quests = a.QuestsCompleted.ToString();
                    }
                    catch
                    { }
                    xf.WriteStartElement("Quests");
                    xf.WriteString(quests);
                    xf.WriteEndElement();

                    xf.WriteStartElement("Rank");
                    xf.WriteString(a.Rank.ToString());
                    xf.WriteEndElement();

                    xf.WriteStartElement("Change");
                    xf.WriteString(a.DeltaRank.ToString());
                    xf.WriteEndElement();

                    xf.WriteStartElement("Duration");
                    xf.WriteString(timeranked.ToString());
                    xf.WriteEndElement();

                    // end the entry
                    xf.WriteEndElement();
                }
            }

            xf.WriteEndElement();

            xf.Close();
        }
        public static void WriteQuestLeaderboardHtml(string filename, int nranks)
        {
            string dirName = Path.Combine(_QuestLeaderboardSaveDirectory, filename);

            StreamWriter sw = new StreamWriter(dirName);

            sw.WriteLine("<TABLE border=\"1\" summary=\"This table gives quest leaderboard stats\"> ");
            sw.WriteLine("<CAPTION><B>Quest Leaderboard</B></CAPTION>");

#if (FACTIONS)
            sw.WriteLine(
                "<TR><TH><TH>Player Name<TH>Guild<TH>Faction<TH>Points<TH>Quests<TH>Rank<TH>Change<TH>Time at current rank");
#else
            sw.WriteLine(
                "<TR><TH><TH>Player Name<TH>Guild<TH>Points<TH>Quests<TH>Rank<TH>Change<TH>Time at current rank");
#endif

            // go through the sorted list and display the top ranked players
            for (int i = 0; i < _QuestRankList.Count; i++)
            {
                if (nranks > 0 && i >= nranks)
                {
                    break;
                }

                QuestRankEntry r = _QuestRankList[i];
                XmlQuestPoints a = r.QuestPointsAttachment;

                if (r.Quester == null || r.Quester.Deleted || r.Rank <= 0 || a == null || a.Deleted)
                {
                    continue;
                }

                string guildName = null;

                if (r.Quester.Guild != null)
                {
                    guildName = r.Quester.Guild.Abbreviation;
                }

#if (FACTIONS)
                string factionName = null;

                if (r.Quester is PlayerMobile && ((PlayerMobile)r.Quester).FactionPlayerState != null)
                {
                    factionName = ((PlayerMobile)r.Quester).FactionPlayerState.Faction.ToString();
                }
#endif

                // check for any ranking change and update rank date
                if (r.Rank != a.Rank)
                {
                    a.WhenRanked = DateTime.UtcNow;

                    if (a.Rank > 0)
                    {
                        a.DeltaRank = a.Rank - r.Rank;
                    }

                    a.Rank = r.Rank;
                }

                TimeSpan timeRanked = DateTime.UtcNow - a.WhenRanked;

                string quests = "???";

                try
                {
                    quests = a.QuestsCompleted.ToString(CultureInfo.InvariantCulture);
                }
                catch
                { }

#if (FACTIONS)
                // write out the entry information
                sw.WriteLine(
                    "<TR><TH><TD>{0}<TD>{1}<TD>{2}<TD>{3}<TD>{4}<TD>{5}<TD>{6}<TD>{7}",
                    r.Quester.Name,
                    guildName,
                    factionName,
                    a.Points,
                    quests,
                    a.Rank,
                    a.DeltaRank,
                    timeRanked);
#else
                // write out the entry information
                sw.WriteLine("<TR><TH><TD>{0}<TD>{1}<TD>{2}<TD>{3}<TD>{4}<TD>{5}<TD>{6}",
                             r.Quester.Name,
                             guildname,
                             a.Points,
                             quests,
                             a.Rank,
                             a.DeltaRank,
                             timeranked);
#endif
            }
            sw.WriteLine("</TABLE>");
            sw.Close();
        }
        public static void WriteQuestLeaderboardXml(string filename, int nranks)
        {
            string dirname = Path.Combine(_QuestLeaderboardSaveDirectory, filename);

            StreamWriter sw = new StreamWriter(dirname);

            XmlTextWriter xf = new XmlTextWriter(sw)
            {
                Formatting = Formatting.Indented
            };

            xf.WriteStartDocument(true);
            xf.WriteStartElement("QuestLeaderboard");

            xf.WriteAttributeString(
                "nentries",
                nranks > 0
                                        ? nranks.ToString(CultureInfo.InvariantCulture)
                                        : _QuestRankList.Count.ToString(CultureInfo.InvariantCulture));

            // go through the sorted list and display the top ranked players

            for (int i = 0; i < _QuestRankList.Count; i++)
            {
                if (nranks > 0 && i >= nranks)
                {
                    break;
                }

                QuestRankEntry r = _QuestRankList[i];
                XmlQuestPoints a = r.QuestPointsAttachment;

                if (r.Quester == null || r.Quester.Deleted || r.Rank <= 0 || a == null || a.Deleted)
                {
                    continue;
                }

                string guildName = null;

                if (r.Quester.Guild != null)
                {
                    guildName = r.Quester.Guild.Abbreviation;
                }

#if (FACTIONS)
                string factionName = null;

                if (r.Quester is PlayerMobile && ((PlayerMobile)r.Quester).FactionPlayerState != null)
                {
                    factionName = ((PlayerMobile)r.Quester).FactionPlayerState.Faction.ToString();
                }
#endif

                // check for any ranking change and update rank date
                if (r.Rank != a.Rank)
                {
                    a.WhenRanked = DateTime.UtcNow;

                    if (a.Rank > 0)
                    {
                        a.DeltaRank = a.Rank - r.Rank;
                    }

                    a.Rank = r.Rank;
                }

                TimeSpan timeRanked = DateTime.UtcNow - a.WhenRanked;

                // write out the entry information

                xf.WriteStartElement("Entry");
                xf.WriteAttributeString("number", i.ToString(CultureInfo.InvariantCulture));

                xf.WriteStartElement("Player");
                xf.WriteString(r.Quester.RawName ?? String.Empty);
                xf.WriteEndElement();

                xf.WriteStartElement("Guild");
                xf.WriteString(guildName ?? String.Empty);
                xf.WriteEndElement();
#if (FACTIONS)
                xf.WriteStartElement("Faction");
                xf.WriteString(factionName ?? String.Empty);
                xf.WriteEndElement();
#endif
                xf.WriteStartElement("Points");
                xf.WriteString(a.Points.ToString(CultureInfo.InvariantCulture));
                xf.WriteEndElement();

                string quests = "???";

                try
                {
                    quests = a.QuestsCompleted.ToString(CultureInfo.InvariantCulture);
                }
                catch
                { }

                xf.WriteStartElement("Quests");
                xf.WriteString(quests);
                xf.WriteEndElement();

                xf.WriteStartElement("Rank");
                xf.WriteString(a.Rank.ToString(CultureInfo.InvariantCulture));
                xf.WriteEndElement();

                xf.WriteStartElement("Change");
                xf.WriteString(a.DeltaRank.ToString(CultureInfo.InvariantCulture));
                xf.WriteEndElement();

                xf.WriteStartElement("Duration");
                xf.WriteString(timeRanked.ToString());
                xf.WriteEndElement();

                // end the entry
                xf.WriteEndElement();
            }

            xf.WriteEndElement();

            xf.Close();
        }