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); }
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(); } }
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; } } } }