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

DM Dashboard - Beta (Turnorder on Steroids for D&D 5e Roll20 based games)

1682117716

Edited 1684383928
DM Dashboard Suite (D&amp;D 5e by Roll20 Sheet)- Beta The DM Dashboard Mod leverages Roll20’s handout feature to present a new type of game-time user interface.&nbsp; It was specifically designed for DMs/GMs to assist them during combats with easy access to key functionality and information.&nbsp; It really shines if you have a second monitor to place a handout-based dashboard onto.&nbsp; They also work better if you resize a bit wider than the average handout.&nbsp; Script/Mod Link: <a href="https://github.com/MadCar-Dev/Default/blob/main/Javascript/HandoutReporter%20v0.6.js" rel="nofollow">https://github.com/MadCar-Dev/Default/blob/main/Javascript/HandoutReporter%20v0.6.js</a> Documentation Link:&nbsp; Default/DM Dashboard User Manual.pdf at main · MadCar-Dev/Default (github.com) To get started type the following into the chat window once it's been installed. !DMDash This will create 4 Dynamic Handouts, meaning they'll update automatically as the game progresses, responding to turnorder change events, token bar value changes. DM Dashboard/Turnorder List -&nbsp; Primary dashboard form, keyed off of the Roll20 Turnorder and used to track combat. Roll initiative for all PCs and NPCs, one at a time, or all at once,&nbsp; automatically adding them to the turnorder View Details on the PC or NPC at the top of the list with ability to initiate actions, view traits, roll saves and checks Mini-Soundboard for playing your most used audio tracks (New) Built in Encounter Difficulty calculator based on the PCs and NPCs in the turnorder.&nbsp; PCs and NPCs can be toggled from friend to foe to a neutral participant, which drives the calculators results Turnorder Functions:&nbsp; Next, Prev, Sort, Sort-Wrap(keep the current token at the top and sort all the other tokens off them), Clear, Add Round Counter, Add Count-Up/Down counter, Add custom item.&nbsp;&nbsp; Roll random dice Either Publically or whispered (D4-D20, Advantage, Disadvantage) Player turn time tracker.&nbsp; Keeps track of how long individual characters are at the top of the turn-order and presents them with a running average.&nbsp; Also tracks the DM time.&nbsp; Includes an option to dump the latest stats out to the chat window for all to see. Ping Tokens, both private(gm only) and public. Remove a token from the turnorder Make them invisible/visible my toggling a token between the objects and gmlayers Pop open a PC or NPCs character sheet Add a quick note to the GM Notes section of a PCs Character sheet or an NPCs token Lock down a token so it cant move Toggle the visibility of a tokens nameplate Show a copy of a tokens avatar or Bio Images to the chat window with option to show players (w/ or w/o title) Adjust a tokens HP, by clicking on their current HP Make saving throws Edit and Show/Hide token tooltips. Review all GMNotes, Notes, Bio and Tooltip info for Tokens, Handouts and Character Sheets&nbsp; Automatically refresh as the turnorder changes. DM Status Marker Dialog (NEW!) Provides a system for quickly adding/removing and clearing status markers from 1 or more tokens at once. Provides support for adding numbers to status markers and incrementing them from 0 to 9.&nbsp;&nbsp; Integrated into the DM Turnorder Dashboard. DM Character Sheet -&nbsp; A summary of the current Player Character or NPC at the top of the Turnorder.&nbsp; Always displays a PC or NPC summary sheet for the token at the top of the turnorder Make Saving throws and Ability Checks Make attacks Cast Spells View spell description, with hyperlinks to the compendium Tooltip pop-ups for all traits DM Notes - Peruse all your notes, gmnotes, bios, and tooltips associated with Tokens, Characters and Handouts in one place. View all your notes, gmnotes, tooltips and bios in one location for Tokens, Characters and Handouts Simple filter to limit Tokens, Characters and Handouts list From the token selection, you can see token tooltips, gm notes, character bio and character gm notes. Favorites functionality (New!) DM Jukebox - Works with the DM Dashboard to setup its Mini-Soundboard. (NEW!) Tie your favorite sound effects like; Hit, Miss, Arrow, Door, Ouch, Trap, Boom, Pew, Magic and Steps, to the mini-soundboard on the DM Dashboard.&nbsp; There are also 2 spots to place a couple of your favorite ambient tracks. Setup Favorites for a quick and simple Sound-Board.&nbsp;&nbsp; DM Player Access Report - Gives the DM/GM a consolidated view access they have given to their players for Handount, Character and Graphic/Token objects.&nbsp; (New!) DM Turnorder Log -&nbsp; A comma-delimited data file with a record for each time the turnorder is advanced.&nbsp; Includes start and end times so you can compile stats on each of your players.&nbsp;&nbsp; I plan to build this functionality out over time.&nbsp; Right now it is just collecting information on individual player and GM/DM turns.&nbsp; I hope to be able to pivot this data and maybe generate some charts that show trends, giving you insight into your games. Add a few players/npcs to the turn order and then pop these handouts out of the Roll20 browser onto a second computer screen, as I they need to be stretched a little wide to get the full benefit.&nbsp;&nbsp; A couple of caveats: It's based on the&nbsp; D&amp;D 5e by Roll20 &nbsp;sheet.&nbsp; I would like to add other systems, but I have no familiarity with their data fields and structures.&nbsp; It works best if you have a second monitor to throw these handouts up onto.&nbsp; They'll refresh automatically as turnorder changes or you change a tokens bar value.&nbsp;&nbsp; DM Turnorder List (Primary Interface) DM Status Marker Dialog DM Character Sheet DM Notes Handout Player Access Report DM Turnorder Log
1682122185

