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

[Pathfinder] Rolling lots of skills at once

I'm trying to setup a macro to roll all a character's knowledge and lore skills with a single button press, and I can't seem to get the roll templates to behave in a way I think they should (I'm referring to the documentation here:&nbsp; <a href="https://wiki.roll20.net/Roll_Templates" rel="nofollow">https://wiki.roll20.net/Roll_Templates</a> ) Basically, it needs to only roll knowledge skills that a character has ranks in, so I need to check to see if the character has more than 0 ranks in a skill, and if so output a roll for it. I'm trying something like the following (newlines added for readability, plus the final macro would have all the knowledge skills listed in it): &{template:pf_generic} &nbsp;{{character_name= @{selected|character_name} }} {{name= Knowledge Checks }} {{#rollGreater() @{selected|Knowledge-Dungeoneering-ranks} }} {{Knowledge (Dungeoneering)= [[ 1d20 + @{selected|Knowledge-Dungeoneering} ]] }} {{/rollGreater() @{selected|Knowledge-Dungeoneering-ranks} }} My understanding is that {{#&lt;something&gt;}} ... {{/&lt;something&gt;}} should act like a conditional. I've tried it both with and without the rollGreater() part, but it just outputs the two conditional lines as text, e.g.: If I leave out the rollGreater() helper function, then I get "#0" and "/0" output instead. Could someone point out where I'm going wrong? Thanks, Sam.
An obvious problem is that rollGreater() takes two arguments (I was assuming it was a greater than zero test). So those parts of it should be: {{#rollGreater() @{selected|Knowledge-Dungeoneering-ranks} 0}} However, this doesn't change the behaviour.
Hi, Samuel Penn . To clarify, are you attempting to add Helper Functions into the HTML of the pf_generic Roll Template?
No, and I think that may be the problem. I'm trying to make use of the conditional logic in a macro, but re-reading more of the docs, it looks like these conditionals don't work in the macro - they have to be baked into the actual character sheet's roll template definitions. So the only way to make use of them is to take a copy of the character sheet definition, and make modifications to that. I'd rather not go down that route if I don't have to, so is there a way (other than switching back to PowerCards) of using conditional logic in a macro that uses templates?
Assuming that there's no way of putting a logic test into the macro, the best I can come up with is: {{Knowledge (Dungeoneering)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Dungeoneering}) * ceil(@selected|Knowledge-Dungeoneering-ranks}/100) ]]}} This outputs zero if someone has no ranks in a skill, or the skill check result otherwise. As long as nobody rolls higher than 100, it should work. It's really ugly though, and I'd prefer a solution which didn't show the line at all if the character had no skill ranks.
1464627319

Edited 1464627386
vÍnce
Pro
Sheet Author
Roll template formatting and logic can only be used within a sheet's html and css. &nbsp;You can't use them in a macro. &nbsp;Well, you can, but they only get interpreted as generic key and value combos as you've discovered.
1464630210
vÍnce
Pro
Sheet Author
Here's a macro that will roll all knowledge checks at once. &nbsp;I know it doesn't use logic... (you could probably add a query for the DC and roll as the GM if you don't want players seeing the DC success/fail) @{selected|PC-whisper} &{template:pf_generic} @{selected|toggle_accessible_flag} @{selected|toggle_rounded_flag}{{color=@{selected|rolltemplate_color}}} {{header_image=@{selected|header_image-pf_generic}}} {{character_name=@{selected|character_name}}} {{character_id=@{selected|character_id}}} {{name=Knowledge Checks}} {{Check= Arcana[[ @{selected|skill-query} + [[ @{selected|Knowledge-Arcana} ]] ]]}} {{Check =Dungeoneering [[ @{selected|skill-query} + [[ @{selected|Knowledge-Dungeoneering} ]] ]]}} {{Check &nbsp;=Engineering [[ @{selected|skill-query} + [[ @{selected|Knowledge-Engineering} ]] ]]}} {{Check &nbsp; =Geography [[ @{selected|skill-query} + [[ @{selected|Knowledge-Geography} ]] ]]}} {{Check &nbsp; &nbsp;=History [[ @{selected|skill-query} + [[ @{selected|Knowledge-History} ]] ]]}} {{Check &nbsp; =Geography [[ @{selected|skill-query} + [[ @{selected|Knowledge-Geography} ]] ]]}} {{Check &nbsp; &nbsp; =Local [[ @{selected|skill-query} + [[ @{selected|Knowledge-Local} ]] ]]}} {{Check &nbsp; &nbsp; &nbsp;=Nature [[ @{selected|skill-query} + [[ @{selected|Knowledge-Nature} ]] ]]}} {{Check &nbsp; &nbsp; &nbsp; =Nobility [[ @{selected|skill-query} + [[ @{selected|Knowledge-Nobility} ]] ]]}} {{Check &nbsp; &nbsp; &nbsp; &nbsp;=Planes [[ @{selected|skill-query} + [[ @{selected|Knowledge-Planes} ]] ]]}} {{Check &nbsp; &nbsp; &nbsp; &nbsp; =Religion [[ @{selected|skill-query} + [[ @{selected|Knowledge-Religion} ]] ]]}}
What I actually came up with was this: &{template:pf_generic} {{header_image=@{selected|header_image-pf_generic}}} {{color=@{selected|rolltemplate_color} }} @{selected|toggle_rounded_flag} @{selected|toggle_accessible_flag} {{character_name= @{selected|character_name} }} {{name= Knowledge Checks }} {{subtitle=Everything that I know}} {{Knowledge (Arcana)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Arcana}) * ceil(@{selected|Knowledge-Arcana-ranks}/100) ]] }} {{Knowledge (Dungeoneering)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Dungeoneering}) * ceil(@selected|Knowledge-Dungeoneering-ranks}/100) ]]}} {{Knowledge (Engineering)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Engineering}) * ceil(@{selected|Knowledge-Engineering-ranks}/100) ]] }}{{Knowledge (Geography)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Geography}) * ceil(@{selected|Knowledge-Geography-ranks}/100) ]] }}{{Knowledge (History)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-History}) * ceil(@{selected|Knowledge-History-ranks}/100) ]] }}{{Knowledge (Local)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Local}) * ceil(@{selected|Knowledge-Local-ranks}/100) ]] }}{{Knowledge (Nature)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Nature}) * ceil(@{selected|Knowledge-Nature-ranks}/100) ]] }}{{Knowledge (Nobility)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Nobility}) * ceil(@{selected|Knowledge-Nobility-ranks}/100) ]] }}{{Knowledge (Planes)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Planes}) * ceil(@{selected|Knowledge-Planes-ranks}/100) ]] }}{{Knowledge (Religion)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Religion}) * ceil(@{selected|Knowledge-Religion-ranks}/100) ]] }} Any knowledge skill with zero ranks in will give a total of zero (since characters shouldn't be able to make a roll on these skills). What's the skill-query attribute used for in your macro?
1464647099

Edited 1464647163
In this case, you're probably better off using the macro you already have, but you can always use a sheet's predefined Roll Template properties which use #rollWasCrit() for their functionality. I found 8 properties ({{attack}} through {{attack8}} within &{template:pf_attack}) in the sheet's HTML which use #rollWasCrit() to conditionally display {{crit_confirm}} and {{crit_damage}}. &{template:pf_attack} {{attack=**Knowledge Skills** **Ranks & Checks** ("Ignore the left side of the macro.") **Arcana** **Ranks:** [[ d1cs[[ {@{selected|Knowledge-Arcana-ranks} + d0}&gt;1 ]] - 1 + @{selected|Knowledge-Arcana-ranks} ]]}} {{crit_confirm=**Check:** [[ @{selected|skill-query} + [[ @{selected|Knowledge-Arcana} ]] ]]}} {{attack2= **Dungeoneering** **Ranks:** [[ d1cs[[ {@{selected|Knowledge-Dungeoneering-ranks} + d0}&gt;1 ]] - 1 + @{selected|Knowledge-Dungeoneering-ranks} ]]}} {{crit_confirm2=**Check:** [[ @{selected|skill-query} + [[ @{selected|Knowledge-Dungeoneering} ]] ]]}} etc.
1464648640
vÍnce
Pro
Sheet Author
Samuel Penn said: What I actually came up with was this: &{template:pf_generic} {{header_image=@{selected|header_image-pf_generic}}} {{color=@{selected|rolltemplate_color} }} @{selected|toggle_rounded_flag} @{selected|toggle_accessible_flag} {{character_name= @{selected|character_name} }} {{name= Knowledge Checks }} {{subtitle=Everything that I know}} {{Knowledge (Arcana)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Arcana}) * ceil(@{selected|Knowledge-Arcana-ranks}/100) ]] }} {{Knowledge (Dungeoneering)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Dungeoneering}) * ceil(@selected|Knowledge-Dungeoneering-ranks}/100) ]]}} {{Knowledge (Engineering)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Engineering}) * ceil(@{selected|Knowledge-Engineering-ranks}/100) ]] }}{{Knowledge (Geography)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Geography}) * ceil(@{selected|Knowledge-Geography-ranks}/100) ]] }}{{Knowledge (History)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-History}) * ceil(@{selected|Knowledge-History-ranks}/100) ]] }}{{Knowledge (Local)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Local}) * ceil(@{selected|Knowledge-Local-ranks}/100) ]] }}{{Knowledge (Nature)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Nature}) * ceil(@{selected|Knowledge-Nature-ranks}/100) ]] }}{{Knowledge (Nobility)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Nobility}) * ceil(@{selected|Knowledge-Nobility-ranks}/100) ]] }}{{Knowledge (Planes)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Planes}) * ceil(@{selected|Knowledge-Planes-ranks}/100) ]] }}{{Knowledge (Religion)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Religion}) * ceil(@{selected|Knowledge-Religion-ranks}/100) ]] }} Any knowledge skill with zero ranks in will give a total of zero (since characters shouldn't be able to make a roll on these skills). What's the skill-query attribute used for in your macro? We added an option(Config page on the sheet) to use a query prompt for skill checks. &nbsp;When enabled all skills with include a prompt for modifiers when rolled.
1464670619

Edited 1464670774
Samuel Penn said: Assuming that there's no way of putting a logic test into the macro, the best I can come up with is: {{Knowledge (Dungeoneering)= [[ (1d20cs&gt;21cf&lt;0 + @{selected|Knowledge-Dungeoneering}) * ceil(@selected|Knowledge-Dungeoneering-ranks}/100) ]]}} This outputs zero if someone has no ranks in a skill, or the skill check result otherwise. As long as nobody rolls higher than 100, it should work. It's really ugly though, and I'd prefer a solution which didn't show the line at all if the character had no skill ranks. It can be done a little neater with formatting, instead of one check per line.&nbsp; I use exactly this method in order to create a universal Token Action that will work for all characters without having to adjust it for what's trained or not.&nbsp; At a *GLANCE* it looks like it might feel like a lot of extra data to sift, but players get used to it very quickly.&nbsp; (I make a point of putting all the Monster Identification Knowledges at the top) In the Token Action code, I use a pf_attack template, in the format of : &nbsp; [[ Dice_Roll_Code&nbsp; ]]Name_of_Skill1 = Name_of_Skill2[[ Dice_Roll_Code ]] The Knowledge portion of the drop-down querty thusly looks like:&nbsp; (Substituting all closing }} with the appropriate HTML Entity, of course) | Knowledge, @{selected|token_name} Knowledges}} {{[[(1d20cs0cf0 + @{Knowledge-Arcana}) * ceil(@{Knowledge-Arcana-ranks}/100) ]]Arcana=Nature[[(1d20cs0cf0 + @{Knowledge-Nature}) * ceil(@{Knowledge-Nature-ranks}/100) ]] }} {{[[(1d20cs0cf0 + @{Knowledge-Planes}) * ceil(@{Knowledge-Planes-ranks}/100) ]]Planes=Religion[[(1d20cs0cf0 + @{Knowledge-Religion}) * ceil(@{Knowledge-Religion-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-dungeoneering}) * ceil(@{Knowledge-dungeoneering-ranks}/100) ]]Dungeon=Geography[[(1d20cs0cf0 + @{Knowledge-Geography}) * ceil(@{Knowledge-Geography-ranks}/100) ]]}} {{[[1d20cs0cf0 + @{Appraise}]]Appraise=Engineer[[(1d20cs0cf0 + @{Knowledge-Engineering}) * ceil(@{Knowledge-engineering-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-History}) * ceil(@{Knowledge-History-ranks}/100) ]]History=Linguistics[[(1d20cs0cf0 + @{Linguistics}) * ceil(@{Linguistics-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-Local}) * ceil(@{Knowledge-local-ranks}/100) ]]Local=Nobility[[(1d20cs0cf0 + @{Knowledge-Nobility}) * ceil(@{Knowledge-Nobility-ranks}/100) ]]}} {{[[1d20cs0cf0 + @{Heal}]] Heal = Craft[[1d20cs0cf0 + @{craft}]]
This looks good. One thing with knowledges, is they should be capped at 10, not 0, if untrained. This allows untrained characters to makke knowledge rolls for common information, but nothing too complex (which is most rolls) Training You cannot make an untrained Knowledge check with a DC higher than 10.
1464698088

Edited 1464821828
chris b.
Pro
Sheet Author
API Scripter
I used: [[(1d20 + [[@{Knowledge-Arcana} ]]) * ({0,@{Knowledge-Arcana-ranks}}kh1) ]] duh it's actually [[[[[[{1,@{character|Appraise-Ranks}}kl1]]*1d20]]+[[[[{1,@{character|Appraise-Ranks}}kl1]]*[[@{character|Appraise}]]]]]] but i like putting the ranks in better, so you can see why it's 0. but with the required checkbox, you can use whether that is on or off to affect any choice above. Especially if you have any bards in the party. @{Knowledge-Arcana-ReqTrain}
Brian L. said: This looks good. One thing with knowledges, is they should be capped at 10, not 0, if untrained. This allows untrained characters to makke knowledge rolls for common information, but nothing too complex (which is most rolls) Training You cannot make an untrained Knowledge check with a DC higher than 10. That's certainly valid, but most of the time it doesn't really come up as most GM's tend to treat common knowledge as actual common knowledge and just give it to you.&nbsp; Players can always hover over the "0" in the display to view what they would have rolled before it was multiplied and rounded down to zero, should the occasion arise.
1464712291

Edited 1464712303
chris b. said: [[(1d20 + [[@{Knowledge-Arcana} ]]) * ({0,@{Knowledge-Arcana-ranks}}kh1) ]] Won't this result in&nbsp; (d20 + modifier) * ranks ?&nbsp;&nbsp; That's going to give you super-large numbers as soon as you have more than 1 rank in a skill.
1464717191
Scott C.
Forum Champion
Sheet Author
API Scripter
Compendium Curator
oof, good point Mark. better way might be to do: {0, [[@{Knowledge-Arcana-ranks}/@{Knowledge-Arcana-ranks}]]}kh1
Scott C. said: [[@{Knowledge-Arcana-ranks}/@{Knowledge-Arcana-ranks}]] This will fail at 0 ranks.
Mark G. said: It can be done a little neater with formatting, instead of one check per line.&nbsp; I use exactly this method in order to create a universal Token Action that will work for all characters without having to adjust it for what's trained or not.&nbsp; At a *GLANCE* it looks like it might feel like a lot of extra data to sift, but players get used to it very quickly.&nbsp; (I make a point of putting all the Monster Identification Knowledges at the top) In the Token Action code, I use a pf_attack template, in the format of : &nbsp; [[ Dice_Roll_Code&nbsp; ]]Name_of_Skill1 = Name_of_Skill2[[ Dice_Roll_Code ]] The Knowledge portion of the drop-down querty thusly looks like:&nbsp; (Substituting all closing }} with the appropriate HTML Entity, of course) | Knowledge, @{selected|token_name} Knowledges}} {{[[(1d20cs0cf0 + @{Knowledge-Arcana}) * ceil(@{Knowledge-Arcana-ranks}/100) ]]Arcana=Nature[[(1d20cs0cf0 + @{Knowledge-Nature}) * ceil(@{Knowledge-Nature-ranks}/100) ]] }} {{[[(1d20cs0cf0 + @{Knowledge-Planes}) * ceil(@{Knowledge-Planes-ranks}/100) ]]Planes=Religion[[(1d20cs0cf0 + @{Knowledge-Religion}) * ceil(@{Knowledge-Religion-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-dungeoneering}) * ceil(@{Knowledge-dungeoneering-ranks}/100) ]]Dungeon=Geography[[(1d20cs0cf0 + @{Knowledge-Geography}) * ceil(@{Knowledge-Geography-ranks}/100) ]]}} {{[[1d20cs0cf0 + @{Appraise}]]Appraise=Engineer[[(1d20cs0cf0 + @{Knowledge-Engineering}) * ceil(@{Knowledge-engineering-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-History}) * ceil(@{Knowledge-History-ranks}/100) ]]History=Linguistics[[(1d20cs0cf0 + @{Linguistics}) * ceil(@{Linguistics-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-Local}) * ceil(@{Knowledge-local-ranks}/100) ]]Local=Nobility[[(1d20cs0cf0 + @{Knowledge-Nobility}) * ceil(@{Knowledge-Nobility-ranks}/100) ]]}} {{[[1d20cs0cf0 + @{Heal}]] Heal = Craft[[1d20cs0cf0 + @{craft}]] Can you share the complete "All Skills" macro? I'd appreciate having this in my game.
1464780187
Scott C.
Forum Champion
Sheet Author
API Scripter
Compendium Curator
Silvyre said: Scott C. said: [[@{Knowledge-Arcana-ranks}/@{Knowledge-Arcana-ranks}]] This will fail at 0 ranks. So, it will. So this instead: [[(@{Knowledge-Arcana-ranks}+1)/(@{Knowledge-Arcana-ranks}+1)]]
[[ {0, (@{Knowledge-Arcana-ranks}+1)/(@{Knowledge-Arcana-ranks}+1)}kh1 ]] will always resolve to 1; how about: [[ {@{Knowledge-Arcana-ranks} + d0}&gt;1 ]]
1464793323

Edited 1464793505
nowledge-Nature-ranks}/100) ]] }} {{[[(1d20cs0cf0 + @{Knowledge-Planes}) * ceil(@{Knowledge-Planes-ranks}/100) ]]Planes=Religion[[(1d20cs0cf0 + @{Knowledge-Religion}) * ceil(@{Knowledge-Religion-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-dungeoneering}) * ceil(@{Knowledge-dungeoneering-ranks}/100) ]]Dungeon=Geography[[(1d20cs0cf0 + @{Knowledge-Geography}) * ceil(@{Knowledge-Geography-ranks}/100) ]]}} {{[[1d20cs0cf0 + @{Appraise}]]Appraise=Engineer[[(1d20cs0cf0 + @{Knowledge-Engineering}) * ceil(@{Knowledge-engineering-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-History}) * ceil(@{Knowledge-History-ranks}/100) ]]History=Linguistics[[(1d20cs0cf0 + @{Linguistics}) * ceil(@{Linguistics-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-Local}) * ceil(@{Knowledge-local-ranks}/100) ]]Local=Nobility[[(1d20cs0cf0 + @{Knowledge-Nobility}) * ceil(@{Knowledge-Nobility-ranks}/100) ]]}} {{[[1d20cs0cf0 + @{Heal}]] Heal = Craft[[1d20cs0cf0 + @{craft}]] Can you share the complete "All Skills" macro? I'd appreciate having this in my game. Fair warning; it's a bit of a beast.&nbsp; It should work as-is without any tweaking as a Token Action.&nbsp; It'll fail hard if you make it as a regular macro.&nbsp; I was going to use the 'CODE' formatting, but it broke this up into separate lines due to the carriage returns I use in it.&nbsp; Sorry for the spam! :) &{template:pf_attack} {{name=?{Skill Grouping | Athletics, @{selected|token_name} Athletics Check&amp;#125;&amp;#125; {{[[1d20 + @{ACROBATICS} ]] Jump=Acro [[1d20 + @{ACROBATICS} ]] &amp;#125;&amp;#125; {{[[1d20 + @{CLIMB} ]] Climb=Swim [[1d20 + @{SWIM} ]]&amp;#125;&amp;#125; {{[[ 1d20 + @{RIDE} ]] Ride=Fly [[1d20 + @{FLY}]] | Conversation/Interaction, @{selected|token_name} Conversations&amp;#125;&amp;#125; {{[[1d20cs0cf0 + @{INTIMIDATE} ]] Intim=Diplo [[1d20cs0cf0 + @{DIPLOMACY} ]]&amp;#125;&amp;#125; {{[[1d20cs0cf0 + @{SENSE-MOTIVE} ]] Sense=Bluff [[1d20cs0cf0 + @{BLUFF} ]]&amp;#125;&amp;#125; {{ [[ (1d20cs0cf0+@{handle-animal}) * ceil(@{handle-animal-ranks}/100)]] Handle Animal = Performance[[1d20cs0cf0 + @{perform}]] | Knowledge, @{selected|token_name} Knowledges&amp;#125;&amp;#125; {{[[(1d20 + @{Knowledge-Arcana}) * ceil(@{Knowledge-Arcana-ranks}/100) ]]Arcana=Nature[[(1d20 + @{Knowledge-Nature}) * ceil(@{Knowledge-Nature-ranks}/100) ]] &amp;#125;&amp;#125; {{[[(1d20 + @{Knowledge-Planes}) * ceil(@{Knowledge-Planes-ranks}/100) ]]Planes=Religion[[(1d20 + @{Knowledge-Religion}) * ceil(@{Knowledge-Religion-ranks}/100) ]]&amp;#125;&amp;#125; {{[[(1d20 + @{Knowledge-dungeoneering}) * ceil(@{Knowledge-dungeoneering-ranks}/100) ]]Dungeon=Geography[[(1d20 + @{Knowledge-Geography}) * ceil(@{Knowledge-Geography-ranks}/100) ]]&amp;#125;&amp;#125; {{[[1d20 + @{Appraise}]]Appraise=Engineer[[(1d20 + @{Knowledge-Engineering}) * ceil(@{Knowledge-engineering-ranks}/100) ]]&amp;#125;&amp;#125; {{[[(1d20 + @{Knowledge-History}) * ceil(@{Knowledge-History-ranks}/100) ]]History=Linguistics[[(1d20 + @{Linguistics}) * ceil(@{Linguistics-ranks}/100) ]]&amp;#125;&amp;#125; {{[[(1d20 + @{Knowledge-Local}) * ceil(@{Knowledge-local-ranks}/100) ]]Local=Nobility[[(1d20 + @{Knowledge-Nobility}) * ceil(@{Knowledge-Nobility-ranks}/100) ]]&amp;#125;&amp;#125; {{[[1d20cs0cf0+@{Heal}]] Heal = Craft[[1d20cf0cs0+@{craft}]] | Senses, @{selected|token_name} Senses&amp;#125;&amp;#125; {{ [[1d20cs0cf0 + @{PERCEPTION} ]]Perception = Survival[[1d20cs0cf0+@{Survival}]] &amp;#125;&amp;#125; {{ [[ (1d20cs0cf0+@{spellcraft}) * ceil(@{spellcraft-ranks}/100) ]]SpellCraft = | Skullduggery, @{selected|token_name} Skullduggery&amp;#125;&amp;#125; {{[[1d20cs0cf0 + @{Stealth} ]] Stealth= Disguise [[1d20cs0cf0 + @{Disguise} ]]&amp;#125;&amp;#125; {{ [[1d20cs0cf0 + @{Escape-Artist}]] Escape = Disable [[(1d20cs0cf0 + @{disable-device}) * ceil(@{disable-device-ranks}/100) ]]&amp;#125;&amp;#125; {{[[ (1d20cs0cf0 + @{sleight-of-hand}) * ceil(@{sleight-of-hand-ranks}/100) ]]Sleight= | UMD, @{selected|token_name} UMD Check: [[ (1d20 + @{Use-Magic-Device}) * ceil(@{Use-Magic-Device-Ranks}/100) ]] &amp;#125;&amp;#125; {{25 =Activate Blindly&amp;#125;&amp;#125;{{25 + Sp Lvl=Decipher Scroll&amp;#125;&amp;#125;{{20 + caster level=Use Scroll&amp;#125;&amp;#125;{{20=Use wand / Emulate class&amp;#125;&amp;#125;{{25=Emulate Race&amp;#125;&amp;#125;{{30=Emulate Align } }}
A big thanks to everyone who's replied to this with ideas. I'll definitely be adding some of them to my macro.
Happy to help&nbsp; (* and express our Mania for Macros *)
1464821653

Edited 1464822022
chris b.
Pro
Sheet Author
API Scripter
ugh sorry i actually multiplied by this: {1,@{character|Appraise-Ranks}}kl1 so either 0 or 1 but you have to multiply both the roll and modifier [[[[[[{1,@{character|Appraise-Ranks}}kl1]]*1d20]]+[[[[{1,@{character|Appraise-Ranks}}kl1]]*[[@{character|Appraise}]]]]]] i added these to the all skills too, this doesn't have artistry or lore: <a href="https://gist.github.com/plutosdad/529753fd46fae334" rel="nofollow">https://gist.github.com/plutosdad/529753fd46fae334</a>...
Here is a macro I built for our bard. It rolls every knowledge check, and checks to see if he has ranks in it otherwise it gives a zero. Since he is a bard it then adds 1/2 his bard level to the check.&nbsp; /w GM &{template:pf_attack}{{name=Passive Mi'Kael Knowledge}} {{Arcana:=[[-1*floor((1-@{Mi'Kael|Knowledge-Arcana-ranks}-0.1)/(abs(1-@{Mi'Kael|Knowledge-Arcana-ranks}-0.1)+0.001))*(@{Mi'Kael|Knowledge-Arcana}+1d20)+floor( @{Mi'Kael|class-0-level}/2)]] }} {{Dungeoneeringl:=[[-1*floor((1-@{Mi'Kael|Knowledge-Dungeoneering-ranks}-0.1)/(abs(1-@{Mi'Kael|Knowledge-Dungeoneering-ranks}-0.1)+0.001))*(@{Mi'Kael|Knowledge-Dungeoneering}+1d20)+floor( @{Mi'Kael|class-0-level}/2)]] }} {{Engineering:=[[-1*floor((1-@{Mi'Kael|Knowledge-Engineering-ranks}-0.1)/(abs(1-@{Mi'Kael|Knowledge-Engineering-ranks}-0.1)+0.001))*(@{Mi'Kael|Knowledge-Engineering}+1d20)+floor( @{Mi'Kael|class-0-level}/2)]] }} {{Geography:=[[-1*floor((1-@{Mi'Kael|Knowledge-Geography-ranks}-0.1)/(abs(1-@{Mi'Kael|Knowledge-Geography-ranks}-0.1)+0.001))*(@{Mi'Kael|Knowledge-Geography}+1d20)+floor( @{Mi'Kael|class-0-level}/2)]] }} {{History:=[[-1*floor((1-@{Mi'Kael|Knowledge-History-ranks}-0.1)/(abs(1-@{Mi'Kael|Knowledge-History-ranks}-0.1)+0.001))*(@{Mi'Kael|Knowledge-History}+1d20)+floor( @{Mi'Kael|class-0-level}/2)]] }} {{Local:=[[-1*floor((1-@{Mi'Kael|Knowledge-Local-ranks}-0.1)/(abs(1-@{Mi'Kael|Knowledge-Local-ranks}-0.1)+0.001))*(@{Mi'Kael|Knowledge-Local}+1d20)+floor( @{Mi'Kael|class-0-level}/2)]] }} {{Nature:=[[-1*floor((1-@{Mi'Kael|Knowledge-Nature-ranks}-0.1)/(abs(1-@{Mi'Kael|Knowledge-Nature-ranks}-0.1)+0.001))*(@{Mi'Kael|Knowledge-Nature}+1d20)+floor( @{Mi'Kael|class-0-level}/2)]] }} {{Nobility:=[[-1*floor((1-@{Mi'Kael|Knowledge-Nobility-ranks}-0.1)/(abs(1-@{Mi'Kael|Knowledge-Nobility-ranks}-0.1)+0.001))*(@{Mi'Kael|Knowledge-Nobility}+1d20)+floor( @{Mi'Kael|class-0-level}/2)]] }} {{Planes:=[[-1*floor((1-@{Mi'Kael|Knowledge-Planes-ranks}-0.1)/(abs(1-@{Mi'Kael|Knowledge-Planes-ranks}-0.1)+0.001))*(@{Mi'Kael|Knowledge-Planes}+1d20)+floor( @{Mi'Kael|class-0-level}/2)]] }} {{Religion:=[[-1*floor((1-@{Mi'Kael|Knowledge-Religion-ranks}-0.1)/(abs(1-@{Mi'Kael|Knowledge-Religion-ranks}-0.1)+0.001))*(@{Mi'Kael|Knowledge-Religion}+1d20)+floor( @{Mi'Kael|class-0-level}/2)]] }} Or you could use the same macro set up for having a token selected: &{template:pf_attack}{{name=@{selected|character_name} Knowledge Check}} {{Arcana:=[[-1*floor((1-@{Selected|Knowledge-Arcana-ranks}-0.1)/(abs(1-@{Selected|Knowledge-Arcana-ranks}-0.1)+0.001))*(@{Selected|Knowledge-Arcana}+1d20)]] }} {{Dungeoneeringl:=[[-1*floor((1-@{Selected|Knowledge-Dungeoneering-ranks}-0.1)/(abs(1-@{Selected|Knowledge-Dungeoneering-ranks}-0.1)+0.001))*(@{Selected|Knowledge-Dungeoneering}+1d20)]] }} {{Engineering:=[[-1*floor((1-@{Selected|Knowledge-Engineering-ranks}-0.1)/(abs(1-@{Selected|Knowledge-Engineering-ranks}-0.1)+0.001))*(@{Selected|Knowledge-Engineering}+1d20)]] }} {{Geography:=[[-1*floor((1-@{Selected|Knowledge-Geography-ranks}-0.1)/(abs(1-@{Selected|Knowledge-Geography-ranks}-0.1)+0.001))*(@{Selected|Knowledge-Geography}+1d20)]] }} {{History:=[[-1*floor((1-@{Selected|Knowledge-History-ranks}-0.1)/(abs(1-@{Selected|Knowledge-History-ranks}-0.1)+0.001))*(@{Selected|Knowledge-History}+1d20)]] }} {{Local:=[[-1*floor((1-@{Selected|Knowledge-Local-ranks}-0.1)/(abs(1-@{Selected|Knowledge-Local-ranks}-0.1)+0.001))*(@{Selected|Knowledge-Local}+1d20)]] }} {{Nature:=[[-1*floor((1-@{Selected|Knowledge-Nature-ranks}-0.1)/(abs(1-@{Selected|Knowledge-Nature-ranks}-0.1)+0.001))*(@{Selected|Knowledge-Nature}+1d20)]] }} {{Nobility:=[[-1*floor((1-@{Selected|Knowledge-Nobility-ranks}-0.1)/(abs(1-@{Selected|Knowledge-Nobility-ranks}-0.1)+0.001))*(@{Selected|Knowledge-Nobility}+1d20)]] }} {{Planes:=[[-1*floor((1-@{Selected|Knowledge-Planes-ranks}-0.1)/(abs(1-@{Selected|Knowledge-Planes-ranks}-0.1)+0.001))*(@{Selected|Knowledge-Planes}+1d20)]] }} {{Religion:=[[-1*floor((1-@{Selected|Knowledge-Religion-ranks}-0.1)/(abs(1-@{Selected|Knowledge-Religion-ranks}-0.1)+0.001))*(@{Selected|Knowledge-Religion}+1d20)]] }}
1464876306

Edited 1464876442
Dan said: Here is a macro I built for our bard. It rolls every knowledge check, and checks to see if he has ranks in it otherwise it gives a zero. Since he is a bard it then adds 1/2 his bard level to the check. You could also put your 1/2 level adjustment on the character sheet in the skills section under the "Misc Macro" field in order to simplify the macro and cut down on possible issues adjusting it.&nbsp; It's often better to leave as much character-specific detail out of the macro as possible for better code re-use.
Mark, very true, but since its not my character, I try not to edit the player's sheets without giving them a heads up, or spend the time editing macros for every one of my players when Id rather build stuff for our sessions. And it was an easy "find" and "replace" to add in the level adjustment to a copy of the versatile token dependent macro that I already had (posted on the second half of my previous post). But thank you for the suggestion, I didnt think about if the player happened to edit his skill macro, it would double count the bonus
Mark G. said: nowledge-Nature-ranks}/100) ]] }} {{[[(1d20cs0cf0 + @{Knowledge-Planes}) * ceil(@{Knowledge-Planes-ranks}/100) ]]Planes=Religion[[(1d20cs0cf0 + @{Knowledge-Religion}) * ceil(@{Knowledge-Religion-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-dungeoneering}) * ceil(@{Knowledge-dungeoneering-ranks}/100) ]]Dungeon=Geography[[(1d20cs0cf0 + @{Knowledge-Geography}) * ceil(@{Knowledge-Geography-ranks}/100) ]]}} {{[[1d20cs0cf0 + @{Appraise}]]Appraise=Engineer[[(1d20cs0cf0 + @{Knowledge-Engineering}) * ceil(@{Knowledge-engineering-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-History}) * ceil(@{Knowledge-History-ranks}/100) ]]History=Linguistics[[(1d20cs0cf0 + @{Linguistics}) * ceil(@{Linguistics-ranks}/100) ]]}} {{[[(1d20cs0cf0 + @{Knowledge-Local}) * ceil(@{Knowledge-local-ranks}/100) ]]Local=Nobility[[(1d20cs0cf0 + @{Knowledge-Nobility}) * ceil(@{Knowledge-Nobility-ranks}/100) ]]}} {{[[1d20cs0cf0 + @{Heal}]] Heal = Craft[[1d20cs0cf0 + @{craft}]] Can you share the complete "All Skills" macro? I'd appreciate having this in my game. Fair warning; it's a bit of a beast.&nbsp; It should work as-is without any tweaking as a Token Action.&nbsp; It'll fail hard if you make it as a regular macro.&nbsp; I was going to use the 'CODE' formatting, but it broke this up into separate lines due to the carriage returns I use in it.&nbsp; Sorry for the spam! :) &{template:pf_attack} {{name=?{Skill Grouping | Athletics, @{selected|token_name} Athletics Check&#125;&#125; {{[[1d20 + @{ACROBATICS} ]] Jump=Acro [[1d20 + @{ACROBATICS} ]] &#125;&#125; {{[[1d20 + @{CLIMB} ]] Climb=Swim [[1d20 + @{SWIM} ]]&#125;&#125; {{[[ 1d20 + @{RIDE} ]] Ride=Fly [[1d20 + @{FLY}]] | Conversation/Interaction, @{selected|token_name} Conversations&#125;&#125; {{[[1d20cs0cf0 + @{INTIMIDATE} ]] Intim=Diplo [[1d20cs0cf0 + @{DIPLOMACY} ]]&#125;&#125; {{[[1d20cs0cf0 + @{SENSE-MOTIVE} ]] Sense=Bluff [[1d20cs0cf0 + @{BLUFF} ]]&#125;&#125; {{ [[ (1d20cs0cf0+@{handle-animal}) * ceil(@{handle-animal-ranks}/100)]] Handle Animal = Performance[[1d20cs0cf0 + @{perform}]] | Knowledge, @{selected|token_name} Knowledges&#125;&#125; {{[[(1d20 + @{Knowledge-Arcana}) * ceil(@{Knowledge-Arcana-ranks}/100) ]]Arcana=Nature[[(1d20 + @{Knowledge-Nature}) * ceil(@{Knowledge-Nature-ranks}/100) ]] &#125;&#125; {{[[(1d20 + @{Knowledge-Planes}) * ceil(@{Knowledge-Planes-ranks}/100) ]]Planes=Religion[[(1d20 + @{Knowledge-Religion}) * ceil(@{Knowledge-Religion-ranks}/100) ]]&#125;&#125; {{[[(1d20 + @{Knowledge-dungeoneering}) * ceil(@{Knowledge-dungeoneering-ranks}/100) ]]Dungeon=Geography[[(1d20 + @{Knowledge-Geography}) * ceil(@{Knowledge-Geography-ranks}/100) ]]&#125;&#125; {{[[1d20 + @{Appraise}]]Appraise=Engineer[[(1d20 + @{Knowledge-Engineering}) * ceil(@{Knowledge-engineering-ranks}/100) ]]&#125;&#125; {{[[(1d20 + @{Knowledge-History}) * ceil(@{Knowledge-History-ranks}/100) ]]History=Linguistics[[(1d20 + @{Linguistics}) * ceil(@{Linguistics-ranks}/100) ]]&#125;&#125; {{[[(1d20 + @{Knowledge-Local}) * ceil(@{Knowledge-local-ranks}/100) ]]Local=Nobility[[(1d20 + @{Knowledge-Nobility}) * ceil(@{Knowledge-Nobility-ranks}/100) ]]&#125;&#125; {{[[1d20cs0cf0+@{Heal}]] Heal = Craft[[1d20cf0cs0+@{craft}]] | Senses, @{selected|token_name} Senses&#125;&#125; {{ [[1d20cs0cf0 + @{PERCEPTION} ]]Perception = Survival[[1d20cs0cf0+@{Survival}]] &#125;&#125; {{ [[ (1d20cs0cf0+@{spellcraft}) * ceil(@{spellcraft-ranks}/100) ]]SpellCraft = | Skullduggery, @{selected|token_name} Skullduggery&#125;&#125; {{[[1d20cs0cf0 + @{Stealth} ]] Stealth= Disguise [[1d20cs0cf0 + @{Disguise} ]]&#125;&#125; {{ [[1d20cs0cf0 + @{Escape-Artist}]] Escape = Disable [[(1d20cs0cf0 + @{disable-device}) * ceil(@{disable-device-ranks}/100) ]]&#125;&#125; {{[[ (1d20cs0cf0 + @{sleight-of-hand}) * ceil(@{sleight-of-hand-ranks}/100) ]]Sleight= | UMD, @{selected|token_name} UMD Check: [[ (1d20 + @{Use-Magic-Device}) * ceil(@{Use-Magic-Device-Ranks}/100) ]] &#125;&#125; {{25 =Activate Blindly&#125;&#125;{{25 + Sp Lvl=Decipher Scroll&#125;&#125;{{20 + caster level=Use Scroll&#125;&#125;{{20=Use wand / Emulate class&#125;&#125;{{25=Emulate Race&#125;&#125;{{30=Emulate Align } }} Thanks. I'm very new to Roll20 and I'd like to be able to have this as a universal token action. I can see it work very nicely when I include it on a character sheet but there would be a big win for me (and my players) if I can set it up as a token action that appears whenever I select a token.&nbsp; Is there a good wiki page that will explain what changes I need to do to make this token action into a universal token action?
1464934531

Edited 1464934733
When you add it to the character journals under Attributes and Abilities, just make sure you have the "Show as Token Action" checkbox selected and it will show up whenever you click the token&nbsp; (assuming the token is configure to represent a particular sheet and isn't just a stand-alone token)
Brian L. said: Is there a good wiki page that will explain what changes I need to do to make this token action into a universal token action? Yup; check out: <a href="https://wiki.roll20.net/Token_Actions" rel="nofollow">https://wiki.roll20.net/Token_Actions</a>
Mark G. said: When you add it to the character journals under Attributes and Abilities, just make sure you have the "Show as Token Action" checkbox selected and it will show up whenever you click the token&nbsp; (assuming the token is configure to represent a particular sheet and isn't just a stand-alone token) Yep, I managed to do that for a character, but I wanted to do that for every character journal. I added "selected" to all of the occurrences of&nbsp;@{ and enabled it as a token action. It rolls with the selected character's skill bonuses without needing to add it to the character sheet. &{template:pf_attack} {{name=?{Skill Grouping | Athletics, @{selected|token_name} Athletics Check}} {{[[1d20 + @{selected|ACROBATICS} ]] Jump=Acrobatics [[1d20 + @{selected|ACROBATICS} ]] }} {{[[1d20 + @{selected|CLIMB} ]] Climb=Swim [[1d20 + @{selected|SWIM} ]]}} {{[[ 1d20 + @{selected|RIDE} ]] Ride=Fly [[1d20 + @{selected|FLY}]] | Conversation/Interaction, @{selected|token_name} Conversations}} {{[[1d20cs0cf0 + @{selected|INTIMIDATE} ]] Intimidate=Diplomacy [[1d20cs0cf0 + @{selected|DIPLOMACY} ]]}} {{[[1d20cs0cf0 + @{selected|SENSE-MOTIVE} ]] Sense=Bluff [[1d20cs0cf0 + @{selected|BLUFF} ]]}} {{ [[ (1d20cs0cf0+@{selected|handle-animal}) * ceil(@{selected|handle-animal-ranks}/100)]] Handle Animal = Performance[[1d20cs0cf0 + @{selected|perform}]] | Knowledge, @{selected|token_name} Knowledges}} {{[[(1d20 + @{selected|Knowledge-Arcana}) * ceil(@{selected|Knowledge-Arcana-ranks}/100) ]]Arcana=Nature[[(1d20 + @{selected|Knowledge-Nature}) * ceil(@{selected|Knowledge-Nature-ranks}/100) ]] }} {{[[(1d20 + @{selected|Knowledge-Planes}) * ceil(@{selected|Knowledge-Planes-ranks}/100) ]]Planes=Religion[[(1d20 + @{selected|Knowledge-Religion}) * ceil(@{selected|Knowledge-Religion-ranks}/100) ]]}} {{[[(1d20 + @{selected|Knowledge-dungeoneering}) * ceil(@{selected|Knowledge-dungeoneering-ranks}/100) ]]Dungeon=Geography[[(1d20 + @{selected|Knowledge-Geography}) * ceil(@{selected|Knowledge-Geography-ranks}/100) ]]}} {{[[1d20 + @{selected|Appraise}]]Appraise=Engineer[[(1d20 + @{selected|Knowledge-Engineering}) * ceil(@{selected|Knowledge-engineering-ranks}/100) ]]}} {{[[(1d20 + @{selected|Knowledge-History}) * ceil(@{selected|Knowledge-History-ranks}/100) ]]History=Linguistics[[(1d20 + @{selected|Linguistics}) * ceil(@{selected|Linguistics-ranks}/100) ]]}} {{[[(1d20 + @{selected|Knowledge-Local}) * ceil(@{selected|Knowledge-local-ranks}/100) ]]Local=Nobility[[(1d20 + @{selected|Knowledge-Nobility}) * ceil(@{selected|Knowledge-Nobility-ranks}/100) ]]}} {{[[1d20cs0cf0+@{selected|Heal}]] Heal = Craft[[1d20cf0cs0+@{selected|craft}]] | Senses, @{selected|token_name} Senses}} {{ [[1d20cs0cf0 + @{selected|PERCEPTION} ]]Perception = Survival[[1d20cs0cf0+@{selected|Survival}]] }} {{ [[ (1d20cs0cf0+@{selected|spellcraft}) * ceil(@{selected|spellcraft-ranks}/100) ]]SpellCraft = | Skullduggery, @{selected|token_name} Skullduggery}} {{[[1d20cs0cf0 + @{selected|Stealth} ]] Stealth= Disguise [[1d20cs0cf0 + @{selected|Disguise} ]]}} {{ [[1d20cs0cf0 + @{selected|Escape-Artist}]] Escape = Disable [[(1d20cs0cf0 + @{selected|disable-device}) * ceil(@{selected|disable-device-ranks}/100) ]]}} {{[[ (1d20cs0cf0 + @{selected|sleight-of-hand}) * ceil(@{selected|sleight-of-hand-ranks}/100) ]]Sleight= | UMD, @{selected|token_name} UMD Check: [[ (1d20 + @{selected|Use-Magic-Device}) * ceil(@{selected|Use-Magic-Device-Ranks}/100) ]] }} {{25 =Activate Blindly}}{{25 + Sp Lvl=Decipher Scroll}}{{20 + caster level=Use Scroll}}{{20=Use wand / Emulate class}}{{25=Emulate Race}}{{30=Emulate Align } }} Thanks.