img



img

Help Wanted


By: Erinthe
Addon | img 257




Description

___________________________________________________________________________________________________________________________

This mod enhances the Help Wanted board in front of the Seed Shop.

Its main functionality is to replace the single "quest of the day" with a list of quest notes stuck to the billboard.

Other features include:
 

  • Require people to actually like (or even love) the items they request (optional)
  • Ignore the game's restrictions on items to request (only one of the above is set)
  • Set a max price for item requests (default -1 means disabled)
  • Toggle allowing requests for artisan goods (default true)
  • Toggle avoiding posting quests from NPCs with max hearts (default true) - only activates in single player mode
  • Set a custom number of days allowed to complete help wanted quests (default 2)
  • Set the max number of quests per day (default 10)
  • Change the relative chance of receiving any type of quest
  • Customize the default quest notes
  • Add quests via a SMAPI API


Relative quest type chances are relative to each other. Slay monster quests are only available if one has unlocked the mine and played for at least 6 days.

Max number of quests per day is limited by the number of notes that can fit on the board within the configurable overlap parameters.

Custom Quest Notes

To replace the default notepad icon and / or pin (drawn by Lumisteria) target the following paths using Content Patcher:

aedenthorn.HelpWanted/pad
aedenthorn.HelpWanted/pin

An example of a mod that does this is (CP) Help Wanted Pad and Pin Retexture.


Specific Quest Notes

You can also make icons specific to npcs, quest types, or even quest types per NPC by targeting subpaths as follows:

aedenthorn.HelpWanted/pad/NPCNAME
[b]aedenthorn.HelpWanted/pad/QUESTTYPE
[b]aedenthorn.HelpWanted/pad/NPCNAME[b][b]/QUESTTYPE[/b][/b]
[/b]
aedenthorn.HelpWanted/pin/NPCNAME
[b]aedenthorn.HelpWanted/p[b][b]in[/b]/QUESTTYPE[/b]
[b]aedenthorn.HelpWanted/p[b][b]in[/b]/NPCNAME[b]/QUESTTYPE[/b][/b]
[/b][/b]
[/b]Replace NPCNAME with the codename of the NPC, e.g.

aedenthorn.HelpWanted/pad/Emily

Replace QUESTTYPE with the quest type, e.g.

[b]aedenthorn.HelpWanted/pad/ItemDelivery

[/b]Valid quest types are:

 

  • ItemDelivery
  • ResourceCollection
  • Fishing
  • SlayMonster



Random Quest Notes

Any of the above paths can be used to provide multiple textures to be chosen at random, by adding a suffix /NUMBER, e.g.:

aedenthorn.HelpWanted/pad/1
[b]aedenthorn.HelpWanted/pad/2
...[/b]

aedenthorn.HelpWanted/pin/Emily/ItemDelivery/1
[b]aedenthorn.HelpWanted/pin/Emily/[b]ItemDelivery/2
[/b]...

[/b]etc.

Numbers must be sequential, starting at 1.


Adding Quests

Quests can be added using either Content Patcher or C#


Content Patcher

To add quests using Content Patcher, you can simply input the quest details as follows:

      {
<br />         "Action": "EditData",
<br />         "Target": "aedenthorn.HelpWanted/dictionary",
<br />         "Entries": {
<br />            "aedenthorn.TestQuest": {
<br />               "percentChance": 100,
<br />               "quest": {
<br />                  "questType": "ItemDelivery",
<br />                  "target": "Krobus",
<br />                  "item": "Gold Bar",
<br />                  "number": 1,
<br />                  "questDescription": "Gib Gold Bar, Krobus",
<br />                  "targetMessage": "Tanks bigly.",
<br />                  "currentObjective": "Give Gold Bar to Krobus."
<br />               }
<br />            }
<br />         }
<br />      },


If percentChance is omitted (or set to 100), the quest will show up every day. You can use Content Patcher When conditions to further choose when the quest will be added to the dictionary.

questType can be any of the following:

 

  • ItemDelivery
  • ResourceCollection
  • Fishing
  • SlayMonster


You can add questTitle to give your quest a custom title.

