示例#1
0
 public void Grant()
 {
     if (m_Mobile is PlayerMobile)
     {
         RankDefinition[] defs  = m_Ethic.Definition.Ranks;
         TitleProfile     p     = CustomTitles.EnsureProfile(m_Mobile as PlayerMobile);
         Title            title = null;
         TitleHue         hue   = null;
         if (CustomTitles.TryGetTitle(defs[0].Title, out title) && !p.Contains((title)))
         {
             p.Add(title);
         }
         if (CustomTitles.TryGetHue(m_Ethic.Definition.TitleHue, out hue) && !p.Contains(hue))
         {
             p.Add(hue);
         }
         m_Mobile.SendMessage(54, "You have decided to follow the path of {0}!", m_Ethic.Definition.Title);
         m_Mobile.SendMessage(54, "You have been granted the title {0} and the title hue {1}.", defs[0].Title, m_Ethic.Definition.TitleHue);
         m_Mobile.SendMessage(54, "You have been granted an ethic spellbook.");
         if (m_Mobile.Backpack != null)
         {
             Item spellbook;
             if (m_Ethic == Ethic.Evil)
             {
                 spellbook = new Evilspellbook();
                 m_Mobile.AddToBackpack(spellbook);
             }
             else if (m_Ethic == Ethic.Hero)
             {
                 spellbook = new Herospellbook();
                 m_Mobile.AddToBackpack(spellbook);
             }
         }
     }
 }
示例#2
0
        public override void GiveSpecialItems(List <Mobile> eligibleMobs, List <double> eligibleMobScores,
                                              double totalScores)
        {
            double currentTestValue = 0.0;
            double roll             = Utility.RandomDouble() * totalScores;

            if (0.50 >= Utility.RandomDouble())
            {
                for (int i = 0; i < eligibleMobScores.Count; i++)
                {
                    currentTestValue += eligibleMobScores[i];

                    if (roll > currentTestValue)
                    {
                        continue;
                    }

                    if (!(eligibleMobs[i] is PlayerMobile) || eligibleMobs[i].Backpack == null)
                    {
                        continue;
                    }

                    var statue = new HydraStatue();

                    eligibleMobs[i].Backpack.DropItem(statue);
                    eligibleMobs[i].SendMessage(54, "You have received a Hydra statue!");

                    break;
                }
            }

            TitleHue titlehue;

            if (!CustomTitles.TryGetHue(1259, out titlehue) || titlehue == null)
            {
                return;
            }

            PlayerMobile titleWinner =
                Scores.OrderByDescending(kv => kv.Value).Select(kv => kv.Key).OfType <PlayerMobile>().FirstOrDefault();

            if (titleWinner == null)
            {
                return;
            }

            TitleProfile p = CustomTitles.EnsureProfile(titleWinner);

            if (p == null || p.Contains(titlehue))
            {
                return;
            }

            p.Add(titlehue);
            titleWinner.SendMessage(titlehue.Hue, "You have been granted the title hue: " + titlehue.Hue);
        }
示例#3
0
        public void AdjustRank()
        {
            int rank = m_Rank;

            RankDefinition[] defs = m_Ethic.Definition.Ranks;

            for (int i = 0; i < defs.Length; i++)
            {
                if (i + 1 == defs.Length || (m_Sphere >= defs[i].Points && m_Sphere < defs[i + 1].Points))
                {
                    m_Rank = i;
                    break;
                }
            }

            if (m_Rank < rank)
            {
                m_Mobile.SendMessage(54, "You have lost a rank in your ethic.  You are now rank {0}.", m_Rank);
                m_Mobile.SendMessage(54, "For your failure, you are no longer considered a {0} in the {1} ethic.", defs[rank].Title, m_Ethic.Definition.Title);

                TitleProfile p     = CustomTitles.EnsureProfile(m_Mobile as PlayerMobile);
                Title        title = null;
                if (CustomTitles.TryGetTitle(defs[rank].Title, out title) && p.Contains(title))
                {
                    if (p.SelectedTitle != null && p.SelectedTitle.MaleTitle == title.MaleTitle)
                    {
                        p.SelectedTitle = null;
                    }
                    p.Remove(title);
                }
            }
            else if (m_Rank > rank)
            {
                m_Mobile.SendMessage(54, "You are now rank {0} in your ethic.", m_Rank);
                m_Mobile.SendMessage(54, "You have been granted the title {0} for your hard work and dedication towards following the path of {1}.", defs[m_Rank].Title, m_Ethic.Definition.Title);

                TitleProfile p     = CustomTitles.EnsureProfile(m_Mobile as PlayerMobile);
                Title        title = null;
                if (CustomTitles.TryGetTitle(defs[m_Rank].Title, out title) && !p.Contains(title))
                {
                    p.Add(title);
                }
            }
        }
