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