You can customize the quest board visuals using the complete set of fields, which you can see on GitHub.


SMAPI C#

To add a quest with C#, use SMAPI's mod api system. You will need to create a class that implements the following interface:

&nbsp; &nbsp; public interface IQuestData
<br />&nbsp; &nbsp; {
<br />&nbsp; &nbsp; &nbsp; &nbsp; public Texture2D padTexture { get; set; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; public Rectangle padTextureSource { get; set; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; public Color padColor { get; set; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; public Texture2D pinTexture { get; set; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; public Rectangle pinTextureSource { get; set; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; public Color pinColor { get; set; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; public Texture2D icon { get; set; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; public Rectangle iconSource { get; set; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; public Color iconColor { get; set; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; public float iconScale { get; set; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; public Point iconOffset { get; set; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; public Quest quest { get; set; }
<br />&nbsp; &nbsp; }


You then pass an instance of this class to the API using another interface:

&nbsp; &nbsp; public interface IHelpWantedAPI
<br />&nbsp; &nbsp; {
<br />&nbsp; &nbsp; &nbsp; &nbsp; public void AddQuestToday(IQuestData data);
<br />&nbsp; &nbsp; }


This should be done in Helper.Events.GameLoop.DayStarted.

Here's an example:

&nbsp; &nbsp; &nbsp; &nbsp; public override void Entry(IModHelper helper)
<br />&nbsp; &nbsp; &nbsp; &nbsp; {
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Helper.Events.GameLoop.DayStarted += GameLoop_DayStarted;
<br />&nbsp; &nbsp; &nbsp; &nbsp; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; private void GameLoop_DayStarted(object sender, StardewModdingAPI.Events.DayStartedEventArgs e)
<br />&nbsp; &nbsp; &nbsp; &nbsp; {
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var api = Helper.ModRegistry.GetApi("aedenthorn.HelpWanted");
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (api != null)
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var d = new MyQuestData()
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pinTextureSource = new Rectangle(0, 0, 64, 64),
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padTextureSource = new Rectangle(0, 0, 64, 64),
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pinTexture = pinTexture,
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padTexture = padTexture,
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pinColor = Color.Black,
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padColor = Color.Gray,
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; icon = Game1.getCharacterFromName("Krobus").Portrait,
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iconSource = new Rectangle(0, 0, 64, 64),
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iconColor = new Color(150,&nbsp;150,&nbsp;150,&nbsp;150),
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iconScale = 1,
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iconOffset = new Point(32, 64),
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; quest = new ItemDeliveryQuest()
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (d.quest as ItemDeliveryQuest).target.Value = "Krobus";
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (d.quest as ItemDeliveryQuest).item.Value = 305;
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (d.quest as ItemDeliveryQuest).targetMessage = "I can haz void egg? Tanks lots.";
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; d.quest.currentObjective = "Gib Krobus void egg.";
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; d.quest.questDescription = "Pls gib.";
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.AddQuestToday(d);
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
<br />&nbsp; &nbsp; &nbsp; &nbsp; }
<br />



Credits

Thanks to Lumisteria for the unprompted kindness of making the pad / pin icon.


Config

You can customize this mod by editing the config file or using Generic Mod Config Menu.


Technical

Requires SMAPI.

Implements a Generic Mod Config Menu interface to change config settings in-game.

Compatible with Mod Updater for automatic updates.

Code is at 

If you want to complain or ask for help or help me test my mods, you can visit my Discord server.

A list of all my mods for Stardew Valley is available at:




About Project

Created: September 1st 2023

Updated: September 1st 2023

Project ID: 66020

License: All Rights Reserved

__________________________________________

Game Versions: View All >

1.01.03

1.01.03

1.01.03

1.01.03

1.01.03

__________________________________________

Flavors: View All >

WoW Retail

__________________________________________

Categories

Companions

Battle

__________________________________________

Main File

Erinthe_Help Wanted.zip
  • Release
  • September 1st 2023

    __________________________________________

    Recent File

    Erinthe_Help Wanted.zip
  • Release
  • September 1st 2023

    __________________________________________

    Members

    img
    Erinthe
    Owner

    __________________________________________

    Report