Edited 1682122380
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Still getting an error from the new code: TypeError: Cannot read properties of undefined (reading 'PrevTO') TypeError: Cannot read properties of undefined (reading 'PrevTO') &nbsp; &nbsp; at apiscript.js:38:69 &nbsp; &nbsp; at eval (eval at &lt;anonymous&gt; (/home/node/d20-api-server/api.js:168:1), &lt;anonymous&gt;:65:16) &nbsp; &nbsp; at Object.publish (eval at &lt;anonymous&gt; (/home/node/d20-api-server/api.js:168:1), &lt;anonymous&gt;:70:8) &nbsp; &nbsp; at /home/node/d20-api-server/api.js:1563:14 &nbsp; &nbsp; at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
Sorry, Keith - My git wasn't updating the file, even though I show I published it earlier.&nbsp; You should be able to download version 0.62 which should work for you.&nbsp;&nbsp; Will
1682194478
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
The first blush looks really impressive! I ran into a crash when writing to GMnotes, but I want to do more thorough testing befor giving a full report. But , yeah, this looks super handy.
Thanks - I may remove the GMNotes code for now till I perfect reading/writing asynchronously.&nbsp;&nbsp; I've been tinkering with ways to speed up my data refreshes and in my research discovered the Map() object.&nbsp; I think I can use it to store data that is rather expensive to retrieve (repeating fields for example).&nbsp; I've also found a way to reduce the number of writes to my DM Turnorder Log.&nbsp; &nbsp;Instead of writing a line every turn, I save them up and then flush them out when the turnorder dialog is closed.&nbsp;&nbsp;
1682197298

Edited 1682198108
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
First off, this is a great script and an awesome debut! I have gone through it and have some notes to use or ignore. :) As you said, it needs to customize the HP bar, but beyond that, it might need fuller bar customization. Beyond HP, others use bars for different stats. Related, AC should be pulled from sheet, not from a bar assignment. I have that bar being used for movement, so it is reporting 30 AC for most characters. Making the HP readout a clickable button that calls a query to set HP would be handy. Love the dice roller! Very handy! For spell readout: Suggest making clicking the spell name a button that casts the spell instead of the wizard emoji, reducing the number of icons and making it more readable.Also, wrapping the spell name and button(s) into an inline-block div would keep the icons from breaking onto other lines. A very subtle outline around each name and button set would also help to clarify the relationships.&nbsp; &nbsp; Also, is there a reason it links out to D&amp;DBeyond instead of the Roll20 compendium? &nbsp; It might be useful to add hover text on token markers (I use the html title property for this). Another place hover text might be useful is on the tooltip or gmnotes readout areas, as an option. Some GMs (at least me) make extensive use of those places to hold data, and they can inflate the readout. But that last is more of a personal preference. Monkeys are very hard to tell apart, especially for my myopic vision. Perhaps"Neutral Face" for visible and "Dotted Line face" for hidden?&nbsp; 﫥 Love the report line at the bottom with PCs and NPCs to be added to the turn order. Very handy!&nbsp; Add an event watcher for "on bar change" for whichever is the HP bar, to refresh the Turnorder handout.&nbsp; When using the expanded character sheet at the top of the handout, it might be useful to make the div containing the turnorder list a scrolling div. This will keep the sheet visible, no matter where you are in a long turn order. I got a couple of crashes during testing, but nothing I could track down. Before submitting to the One Click repo (which I strongly recommend--this is a great script), I would suggest a couple of things. 1) Use the Unsanity script to check your emojis. Some high byte order characters don't survive the sanitization of the Roll20 git process, and that can help identify them. 2) Consider an option to link to Compendium sources as well as D&amp;DBeyond. 3) Remove the extra log statements for the production copy. The output console is very noisy.
1682200983

Edited 1682201469
Great feedback Keith.&nbsp; I really appreciate your input.&nbsp;&nbsp; I agree with everything you said.&nbsp; I'm a novice when it comes to CSS, so things like Tooltips and Scrollable text areas are new to me and I need research their use I used D&amp;D Beyond, because I knew how and didn't know the URL format for Roll20 Spell Descriptions.&nbsp; For some reason, I thought it might include the source (PHB, TCoE, ...) in the URL.&nbsp; Easy change, once I figure out the URL format.&nbsp;&nbsp; I agree on the monkey Emojis.&nbsp; They are fun, but hard to see.&nbsp; Do you recommend the emoji represent the current state of the token or what will happen when you click on it?&nbsp; (﫥vs.) I've been cleaning up my Log Spam and will axe it all as I complete this phase. I like your idea on using a scrollable text area.&nbsp; I'm a CSS novice, so will need to figure out the tags.&nbsp;&nbsp; I'm thinking I'll create a "!tor --HPBar #" command, and then store the new value in state memory. I'll remove the bandaid and move the Adjust HP button to the actual HP/HPMax text.&nbsp;&nbsp;
1682201979
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Hover text is super easy, barely an inconvenience. &lt;div style = "blahblahblah" title="here is my hovertext"&gt;Displayed text&lt;/div&gt; The fact that those emojis are failing to display (at least on my end) is a bad sign. A small graphic might work, or look into the Roll20-safe Pictos fonts. Scrolling is controlled by the overflow property . Yeah, I'm not sure about dealing with sources for spell descriptions. I know that Roll20 uses an internal tool for expanding out [spellname] in handouts into a clickable link, so it must be possible.
1682202107
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Will M. said: I agree on the monkey Emojis.&nbsp; They are fun, but hard to see.&nbsp; Do you recommend the emoji represent the current state of the token or what will happen when you click on it?&nbsp; (﫥vs.).&nbsp;&nbsp; I think it should display what it is. Ex. an on switch that is "on" shows as being on, not as off to indicate what will happen if you click it. It makes the report intuitive.
1682203416
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Will M. said: I'm thinking I'll create a "!tor --HPBar #" command, and then store the new value in state memory. It would be helpful to parse an entry with a math symbol in front of it to adjust, like the bar does: !tor --HPBar -5 reduces the total by 5, for example. Another option would be to interpret: !tor --HPBar full as a command to make the bar1_value equal the bar1_max. (or whatever bar has been designated).
1682270823

