예제 #1
0
 private void OnButtonPressed(object sender, ButtonPressedEventArgs e)
 {
     if (e.Button == SButton.G)
     {
         if (Game1.activeClickableMenu == null)
         {
             Game1.activeClickableMenu = new BetterBillboardMenu();
         }
         else if (Game1.activeClickableMenu is BetterBillboardMenu)
         {
             Game1.activeClickableMenu = null;
         }
     }
     else if (e.Button == SButton.H)
     {
         if (Game1.activeClickableMenu == null)
         {
             Quest quest = new ItemDeliveryQuest();
             CurrentBillBoardQuests.Add(quest);
             Game1.activeClickableMenu = new NoteMenu(AddedQuests[0], 0);
         }
         else if (Game1.activeClickableMenu is NoteMenu)
         {
             Game1.activeClickableMenu = null;
         }
     }
 }
예제 #2
0
        // update only the quest description initially
        // once the quest is completed, it needs to be updated again along with the reward
        private void UpdateItemDeliveryQuest(ItemDeliveryQuest quest)
        {
            if (quest.deliveryItem.Value == null)
            {
                Logger.Trace("Can not adjust reward for daily quest that is managed by Quest Framework.");
                return;
            }

            // item delivery quests don't have a reward property
            // instead, the reward is calculated from the item being requested once the quest has been completed
            // this assumes that the reward is always three times the item value
            int originalReward = quest.deliveryItem.Value.Price * 3;
            int adjustedReward = QuestHelper.GetAdjustedReward(originalReward, this.config);

            if (QuestHelper.GetReward(quest) == adjustedReward)
            {
                return;
            }

            // replace values in the quest text
            QuestHelper.UpdateDescription(quest, originalReward, adjustedReward);

            // true once the reward can be collected from the quest log
            if (!quest.hasReward())
            {
                return;
            }

            QuestHelper.SetReward(quest, adjustedReward);
        }
예제 #3
0
        private static bool ItemDeliveryQuestLoadPrefix(ref ItemDeliveryQuest __instance)
        {
            // pick random quest from loaded quests
            var quests = ModEntry.AddedQuests
                         .Where(q => q.Type == QuestType.ItemDelivery)
                         .ToList();

            var quest = quests[Game1.random.Next(quests.Count())];

            if (quest == null)
            {
                return(false);
            }

            quest = ModEntry.ResolveQuestTextTags(quest);

            // don't set the quest title here otherwise it will be used in the questlog. we want to default title, 'Delivery', not the user submitted one in the quest log
            __instance.questDescription   = ModEntry.ConstructDescriptionString(quest);
            __instance.currentObjective   = quest.Objective;
            __instance.dailyQuest.Value   = true;
            __instance.daysLeft.Value     = quest.DaysToComplete;
            __instance.moneyReward.Value  = quest.MoneyReward;
            __instance.deliveryItem.Value = new Object(quest.DeliveryItem, 1);
            __instance.target.Value       = quest.Requester;

            return(false);
        }
예제 #4
0
	public void Setup()
	{
		questSet [0] = new Quest();
        questSet [1] = new ItemQuest(itemquest);
		questSet [2] = psychoKilling = new PsychopathKillingQuest ();
		questSet [3] = new ItemDeliveryQuest ();
		questSet [4] = new SlaughterQuest ();
		finalQuest = new PsychopathegeneQuest (itemquest);
		mapSet = false;
		finalQuestStarted = false;
	}
예제 #5
0
 public void Setup()
 {
     questSet [0]      = new Quest();
     questSet [1]      = new ItemQuest(itemquest);
     questSet [2]      = psychoKilling = new PsychopathKillingQuest();
     questSet [3]      = new ItemDeliveryQuest();
     questSet [4]      = new SlaughterQuest();
     finalQuest        = new PsychopathegeneQuest(itemquest);
     mapSet            = false;
     finalQuestStarted = false;
 }
예제 #6
0
        /// <summary>The method invoken when the player startes a new day. Used for adding new billboard quests.</summary>
        /// <param name="sender">The event sender.</param>
        /// <param name="e">The event data.</param>
        private void OnDayStarted(object sender, DayStartedEventArgs e)
        {
            // ensure there is space for a new quest
            if (CurrentBillBoardQuests.Count == 8)
            {
                return;
            }

            // use rng to decide if user should get another quest
            double chance = Game1.random.NextDouble();

            if (chance < .4)
            {
                // decide which type of quest to get
                string[] questTypes = Enum.GetNames(typeof(QuestType));
                string   questType  = questTypes[Game1.random.Next(questTypes.Length)];

                switch (questType)
                {
                case "SlayMonsters":
                {
                    //Quest quest = new SlayMonsterQuest();
                    //CurrentBillBoardQuests.Add(quest);
                    this.Monitor.Log("New SlayMonsterQuest has been added to the billboard", LogLevel.Trace);

                    break;
                }

                case "Fishing":
                {
                    //Quest quest = new FishingQuest();
                    //CurrentBillBoardQuests.Add(quest);
                    this.Monitor.Log("New FishingQuest has been added to the billboard", LogLevel.Trace);

                    break;
                }

                case "ItemDelivery":
                {
                    Quest quest = new ItemDeliveryQuest();
                    CurrentBillBoardQuests.Add(quest);
                    this.Monitor.Log("New ItemDeliveryQuest has been added to the billboard", LogLevel.Trace);

                    break;
                }
                }
            }
        }
