Scott C. said: Ah, gotcha. I'm back on my computer, so now I can actually show some code :). There's several issues with your code getAttr([‘attr_modifier’], function(v){ if(v. attr_modifier)== ?{Modifier|0} {//Not sure if this is just copy paste error, but you've got a space between "v." and attr_modifier
//also, the "attr_" is not used when working with attributes, it simply tells the tabletop to make an attribute with the appropriate name
//and finally, your comparison is outside of your if declaration, should be "if(v.modifier==='?{Modifier|0}'){"
//You'll also note that I used === instead of ==. This is to avoid erroneous positives when the type of the variable is different. setAttrs({attr_modifier})== [[?{Modifier|0}]];//setAttrs expects an object with key:value pairs where the key is the attribute name and the value is the attribute value. You're also attempting to do a comparison between the setAttrs and the value you want. } if(v. attr_modifier)==?{Modifier|0} +?{Shock|0} +?{Reeling or Staggered|0} + ?{Off-Hand|0} + ?{Familiarity|0}{ setAttrs({attr_modifier})== [[?{Modifier|0}]] +[[?{Shock|0}]] + [[?{Reeling or Staggered|0}]] + [[?{Off-Hand|0}]] + [[?{Familiarity|0}]]; } } You can also do this without needing the if statements. Here's how I'd do it, taking the corrections above into account: getAttrs(['modifier'], function(v){
const setObj = {};
setObj.modifier = v.modifier.replace(/(^|[^\[])\?/g,'$1[[?').replace(/}([^\]]|$)/g,'}]]$1');
setAttrs(setObj,{silent:true});
}); Yeah mostly pasting errors and forgetting things, old age, life interruptions, etc, so I realize my code is terrible. Yours is so much simpler and way above my pay grade and I do nto understand it at all but will try it out.