Edited 1682271524
Keith - I've gone through all your recommendations and have added or addressed every one of them.&nbsp; I learned a lot along the way and have &nbsp;also figured out some tricks to improve performance. I've published the new version (0.6.3) to my github. Script/Mod Link: Default/HandoutReporter v0.6.js at main · MadCar-Dev/Default (github.com) Documentation Link: Default/DM Dashboard User Manual.pdf at main · MadCar-Dev/Default (github.com) I've made the following changes: Added All of Keith's recommendations! (Thanks again for the input Keith) Removed the Data Logging feature for now, I think it might have been causing some issues.&nbsp; I'll add it back in a future release. Added Personality_Traits, Ideals, Bonds, and Flaws to the character sheet Added tooltips on all the buttons Improved performance Removed all the log spamming to the API console. To change the default HP Bar type the following command into chat: !tor --hpbar #&nbsp;&nbsp; For example, ' !tor --hpbar 3' to tell DM Dashboard to use bar3 for tracking HPs. Currently in the works for my next version: Adding the Encounter Challenge rating as described in the DM Guide and based on tokens in the turnorder Run the Unsanity script to check my emojis. Add a simple help command "!tor --help" Add saving throws to the character sheet Add commands to dump character sheet bio and image to the chat Add public ping option I appreciate any feedback y'all might have, that includes bugs you discover and potential improvements.&nbsp;&nbsp; Will M. keithcurtis said: First off, this is a great script and an awesome debut! I have gone through it and have some notes to use or ignore. :) As you said, it needs to customize the HP bar, but beyond that, it might need fuller bar customization. Beyond HP, others use bars for different stats. Related, AC should be pulled from sheet, not from a bar assignment. I have that bar being used for movement, so it is reporting 30 AC for most characters. Making the HP readout a clickable button that calls a query to set HP would be handy. Love the dice roller! Very handy! For spell readout: Suggest making clicking the spell name a button that casts the spell instead of the wizard emoji, reducing the number of icons and making it more readable.Also, wrapping the spell name and button(s) into an inline-block div would keep the icons from breaking onto other lines. A very subtle outline around each name and button set would also help to clarify the relationships.&nbsp; &nbsp; Also, is there a reason it links out to D&amp;DBeyond instead of the Roll20 compendium? &nbsp; It might be useful to add hover text on token markers (I use the html title property for this). Another place hover text might be useful is on the tooltip or gmnotes readout areas, as an option. Some GMs (at least me) make extensive use of those places to hold data, and they can inflate the readout. But that last is more of a personal preference. Monkeys are very hard to tell apart, especially for my myopic vision. Perhaps"Neutral Face" for visible and "Dotted Line face" for hidden?&nbsp; 﫥 Love the report line at the bottom with PCs and NPCs to be added to the turn order. Very handy!&nbsp; Add an event watcher for "on bar change" for whichever is the HP bar, to refresh the Turnorder handout.&nbsp; When using the expanded character sheet at the top of the handout, it might be useful to make the div containing the turnorder list a scrolling div. This will keep the sheet visible, no matter where you are in a long turn order. I got a couple of crashes during testing, but nothing I could track down. Before submitting to the One Click repo (which I strongly recommend--this is a great script), I would suggest a couple of things. 1) Use the Unsanity script to check your emojis. Some high byte order characters don't survive the sanitization of the Roll20 git process, and that can help identify them. 2) Consider an option to link to Compendium sources as well as D&amp;DBeyond. 3) Remove the extra log statements for the production copy. The output console is very noisy.
1682280015
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Looking great! That's quick development. Here's a couple more ideas: Tootlips and particularly GMNotes can be very lengthy, and can greatly expand the list. I would suggest either the option to hide them on the display or use overflow to make them scrolling divs if they overflow a set height. If token nameplates are not visible to players, I'd suggest having them appear italicized in the report, to match the style established by tooltips. This is a tripup for many GMs. There is a popular script out there that has a feature that toggles those on or off without GM intervention, for example, which can lead to user confusion.&nbsp; The character sheet area now scrolls internally. That's excellent, particularly now that you have added the social traits. I think the turnorder list would benefit from this, so that the user can scroll up and down the list and still keep the detail sheet in sight. For example, the current character casts a spell with multiple targets, and the GM needs to check AC or apply damage to several NPCs. They can keep the attacker in sight and handle each of the targets without losing sight of the current character.
1682295670