예제 #7
0
        private void UpdateDeliveryQuest(NpcHandler npcHandler, ItemHandler itemHandler, Quest quest)
        {
            ItemDeliveryQuest request = (ItemDeliveryQuest)quest;
            bool isValidObjective     = ParseOneByObjective(itemHandler.Item.ParentSheetIndex, request.item.Value);
            bool isValidRecipient     = ParseOneByRecipient(npcHandler.Target.Name, request.target.Value);

            // Clint's Attempt
            if (request.id.Value == 110 && isValidObjective && npcHandler.Target.Name.Equals("Emily"))
            {
                itemHandler.RemoveFromInventory(1);
                npcHandler.Update(250, true, "Clint");
                Update(quest, 0);
            }
            else if (isValidRecipient && isValidObjective)
            {
                // Robin's Request
                if (request.id.Value == 113)
                {
                    bool isValidAmount = Game1.player.hasItemInInventory(itemHandler.Item.ParentSheetIndex, 10);
                    if (isValidAmount)
                    {
                        itemHandler.RemoveFromInventory(10);
                        npcHandler.Update(250, true, null);
                        Update(quest, request.moneyReward.Value);
                    }
                    else
                    {
                        // Remove none and warn
                        WarnAmountLow(request.target.Value, 10);
                    }
                }
                else if (quest.dailyQuest.Value)
                {
                    itemHandler.RemoveFromInventory(1);
                    npcHandler.Update(150, true, null);
                    Update(quest, itemHandler.Item.Price * 3);
                }
                else
                {
                    itemHandler.RemoveFromInventory(1);
                    npcHandler.Update(250, true, null);
                    Update(quest, request.moneyReward.Value);
                }
            }
        }
예제 #8
0
        private void Time_AfterDayStarted(object sender, EventArgs e)
        {
            Quest                   questy = (Quest)null;
            ItemDeliveryQuest       itemy  = (ItemDeliveryQuest)null;
            FishingQuest            fishy  = (FishingQuest)null;
            SlayMonsterQuest        slayey = (SlayMonsterQuest)null;
            ResourceCollectionQuest sourcy = (ResourceCollectionQuest)null;


            this.Monitor.Log($"Daily Help Wanted quest generated.");
            double num = new Random((int)Game1.uniqueIDForThisGame + (int)Game1.stats.DaysPlayed + (int)Game1.timeOfDay).NextDouble();

            if (Game1.stats.DaysPlayed <= 1U)
            {
                Game1.questOfTheDay = questy;
            }
            else if (num >= 1 - this.itemPercent)
            {
                itemy = new ItemDeliveryQuest();
                itemy.loadQuestInfo();
                Game1.questOfTheDay = itemy;
            }
            else if (num >= 1 - this.itemPercent - this.fishPercent)
            {
                fishy = new FishingQuest();
                fishy.loadQuestInfo();
                Game1.questOfTheDay = fishy;
            }
            else if (num >= 1 - this.itemPercent - this.fishPercent - this.noQuestPercent || MineShaft.lowestLevelReached <= 0 || Game1.stats.DaysPlayed <= 5U)
            {
                Game1.questOfTheDay = (Quest)null;
            }
            else if (num >= 1 - this.itemPercent - this.fishPercent - this.noQuestPercent - this.slayPercent)
            {
                slayey = new SlayMonsterQuest();
                slayey.loadQuestInfo();
                Game1.questOfTheDay = slayey;
            }
            else
            {
                sourcy = new ResourceCollectionQuest();
                sourcy.loadQuestInfo();
                Game1.questOfTheDay = sourcy;
            }
        }
예제 #9
0
 /// <summary>
 /// Is the gift being given part of an item delivery quest?
 /// </summary>
 /// <param name="target">NPC to be gifted</param>
 /// <param name="heldItem">Item currently held (must be a gift)</param>
 /// <returns>If the item is part of a quest delivery - true, else false</returns>
 public bool IsItemQuestGift(NPC target, Item heldItem)
 {
     if (target == null || heldItem == null)
     {
         return(false);
     }
     foreach (Quest q in Game1.player.questLog)
     {
         if (q.questType == Quest.type_itemDelivery)
         {
             ItemDeliveryQuest quest = q as ItemDeliveryQuest;
             if (quest == null)
             {
                 break;
             }
             if (quest.target?.Value == target.Name && quest.item.Value == heldItem.ParentSheetIndex)
             {
                 return(true);
             }
         }
     }
     return(false);
 }