Gatherer
Recommended Modules
- Simple Calendar (opens in a new tab) will allow the automatic reset of gathering spots depending on time passed, without it this feature will not work
Premade Content
Want to start with some already made recipes and gathering points?
Download
the DnD5e Potion Crafting &
Gathering (opens in a new tab) module by
Action_Jay (opens in a new tab) The module leverages both the Mastercrafted and Gatherer modules. Make sure you install
both!
Creating a Gathering spot
Gatherer works with Roll Tables
, so
before you start create a roll table and drag and drop the items you
want for your Gathering Spot in it. To create a gathering spot, follow
this steps.
- Create a new
Journal
and create a newText Journal Page
in it (or add a Text Journal Page in an existing Journal) - In the Page header, click the
Sheet button
and inThis Sheet
select Gatherer Sheet
- Select a Roll table from the drop down menu.
- Set the extra options you want, for this first tutorial we will use just the basics. We will give this gathering spot a 15 hours reset time and 10 draws (or pulls).
- The sheet should look like the one in the
A Fully setup Gatherer Sheet
image Note
: Due to a Bug (opens in a new tab) with the new V10 Journals, you might need to refresh the browser (F5) after your first setup of a Gatherer Sheet- Once you saved and refreshed (if needed) your Journal Page should
look like this when in view mode
Gatherer Sheet in View Mode
Gatherer Sheet in View Mode
You can now gather from this sheet, remember that you need either a token selected or a character assigned to gather!
As a GM you can manually reset a spot with the Reset button!
Options
You can configure multiple options for the Gatherer Sheet
Time
Specify the time in hours after which the timer and draws are reset. For example, a time of 48 will reset the spot every 2 days. You can use decimal values.
Draws
The number of Pulls that can be made from this spot. Draws\Pulls will reset automatically with time or when pressing the Reset button.
Quantity
The amount of items that will be gathered from this spot. This value is
the same for all items and cannot be customized per item. If you wish to
change item chances, you can always weight the table differently.
Quantity also evaluates roll expressions. For example 1d6+3
and 3
will both work.
If you want to set per-item quantities, see the Better Rolltables integration section.
Require
Specify item requirements for this gathering, the parameters can be a
comma separated list of item names. The actor doing the gathering will
need to have ALL the Required items if multiple are specified. Example Fishing Rod,Bait
Minigame
The minigame tag will let the user pick the item to gather instead of
leaving it to chance! When using this tag, instead of a table roll, the
user will be prompted with a window with items appearing in a random
sequence, when the user clicks the button the currently displayed item
will be awarded! The time is in milliseconds, e.g. 800
.
Remember that the time you chose is then multiplied by the chance an
item has to be drawn from the table, so for example, if an item has 20%
chance of being drawn, it's display timer will be 800ms*0.2 = 160ms
so
make sure to pick an appropriate amount of time!
And remember, the more you wait to pick the item the faster the minigame will get!
Note: Leaving this field empty will disable the minigame and use standard table rolling.
Expression
A Macro expression that will be evaluated before the gathering. If the
expression resolves to false
, a Pull will be consumed but no items
will be gathered. Example const res = await actor.rollSkill("inv"); return res.total > 15;
will roll an investigation check, if the result
is higher than 16 the pull will succeed.
If you wish to cancel a gathering alltogether, return null
instead and
no pulls will be consumed.
Checks (DND5E Only)
For the DnD5e system, a dropdown with ability/skill checks and tool checks are available with corresponding DC! The tool name is Case Sensitive! Failing the check will result in a consumed Pull but no rewards.
Harvesting
You can gather resources from dead creatures!
- Open the creature actor sheet
- Click on the
Gatherer Button
on top - Drag in a Gatherer Page
- Set a Pulls override (if you want)
Players will be able to gather resources from that token by pressing Shift + G while having the token Targeted.
Configuration
In the game settings you can disable the harvesting feature, as well as set the resource path to check if the creature can be harvested (eg. is dead)
Better Rolltables Integration
If you have the Better Rolltables module installed, and you set Better Tables Type
to Better Table
you will be able to set a formula
for
each item. In this instance, Gatherer will use that formula instead of
the quantity specified in the Gatherer Sheet.
API
This section contains APIs for advanced users and developers.
Macros
Gather
If you wish to do so, you can use the CONFIG.GATHERER.gather
macro to gather without the need to open the journal.
/**
* Gather the journal.
* @param {string} pageUuid - The uuid of the journal to gather.
* @param {string} actorUuid - The uuid of the actor to gather for. (optional)
*/
/*EXAMPLE*/
CONFIG.GATHERER.gather("JournalEntry.CFn2RzFEskvetNZy.JournalEntryPage.nFcrnFCbWH8wHDPV", "Actor.OcOyw1pt7EKZ1oMC");
Hooks
gathererGather
The gathererGather
hook, fires just before the items are gathered from the table. It receives the following parameters:
/**
* Object representing gathered data.
* @typedef {Object} gathererData
* @property {Actor} actor - The actor associated with the gathered data.
* @property {Item[]} items - An array of items associated with the gathered data.
* @property {number} quantity - The quantity of items in the gathered data.
*/
Example:
Hooks.on("gathererGather", (gathererData) => {
gathererData.quantity *= 2;
gathererData.actor.update({ "data.attributes.hp.value": 0 });
gathererData.items = gathererData.items.filter((item) => item.name !== "Rope");
});