Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Create a free account

[Script] Reporter

March 26 (4 years ago)

Edited September 16 (3 years ago)
keithcurtis
Forum Champion
Marketplace Creator
API Scripter

Reporter has been updated to One Click

There were many new additions and features, and the old thread had auto closed. Please see the new thread.



Reporter

A script to poll the VTT and return info on Token/Character pairs, along with customized action tools

This is a script I have been working on for a couple of months. I don't think it's quite polished enough to send to one-click yet—it's too easy to get garbage results if the syntax isn't just right.

Reporter is a script that reads the tokens on the board that are associated with character sheets and builds a report of them in the chat, returning selected values from either the token settings or the character sheets they are associated with. You can either select a set of tokens to work with, or if you select no tokens, it will assume all tokens on the Object/Token layer. To run the script on other layers, you must specifically select tokens, though. The basic syntax is:

!report[filters] --[queries] ---[buttonline] ----[keywords]


Filters

Filters have changed since v.0.x. Please check any previous macros. This was changed to make parsing possible for running multiple filters on the same report.

By default, reporter uses the selected tokens to run a query, or if no tokens are selected, all tokens on the token/objects layer.

You may wish to constrain a report to only tokens which match a specific set of criteria. For example, you might have 50 tokens on the table, but 10 of them are goblins, and you only want to work with the goblins. Or you want to find all the characters who are both PCs and have darkvision. You can add filters after the !report command. The filter is written using a similar syntax to a query, followed by the filter term. In essence, it is querying each token for a match. The syntax is:

!report||operator|source|attribute|value

You can add more filters just by adding double pipes to the end of the first filter and typing another.

There are four types of operator.
+ only includes the token/character pairs that matches the query
- excludes any token/character pair that exactly matches the query
~ only includes any character that is a partial match for the query
^ excludes any character that is a partial match for the query

thus:

!report||-|c|name|Goblin will return all tokens that are not represented by the Goblin character sheet.
!report||~|c|name|Goblin will return any tokens that are represented by the Goblin or Hobgoblin character sheet.
!report||-|c|npc|1||+|t| has_night_vision|true will exclude all NPCs (leaving only PCs), and then only return those that have nightvision set.


Filters do not support an alias, because they are never displayed in the final report.
Filters are executed sequentially, with each filter working on the result from the last, so some logic is required for best results.
Filters are case insensitive.
There is as yet, no way to test for an empty, or undefined value.


Queries

Queries are constructed using
t|attribute to poll a token attribute
c|attribute to poll a character sheet attribute

Examples
!report --t|name would return a report of all selected token names
!report --c|strength would return a report of all strength values on the character sheets of the selected tokens

For character sheets, the script will try to pull a value from the character journal first, and if that does not exist, the installed character sheet. At this point in time, Reporter cannot return information that requires a callback, such as the GMNotes field.


Dividers

You may not always want each attribute reported on its own line. You can add a code after the attribute name(not the alias) to use something either than a line return between attributes

comma (,) Adds three non-breaking spaces between this attribute and the next, keeping them on the same line when possible.

period (.) Adds a vertical pipe between this attribute and the next, keeping them on the same line when possible.

dash (-) Adds a thin gray horizontal rule between this attribute and the next.

