Pull the Attribute & Item Automation wiki page out of the subfolders since Forgejo doesn't like that
parent
37ce8111fe
commit
db6cee3647
2 changed files with 0 additions and 75 deletions
|
|
@ -1,75 +0,0 @@
|
||||||
Text-Based Actors comes with two types of items, which are "Attributes"
|
|
||||||
and "Items". These represent two common concepts in TTRPGs:
|
|
||||||
|
|
||||||
- attributes represent your character's statistics, like how strong they are
|
|
||||||
- items represent all physical things that your character can hold, as well as
|
|
||||||
anything else that you character might possess, this can be anything from weapons
|
|
||||||
and armour, to Class Features if your system has those.
|
|
||||||
|
|
||||||
both of these item types allow some limited form of automation within
|
|
||||||
the system, that you can make use of if you want to, you can utilize the
|
|
||||||
automation by writing a Macro within Foundry and then attaching it to the
|
|
||||||
item while editing it as the "Macro to Execute" on the item.
|
|
||||||
|
|
||||||
## Basic Automation
|
|
||||||
Skills similar to how they function in D&D can be represented using
|
|
||||||
attribute items, where the value of the attribute is whatever the bonus
|
|
||||||
to that skill would be. Let's say you have two attributes: "Proficiency
|
|
||||||
Bonus" and "Arcana", if you wanted to write a Macro that could be used to
|
|
||||||
make rolls instead of manually typing it out every time in the formula of
|
|
||||||
`1d20 + proficiency bonus + arcana bonus`, your macro should be set to
|
|
||||||
type "chat" while the content of it is `/r 1d20 + @proficiency_bonus +
|
|
||||||
@arcana`, and that will replace the proficiency and arcana bonuses when
|
|
||||||
you use that skill from the Actor sheet.
|
|
||||||
|
|
||||||
However, the above example requires making a separate Macro for each and
|
|
||||||
every skill you want to automate, which is really annoying if you have a
|
|
||||||
lot of them without any differences between the formula. So Text-Based
|
|
||||||
Actors actually provides a shortcut in order to make doing this easier.
|
|
||||||
In the chat macros, you can reference whatever Attribute was used to make
|
|
||||||
the roll with the `@active.*` special roll data group.
|
|
||||||
|
|
||||||
If the item being used is an Attribute, the available keys are:
|
|
||||||
|
|
||||||
- `@active.name`: The name of the Attribute rolled
|
|
||||||
- `@active.value`: The current value of the Attribute item
|
|
||||||
- `@active.min`/`@active.max`: The minimum/maximum value of the Attribute's value
|
|
||||||
|
|
||||||
If the item being used was an Item, the available keys are:
|
|
||||||
|
|
||||||
- `@active.name`: The name of the item used
|
|
||||||
- `@active.quantity`: The quantity of the item
|
|
||||||
- `@active.equipped` (0 or 1): Whether or not the item is considered equipped
|
|
||||||
|
|
||||||
## Advanced Automation
|
|
||||||
|
|
||||||
**Advanced automation requires knowledge of programming in JavaScript.**
|
|
||||||
|
|
||||||
When writing macros for your items, you can make it as advanced as you
|
|
||||||
want by writing a script macro instead of a chat macro. This gives full
|
|
||||||
access to Foundry's API and making changes to stuff. Do you want a gun
|
|
||||||
that automatically reduces the quantity of ammo when you shoot it? Then
|
|
||||||
advanced automation is for you.
|
|
||||||
|
|
||||||
Using the example above, creating a gun that automatically reduces it's
|
|
||||||
ammo when using, the simplest way to do this is to treat the `quantity`
|
|
||||||
on the gun as the amount of ammo, in which the macro to do something like
|
|
||||||
that would be:
|
|
||||||
```js
|
|
||||||
// "item" is passed in by the system, and is the full Item document
|
|
||||||
// of the item that this macro is attached to, it's a better version
|
|
||||||
// of the chat-macro's "@active" special data
|
|
||||||
|
|
||||||
// check that the gun has ammo
|
|
||||||
if (item.system.quantity <= 0) {
|
|
||||||
ui.notifications.error(`${item.name} is out of ammo, reload it before firing again!`);
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
// The roll formula can be created however you need
|
|
||||||
const roll = new Roll(`1d20 + 2`);
|
|
||||||
await roll.evaluate(); // rolls the actual dice
|
|
||||||
await roll.toMessage(); // sends it to chat
|
|
||||||
|
|
||||||
await item.update({ "system.quantity": item.system.quantity - 1 });
|
|
||||||
```
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue