using System; using Omegasis.DailyQuestAnywhere.Framework; using StardewModdingAPI; using StardewModdingAPI.Events; using StardewValley; using StardewValley.Menus; using StardewValley.Quests; namespace Omegasis.DailyQuestAnywhere { /* *TODO: Make quest core mod??? */ /// The mod entry point. public class DailyQuestAnywhere : Mod { /********* ** Fields *********/ /// The mod configuration. private ModConfig Config; Quest dailyQuest; /********* ** Public methods *********/ /// The mod entry point, called after the mod is first loaded. /// Provides simplified APIs for writing mods. public override void Entry(IModHelper helper) { this.Config = helper.ReadConfig(); helper.Events.Input.ButtonPressed += this.OnButtonPressed; helper.Events.GameLoop.SaveLoaded += this.OnSaveLoaded; } /********* ** Private methods *********/ /// Raised after the player presses a button on the keyboard, controller, or mouse. /// The event sender. /// The event arguments. private void OnButtonPressed(object sender, ButtonPressedEventArgs e) { if (Context.IsPlayerFree && e.Button == this.Config.KeyBinding) { if (!Game1.player.hasDailyQuest()) { if (this.dailyQuest == null) this.dailyQuest = this.generateDailyQuest(); Game1.questOfTheDay = this.dailyQuest; Game1.activeClickableMenu = new Billboard(true); } } } /// Raised after the player loads a save slot and the world is initialised. /// The event sender. /// The event arguments. private void OnSaveLoaded(object sender, SaveLoadedEventArgs e) { // makes daily quest null so we can't just keep getting a new reference this.dailyQuest = null; } /// Generate a daily quest for sure. public Quest generateDailyQuest() { Random chanceRandom = new Random((int)Game1.uniqueIDForThisGame + (int)Game1.stats.DaysPlayed); int chance = chanceRandom.Next(0, 101); float actualChance = chance / 100; //If we hit the chance for actually generating a daily quest do so, otherwise don't generate a daily quest. if (actualChance <= this.Config.chanceForDailyQuest) { Random r = new Random((int)Game1.uniqueIDForThisGame + (int)Game1.stats.DaysPlayed); int rand = r.Next(0, 7); switch (rand) { case 0: return new ItemDeliveryQuest(); case 1: return new FishingQuest(); case 2: return new CraftingQuest(); case 3: return new ItemDeliveryQuest(); case 4: return new ItemHarvestQuest(); case 5: return new ResourceCollectionQuest(); case 6: return new SlayMonsterQuest(); } } return null; //This should never happen. } } }