Hashtag (#) Adds a bit of horizontal space between this attribute and the next.

Examples:

!report --t|emits_bright_light,|Bright-Light t|bright_light_distance|Distance t|emits_low_light,|Low-Light t|low_light_distance|Distance ---light

will return this:




Aliases
There are times in the report when you would not like 'has_bright_light_vision' in the report. You can substitute an alias for the attribute name that will display in chat. For this, just add another pipe after the query and type an alias.

For example, if a token has 60 feet of Night Vision:

t|night_vision_distance
might produce:
T: night_vision_distance = 60
but
t|night_vision_distance|NV
would yield:
T: NV= 60

If you use a hyphen (-) as the alias, it will display no label at all. You can turn on or off the graphic for the source (token or character) with source keyword described below.


Buttonline

The buttonline is a string containing text and Ability or API Command buttons. These are formed using the normal syntax for buttons: [button name](command) with a few exceptions. In order to keep the Roll20 parser from resolving queries and attribute calls before the script gets them, they need to be written slightly differently.
Examples:
@{token|name} is written as A{token|name}
?{question|default_answer} is written as Q{question|default_answer}

Further, for a handful of scripts, the Reporter API will attempt to parse the code so that each buttonline refers to the specific token being reported on. Currently Token Mod, ChatSetAttr and Supernotes are supported. It does this by injection the token id into the script calls for those scripts. Because of this, do not use --ids in a token-mod call, ChatSetAttr call, or --id in a Supernotes call.


Special Codes

Reporter contains a few special codes for common cases, to make macro writing easier. You can put these in place of normal commands:
--vision as the Query will replace any declared query line with one designed to report most vision situations. It will give values for whether the token has sight, night vision and what the distance of any night vision is.
---vision as the Buttonline will replace any declared button line with a buttonline designed to handle most cases of vision and darkvision.

--light as the Query will replace any declared query line with one designed to report most lighting situations. It will give values for the amount of light, distance and what type.
---light as the Buttonline will replace any declared button line with a buttonline designed to handle most cases of lighting.

The buttonline codes require the installation of the Token-mod API.


Keywords

Keywords change the overall appearance or scope of the report. They are separated from the rest of the report by four dashes and must come at the end.

layer|[gmlayer|objects|map|walls|tracker|all] will constrain the report to a particular layer or all layers at once, so long as no tokens are selected. If any tokens are selected, Reporter will default to the layer the selected tokens are on. This makes it easier for instance to check the vision settings of tokens on the token layer and the gmlayer simultaneously, or to ping pull to note tokens on the gm layer without switching manually to that layer. 

If the layer keyword all is used the report will be on all token/character pairs on all layers. In this case, a layer character will appear on each subhead line of the report to let you know which layer the token is on.

If the layer keyword tracker is used the report will be on all token/character pairs on the Turn Tracker as if it were a layer. In this case, a layer character will appear on each subhead line of the report to let you know which layer the token is on. If you click on the layer token, it will switch the token from the GM/Notes layer to the  Token/Objects layer and back. 

compact|[true|false] (default=false): The compact mode shows the token image at half size, and eliminates the second line of the report subhead, since it is not always desired. You may have a very large report you want to see better, or you may be using a sheet that does not support the default values. Currently the second line of the subhead only references the D&D 5th Edition by Roll20 Sheet.

showheader|[true|false] (default=true): This will control whether the header will display at the top of the report.

showfooter|[true|false] (default=true): This will control whether the footer will display at the bottom of the report.

printbutton|[true|false] (default=true): This will control whether the print button will display on each line of the report.

notesbutton|[true|false] (default=false): This will control whether a notes button will display on each line of the report. This notes button will return the token notes for the token on that line. The visibility of the notes button is controlled by the visibility keyword. If the visibility is "gm", it will use a !gmnote command, if the If the visibility is "whisper", it will use a !selftnote command, and if the visibility is "all", it will use a !pcnote command.

visibility|[gm|whisper|all] (default=gm): This will determine how the report is presented. "gm" is whispered to the gm, "whisper" is whispered to the user who sent the command, "all" is posted openly for all to see.

showfooter|[true|false] (default=true): This will control whether the footer will display at the bottom of the report.

source|[true|false] (default=true): if source is set to false, the C and T characters that show whether an attribute comes fromthe token or the sheet will not be displayed. Use this is they are a distraction.

charactersheetlink|[true|false] (default=true): if this keyword is set to false, the link to open the token's corresponding character sheet will not display

subtitle|[true|false] (default=true): if this keyword is set to false, the line directly below the character name will not display. (This is also the default in Compact mode). This may be desirable if not using the D&D 5th Edition by Roll20 Sheet.

ignoreselected|[true|false] (default=false): if this keyword is set to true, the search will not be preset to whichever tokens are selected. The report will run as if no tokens were selected, following whatever layer criteria might have been specified.

npcsubstitutions[true|false] (default=true): if this keyword is set to false, the script will not automatically substitute npc attributes for their PC counterparts (ex: npc_senses for passive_wisdom).This is good for sheets that are not the D&D 5th Edition by Roll20 Sheet.

sort|attribute (default is the raw order): This keyword will sort the final list. Most of the sorts are confined to the token attributes, since they require internal code and if they refer to a sheet may return poor or no results if the sheet does not have the proper attributes. Currently the following values can be sorted on: 

        charName: character name. Sheet must have a "name" attribute.
        charNameI: character name, inverse order. Sheet must have a "name" attribute.
        tokenName: token name
        tokenNameI: token name, inverse order.
        bar1: token bar1 value
        bar1I: token bar1 value, inverse order.
        bar2: token bar2 value
        bar2I: token bar2 value, inverse order.
        bar3: token bar3 value
        bar3I: token bar3 value, inverse order.
        cr - Challenge Rating. D&D 5th Edition by Roll20 Sheet only
        crI - Challenge Rating, inverse order. D&D 5th Edition by Roll20 Sheet only

title|Title| If this is present in the keywords, the string in between pipes will be placed at the top of the report. If you only want the custom title to display, be sure turn off the header with showheader|false. The title must be placed between two pipes. title|My Title| will work. title|My Title will break.

Examples:

!report ---- layer|gmlayer compact|true

will report on all the tokens on the gm layer in compact mode.

!report  ---- layer|tracker compact|true title|Tracker Navigator| showheader|false showfooter|false

will produce a compact report that will allow you to navigate around the tracker tokens on the board, with links to ping pull, switch layers, open character sheets and more.

A more full featured Turn Tracker could include more info and macros:

!report --c|strength,|Str c|strength,|Dex c|strength|Con c|strength,|Int c|strength,|Wis c|strength#|Cha t|bar1_value,|HP c|npc_ac|AC c|npc_senses|perception t|statusmarkers|Condition ---[Apply Damage](!token-mod --set bar1_value|Q{Enter damage amount. Use positive or negative to modify values|-0}) | [Apply Condition](!token-mod --set statusmarkers|Q{Choose Status|Dead,dead|Bloodied,red}) ----layer|tracker compact|true title|Tracker Display| showheader|false showfooter|false source|false



How to Read a Report


Header. The header of the report will list the range of tokens being reported, by name, followed by the count. The second line is 5e-specific right now, but I'll probably put in some options in the next version.

Report Line. The report line of each item will show an image of the token, followed by its token name and the associated character sheet name. If the character sheet is a renamed NPC statblock. ex. If Captain Hero is using the Veteran sheet, it will note this. It will also not if any of the characters have the PC flag.
The second line of the report will display the creature type for NPCs or the class and level for PCs. This is specific to the D&D 5th Edition by Roll20 Sheet and will probably return undefined on other sheets. This is a feature in development.

Click on:
Token image - Ping pull all players to the token's location.
Token Name - Ping pull only GM to the token's location. Invisible to players.
Character Name - Opens the associated character sheet.

Then follows a list of the attributes being requested.
Tindicates a token attribute.
Cindicates a character attribute.

The display of the source character can be turned off with the keyword source|false.

Button Line. This is the list of commands that can be performed on each token. If it is a token-mod command, or a Supernotes command, it will be specific to that token. Refer to Button Line documentation above for details.

Special Buttons. There are a few buttons that appear in the report, at various places on the right side.
☰ will call up the report script menu
⟲ will repeat the command that created the report, in case you want to confirm that changes were made.
w  will echo to the chat whatever is on that line: Token name on a report line, or Page name on the page line of the header.


One-line codes

The following are special codes that expand behind the scenes into full-featured macros, and handle some of the more common uses for Reporter. They are available through the menu button, or you can copy the code as displayed into any macro.

  • !report --vision ---vision - Use this command to check the vision of selected tokens. If you have no selected tokens, it will return a report of all tokens on the Token/Objects layer.
  • !report|vision - Shorthand for the above command. --vision and ---vision are special keywords that can be used as substitutes in any reporter macro.
  • !report --light ---light - Use this command to check the lighting of selected tokens. If you have no selected tokens, it will return a report of all tokens on the Token/Objects layer.
  • !report --light ---lightplus - A more detailed version of the above, with most common light sources.
  • !report|light - Shorthand for the above command. --light, ---light and ---lightplus are special keywords that can be used as substitutes in any reporter macro.
  • !report|help - Use this command display the documentation for the Reporter script. Also accepts !report --help
  • !report|mapkeys - Use this command to display a list of all objects on the gm layer that represent a character called Map Key You can use this to navigate around a map quickly and call up any token notes that might be placed in the Map Key tokens.
  • !report|mapkeys_sorted - As above, but sorted alphabetically.
  • !report|pcs-detail - A detailed display of all PCs on the map.
  • !report|pcs - A compact display of all PCs on the map.
  • !report|npcs-detail - A compact display of all PCs on the map.
  • !report|npcs-actions - A detailed display of all PCs on the map with most token action buttons displayed. Works very well with the Token Action Maker script.
  • !report|tracker - A compact display of all characters in the Turn Tracker.
  • !report|tracker-actions - A  display of all characters in the Turn Tracker with most token action buttons displayed.
  • !report|report - How to read the report. Also accepts !report --report


"That's all great Keith, but what can I use this for?"

I originally wrote this to be a tool to check lighting and vision for each token on each page in a module. And there are some built-in shortcuts that allow for quickly doing this. !report --vision and !report --lighting for queries will return the important values for tokens regarding what they can see and what light they cast. Similarly, there are built in button lines for setting vision and lighting.  !report --vision ---vision and !report --lighting ---lighting will give you reports for each token, and the appropriate buttons to control those values. The graphic above shows the default vision macro. This is what the default lighting report line looks like:


Where's the code?

This has been updated to One Click installation. Please see the new thread.


Special thanks to The Aaron, TImmaugh, and Scott C. for being very patient with my endless "how do I..." questions.

March 26 (4 years ago)

Edited April 17 (3 years ago)
keithcurtis
Forum Champion
Marketplace Creator
API Scripter

Sample Macros


Default

!report

Without any arguments, the base command will just display the token id for every token in the report.



PCs

!report+c|npc|0  --t|has_bright_light_vision|Sight t|night_vision_distance|NV  ---vision

This will find all PCs on the page. (The filter finds all tokens with an npc attribute of zero). This uses fewer, custom vision report lines, but the default Vision buttonline. It could be written out completely as 

!report+c|npc|0  --t|has_bright_light_vision|Sight t|night_vision_distance|NV  ---**Vision** [Off](!token-mod --set bright_vision|false has_night_vision|false) | [On](!token-mod --set bright_vision|true) **Night** [Off](!token-mod --set has_night_vision|true night_vision_distance|0 bright_vision|false) | [On](!token-mod --set night_vision|true) | [Distance](!token-mod --set has_night_vision|true night_vision_distance|Q{Set night vision distance|60} bright_vision|false has_night_vision|false) | **[SET DEFAULT TOKEN](!token-mod --set defaulttoken)**


City Sites

!report+t|bar3_max|?{Choose Type|Home,Home|Temple,Temple|Tavern,Tavern|Inn,Inn|Road,Road|Area,Area|Official,Official|Watchhouse,Watchhouse|Business,Business|Entertainment,Entertainment|Info,Info} --t|bar3_max|Group ---[Set Name](!token-mod --set name|"Q{name|Bob}") | [Set Inhabitant](!token-mod --set bar3_value|"Q{Who lives here|Bob}") | [Set Group](!token-mod --set bar3_max|Q{Choose Type|Home,Home|Temple,Temple|Tavern,Tavern|Inn,Inn|Road,Road|Area,Area|Official,Official|Watchhouse,Watchhouse|Business,Business|Entertainment,Entertainment|Info,Info}) | [Notes](!gmnote)

This is the one I am running in the sample video. This looks for all tokens with a specific value in their bar3 Max bubble. All of the sites on my city map have a value in that bubble of Home, Temple, Tavern, Inn, Road, Area, Official, Watchhouse, Business, Entertainment, or Info. The query fills in one of those values and finds all corresponding tokens on the map. Note that the filter query is written as a normal query, with a question mark. This is because it needs to be interpreted when you run the macro. Only queries and attribute calls in the buttonline need to be escaped. Note that the bar3 value has a query for "Who lives here?". Because we only want that to be resolved when we run that particular buttonline macro for that specific token, it is escaped, so it doesn't ask you when you run the initial macro. Similarly, there is a button to change the assignment of what Group it is in (Home, temple, etc.), and a button to call up a Supernotes macro. Each site token has specific notes for that location. Also note, that you can put an API command button into one of the bar values. In the example below, the unfortunately named Cordinia Sandwich has her character sheet linked.


Compact Tracker Navigator

!report  ---- layer|tracker compact|true title|Tracker Navigator| showheader|false showfooter|false

will produce a compact report that will allow you to navigate around the tracker tokens on the board, with links to ping pull, switch layers, open character sheets and more.

Tracker Controller

A more full featured Turn Tracker could include more info and macros. This one has a couple of very simple token-mod macros for applying damage and conditions

!report --c|strength,|Str c|strength,|Dex c|strength|Con c|strength,|Int c|strength,|Wis c|strength#|Cha t|bar1_value,|HP c|npc_ac|AC c|npc_senses|perception t|statusmarkers|Condition ---[Apply Damage](!token-mod --set bar1_value|Q{Enter damage amount. Use positive or negative to modify values|-0}) | [Apply Condition](!token-mod --set statusmarkers|Q{Choose Status|Dead,dead|Bloodied,red}) ----layer|tracker compact|true title|Tracker Display| showheader|false showfooter|false source|false


Passive Perception

Need to know the passive perception of everyone on the board?

!report --c|npc_senses|perception ---- layer|all compact|true title|Passive Perception| showheader|false showfooter|false source|false


March 26 (4 years ago)

Edited August 30 (3 years ago)
keithcurtis
Forum Champion
Marketplace Creator
API Scripter

Issues

Supernotes integration is pending. The latest version of Supernotes has not yet been merged with the Roll20 repo. Those needing the latest version which allows for calling a note from a token id can find it here, version 0.0.91

When passing a custom buttonline (not a built-in) upon using the repeat button, the buttons are passed as text, not links. Check out the Aaron's HE replacement function, see if this helps.

Add PF2 Support. Needs to report traits on line 2 of each report for NPCs and class + level on PCs

Currently there is an undocumented feature that substitutes a few attribute names where they differ between the PC and NPC versions of the D&D 5th Edition by Roll20 Sheet. Example AC (for PCs) and npc_AC (for NPCs). I need a substitutions|false keyword to turn that off for other sheets.


Updates

Reporter now respects ChatSetAttr macros and will route them to the corresponding character id.

0.0.5 Added Keywords

0.0.6 More Keywords, plus Dividers and Turn Tracker access


Future Enhancements

1) Add an options keyword list. use ---- as the separator, to distinguish it from buttonline. Possible inclusions

