예제 #1
0
        public static BaseQuest RandomQuest(PlayerMobile pm, ITierQuester quester)
        {
            TierQuestInfo info = quester.TierInfo;

            if (info != null)
            {
                List <Type> list             = new List <Type>();
                int         lastTierComplete = 0;

                for (int i = 0; i < info.Tiers.Length; i++)
                {
                    TierInfo tier = info.Tiers[i];

                    if (lastTierComplete >= tier.ToComplete)
                    {
                        list.AddRange(tier.Quests);
                    }

                    lastTierComplete = 0;

                    foreach (Type quest in tier.Quests)
                    {
                        lastTierComplete += HasCompleted(pm, quest, info);
                    }
                }

                if (list.Count > 0)
                {
                    return(QuestHelper.Construct(list[Utility.Random(list.Count)]));
                }
            }

            return(null);
        }
예제 #2
0
        public override void OnAccept()
        {
            if (Quest.StartingItem != null)
            {
                Quest.StartingItem.QuestItem = true;
                return;
            }

            int amount = MaxProgress;

            while (amount > 0 && !Failed)
            {
                Item item = QuestHelper.Construct(m_Delivery) as Item;

                if (item == null)
                {
                    Fail();
                    break;
                }

                if (item.Stackable)
                {
                    item.Amount = amount;
                    amount      = 1;
                }

                if (!Quest.Owner.PlaceInBackpack(item))
                {
                    Quest.Owner.SendLocalizedMessage(503200);  // You do not have room in your backpack for
                    Quest.Owner.SendLocalizedMessage(1075574); // Could not create all the necessary items. Your quest has not advanced.

                    Fail();

                    break;
                }
                else
                {
                    item.QuestItem = true;
                }

                amount -= 1;
            }

            if (Failed)
            {
                QuestHelper.DeleteItems(Quest.Owner, m_Delivery, MaxProgress - amount, false);

                Quest.RemoveQuest();
            }
        }
예제 #3
0
        private void BuildRestart()
        {
            var done = Subject.DoneQuests;
            var y    = 70;

            AddLabel(10, y, 0, "Quest Type");
            AddLabel(250, y, 0, "Next Restart");
            AddLabel(500, y, 0, "Remove Delay");

            y += 20;

            if (done != null)
            {
                for (int i = 0; i < done.Count; i++)
                {
                    var info = done[i];

                    if (info != null)
                    {
                        var quest = QuestHelper.Construct(info.QuestType);

                        if (quest != null)
                        {
                            if (quest.Title is int iTitle)
                            {
                                AddHtmlLocalized(10, y, 200, 20, iTitle, false, false);
                            }
                            else if (quest.Title is string sTitle)
                            {
                                AddHtml(10, y, 200, 20, sTitle, false, false);
                            }
                        }
                        else
                        {
                            AddLabel(10, y, 0, info.QuestType.Name);
                        }

                        AddLabel(250, y, 0, quest != null && quest.DoneOnce ? "Never" : info.RestartTime.ToString());

                        AddButton(500, y, 0xFB1, 0xFB3, i + 1000, GumpButtonType.Reply, 0);

                        y += 20;
                    }
                }
            }
        }