Gatherer

Gatherer

Free
Version: V12
FVTT: V12
Any System
Download
Changelog

    Recommended Modules

    Example TableExample Table

    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

    Selecting the Gatherer SheetSelecting the Gatherer Sheet

    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 new Text Journal Page in it (or add a Text Journal Page in an existing Journal)
    • In the Page header, click the Sheet button and in This Sheet
    A Fully setup Gatherer SheetA Fully setup Gatherer 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 ModeGatherer 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

    Gatherer MinigameGatherer Minigame

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