[layer]: gmlayer, objects, map, walls, all — To specify a layer to search on. This would allow a user to find all note tokens on the GM layer without leaving the token layer, for example. "all" would allow all tokens on the page to be caught. Useful for auditing pages.

compact — Don't report the second reportline and halve the size of the token.


2) If the "all" keyword above works, use slight tinting on token header area to indicate layer? Or use existing layer indicator character?


2) Mass buttonline. At bottom of report. Like the buttonline, but does not add token id specification. Use to affect all tokens in report. May be problematical to integrate with some scripts.

March 26 (4 years ago)
The Aaron
Roll20 Production Team
API Scripter

WOW!  Amazing!!!  I can't wait to dig into this!

March 26 (4 years ago)
David M.
Pro
API Scripter

This looks super-cool, Keith! Demo video with the map application was great! Is the link to the source code missing, or did I just miss it?

March 26 (4 years ago)
keithcurtis
Forum Champion
Marketplace Creator
API Scripter


David M. said:

This looks super-cool, Keith! Demo video with the map application was great! Is the link to the source code missing, or did I just miss it?


Weird. I linked it, and then the link disappeared. So I linked it again, and it's gone again. Third time's the charm?

March 26 (4 years ago)
David M.
Pro
API Scripter

Haha, got it, thx!