Edited 1682296026
I've posted a new version (0.6.4) with some pretty cool additions: Added the Token Nameplate functionality (Per Keith's suggestion) Turnorder List is now Scrollable (Per Keith's suggestion). Added an Encounter Difficulty Calculator based on the calculation found in the Dungeon Masters Guide.&nbsp; &nbsp;Right now, all NPCs are treated as combatants and all PCs are treated as Friends when its calculating encounter difficult.&nbsp; In one of my next releases, I'll add a button to move an NPC or PC to a Neutral member, keeping them out of the calculation.&nbsp;&nbsp; Increased some of the button sizes to make them more readable. Added a "Ping - Show All" function so everyone will see your ping.&nbsp; Current ping behavior: Clicking on the dartboard emoji will issue a ping, showing all players the ping.&nbsp; Clicking on the Token Image will be a private ping, only the DM/GM can see. I've been thinking about GM notes quite a bit.&nbsp; I think I have an idea of how to implement but need to chew on it for a day. keithcurtis said: Looking great! That's quick development. Here's a couple more ideas: Tootlips and particularly GMNotes can be very lengthy, and can greatly expand the list. I would suggest either the option to hide them on the display or use overflow to make them scrolling divs if they overflow a set height. If token nameplates are not visible to players, I'd suggest having them appear italicized in the report, to match the style established by tooltips. This is a tripup for many GMs. There is a popular script out there that has a feature that toggles those on or off without GM intervention, for example, which can lead to user confusion.&nbsp; The character sheet area now scrolls internally. That's excellent, particularly now that you have added the social traits. I think the turnorder list would benefit from this, so that the user can scroll up and down the list and still keep the detail sheet in sight. For example, the current character casts a spell with multiple targets, and the GM needs to check AC or apply damage to several NPCs. They can keep the attacker in sight and handle each of the targets without losing sight of the current character.
1682354927
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Excellent update. Ping: I use the same logic (but flipped) for visible/not visible in the Reporter script. Good functionality. Encounter Difficulty Calculator: Good idea, but I am getting some odd test results: It might have something to do with one of the test PCs being incorrectly identified as an NPC? Throwing off the calculation? &nbsp; Icons: MUCH easier to read. good call. Scrolling behavior: Much easier to use. This is a nice script!
I'm working on a way to toggle a "PC" from being a "Party Member/Friend" to a "Foe" or an NPC from a default of "Foe" to a "Friend".&nbsp; Only problem is the calculation expects a CR/EXP for a Foe and a Character Level for a friend.&nbsp; So I'm coding some logic to make a request for the estimated level or estimated CR when they are toggled.&nbsp; Unless you know of a simple conversion like ( level 1 char = CR 1/4 Level 2 char =CR 1/2 Level 3 char = CR 1 ... I also need to handle the case you've described where you have a fully fleshed-out NPC, but built as a regular character with no 'controlled by' set. Thanks for the input again!
1682380699
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
I had transmogged that character in, so&nbsp; it only had an "All Players" in the controlled by slot. Oddly, so did the one that DM Dashboard identified as a PC. Both are player-controlled PCs in the original game, both have a "0" in the npc attribute. I suspect that maybe one of them got flipped to an npc statblock and back at some point in the past, generating some of the npc attributes you are testing for. Probably not an issue, since if I had been testing in my home game, those would definitely have had specified controllers.
I've posted a new version (0.65) that addresses the NPCs built as Characters.&nbsp; If there is no player controlling, it will be treated like an NPC and will calculate XP as if it were an NPC for the Encounter Difficulty Calculator. Additionally, Added ability to Toggle individual tokens between Friend, Foe an Neutral for the purpose of the Encounter Difficulty Calculator Added ability to show Avatar and Bio Images to the chat window /w option to send to players.
Will M. said: I've posted a new version (0.65) that addresses the NPCs built as Characters.&nbsp; If there is no player controlling, it will be treated like an NPC and will calculate XP as if it were an NPC for the Encounter Difficulty Calculator. This might cause miscalculation in cases where there is a character assigned to a dummy account used for testing or 3rd party display.
1682432291

Edited 1682432622
Characters or NPCs on the map, but not in the turnorder are completely ignored by this calculation. When it is added to the turnorder, it will initially be labeled an Enemy/Foe. &nbsp;However, there is a new option letting you transition the NPC to a state of Friend or Neutral for the purposes of calculating Encounter Difficulty. Dr DM said: Will M. said: I've posted a new version (0.65) that addresses the NPCs built as Characters.&nbsp; If there is no player controlling, it will be treated like an NPC and will calculate XP as if it were an NPC for the Encounter Difficulty Calculator. This might cause miscalculation in cases where there is a character assigned to a dummy account used for testing or 3rd party display.
Keith - I was able to add an improved GMNotes feature to the latest version.&nbsp; There is a new emoji button (purple notebook) that when clicked copies the Token GMNotes from an NPC or the Character GMNotes from from a player character to a new DM GMNotes handout.&nbsp; The handout gets refreshed every time you click on a different token in the turnorder so like the dashboard, you can put it to the side and just have it waiting there for you.&nbsp;&nbsp; I think I'm going to take a break for a few days and let this version bake a bit.&nbsp; &nbsp;Instead, I'm going to play around with your !Reporter script and see if I can create some links within the dashboard to kick off some of your more useful reports.&nbsp; &nbsp;Do you know if it's possible for an API Script to know if another API Mod like !Reporter is part of a campaign? Maybe looking for a specific State variable?&nbsp;&nbsp; Script/Mod Link: <a href="https://github.com/MadCar-Dev/Default/blob/main/Javascript/HandoutReporter%20v0.6.js" rel="nofollow">https://github.com/MadCar-Dev/Default/blob/main/Javascript/HandoutReporter%20v0.6.js</a> Documentation Link:&nbsp; Default/DM Dashboard User Manual.pdf at main · MadCar-Dev/Default (github.com)
1682494269
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Yes, once a script is submitted to Roll20's repo for inclusion in One-Click, you can specify dependencies in the json file. You can also check to see if a script's object exists. I can give you the code (example, line 350 of Dynamic Lighting Tool checks if the "CheckLightLevel" script is installed), but it would be better to get an explanation from a real coder, who can use the proper terminology (I'll see if I can't ping somebody). Check out the Supernotes script (also in the repo), there are some sanitization routines in there that help to pass odd characters that might exist in the GM Notes. Again, I'd help, but I was gifted those bits of code from the Aaron, and they are a bit of a magic box for me. They might make better sense to you. One thing you could also pull from Supernotes is the list of templates, css-styled responses to evoke different genres. I exposed that for use in ScriptCards. But at that point, you might be inventing the wheel. Actually, it might be vastly simpler to list Supernotes as a dependency, and just define your GMNotes button as a Supernotes call. &lt;href="!gmnote&gt;GMNote&lt;/a&gt; is a handful of characters compared to the hassle of writing all the code to pull, clean and parse the notes field. It would also give you the code to pull about six different other kinds of things: Bio, token, avatar, tooltip, art from the bio--either all pieces or per piece, templates, or character GMNotes.
1682522649

Edited 1682522956
The Aaron
Roll20 Production Team
API Scripter
Keith is spot on.&nbsp; All API scripts get concatenated into a single global script that is executed on the API Sandbox.&nbsp; That means if another script defines something in the global scope: const TokenMod = (()=&gt; { ... You can look for it in your own, and check for parts of it: if( 'undefined' !== typeof TokenMod &amp;&amp; TokenMod.ObserveTokenChange) { ... And then do things with that script, provide shims/reduced functionality, or output a dependency message. Here's an example script that looks for libTokenMarkers and provides functionality based on it, or a message that it couldn't be found: /* global libTokenMarkers */ on('ready', ()=&gt;{ // Make sure libTokenMarkers exists, and has the functions that are expected if('undefined' === typeof libTokenMarkers || (['getStatus','getStatuses','getOrderedList'].find(k=&gt; !libTokenMarkers.hasOwnProperty(k) || 'function' !== typeof libTokenMarkers[k] )) ) { // notify of the missing library sendChat('',`/w gm &lt;div style="color:red;font-weight:bold;border:2px solid red;background-color:black;border-radius:1em;padding:1em;"&gt;Missing dependency: libTokenMarkers&lt;/div&gt;`); } else { const tokenHasStatus = (token, status) =&gt; { let statusObj = libTokenMarkers.getStatus(status); return (false !== token.get(`status_${statusObj.getTag()}`)); }; // active code on('chat:message',(msg) =&gt; { if('api'===msg.type &amp;&amp; /^!has-status/i.test(msg.content)){ let args = msg.content.split(/\s+/).slice(1); let tokens = (msg.selected || []) .map(o=&gt;getObj('graphic',o._id)) .filter(g=&gt;undefined !== g) .filter(g=&gt;tokenHasStatus(g,args[0])) ; sendChat('',`&lt;div&gt;&lt;h4&gt;Tokens With Status ${args[0]}&lt;h4&gt;&lt;ul&gt;${tokens.map(t=&gt;`&lt;li&gt;${t.get('name')}&lt;/li&gt;`).join('')}&lt;/ul&gt;&lt;/div&gt;`); } }); } });
is this script suppose to replace API like Initative Tracker Plus / Combat Master or to work side by side with it? I enjoy using ITP mostly for tracking conditions and applying conditions - will this interfere with that and will it also track it in the log?
No - It doesn’t replace these scripts. &nbsp; It does issue a chat message when its a players turn, which includes statistics on how long the player takes on their turn over time. &nbsp;I plan to add a configuration setting soon to turn this off, in situations where other APIs also send messages to chat when a players turn is up. &nbsp; My goal was to create a dashboard, tied to the turnorder to better manage combats. &nbsp;It works great for those with second monitor.
Just posted a new release:&nbsp; 0.6.7 Continue to work on adding usability features and cleaning up the display of the primary dashboard. Put back in service a turnorder data log for tracking statistics on each turn to "DM Turnorder Log"&nbsp; Changed the primary !tor command to !DMDash&nbsp; Added a number of configuration toggles via the !DMDash command !DMDash --hpbar #:&nbsp; where # is 1, 2 or 3.&nbsp; This will set the default bar to be used for tracking/reporting HP !DMDash --help: will write a simple help dialog to chat&nbsp; !DMDash --config: will show you all the current configuration settings !DMDash --sbheight # #:&nbsp; will allow you to adjust the height of the two scrollboxes in the main dashboard.&nbsp; The first # controls the character detail area, the second # controls the size of the scrolling turnorder area.&nbsp; &nbsp;I recommend using either a number like 250px (pixels) or 40vh(applies a variable height based on the size of the handout. !DMDash --datalogging (0/1): turns the datalogging feature on (1) or off(0).&nbsp;&nbsp; !DMDash --notifications (0/1): turns the next player up chat notifications on(1) or off(0). !DMDash --playerstats:&nbsp; places the player and DM turn statistics to the chat window with an option to show players. Script/Mod Link: <a href="https://github.com/MadCar-Dev/Default/blob/main/Javascript/HandoutReporter%20v0.6.js" rel="nofollow">https://github.com/MadCar-Dev/Default/blob/main/Javascript/HandoutReporter%20v0.6.js</a> Documentation Link:&nbsp; Default/DM Dashboard User Manual.pdf at main · MadCar-Dev/Default (github.com) Thanks and enjoy.&nbsp; If you do get a chance to try it out, let me know if it works for you and how it might be improved.&nbsp;&nbsp;
1682749543
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Will M. said: !DMDash --sbheight # #:&nbsp; will allow you to adjust the height of the two scrollboxes in the main dashboard.&nbsp; The first # controls the character detail area, the second # controls the size of the scrolling turnorder area.&nbsp; &nbsp;I recommend using either a number like 250px (pixels) or 40vh(applies a variable height based on the size of the handout. This is my favorite new feature. Although I have a second monitor, I have an old iPad&nbsp; (attached with Sidecar)&nbsp; sitting under the main monitor, that I use to hold my character sheets when I am a player. I find it easier to flick my eyes downward that to a large monitor at the side. Being able to constrain the scroll area will be helpful.
1682776923

Edited 1682777439
Keith, I looked at the !Unsantity script per your suggestion.&nbsp; I see that it does something with special characters, I'm just not sure how to use it.&nbsp; It may be because I've placed emoji's right into my javascript, rather than use their associated codes.&nbsp; I'm guessing that I should go back and replace them with actual codes and somehow test them with !Unsanity.&nbsp;&nbsp; However, I was so impressed with the !Unsanity scripts look and feel, I downloaded the code to research how it was done and discovered some really ingenious methods the author ( timmaugh) employed&nbsp; for generating HTML and CSS, which I've now incorporated in DMDash.&nbsp;&nbsp; As you can probably tell, I'm an old programmer; Fortran, C (not c++ or C#), VBasic, and others from that generation.&nbsp; Looking at other people's code and really seeing how it works is helping me break out of the constraints some of these older languages imposed.&nbsp; Learning Javascript has not been just about learning a new syntax, it's also been about learning how to take advantage of a new structural paradigm, which I'm starting to get my head around.&nbsp;&nbsp; Thanks, Will
1682783888
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
The Aaron would berate me if I didn't recommend&nbsp; JavaScript: The Good Parts, by&nbsp; Douglas Crockford at this point. This is his go to recommendation for people transitioning into JS. And good for you. I'm less of an old programmer, and more just old. ;)
1682784601
The Aaron
Roll20 Production Team
API Scripter
Lol!
1682787038

Edited 1682787706
timmaugh
Pro
API Scripter
Thanks for the kind words, Will. I have to give a lot of credit for the way UnSanity handles HTML/CSS to Scott C., in fact, I think it even traces back (like many ideas do, here) to The Aaron, but Scott was the one who shared it with me. My small contribution was in the way the CSS is constructed as layered property objects fed via the rest operator, which gives you greater flexibility at implementation... you can pass the property objects like CSS classes, at that point. I forget if UnSanity has that trick, but I'm pretty sure TableToTable (another script of mine) does have it. As for how to use the UnSanity script... it's less about the code you use to derive the character, and more about whether that character will survive or be displayed in the place you need it. It has 4 places you can test your character... (if I remember correctly). To use them all, you should "Import" rather than "Install" the script. That will let you see the code (which it sounds like you already did). 1) Does the character survive in the code? If you put a unicode character in your code, will is survive? Specifically this one is related to passing through the one-click sanitation process. If you scroll to the end of the code, the unicode characters are presented as a fixed-width table of characters, letting you locate the character you use to see if it is displayed properly (because UnSanity has already gone through the sanitation process), or not. 2) In the Mod Script Log You can use the command line to output to the log the characters you are utilizing in your script. For instance, if you have one of my scripts you'll see a torii in your log as the sandbox boots up. My early attempts at that looked terrible because the sanitation ate them. 3) In chat Self-explanatory, use a command line to test the characters you might be outputting to chat. 4) In a handout? I think I output a table in a handout as a part of that script...? This would obviously be the closest to what you have going, since you are working on a handout interface. In any case, let me know if you have any questions about it!
keithcurtis said: The Aaron would berate me if I didn't recommend&nbsp; JavaScript: The Good Parts, by&nbsp; Douglas Crockford at this point. This is his go to recommendation for people transitioning into JS. And good for you. I'm less of an old programmer, and more just old. ;) Yes - great book. &nbsp;I had purchased a while back based on a post I saw from Aaron. &nbsp; Also got his second book “How JavaScript Works”.
I’ve started the process of converting all my emoji’s to their Unicode versions. &nbsp;This way, when others grab the source code, it wont lose the emoji in whatever exotic system or editor they use. &nbsp;As I do this I’ve been using the “ !UnSanity —char Unicode” method which generates the visual representation of the Unicode with others emojis in the neighborhood. &nbsp; timmaugh said: Thanks for the kind words, Will. I have to give a lot of credit for the way UnSanity handles HTML/CSS to Scott C., in fact, I think it even traces back (like many ideas do, here) to The Aaron, but Scott was the one who shared it with me. My small contribution was in the way the CSS is constructed as layered property objects fed via the rest operator, which gives you greater flexibility at implementation... you can pass the property objects like CSS classes, at that point. I forget if UnSanity has that trick, but I'm pretty sure TableToTable (another script of mine) does have it. As for how to use the UnSanity script... it's less about the code you use to derive the character, and more about whether that character will survive or be displayed in the place you need it. It has 4 places you can test your character... (if I remember correctly). To use them all, you should "Import" rather than "Install" the script. That will let you see the code (which it sounds like you already did). 1) Does the character survive in the code? If you put a unicode character in your code, will is survive? Specifically this one is related to passing through the one-click sanitation process. If you scroll to the end of the code, the unicode characters are presented as a fixed-width table of characters, letting you locate the character you use to see if it is displayed properly (because UnSanity has already gone through the sanitation process), or not. 2) In the Mod Script Log You can use the command line to output to the log the characters you are utilizing in your script. For instance, if you have one of my scripts you'll see a torii in your log as the sandbox boots up. My early attempts at that looked terrible because the sanitation ate them. 3) In chat Self-explanatory, use a command line to test the characters you might be outputting to chat. 4) In a handout? I think I output a table in a handout as a part of that script...? This would obviously be the closest to what you have going, since you are working on a handout interface. In any case, let me know if you have any questions about it!
1682993828

Edited 1682996586
Have you ever been in the middle of a role-playing moment, and needed that one piece of information tucked away in a note somewhere in your campaign.&nbsp; You just don't remember if it was stashed in a token note, a character sheet bio, or even a handout.&nbsp; So you search and search your journal, scrolling forever looking through countless handouts and character sheets.&nbsp; Maybe that note was stored in a token on your current map.&nbsp; You eventually give up and wing it.&nbsp; I built this for you.&nbsp;&nbsp; I've been busy working on my Suite of DM Dashboard tools and just released a new version&nbsp; (0.6.9)&nbsp; that introduces a&nbsp; Dynamic DM Notes Handout &nbsp;(it works more like a web page than a static handout) for reviewing: Token GM Notes Token Tooltips Character Bios Character GM Notes Handout Notes Handout GM Notes Additionally, it contains the following features: Ability to filter Tokens, Characters, and Handouts with a simple keyword contained within the name of the associated document type. The Token list (Which is visible when the "Token" menu item is selected, provides a target emoji.&nbsp; When clicked it will perform a simple GM ping, taking you to the associated token on the map. The Character and Handout lists feature a document emoji that when clicked open their associated character sheet or handout. Example handout with Tokens selected - On the left is a list of tokens on the current page. Example with Characters selected - On the left are all the characters defined in your campaign Example with Handouts selected - On the left are all the Handouts defined in your campaign Example with "Goblin" filter applied and Characters selected - On the left is a filtered set of characters with "Goblin" in their name Future Updates: I'm working on how to list tokens across multiple pages (not just the current one). If I introduce the option above, I need to add the ability to filter all tokens for a specific page.&nbsp;&nbsp; I understand some DM/GMs store contextual token type/meaning information in one of the tokens Bar Values.&nbsp; It wouldn't be hard to add a second Filter (with a dropdown list of Bar Values).&nbsp; For example, I believe some DMs use tokens to store location and encounter information on the map, and then place a tag in Bar3_value of Shop or Encounter or Tavern. Considering combining all the related Note Types into one longer note, with section separators, rather than having a submenu.&nbsp; For example if you selected a token, the associated note would contain (with subheaers): Token Avatar Token Tooltip Token GM Notes Character Bio Character GM Note The link for the latest version of the source code can be found in the first post of this forum.&nbsp;&nbsp; Please send me any comments, bugs, and new features I surely missed.&nbsp;&nbsp; Will M. (budding Javascript Programmer)
1683131892

Edited 1683134295
In addition to keyword searching, The "DM Notes" handout now supports saving notes as favorites and the ability to filter the list to just your favorites.&nbsp;&nbsp;
This coming weekend, I plan to begin the work to submit to Roll20 for One-Click submission.
1683143167
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
If you have not done this before, hit me up if you run into any snags. It's a lot easier now that github has a simple button to sync to the parent fork (only useful for updates, I suppose, not an initial offering).
Really appreciate your help -&nbsp; I saw an online wiki document that walks you through the process and tagged the "Git" pages published on Roll20.&nbsp; I'll send you a note if I struggle with this part. Did you get a chance to see the new DM Notes feature I added?&nbsp; I added it based on a comment you made a while back.&nbsp;&nbsp;
1683145156
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Yes! I haven't had a chance to try it out yet. I'm pretty entrenched in using Supernotes and Reporter for that sort of&nbsp; functionality.
1683313893

Edited 1683314504
I've added a new feature to the DM Dashboard Suite - Jukebox/Soundboard.&nbsp;&nbsp; Now on the DM Dashboard you'll find a Mini-Soundboard in the header section that you can set up with 10 of your favorite sound effects and 2 ambiance tracks.&nbsp; Hitting the sound to start it playing.&nbsp; Hitting it again to stop it.&nbsp;&nbsp; There is a new Dynamic Handout , "DM Jukebox" that enables you to associate tracks with Mini-Soundboard.&nbsp; &nbsp;I designed the DM Jukebox to allow you to establish some favorite Effects and Ambiances from your master list of audio tracks, so it can also be used as a larger Soundboard.&nbsp; Like the other tools in the suite, it probably works best if you pop it out to a second monitor.&nbsp; &nbsp; New DM Dashboard (with Mini-Soundboard) New DM Jukebox - All Tracks Panel DM Jukebox - Favorites Panel
1683317559
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Just keeps getting better!
Another new addition to the DM Dashboard Suite - Player Access Report.&nbsp;&nbsp; From the DM Dashboard, you can now kick off the Player Access Report .&nbsp; It gives the DM/GM a consolidated view of player access to the Handouts, Character Sheets, and Tokens/Graphics within their campaign.&nbsp; Where applicable, it shows the object they can control and if it has been designated to be in a player's journal.&nbsp;&nbsp; you can also kick off this report by issuing the following command in chat:&nbsp; !dmdash --playeraccess To keep this as concise as possible, objects that have no character access, do not show up in this report.&nbsp;&nbsp;
1684006666
Pat
Pro
API Scripter
Late to this, but if you check out "Emojibubble" it's got scripting in there to encode and decode compound unicode emoji
Pat said: Late to this, but if you check out "Emojibubble" it's got scripting in there to encode and decode compound unicode emoji I'll have to take a look at that.&nbsp; I've been using ChatGPT to get the unicode of all my Emojis, so that I'm not pasting them into the code as little images.&nbsp;&nbsp;
1684020786
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Will M. said: I'll have to take a look at that.&nbsp; I've been using ChatGPT to get the unicode of all my Emojis, so that I'm not pasting them into the code as little images.&nbsp;&nbsp; Check out&nbsp; <a href="https://getemoji.com/" rel="nofollow">https://getemoji.com/</a> &nbsp; Not only will it give you the code point of any emoji , it will show you how it renders on nearly any platform.
Great site thanks. &nbsp;
1684245678

Edited 1684245800
At this point, this may be overkill, but I'm adding a Check Campaign Database feature to the DMDashboard.&nbsp; It will scour your campaign looking for the following conditions, and in some cases provide you with the ability to correct the issue.&nbsp; Here is what I currently test for: Tokens/Graphics orphaned from pages (meaning there is a token in the database, but it is linked to a page that no longer exists). Tokens/Graphics orphaned from a Character.&nbsp; (At one time it was connected via "represents" or "controlledby", but the original character sheet got deleted). Token Bar1, Bar2 and Bar3 links disconnected from a Character Attribute. Tokens that are off the viewable page.&nbsp; Option to move to position 0,0 or delete the token. Handouts referencing players (inplayerjournals, controlledby) that no longer exist. Duplicate Handouts (Handouts with the same name) Duplicate Characters (Characters with the same name) Attributes and Abilities orphaned from Characters.&nbsp; Objects with no names (Pages, Handouts, Characters) Double-Dashes (--) in Token and Character ids.&nbsp; This negatively impacts one of my favorite mods; Scriptcards If the identified issue is associated with a token, it has the ability to ping the offending token from the report (assuming you are on the page). I plan to include Cards, Hands, Decks, and Rolltables at some point.&nbsp;&nbsp; Can you think of anything else I should test for? Thanks, Will M.
1684246595
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
That's an interesting idea. It might be worth considering spinning off into its own script. Most of these issues could affect any campaign, whereas DM Dashboard is currently focused on 5e. A user may find great value in the cleanup routines above, but be playing a different game. I say this out of concern that this could become like the HealthColors script. It was a great idea, but the writer added in so many things (like auto nameplate display) that makes it frustrating for users who wanted it for the original function. Also, people who might benefit from theses other functions might never see the script if they are buried in a script they think they have no use for. I think if you peeled this out into a script with a name like "Campaign Cleanup" or something, it would be much more likely to be seen and used.
1684247126
The Aaron
Roll20 Production Team
API Scripter
What Keith said. Also, Mod Scripts will often add data in places on objects which might not match up to the rest of the game.&nbsp; A good example is adding other things to a Controlledby field, such as the id of another graphic.&nbsp; We often use that as a form of tagging also, like adding WEAPON_ARCS to the controlled by of graphics created by the WeaponArcs script to make it easy to clear them all.&nbsp; So I'd say just be sure to test with a bunch of different scripts.
keithcurtis said: That's an interesting idea. It might be worth considering spinning off into its own script. Most of these issues could affect any campaign, whereas DM Dashboard is currently focused on 5e. A user may find great value in the cleanup routines above, but be playing a different game. Definitely. I could use these in my Pathfinder, Expanse, and other games.
1684248140

Edited 1684248331
Good thoughts - I was thinking that it would deserve its own script.&nbsp; I'll probably combine it with my Player Access report which generates a report of all the objects in your campaign that your players currently have access to.&nbsp; The code is not D&amp;D 5e specific so it should work against all campaign types.&nbsp;&nbsp; Currently, the only database update it does is against tokens, and that is only at your specific direction to either: 1. Move a token to the top-left cell for those tokens that are off the screen or are what I call phantom tokens (You can't see them, you can't select or open them, but you can ping them.&nbsp; I think this happens if the original token graphic gets deleted or somehow gets dissociated from the Character). 2. Delete a token that is off the screen or is a phantom token.&nbsp;&nbsp; I do have a question about Javascript - Is there a way to test the imgsrc link to see if it actually points to a graphic file that exists? Will M.