示例#4
0
        public void Detach()
        {
            if (m_Mobile is PlayerMobile)
            {
                RankDefinition[] defs = m_Ethic.Definition.Ranks;
                (m_Mobile as PlayerMobile).EthicPlayer = null;
                TitleProfile p   = CustomTitles.EnsureProfile(m_Mobile as PlayerMobile);
                TitleHue     hue = null;
                if (CustomTitles.TryGetHue(m_Ethic.Definition.TitleHue, out hue) && p.Contains(hue))
                {
                    if (p.SelectedHue != null && p.SelectedHue.Hue == hue.Hue)
                    {
                        p.SelectedHue = null;
                    }
                    p.Remove(hue);
                }

                foreach (var rank in defs)
                {
                    Title title;
                    if (CustomTitles.TryGetTitle(rank.Title, out title) && p.Contains(title))
                    {
                        if (p.SelectedTitle != null && p.SelectedTitle.MaleTitle == title.MaleTitle)
                        {
                            p.SelectedTitle = null;
                        }
                        p.Remove(title);
                    }
                }

                m_Ethic.Players.Remove(this);

                m_Mobile.SendMessage(54, "You have departed from the path of {0}!", m_Ethic.Definition.Title);
                m_Mobile.SendMessage(54, "For your abandonment of this ethic, you have been stripped of all ethic titles and the title hue {0}.", m_Ethic.Definition.TitleHue);
            }
        }
示例#5
0
        public override void GivePowerScrolls()
        {
            if (ChampSpawn == null && !AlwaysDropScrolls)
            {
                return;
            }

            var scores = new Dictionary <Mobile, double>(Scores);

            var toReceiveScroll = new List <Mobile>();

            // first find all eligible receivers
            var eligibleMobs      = new List <Mobile>();
            var eligibleMobScores = new List <double>();

            List <KeyValuePair <Mobile, double> > orderedscores = scores.ToList();

            orderedscores.Sort((firstPair, nextPair) => firstPair.Value.CompareTo(nextPair.Value));
            orderedscores.Reverse();

            double totalScores = 0.0;
            var    sb          = new StringBuilder();

            sb.Append("========== " + DateTime.Now + " Champion " + GetType() + " Report ==============\r\n");
            sb.Append(
                "Score\tEligible\tName\tAccount\tAddress\tStr\tInt\tDex\tTaming\tProvocation\tMagery\tArchery\tMace\tFencing\tSwords\tLumberjack\tWrestling\tAnatomy\r\n");

            foreach (KeyValuePair <Mobile, double> pair in scores)
            {
                Mobile mob = pair.Key;

                if (mob == null)
                {
                    continue;
                }

                bool eligible = IsEligible(mob);

                sb.Append(
                    pair.Value + "\t" + eligible + "\t" + mob + "\t" + mob.Account + "\t" + mob.Address + "\t" + mob.Str +
                    "\t" +
                    mob.Int + "\t" + mob.Dex + "\t" + mob.Skills.AnimalTaming.Value + "\t" +
                    mob.Skills.Provocation.Value + "\t" +
                    mob.Skills.Magery.Value + "\t" + mob.Skills.Archery.Value + "\t" + mob.Skills.Macing.Value + "\t" +
                    mob.Skills.Fencing.Value + "\t" + mob.Skills.Swords.Value + "\t" + mob.Skills.Lumberjacking.Value +
                    "\t" +
                    mob.Skills.Wrestling.Value + "\t" + mob.Skills.Anatomy.Value + "\r\n");

                if (!eligible)
                {
                    continue;
                }

                eligibleMobs.Add(mob);
                eligibleMobScores.Add(pair.Value);

                totalScores += pair.Value;
            }

            for (int powerScrollIndex = 0;
                 powerScrollIndex < ChampionGlobals.CSOptions.PowerScrollsToGive;
                 powerScrollIndex++)
            {
                double currentTestValue = 0.0;
                double roll             = Utility.RandomDouble() * totalScores;

                for (int i = 0; i < eligibleMobScores.Count; i++)
                {
                    currentTestValue += eligibleMobScores[i];

                    if (roll > currentTestValue)
                    {
                        continue;
                    }

                    toReceiveScroll.Add(eligibleMobs[i]);

                    totalScores -= eligibleMobScores[i];

                    // remove them from eligible list now
                    eligibleMobs.RemoveAt(i);
                    eligibleMobScores.RemoveAt(i);
                    break;
                }
            }


            foreach (PlayerMobile mobile in scores.Keys.OfType <PlayerMobile>())
            {
                PlayerMobile mobile1 = mobile;
                Timer.DelayCall(
                    TimeSpan.FromMinutes(1),
                    () =>
                {
                    var scrollgump = new PlayerScoresScrollGump(mobile1, onAccept: x =>
                    {
                        var scoreboard = new PlayerScoreResultsGump(mobile1, this, scores, toReceiveScroll).
                                         Send <PlayerScoreResultsGump>();
                    }).Send <PlayerScoresScrollGump>();
                });
            }

            foreach (Mobile luckyPlayer in toReceiveScroll)
            {
                PowerScroll ps = CreateRandomPowerScroll(Expansion);

                if (ps == null)
                {
                    continue;
                }

                GivePowerScrollTo(luckyPlayer, ps);
                sb.Append(luckyPlayer + " received powerScoll " + ps.Skill + " " + ps.Value + "\r\n");
            }

            foreach (PlayerMobile pm in orderedscores.Select(kvp => kvp.Key as PlayerMobile))
            {
                TitleHue titlehue;

                CustomTitles.TryGetHue(1196, out titlehue);

                TitleProfile p = CustomTitles.EnsureProfile(pm);

                if (pm != null && titlehue != null && p != null && !p.Contains(titlehue))
                {
                    p.Add(titlehue);
                    pm.SendMessage(titlehue.Hue, "You have been granted the title hue: " + titlehue.Hue);
                    sb.Append(pm + " received titlehue " + titlehue.Hue + "\r\n");
                    break;
                }
            }

            LoggingCustom.Log("ChampionScores/" + IOUtility.GetSafeFileName(GetType().FullName) + ".log", sb.ToString());
        }