*wild clapping* This looks super!

March 26 (4 years ago)
timmaugh
Pro
API Scripter

This is fanTASTic! I saw this in various stages as you were developing it, and was always impressed with the ease of information collection and the quality of the finished presentation... so I'm not sure you're using those words correctly: "not quite polished." =D

March 26 (4 years ago)
keithcurtis
Forum Champion
Marketplace Creator
API Scripter

"Polished on the outside", maybe?

Internally, it could probably use better error catching and a way that passes the buttonline on the repeat that doesn't lose all the internal code (passes it as text).

March 26 (4 years ago)
Scott C.
Forum Champion
Sheet Author
API Scripter
Compendium Curator

Very nice Keith! Glad to see this getting launched!

March 26 (4 years ago)
keithcurtis
Forum Champion
Marketplace Creator
API Scripter

Reporter now respects ChatSetAttr macros and will route them to the corresponding character id.

[Set Strength to 10](!settattr --strength|10)

becomes

[Set Strength to 10](!settattr --charid -123456789ABC --strength|10)
in the report buttonline, and will affect the character associated with the token on that report.
(This brings it up to par with token-mod and the coming update to supernotes)
April 08 (4 years ago)

Edited April 08 (4 years ago)

hanks Keith,

My first use is to report on detailed UDL settings and to locate those sometimes hard to find "light crumb" tokens, especially on those large and busy maps.  

!report+c|npc|0 --t|has_bright_light_vision|Vision t|has_night_vision|NV t|night_vision_distance|NV-Dist t|emits_bright_light|Emits-BL t|bright_light_distance|BL-Dist t|emits_low_light|Emits-LL t|low_light_distance|LL-Dist t|has_limit_field_of_vision|Limited-FoV t|limit_field_of_vision_center|FOV-Center t|limit_field_of_vision_total|FOV-Total t|has_limit_field_of_night_vision|Limited-FoV-NV t|limit_field_of_night_vision_center|FoV-NV-Center t|limit_field_of_night_vision_total|FoV-NV-Total t|has_directional_bright_light|Dir-BL t|directional_bright_light_center|DL-BL-Center t|directional_bright_light_total|Dir-BL-Total
!report+t|bar3_max|LC  --t|bar3_value|Loc t|bright_light_distance|BL_Dist t|low_light_distance|LL_Dist  ---vision


I used the bar3_value to store a simple location name and set bar3_max equal to "LC" so I can filter for just the crumbs.  Clicking on the token image takes me right to where it is so I can then manage it.  

This has also been useful for debugging some of my UDL issues.

Thanks

April 08 (4 years ago)
keithcurtis
Forum Champion
Marketplace Creator
API Scripter


Will M. said:

This has also been useful for debugging some of my UDL issues.

Thanks

Ha! That was actually the inspiration for writing it: debugging UDL setups on modules.

April 11 (4 years ago)
David M.
Pro
API Scripter

Good idea, Will! I often add "lights" to a map using a transparent png with a gm-only aura, but if I move them to the map layer the aura disappears and they are sometimes hard to find on busy maps as you mentioned. I may steal this :)

April 11 (4 years ago)
keithcurtis
Forum Champion
Marketplace Creator
API Scripter

Update (info repeated in top post):


Keywords

Keywords change the overall appearance or scope of the report. They are separated from the rest of the report by four dashes and must come at the end.

layer|[gmlayer|objects|map|walls|all] will constrain the report to a particular layer or all layers at once, so long as no tokens are selected. If any tokens are selected, Reporter will default to the layer the selected tokens are on. This makes it easier for instance to check the vision settings of tokens on the token layer and the gm layer simultaneously, or to ping pull to note tokens on the gm layer without switching manually to that layer

If the layer keyword all is used the report will be on all token/character pairs on all layers. In this case, a layer character will appear on each subhead line of the report to let you know which layer the token is on.

compact|[true|false] The compact mode shows the token image at half size, and eliminates the second line of the report subhead, since it is not always desired. You may have a very large report you want to see better, or you may be using a sheet that does not support the default values. Currently the second line of the subhead only references the D&D 5th Edition by Roll20 Sheet.

Example:

!report ---- layer|gmlayer compact|true

will report on all the tokens on the gm layer in compact mode.


April 12 (4 years ago)

Funny - I was going to ask about filtering by layer, or at least adding a layer indicator.

April 12 (4 years ago)
keithcurtis
Forum Champion
Marketplace Creator
API Scripter

I think the biggest use will be assigning all the room numbers on the gm layer to their corresponding handouts in a module. If they are all tied to a character called "Room" or something, you could put:

[1A](handoutURL)

in each bar1 for instance. Then the macro

!report+c|Room --t|bar1_value|Notes ----layer|gmlayer

would give you a way to quickly navigate to any room in a dungeon, pulling either yourself or yourself and players to the location and have a button that opens up the corresponding handout.

Or since most modules have multiple rooms in a single handout (I wish we had anchor text), cut and paste the room description into the GMnotes of the token and use Supernotes on the buttonline to call them up.

April 17 (3 years ago)
keithcurtis
Forum Champion
Marketplace Creator
API Scripter

Added more keywords:

showheader|[true|false] (default=true): This will control whether the header will display at the top of the report.

showfooter|[true|false] (default=true): This will control whether the footer will display at the bottom of the report.

source|[true|false] (default=true): if source is set to false, the C and T characters that show whether an attribute comes from the token or the sheet will not be displayed. Use this is they are a distraction.

title|Title| If this is present in the keywords, the string in between pipes will be placed at the top of the report. If you only want the custom title to display, be sure turn off the header with showheader|false. The title must be placed between two pipes. title|My Title| will work. title|My Title will break.

Also added tracker to the list of layers: If the layer keyword tracker is used the report will be on all token/character pairs on the Turn Tracker as if it were a layer. In this case, a layer character will appear on each subhead line of the report to let you know which layer the token is on. If you click on the layer token, it will switch the token from the GM/Notes layer to the  Token/Objects layer and back. 


New feature:

Dividers

You may not always want each attribute reported on its own line. You can add a code after the attribute name(not the alias) to use something either than a line return between attributes

comma (,) Adds three non-breaking spaces between this attribute and the next, keeping them on the same line when possible.

dash (-) Adds a thin gray horizontal rule between this attribute and the next.

Hashtag (#) Adds a bit of horizontal space between this attribute and the next.

Examples:

!report --t|emits_bright_light,|Bright-Light t|bright_light_distance|Distance t|emits_low_light,|Low-Light t|low_light_distance|Distance ---light

will return this:



I also added these new example macros to the second post:


Compact Tracker Navigator

!report  ---- layer|tracker compact|true title|Tracker Navigator| showheader|false showfooter|false

will produce a compact report that will allow you to navigate around the tracker tokens on the board, with links to ping pull, switch layers, open character sheets and more.


Tracker Controller

A more full featured Turn Tracker could include more info and macros. This one has a couple of very simple token-mod macros for applying damage and conditions

!report --c|strength,|Str c|strength,|Dex c|strength|Con c|strength,|Int c|strength,|Wis c|strength#|Cha t|bar1_value,|HP c|npc_ac|AC c|npc_senses|perception t|statusmarkers|Condition ---[Apply Damage](!token-mod --set bar1_value|Q{Enter damage amount. Use positive or negative to modify values|-0}) | [Apply Condition](!token-mod --set statusmarkers|Q{Choose Status|Dead,dead|Bloodied,red}) ----layer|tracker compact|true title|Tracker Display| showheader|false showfooter|false source|false


Passive Perception

Need to know the passive perception of everyone on the board?

!report --c|npc_senses|perception ---- layer|all compact|true title|Passive Perception| showheader|false showfooter|false source|false


April 17 (3 years ago)
Andreas J.
Forum Champion
Sheet Author
Translator

I really like the Tracker Controller and Passive Perception examples, especially as the API is shown to be sheet-agnostic, so those macros could easily be adapted for other sheets than 5E.

April 17 (3 years ago)
keithcurtis
Forum Champion
Marketplace Creator
API Scripter

That makes me think of another keyword I need. Currently there is an undocumented feature that substitutes a few attribute names where they differ between the PC and NPC versions of the D&D 5th Edition by Roll20 Sheet. Example AC (for PCs) and npc_AC (for NPCs). I need a substitutions|false keyword to turn that off for other sheets.