91.08 Pathfinder + D&D3.5 Framework

Discussion concerning lmarkus' campaign framework for D&D3.x and Pathfinder.

Moderators: dorpond, trevor, Azhrei, giliath, Gamerdude, jay, Mr.Ice, lmarkus001

Forum rules
Discussion regarding lmarkus001's framework only. Other posts deleted without notice! :)
JamesMul
Kobold
Posts: 5
Joined: Wed Feb 21, 2018 8:49 pm

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by JamesMul »

I am having issues with the attack macro. I read through the above posts and still dont quite understand how to fix this. I continue to get the error below:

Illegal argument type net.sf.json.JSONArray, expecting java.math.BigDecimal or java.lang.String

Any help would be appreciated.

User avatar
aliasmask
RPTools Team
Posts: 9023
Joined: Tue Nov 10, 2009 6:11 pm
Location: Bay Area

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by aliasmask »

In the MapTool launcher you can turn on some debugging tools under debugging. Check General and Macro debugging. You can then look at the log.txt file for the specific line where the error occurred. If you post that I can probably tell you how to fix it.

JamesMul
Kobold
Posts: 5
Joined: Wed Feb 21, 2018 8:49 pm

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by JamesMul »

Here is what it say when I try to use the macro:
Spoiler

Code: Select all

2018-02-22 08:52:31,129 [model.Token:1300] DEBUG - Evaluating property: 'Feats' for token Eira(000000006A55BBB0F1FA000000000000)----------------------------------------------------------------------------------
2018-02-22 08:52:31,130 [client.MapToolLineParser:1265] DEBUG - tGrVitalStrike = if(tGrVitalStrike == "", 0, tGrVitalStrike)
2018-02-22 08:52:31,132 [client.MapToolLineParser:1265] DEBUG - hasVitalStrike = if( tGrVitalStrike || tImpVitalStrike || ttVitalStrike, 1, 0 )
2018-02-22 08:52:31,133 [client.MapToolLineParser:1265] DEBUG - tToken
2018-02-22 08:52:31,133 [client.MapToolLineParser:1265] DEBUG - tCriticalFocus = getStrProp(Feats, "CriticalFocus")
2018-02-22 08:52:31,134 [model.Token:1300] DEBUG - Evaluating property: 'Feats' for token Eira(000000006A55BBB0F1FA000000000000)----------------------------------------------------------------------------------
2018-02-22 08:52:31,134 [client.MapToolLineParser:1265] DEBUG - tCriticalFocus = if(tCriticalFocus == "", 0, tCriticalFocus)
2018-02-22 08:52:31,135 [client.MapToolLineParser:1265] DEBUG - tcritConfirm = if( tcritConfirm == 0 && tCriticalFocus, tCriticalFocus*4, tcritConfirm )
2018-02-22 08:52:31,135 [client.MapToolLineParser:1265] DEBUG - gTok = "Lib:GlobalsSRDPF"
2018-02-22 08:52:31,136 [client.MapToolLineParser:1265] DEBUG - system = getLibProperty("System", gTok)
2018-02-22 08:52:31,136 [client.MapToolLineParser:1265] DEBUG - system
2018-02-22 08:52:31,137 [client.MapToolLineParser:1265] DEBUG - labelFlurryRapid = " Rapid Shot/Flurry of Blows Attack "
2018-02-22 08:52:31,137 [client.MapToolLineParser:1265] DEBUG - css.cellSO1 = 'style="text-align: left; font-weight: bold; color: #111111; background-color: #aabbcc; padding-top: 0px; padding-bottom: 0px; padding-left: 1px; padding-right: 1px;"'
2018-02-22 08:52:31,138 [client.MapToolLineParser:1265] DEBUG - sizeList = table( "SysVars", json.get( table( "SysVars", 0 ), "sizeList" ) )
2018-02-22 08:52:31,139 [client.MapToolLineParser:1265] DEBUG - uSizePLhead = '<select name="sizeVariant" >'
2018-02-22 08:52:31,139 [client.MapToolLineParser:1265] DEBUG - uSizePL = '<option value="0">NA</option>'
2018-02-22 08:52:31,140 [client.MapToolLineParser:1265] DEBUG - listCount(sizeList)+1
2018-02-22 08:52:31,230 [client.MapToolLineParser:1265] DEBUG - tsizeLabel = listGet(sizeList,i-1)
2018-02-22 08:52:31,231 [client.MapToolLineParser:1265] DEBUG - uSizePL = uSizePL + strformat( '<option value="%{i}">%{tsizeLabel}</option>' )
2018-02-22 08:52:31,232 [client.MapToolLineParser:1265] DEBUG - tsizeLabel = listGet(sizeList,i-1)
2018-02-22 08:52:31,232 [client.MapToolLineParser:1265] DEBUG - uSizePL = uSizePL + strformat( '<option value="%{i}">%{tsizeLabel}</option>' )
2018-02-22 08:52:31,233 [client.MapToolLineParser:1265] DEBUG - tsizeLabel = listGet(sizeList,i-1)
2018-02-22 08:52:31,233 [client.MapToolLineParser:1265] DEBUG - uSizePL = uSizePL + strformat( '<option value="%{i}">%{tsizeLabel}</option>' )
2018-02-22 08:52:31,234 [client.MapToolLineParser:1265] DEBUG - tsizeLabel = listGet(sizeList,i-1)
2018-02-22 08:52:31,234 [client.MapToolLineParser:1265] DEBUG - uSizePL = uSizePL + strformat( '<option value="%{i}">%{tsizeLabel}</option>' )
2018-02-22 08:52:31,235 [client.MapToolLineParser:1265] DEBUG - tsizeLabel = listGet(sizeList,i-1)
2018-02-22 08:52:31,235 [client.MapToolLineParser:1265] DEBUG - uSizePL = uSizePL + strformat( '<option value="%{i}">%{tsizeLabel}</option>' )
2018-02-22 08:52:31,236 [client.MapToolLineParser:1265] DEBUG - tsizeLabel = listGet(sizeList,i-1)
2018-02-22 08:52:31,237 [client.MapToolLineParser:1265] DEBUG - uSizePL = uSizePL + strformat( '<option value="%{i}">%{tsizeLabel}</option>' )
2018-02-22 08:52:31,237 [client.MapToolLineParser:1265] DEBUG - tsizeLabel = listGet(sizeList,i-1)
2018-02-22 08:52:31,238 [client.MapToolLineParser:1265] DEBUG - uSizePL = uSizePL + strformat( '<option value="%{i}">%{tsizeLabel}</option>' )
2018-02-22 08:52:31,238 [client.MapToolLineParser:1265] DEBUG - tsizeLabel = listGet(sizeList,i-1)
2018-02-22 08:52:31,239 [client.MapToolLineParser:1265] DEBUG - uSizePL = uSizePL + strformat( '<option value="%{i}">%{tsizeLabel}</option>' )
2018-02-22 08:52:31,239 [client.MapToolLineParser:1265] DEBUG - tsizeLabel = listGet(sizeList,i-1)
2018-02-22 08:52:31,240 [client.MapToolLineParser:1265] DEBUG - uSizePL = uSizePL + strformat( '<option value="%{i}">%{tsizeLabel}</option>' )
2018-02-22 08:52:31,242 [client.MapToolLineParser:1265] DEBUG - uSizePL = uSizePLhead + replace( uSizePL, '\\Q<option value="'+tsizeVariant+'">\\E', '<option value="' +tsizeVariant+ '" selected="selected">', 1 ) + "</select>"
2018-02-22 08:52:31,243 [client.MapToolLineParser:1265] DEBUG - uRollPL = '<select name="rollTwice" ><option value="0" '+if(trollTwice==0,'selected="selected"','')+'>NA</option>
<option value="1" '+if(trollTwice==1,'selected="selected"','')+'>Use Highest</option>
<option value="2" '+if(trollTwice==2,'selected="selected"','')+'>Use Lowest</option>
</select>
'
2018-02-22 08:52:31,244 [client.MapToolLineParser:1265] DEBUG - css.cellSO1
2018-02-22 08:52:31,244 [client.MapToolLineParser:1265] DEBUG - ttempATK
2018-02-22 08:52:31,245 [client.MapToolLineParser:1265] DEBUG - css.cellSO1
2018-02-22 08:52:31,245 [client.MapToolLineParser:1265] DEBUG - ttempDMG
2018-02-22 08:52:31,245 [client.MapToolLineParser:1265] DEBUG - if(tflanking=="1","checked","")
2018-02-22 08:52:31,246 [client.MapToolLineParser:1265] DEBUG - if(thigherGround=="1","checked","")
2018-02-22 08:52:31,246 [client.MapToolLineParser:1265] DEBUG - if(tcover=="1","checked","")
2018-02-22 08:52:31,247 [client.MapToolLineParser:1265] DEBUG - if(hasVitalStrike, 1, 0)
2018-02-22 08:52:31,247 [client.MapToolLineParser:1265] DEBUG - ""
2018-02-22 08:52:31,248 [client.MapToolLineParser:1265] DEBUG - css.cellSO1
2018-02-22 08:52:31,248 [client.MapToolLineParser:1265] DEBUG - labelFlurryRapid
2018-02-22 08:52:31,248 [client.MapToolLineParser:1265] DEBUG - if(tflurryRapid=="-2","checked","")
2018-02-22 08:52:31,249 [client.MapToolLineParser:1265] DEBUG - if(tflurryRapid=="-1","checked","")
2018-02-22 08:52:31,249 [client.MapToolLineParser:1265] DEBUG - if(tflurryRapid=="0","checked","")
2018-02-22 08:52:31,250 [client.MapToolLineParser:1265] DEBUG - if(tflurryRapid=="1","checked","")
2018-02-22 08:52:31,252 [client.MapToolLineParser:1265] DEBUG - css.cellSO1
2018-02-22 08:52:31,253 [client.MapToolLineParser:1265] DEBUG - if(trangeIncrement=="0","checked","")
2018-02-22 08:52:31,254 [client.MapToolLineParser:1265] DEBUG - if(trangeIncrement=="1","checked","")
2018-02-22 08:52:31,254 [client.MapToolLineParser:1265] DEBUG - if(trangeIncrement=="2","checked","")
2018-02-22 08:52:31,255 [client.MapToolLineParser:1265] DEBUG - if(trangeIncrement=="3","checked","")
2018-02-22 08:52:31,255 [client.MapToolLineParser:1265] DEBUG - if(trangeIncrement=="4","checked","")
2018-02-22 08:52:31,256 [client.MapToolLineParser:1265] DEBUG - if(trangeIncrement=="5","checked","")
2018-02-22 08:52:31,256 [client.MapToolLineParser:1265] DEBUG - if(trangeIncrement=="6","checked","")
2018-02-22 08:52:31,257 [client.MapToolLineParser:1265] DEBUG - if(trangeIncrement=="7","checked","")
2018-02-22 08:52:31,257 [client.MapToolLineParser:1265] DEBUG - if(trangeIncrement=="8","checked","")
2018-02-22 08:52:31,258 [client.MapToolLineParser:1265] DEBUG - if(trangeIncrement=="9","checked","")
2018-02-22 08:52:31,259 [client.MapToolLineParser:1265] DEBUG - if(tfireIntoMelee=="1","checked","")
2018-02-22 08:52:31,259 [client.MapToolLineParser:1265] DEBUG - if(hasPointBlank, 1, 0)
2018-02-22 08:52:31,259 [client.MapToolLineParser:1265] DEBUG - ""
2018-02-22 08:52:31,260 [client.MapToolLineParser:1265] DEBUG - if(hasManyShot, 1, 0)
2018-02-22 08:52:31,260 [client.MapToolLineParser:1265] DEBUG - ""
2018-02-22 08:52:31,261 [client.MapToolLineParser:1265] DEBUG - css.cellSO1
2018-02-22 08:52:31,263 [client.MapToolLineParser:1265] DEBUG - tmodCritRange
2018-02-22 08:52:31,263 [client.MapToolLineParser:1265] DEBUG - css.cellSO1
2018-02-22 08:52:31,264 [client.MapToolLineParser:1265] DEBUG - tcritConfirm
2018-02-22 08:52:31,264 [client.MapToolLineParser:1265] DEBUG - css.cellSO1
2018-02-22 08:52:31,265 [client.MapToolLineParser:1265] DEBUG - tsneak
2018-02-22 08:52:31,265 [client.MapToolLineParser:1265] DEBUG - css.cellSO1
2018-02-22 08:52:31,266 [client.MapToolLineParser:1265] DEBUG - tfavEnemy
2018-02-22 08:52:31,266 [client.MapToolLineParser:1265] DEBUG - css.cellSO1
2018-02-22 08:52:31,267 [client.MapToolLineParser:1265] DEBUG - uSizePL
2018-02-22 08:52:31,267 [client.MapToolLineParser:1265] DEBUG - css.cellSO1
2018-02-22 08:52:31,267 [client.MapToolLineParser:1265] DEBUG - uRollPL
2018-02-22 08:52:31,268 [client.MapToolLineParser:1265] DEBUG - "tblSpecialAttack@"+getMacroLocation()
2018-02-22 08:52:31,268 [client.MapToolLineParser:1265] DEBUG - margs
2018-02-22 08:52:31,269 [client.MapToolLineParser:1265] DEBUG - margs = macro.args
2018-02-22 08:52:31,270 [client.MapToolLineParser:1265] DEBUG - gTok = "Lib:GlobalsSRDPF"
2018-02-22 08:52:31,270 [client.MapToolLineParser:1265] DEBUG - libTok = "Lib:libDnD35Pathfinder"
2018-02-22 08:52:31,271 [client.MapToolLineParser:1265] DEBUG - tToken = json.get(margs,"id")
2018-02-22 08:52:31,273 [client.MapToolLineParser:1265] DEBUG - system = getLibProperty("System", gTok)
2018-02-22 08:52:31,274 [client.MapToolLineParser:1265] DEBUG - system
2018-02-22 08:52:31,274 [client.MapToolLineParser:1265] DEBUG - tPF= "PF"
2018-02-22 08:52:31,275 [client.MapToolLineParser:1265] DEBUG - tTable = "SRDSpecialATK"
2018-02-22 08:52:31,276 [client.MapToolLineParser:1265] DEBUG - sachoices = "None, Disarm, Grapple, Sunder, Trip"
2018-02-22 08:52:31,276 [client.MapToolLineParser:1265] DEBUG - tPF = if( "Pathfinder" == getPropertyType(tToken), "PF", tPF)
2018-02-22 08:52:31,277 [client.MapToolLineParser:1265] DEBUG - css.cellSO3 = 'style="text-align: left;font-weight: bold;color: #111111;background-color: #ee4444;padding-top: 0px;padding-bottom: 0px;padding-left: 1px;padding-right: 1px;"'
2018-02-22 08:52:31,277 [client.MapToolLineParser:1265] DEBUG - switchToken(tToken)
2018-02-22 08:52:31,278 [client.MapToolLineParser:1265] DEBUG - tsachoice = json.get(margs,"specialATKChoice")
2018-02-22 08:52:31,278 [client.MapToolLineParser:1265] DEBUG - plSAHead = '<select name="specialATKChoice" >'
2018-02-22 08:52:31,279 [client.MapToolLineParser:1265] DEBUG - plSA = ""
2018-02-22 08:52:31,279 [client.MapToolLineParser:1265] DEBUG - listCount(sachoices)
2018-02-22 08:52:31,280 [client.MapToolLineParser:1265] DEBUG - plSA = plSA + '<option value="'+listGet(sachoices,i)+'">'+listGet(sachoices,i)+'</option>'
2018-02-22 08:52:31,281 [client.MapToolLineParser:1265] DEBUG - plSA = plSA + '<option value="'+listGet(sachoices,i)+'">'+listGet(sachoices,i)+'</option>'
2018-02-22 08:52:31,282 [client.MapToolLineParser:1265] DEBUG - plSA = plSA + '<option value="'+listGet(sachoices,i)+'">'+listGet(sachoices,i)+'</option>'
2018-02-22 08:52:31,284 [client.MapToolLineParser:1265] DEBUG - plSA = plSA + '<option value="'+listGet(sachoices,i)+'">'+listGet(sachoices,i)+'</option>'
2018-02-22 08:52:31,285 [client.MapToolLineParser:1265] DEBUG - plSA = plSA + '<option value="'+listGet(sachoices,i)+'">'+listGet(sachoices,i)+'</option>'
2018-02-22 08:52:31,286 [client.MapToolLineParser:1265] DEBUG - plSA = plSAHead + replace( plSA, '\\Q<option value="'+tsachoice+'">\\E', '<option value="' +tsachoice+ '" selected="selected">', 1 ) + "</select>"
2018-02-22 08:52:31,287 [client.MapToolLineParser:1265] DEBUG - css.cellSO3
2018-02-22 08:52:31,288 [client.MapToolLineParser:1265] DEBUG - plSA
2018-02-22 08:52:31,288 [client.MapToolLineParser:1265] DEBUG - "tblAttackModSets@"+getMacroLocation()
2018-02-22 08:52:31,289 [client.MapToolLineParser:1265] DEBUG - margs
2018-02-22 08:52:31,289 [client.MapToolLineParser:1265] DEBUG - margs = macro.args
2018-02-22 08:52:31,290 [client.MapToolLineParser:1265] DEBUG - tToken = json.get(margs,"id")
2018-02-22 08:52:31,291 [client.MapToolLineParser:1265] DEBUG - switchToken(tToken)
2018-02-22 08:52:31,291 [client.MapToolLineParser:1265] DEBUG - gTok = "Lib:GlobalsSRDPF"
2018-02-22 08:52:31,292 [client.MapToolLineParser:1265] DEBUG - system = getLibProperty("System", gTok)
2018-02-22 08:52:31,294 [client.MapToolLineParser:1265] DEBUG - system
2018-02-22 08:52:31,295 [model.Token:1300] DEBUG - Evaluating property: 'system' for token Eira(000000006A55BBB0F1FA000000000000)----------------------------------------------------------------------------------
2018-02-22 08:52:31,295 [client.MapToolLineParser:1265] DEBUG - meleeMods = table( "SysVars", json.get( table( "SysVars", 0 ), "meleeModsSRD" ) )
2018-02-22 08:52:31,296 [client.MapToolLineParser:1265] DEBUG - css.cellSO1 = 'style="text-align: left; font-weight: bold; color: #111111; background-color: #aabbcc; padding-top: 0px; padding-bottom: 0px; padding-left: 1px; padding-right: 1px;"'
2018-02-22 08:52:31,296 [client.MapToolLineParser:1265] DEBUG - css.cellStandOutCent='style="text-align: center; font-weight: bold; color: #FFFFFF; background-color: #555555; padding-top: 0px; padding-bottom: 0px; padding-left: 2px; padding-right: 2px;"'
2018-02-22 08:52:31,297 [client.MapToolLineParser:1265] DEBUG - tToken
2018-02-22 08:52:31,298 [client.MapToolLineParser:1265] DEBUG - aTMS = json.get( PrivateJSON, "ActiveTempModSets" )
2018-02-22 08:52:31,298 [client.MapToolLineParser:1265] DEBUG - tToken
2018-02-22 08:52:31,299 [client.MapToolLineParser:1265] DEBUG - if(json.type( aTMS ) == "UNKNOWN", 1, 0)
2018-02-22 08:52:31,300 [client.MapToolLineParser:1265] DEBUG - jMMFields = json.sort( json.fields( meleeMods, "json" ) )
2018-02-22 08:52:31,301 [client.MapToolLineParser:1265] DEBUG - inMods = ""
2018-02-22 08:52:31,301 [client.MapToolLineParser:1265] DEBUG - modString = "%{p} | %{v} | %{n} | %{t} | %{o}"
2018-02-22 08:52:31,302 [client.MapToolLineParser:1265] DEBUG - checkModString = '<tr><td><table></tr><td style="white-space: nowrap;"><table border=0 ><tr><td><input type="checkbox" name="%{m}" value="1" %{c}]> <b>%{m}?</b></td></tr></table></td></tr></table></td></tr>'
2018-02-22 08:52:31,302 [client.MapToolLineParser:1265] DEBUG - textModString = '<tr><td><table><tr><td '+css.cellSO1+'> %{m} </td></tr>'
2018-02-22 08:52:31,303 [client.MapToolLineParser:1265] DEBUG - jMMFields
2018-02-22 08:52:31,305 [client.MapToolLineParser:1265] DEBUG - active = if( json.contains( aTMS, m ), 1, 0 )
2018-02-22 08:52:31,306 [client.MapToolLineParser:1265] DEBUG - jMM = json.get( meleeMods, m )
2018-02-22 08:52:31,306 [client.MapToolLineParser:1265] DEBUG - if(isNumber( jMM ), 1, 0)
2018-02-22 08:52:31,307 [client.MapToolLineParser:1265] DEBUG - c = if(active, "checked", "")
2018-02-22 08:52:31,307 [client.MapToolLineParser:1265] DEBUG - inMods = inMods + strformat( checkModString )
2018-02-22 08:52:31,307 [client.MapToolLineParser:1265] DEBUG - active = if( json.contains( aTMS, m ), 1, 0 )
2018-02-22 08:52:31,308 [client.MapToolLineParser:1265] DEBUG - jMM = json.get( meleeMods, m )
2018-02-22 08:52:31,309 [client.MapToolLineParser:1265] DEBUG - if(isNumber( jMM ), 1, 0)
2018-02-22 08:52:31,310 [client.MapToolLineParser:1265] DEBUG - inMods = inMods + strformat( textModString )
2018-02-22 08:52:31,311 [client.MapToolLineParser:1265] DEBUG - "pfAttack@this"
2018-02-22 08:52:31,311 [client.MapToolLineParser:1265] DEBUG - json.set( "{}", "tokenID", tToken, "mod", m, "variables", jMM, "active", active )
2018-02-22 08:52:31,312 [client.MapToolLineParser:1265] DEBUG - tToken = json.get( macro.args, "tokenID" )
2018-02-22 08:52:31,313 [client.MapToolLineParser:1265] DEBUG - mod = json.get( macro.args, "mod" )
2018-02-22 08:52:31,315 [client.MapToolLineParser:1265] DEBUG - jMM = json.get( macro.args, "variables" )
2018-02-22 08:52:31,315 [client.MapToolLineParser:1265] DEBUG - active = json.get( macro.args, "active" )
2018-02-22 08:52:31,316 [client.MapToolLineParser:1265] DEBUG - switchToken(tToken)
2018-02-22 08:52:31,316 [client.MapToolLineParser:1265] DEBUG - css.cellSO1 = 'style="text-align: left; font-weight: bold; color: #111111; background-color: #aabbcc; padding-top: 0px; padding-bottom: 0px; padding-left: 1px; padding-right: 1px;"'
2018-02-22 08:52:31,317 [client.MapToolLineParser:1265] DEBUG - jPTM = json.get( PrivateJSON, "CustomModSetValues" )
2018-02-22 08:52:31,318 [client.MapToolLineParser:1265] DEBUG - meleeMods = table( "SysVars", json.get( table( "SysVars", 0 ), "meleeMods" ) )
2018-02-22 08:52:31,319 [client.MapToolLineParser:1265] DEBUG - inMods = ""
2018-02-22 08:52:31,319 [client.MapToolLineParser:1265] DEBUG - modString = '<tr><td '+css.cellSO1+'><span style="font-weight:normal;">   %{n} </span></td><td><input type="text" name="%{p}" value="%{v}" size="5"></td></tr></table></tr>'
2018-02-22 08:52:31,320 [client.MapToolLineParser:1265] DEBUG - json.fields( jMM, "json" )
2018-02-22 08:52:31,321 [client.MapToolLineParser:1265] DEBUG - p = json.get( jMM, n )
2018-02-22 08:52:31,321 [client.MapToolLineParser:1265] DEBUG - if(active, 1, 0)
2018-02-22 08:52:31,322 [client.MapToolLineParser:1265] DEBUG - v = 0
2018-02-22 08:52:31,322 [client.MapToolLineParser:1265] DEBUG - inMods = inMods + strformat( modString )
2018-02-22 08:52:31,323 [client.MapToolLineParser:1265] DEBUG - macro.return = json.set( "{}", "inMods", inMods )
2018-02-22 08:52:31,325 [client.MapToolLineParser:1265] DEBUG - tinMods = json.get( macro.return, "inMods" )
2018-02-22 08:52:31,326 [client.MapToolLineParser:1265] DEBUG - inMods = inMods + tinMods
2018-02-22 08:52:31,327 [client.MapToolLineParser:1265] DEBUG - active = if( json.contains( aTMS, m ), 1, 0 )
2018-02-22 08:52:31,327 [client.MapToolLineParser:1265] DEBUG - jMM = json.get( meleeMods, m )
2018-02-22 08:52:31,328 [client.MapToolLineParser:1265] DEBUG - if(isNumber( jMM ), 1, 0)
2018-02-22 08:52:31,329 [client.MapToolLineParser:1265] DEBUG - c = if(active, "checked", "")
2018-02-22 08:52:31,329 [client.MapToolLineParser:1265] DEBUG - inMods = inMods + strformat( checkModString )
2018-02-22 08:52:31,330 [client.MapToolLineParser:1265] DEBUG - active = if( json.contains( aTMS, m ), 1, 0 )
2018-02-22 08:52:31,331 [client.MapToolLineParser:1265] DEBUG - jMM = json.get( meleeMods, m )
2018-02-22 08:52:31,332 [client.MapToolLineParser:1265] DEBUG - if(isNumber( jMM ), 1, 0)
2018-02-22 08:52:31,332 [client.MapToolLineParser:1265] DEBUG - inMods = inMods + strformat( textModString )
2018-02-22 08:52:31,333 [client.MapToolLineParser:1265] DEBUG - "pfAttack@this"
2018-02-22 08:52:31,335 [client.MapToolLineParser:1265] DEBUG - json.set( "{}", "tokenID", tToken, "mod", m, "variables", jMM, "active", active )
2018-02-22 08:52:31,336 [client.MapToolLineParser:1265] DEBUG - tToken = json.get( macro.args, "tokenID" )
2018-02-22 08:52:31,336 [client.MapToolLineParser:1265] DEBUG - mod = json.get( macro.args, "mod" )
2018-02-22 08:52:31,337 [client.MapToolLineParser:1265] DEBUG - jMM = json.get( macro.args, "variables" )
2018-02-22 08:52:31,338 [client.MapToolLineParser:1265] DEBUG - active = json.get( macro.args, "active" )
2018-02-22 08:52:31,338 [client.MapToolLineParser:1265] DEBUG - switchToken(tToken)
2018-02-22 08:52:31,339 [client.MapToolLineParser:1265] DEBUG - css.cellSO1 = 'style="text-align: left; font-weight: bold; color: #111111; background-color: #aabbcc; padding-top: 0px; padding-bottom: 0px; padding-left: 1px; padding-right: 1px;"'
2018-02-22 08:52:31,340 [client.MapToolLineParser:1265] DEBUG - jPTM = json.get( PrivateJSON, "CustomModSetValues" )
2018-02-22 08:52:31,340 [client.MapToolLineParser:1265] DEBUG - meleeMods = table( "SysVars", json.get( table( "SysVars", 0 ), "meleeMods" ) )
2018-02-22 08:52:31,341 [client.MapToolLineParser:1265] DEBUG - inMods = ""
2018-02-22 08:52:31,342 [client.MapToolLineParser:1265] DEBUG - modString = '<tr><td '+css.cellSO1+'><span style="font-weight:normal;">   %{n} </span></td><td><input type="text" name="%{p}" value="%{v}" size="5"></td></tr></table></tr>'
2018-02-22 08:52:31,342 [client.MapToolLineParser:1265] DEBUG - json.fields( jMM, "json" )
2018-02-22 08:52:31,343 [client.MapToolLineParser:1265] DEBUG - p = json.get( jMM, n )
2018-02-22 08:52:31,345 [client.MapToolLineParser:1265] DEBUG - if(active, 1, 0)
2018-02-22 08:52:31,346 [client.MapToolLineParser:1265] DEBUG - v = 0
2018-02-22 08:52:31,346 [client.MapToolLineParser:1265] DEBUG - inMods = inMods + strformat( modString )
2018-02-22 08:52:31,347 [client.MapToolLineParser:1265] DEBUG - macro.return = json.set( "{}", "inMods", inMods )
2018-02-22 08:52:31,348 [client.MapToolLineParser:1265] DEBUG - tinMods = json.get( macro.return, "inMods" )
2018-02-22 08:52:31,349 [client.MapToolLineParser:1265] DEBUG - inMods = inMods + tinMods
2018-02-22 08:52:31,349 [client.MapToolLineParser:1265] DEBUG - active = if( json.contains( aTMS, m ), 1, 0 )
2018-02-22 08:52:31,350 [client.MapToolLineParser:1265] DEBUG - jMM = json.get( meleeMods, m )
2018-02-22 08:52:31,351 [client.MapToolLineParser:1265] DEBUG - if(isNumber( jMM ), 1, 0)
2018-02-22 08:52:31,352 [client.MapToolLineParser:1265] DEBUG - c = if(active, "checked", "")
2018-02-22 08:52:31,352 [client.MapToolLineParser:1265] DEBUG - inMods = inMods + strformat( checkModString )
2018-02-22 08:52:31,353 [client.MapToolLineParser:1265] DEBUG - active = if( json.contains( aTMS, m ), 1, 0 )
2018-02-22 08:52:31,354 [client.MapToolLineParser:1265] DEBUG - jMM = json.get( meleeMods, m )
2018-02-22 08:52:31,356 [client.MapToolLineParser:1265] DEBUG - if(isNumber( jMM ), 1, 0)
2018-02-22 08:52:31,356 [client.MapToolLineParser:1265] DEBUG - c = if(active, "checked", "")
2018-02-22 08:52:31,357 [client.MapToolLineParser:1265] DEBUG - inMods = inMods + strformat( checkModString )
2018-02-22 08:52:31,358 [client.MapToolLineParser:1265] DEBUG - css.cellStandOutCent
2018-02-22 08:52:31,358 [client.MapToolLineParser:1265] DEBUG - inMods
2018-02-22 08:52:31,360 [client.MapToolLineParser:1265] DEBUG - tToken
2018-02-22 08:52:31,361 [client.MapToolLineParser:1265] DEBUG - ttmap
2018-02-22 08:52:31,361 [client.MapToolLineParser:1265] DEBUG - numWeapChoice
2018-02-22 08:52:31,362 [client.MapToolLineParser:1265] DEBUG - if(isTokHere == "", 1, 0)
2018-02-22 08:52:31,363 [client.MapToolLineParser:1265] DEBUG - ""
2018-02-22 08:52:31,363 [client.MapToolLineParser:1265] DEBUG - abort(0)
2018-02-22 08:52:31,364 [client.MapToolLineParser:1269] DEBUG - net.rptools.maptool.client.functions.AbortFunction$AbortFunctionException: macro.function.abortFunction.message
2018-02-22 08:52:32,371 [client.MapToolLineParser:1265] DEBUG - margs = macro.args
2018-02-22 08:52:32,372 [client.MapToolLineParser:1265] DEBUG - gLib = "Lib:GlobalsSRDPF"
2018-02-22 08:52:32,373 [client.MapToolLineParser:1265] DEBUG - submitAction = replace(json.get(margs, "processAttack"),"<[^>]*?>","")
2018-02-22 08:52:32,373 [client.MapToolLineParser:1265] DEBUG - numWeapChoice = json.get( margs, "numWeapChoice" )
2018-02-22 08:52:32,374 [client.MapToolLineParser:1265] DEBUG - if(json.isEmpty( numWeapChoice ), 1, 0)
2018-02-22 08:52:32,375 [client.MapToolLineParser:1265] DEBUG - ''
2018-02-22 08:52:32,375 [client.MapToolLineParser:1265] DEBUG - tToken = json.get(margs, "id")
2018-02-22 08:52:32,376 [client.MapToolLineParser:1265] DEBUG - isTokHere = findToken( tToken)
2018-02-22 08:52:32,376 [client.MapToolLineParser:1265] DEBUG - tcmap = getCurrentMapName()
2018-02-22 08:52:32,377 [client.MapToolLineParser:1265] DEBUG - ttmap = json.get(margs,"tmap")
2018-02-22 08:52:32,378 [client.MapToolLineParser:1265] DEBUG - if(isTokHere == "", 1, 0)
2018-02-22 08:52:32,379 [client.MapToolLineParser:1265] DEBUG - ""
2018-02-22 08:52:32,380 [client.MapToolLineParser:1265] DEBUG - if(isTokHere == "", 1, 0)
2018-02-22 08:52:32,380 [client.MapToolLineParser:1265] DEBUG - isTokHere2 = 1
2018-02-22 08:52:32,381 [client.MapToolLineParser:1265] DEBUG - if(isTokHere2 == "", 1, 0)
2018-02-22 08:52:32,383 [client.MapToolLineParser:1265] DEBUG - ""
2018-02-22 08:52:32,383 [client.MapToolLineParser:1265] DEBUG - assert( isTokHere2 != "", "Attack Frame: Token not found.  Move to the map containing your token and try again.")
2018-02-22 08:52:32,384 [client.MapToolLineParser:1265] DEBUG - if(isTokHere != "" && tcmap != ttmap, 1, 0)
2018-02-22 08:52:32,384 [client.MapToolLineParser:1265] DEBUG - ""
2018-02-22 08:52:32,385 [client.MapToolLineParser:1265] DEBUG - target1ID = json.get(margs, "target1ID")
2018-02-22 08:52:32,386 [client.MapToolLineParser:1265] DEBUG - if(target1ID == "", 1, 0)
2018-02-22 08:52:32,387 [client.MapToolLineParser:1265] DEBUG - tid1name = getName(target1ID)
2018-02-22 08:52:32,388 [client.MapToolLineParser:1265] DEBUG - target2ID = json.get(margs, "target2ID")
2018-02-22 08:52:32,388 [client.MapToolLineParser:1265] DEBUG - if(target2ID == "", 1, 0)
2018-02-22 08:52:32,389 [client.MapToolLineParser:1265] DEBUG - tid2name = ""
2018-02-22 08:52:32,389 [client.MapToolLineParser:1265] DEBUG - tSelected = getSelected()
2018-02-22 08:52:32,390 [client.MapToolLineParser:1265] DEBUG - if(submitAction == "Set 1st", 1, 0)
2018-02-22 08:52:32,391 [client.MapToolLineParser:1265] DEBUG - if(submitAction == "Set 2nd", 1, 0)
2018-02-22 08:52:32,393 [client.MapToolLineParser:1265] DEBUG - system = getLibProperty("System", gLib)
2018-02-22 08:52:32,394 [client.MapToolLineParser:1265] DEBUG - system
2018-02-22 08:52:32,395 [client.MapToolLineParser:1265] DEBUG - meleeMods = table( "SysVars", json.get( table( "SysVars", 0 ), "meleeModsSRD" ) )
2018-02-22 08:52:32,396 [client.MapToolLineParser:1265] DEBUG - tPF= "PF"
2018-02-22 08:52:32,396 [client.MapToolLineParser:1265] DEBUG - tTable = "SRDSpecialATK"
2018-02-22 08:52:32,397 [client.MapToolLineParser:1265] DEBUG - sachoices = "None, Disarm, Grapple, Sunder, Trip"
2018-02-22 08:52:32,397 [client.MapToolLineParser:1265] DEBUG - tPF = if( "Pathfinder" == getPropertyType(tToken), "PF", tPF)
2018-02-22 08:52:32,398 [client.MapToolLineParser:1265] DEBUG - tToken
2018-02-22 08:52:32,399 [client.MapToolLineParser:1265] DEBUG - aTMS = json.get( PrivateJSON, "ActiveTempModSets" )
2018-02-22 08:52:32,399 [client.MapToolLineParser:1265] DEBUG - if(json.type( aTMS ) == "UNKNOWN", 1, 0)
2018-02-22 08:52:32,400 [client.MapToolLineParser:1265] DEBUG - tToken
2018-02-22 08:52:32,401 [client.MapToolLineParser:1265] DEBUG - jPTM = json.get( PrivateJSON, "CustomModSetValues" )
2018-02-22 08:52:32,404 [client.MapToolLineParser:1265] DEBUG - jMMFields = json.sort( json.fields( meleeMods, "json" ) )
2018-02-22 08:52:32,404 [client.MapToolLineParser:1265] DEBUG - hasChanged = 0
2018-02-22 08:52:32,405 [client.MapToolLineParser:1265] DEBUG - jMMFields
2018-02-22 08:52:32,406 [client.MapToolLineParser:1265] DEBUG - changed = 0
2018-02-22 08:52:32,407 [client.MapToolLineParser:1265] DEBUG - disable = 1
2018-02-22 08:52:32,407 [client.MapToolLineParser:1265] DEBUG - active = if( json.contains( aTMS, m ), 1, 0 )
2018-02-22 08:52:32,408 [client.MapToolLineParser:1265] DEBUG - jMM = json.get( meleeMods, m )
2018-02-22 08:52:32,409 [client.MapToolLineParser:1265] DEBUG - presetVars = ""
2018-02-22 08:52:32,409 [client.MapToolLineParser:1265] DEBUG - tjfjMM = json.fields( jMM, "json")
2018-02-22 08:52:32,410 [client.MapToolLineParser:1265] DEBUG - tjfjMM = if(tjfjMM == "", 0, tjfjMM)
2018-02-22 08:52:32,410 [client.MapToolLineParser:1265] DEBUG - tjfjMM
2018-02-22 08:52:32,413 [client.MapToolLineParser:1265] DEBUG - isJObj = if( json.type( jMM ) == "OBJECT", 1, 0 )
2018-02-22 08:52:32,414 [client.MapToolLineParser:1265] DEBUG - if(isJObj && active, 1, 0)
2018-02-22 08:52:32,414 [client.MapToolLineParser:1265] DEBUG - v = 0
2018-02-22 08:52:32,414 [client.MapToolLineParser:1265] DEBUG - if(isJObj, 1, 0)
2018-02-22 08:52:32,415 [client.MapToolLineParser:1265] DEBUG - tmv = json.get(margs, m)
2018-02-22 08:52:32,416 [client.MapToolLineParser:1265] DEBUG - if(isJObj, 1, 0)
2018-02-22 08:52:32,416 [client.MapToolLineParser:1265] DEBUG - tmv = if(tmv == "", 0, tmv)
2018-02-22 08:52:32,417 [client.MapToolLineParser:1265] DEBUG - if(isJObj, 1, 0)
2018-02-22 08:52:32,418 [client.MapToolLineParser:1265] DEBUG - disable = 1
2018-02-22 08:52:32,418 [client.MapToolLineParser:1265] DEBUG - if(isJObj, 1, 0)
2018-02-22 08:52:32,419 [client.MapToolLineParser:1265] DEBUG - changed = if( active != tmv, 1, changed )
2018-02-22 08:52:32,420 [client.MapToolLineParser:1265] DEBUG - if(changed && isJObj, 1, 0)
2018-02-22 08:52:32,420 [client.MapToolLineParser:1265] DEBUG - ""
2018-02-22 08:52:32,421 [client.MapToolLineParser:1265] DEBUG - if(changed && active, 1, 0)
2018-02-22 08:52:32,423 [client.MapToolLineParser:1265] DEBUG - if(changed && ( !disable || !active ), 1, 0)
2018-02-22 08:52:32,424 [client.MapToolLineParser:1265] DEBUG - hasChanged = if( hasChanged || changed, 1, 0 )
2018-02-22 08:52:32,425 [client.MapToolLineParser:1265] DEBUG - changed = 0
2018-02-22 08:52:32,425 [client.MapToolLineParser:1265] DEBUG - disable = 1
2018-02-22 08:52:32,426 [client.MapToolLineParser:1265] DEBUG - active = if( json.contains( aTMS, m ), 1, 0 )
2018-02-22 08:52:32,426 [client.MapToolLineParser:1265] DEBUG - jMM = json.get( meleeMods, m )
2018-02-22 08:52:32,427 [client.MapToolLineParser:1265] DEBUG - presetVars = ""
2018-02-22 08:52:32,428 [client.MapToolLineParser:1265] DEBUG - tjfjMM = json.fields( jMM, "json")
2018-02-22 08:52:32,428 [client.MapToolLineParser:1265] DEBUG - tjfjMM = if(tjfjMM == "", 0, tjfjMM)
2018-02-22 08:52:32,429 [client.MapToolLineParser:1280] DEBUG - net.rptools.parser.function.ParameterException: Illegal argument type net.sf.json.JSONArray, expecting java.math.BigDecimal or java.lang.String

Sorry about the messed up format, I just copied from the console... still trying to learn this stuff.
Last edited by aliasmask on Thu Feb 22, 2018 11:53 am, edited 1 time in total.
Reason: added spoiler

User avatar
aliasmask
RPTools Team
Posts: 9023
Joined: Tue Nov 10, 2009 6:11 pm
Location: Bay Area

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by aliasmask »

The last DEBUG line

Code: Select all

tjfjMM = if(tjfjMM == "", 0, tjfjMM)
Is where the error occurred. A better way to write it is:

Code: Select all

[H, if(json.isEmpty(tjfjMM)): tjfjMM = 0]
As to where to put it, I would have to do a search on the files in the framework.

User avatar
aliasmask
RPTools Team
Posts: 9023
Joined: Tue Nov 10, 2009 6:11 pm
Location: Bay Area

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by aliasmask »

Actually, the best solution is to just remove those lines. It appears in 2 macros.

Method to fix:

* Select the library macro Lib:libDnD35Pathfinder on the Libraries map.
* In the Campaign Window run Edit Macros near the bottom.
* A window will open, copy all the text below including the @@ @Attack all the way to the !!
* Paste in to window and click the Save button at bottom of window.

This should fix your problem.
Spoiler

Code: Select all

@@ @Attack
@PROPS@ fontColor=black ; autoExecute=true ; fontSize=1.00em ; sortBy=1 ; color=gray ; playerEditable=false ; applyToSelected=true ; group=Combat ; tooltip= ; minWidth= ; 
<!-- ATTACK -->
[H: fGMSecret = getLibProperty("fGMSecret", "Lib:GlobalsSRDPF")]
[H, IF( json.type( macro.args ) == "UNKNOWN" ), CODE: {
   [ weaponID = macro.args ]
   [ flagSecret = fGMSecret ]
};{
   [ weaponID = json.get( macro.args, "weaponID" ) ]
   [ flagSecret = json.get( macro.args, "flagSecret" ) ]
   [IF( json.isEmpty( flagSecret ) ): flagSecret = fGMSecret ]
   [ numWeapChoice = json.get( macro.args, "numWeapChoice" ) ]
   [IF( json.isEmpty( numWeapChoice ) ): numWeapChoice = 10 ]
} ]

[H: tToken = currentToken() ]
[H, TOKEN( tToken ): assert( isOwner() || isGM(), getMacroName() + ": Not your token!" ) ]

[H: weaponID = if( isNumber(weaponID), "Weapon" + weaponID, weaponID ) ]

[H: gTok = "Lib:GlobalsSRDPF" ]
[H: system = getLibProperty("System", gTok)]
[H, SWITCH(system), CODE:
   case "Pathfinder": {
      [ meleeMods = table( "SysVars", json.get( table( "SysVars", 0 ), "meleeModsPF" ) ) ]
      [ pRapid = "Rapid Shot Attack *" ]
      [H: tPF= "PF"]
      [H: tTable = "PFSpecialATK" ]
      [H: sachoices = "None, Disarm, Grapple, Sunder, Trip"]
   };
   case "D&D3.5": {
      [ meleeMods = table( "SysVars", json.get( table( "SysVars", 0 ), "meleeModsSRD" ) ) ]
      [ pRapid = "Flurry of Blows/Rapid Shot Attack *" ]
      [H: tPF= "PF"]
      [H: tTable = "SRDSpecialATK" ]
      [H: sachoices = "None, Disarm, Grapple, Sunder, Trip"]
   };
   default: {
   }
]
[H: tPF = if( "Pathfinder" == getPropertyType(), "PF", tPF)]

[H: tPointBlankShot = getStrProp(Feats, "PointBlankShot")]
[H: tPointBlankShot = if(tPointBlankShot == "", 0, tPointBlankShot)]
[H: tManyShot = getStrProp(Feats, "ManyShot")]
[H: tManyShot = if(tManyShot == "", 0, tManyShot)]
[H: manyShot = 0 ]
[H: optManyShot = IF(tManyShot, "manyShot|0|Using Many Shot Feat?|CHECK| ##", "" ) ]

[H: tVitalStrike = getStrProp(Feats, "VitalStrike")]
[H: tVitalStrike = if(tVitalStrike == "", 0, tVitalStrike)]
[H: tImpVitalStrike = getStrProp(Feats, "ImprovedVitalStrike")]
[H: tImpVitalStrike = if(tImpVitalStrike == "", 0, tImpVitalStrike)]
[H: tGrVitalStrike = getStrProp(Feats, "GreaterVitalStrike")]
[H: tGrVitalStrike = if(tGrVitalStrike == "", 0, tGrVitalStrike)]
[H: tVitalStrike = if( tGrVitalStrike || tImpVitalStrike || tVitalStrike, 1, 0 ) ]
[H: vitalStrike = 0 ]
[H: optVitalStrike = IF(tVitalStrike, "vitalStrike|0|Use Vital Strike Feat?|CHECK| ##", "" ) ]

[H: jCC = json.get( PrivateJSON, "CombatConfig" ) ]
[H, IF( json.type( jCC ) == "UNKNOWN" ), CODE: {
   [ jCC = json.set( "{}", "fullRound", 1, "rangeIncrement", 1, "flurryRapid", 1, "favEnemy", 0, "sneak", "0d6", "fireIntoMelee", 0, "manyShot", manyShot, "critConfirm", 0, "modCritRange", 0, "sizeVariant", 0, "rollTwice", 0  ) ]
   [ PrivateJSON = json.set( PrivateJSON, "CombatConfig", jCC ) ]
}]
[H: sizeVariant = json.get( jCC, "sizeVariant" ) ]
[H, IF( sizeVariant == "" ): sizeVariant = 0; "" ]
[H: rollTwice = json.get( jCC, "rollTwice" ) ]
[H, IF( rollTwice == "" ): rollTwice = 0; "" ]

[H: tCriticalFocus = getStrProp(Feats, "CriticalFocus")]
[H: tCriticalFocus = if(tCriticalFocus == "", 0, tCriticalFocus)]
[H: critConfirm = json.get( jCC, "critConfirm" ) ]
[H: critConfirm = if( critConfirm == 0 && tCriticalFocus, tCriticalFocus*4, critConfirm ) ]

[H: sizeList = table( "SysVars", json.get( table( "SysVars", 0 ), "sizeList" ) ) ]

[H: inCC =
   "fullRound|Single, Full Round|Attack|RADIO|ORIENT=H SELECT=1 ##"
   + "concealMiss|0,1,2|Roll How Many Miss Chances?|RADIO|ORIENT=H VALUE=STRING ##"
   + "flagSecret|" + flagSecret + "|<html><font color=red>Secret</font>?</html>|CHECK| ##"
   + "specialATKChoice|" + sachoices + "|Follow-on Special Attack?|LIST|SELECT=0 ##"
   + "tempATK|0|Temporary Attack Bonus|TEXT|WIDTH=10 ##"
   + "tempDMG|0|Temporary Damage Bonus|TEXT|WIDTH=10 ##"
   + "flanking|0|Flanking?|CHECK| ##"
   + "higherGround|0|Attacking from Higher Ground?|CHECK| ##"
   + "cover|0|<html><span title='Use for Melee attacking around a hard corner or Range attacks with impediments (like an ally) in the way (-4 to Attack).'>Target has Cover?</span></html>|CHECK| ##"
   + optManyShot + optVitalStrike
   + "flurryRapid|-2, -1, 0, Normal Attack|"+pRapid+"|RADIO|ORIENT=H SELECT=3 ##"
   + "seperator|<html>   * Gives an additional attack if <i>Full Round</i> and weapon is <i>Manufactured</i>.</html>||LABEL|SPAN=TRUE ##"
   + "rangeIncrement|1,2,3,4,5,6,7,8,9,10|Range Increment|RADIO|ORIENT=H SELECT=0 ##"
   + "pointBlank|0|<html>Point Blank Range (<font color=red>30 feet</font>)?</html>|CHECK| ##"
   + "seperator|<html>     ------  </i>Persistent</i>  ------</html>||LABEL|SPAN=TRUE ##"
   + "fireIntoMelee|" + json.get( jCC, "fireIntoMelee" ) + "|<html><span title='Use for Shooting/Throwing into Melee (-4 to Attack).'>Fire into Melee?</span></html>|CHECK| ##"
   + "modCritRange|" + json.get( jCC, "modCritRange" ) + "|Mod to Crit Range|TEXT|WIDTH=10 ##"
   + "critConfirm|" + critConfirm + "|Bonus to Confirm Critical Hit|TEXT|WIDTH=10 ##"
   + "favEnemy|" + json.get( jCC, "favEnemy" ) + "|Favorite Enemy Bonus|TEXT|WIDTH=10 ##"
   + "sneak|" + json.get( jCC, "sneak" ) + "|Sneak Attack Damage|TEXT|WIDTH=10 ##"
   + "sizeVariant| NA," + sizeList + "|<html><span title='Use when Enlarged or Reduced to change the base damage dice.'>Variant Size</span></html>|RADIO| ORIENT=H SELECT=" + sizeVariant + " ##"
   + "rollTwice| NA, Use Highest, Use Lowest|Roll Attack Twice Variant|RADIO| ORIENT=H SELECT=" + rollTwice
]

[H: aTMS = json.get( PrivateJSON, "ActiveTempModSets" ) ]
[H, IF( json.type( aTMS ) == "UNKNOWN" ), CODE: {
   [ PrivateJSON = json.set( PrivateJSON, "ActiveTempModSets", "[]" ) ]
   [ aTMS = "[]" ]
}]
[H: jPTM = json.get( PrivateJSON, "CustomModSetValues" ) ]

[H: jMMFields = json.sort( json.fields( meleeMods, "json" ) ) ]

[H: inMods = "" ]
[H: modString = "%{p} | %{v} | %{n} | %{t} | %{o}" ]

[H, FOREACH( m, jMMFields ), CODE: {
   [ active = if( json.contains( aTMS, m ), 1, 0 ) ]
   [ jMM = json.get( meleeMods, m ) ]

   [IF( isNumber( jMM ) ), CODE: {
      [ p = replace( replace( m, " ", "_" ), "/", "." ) ]
      [ v = active ]
      [ n = "<html><b>" + m + "</b></html>" ]
      [ t = "CHECK" ]
      [ o = "" ]
      [ inMods = listAppend( inMods, strformat( modString ), "##" ) ]
   };{
      [ p = m ]
      [ v = "<html><b>" + m + "</b></html>" ]
      [ n = m ]
      [ t = "LABEL" ]
      [ o = "SPAN=TRUE" ]
      [ inMods = listAppend( inMods, strformat( modString ), "##" ) ]
   
      [MACRO( "pAttack@this" ): json.set( "{}", "tokenID", tToken, "mod", m, "variables", jMM, "active", active ) ]
      [ tinMods = json.get( macro.return, "inMods" ) ]
   
      [ inMods = listAppend( inMods, tinMods, "##" ) ]
   }]
}]

[H: inWeap = "" ]
[H, IF(weaponID == ""), CODE: {
   [H: weaponNames=""]
   [H, C(31, ""): weaponNames = weaponNames + ", " + getStrProp(eval("Weapon" + roll.count), "Name")]
   [H: inWeapString = 'Weap%{roll.count}|' + weaponNames + '|Select Attack%{roll.count}| LIST | SELECT=%{tSelect}' ]
   [H, C(numWeapChoice, ""), CODE: {
      [ tSelect = getStrProp( Private, "LastWeap" + roll.count ) ]
      [ inWeap = listAppend( inWeap, strformat( inWeapString ), '##' ) ]
   }]
};{
   [ weaponNames = getStrProp(eval("" + weaponID), "Name")]
   [ inWeap = 'junk|' + weaponNames + '|Weapon| LABEL |' ]
}]

[H: visTokens = "[]" ]
[H: visTokenIDs = getVisibleTokens("json") ]
[H, FOREACH( i, visTokenIDs ),CODE: {
   [IF(isNumber(i)): ""; visTokens = json.append( visTokens, json.set( "{}", "name", getName(i), "id", i, "range", lgm.getDistanceElev(i,tToken) ) ) ]
}]
[H: visTokens = json.sort( visTokens, "ascend", "range", "name" ) ]
[H: visTokenNames = "[]" ]
[H, FOREACH( i, visTokens ), CODE: {
   [ visTokenRange = json.get( i, "range" ) ]
   [ visTokenNames = json.append( visTokenNames, "(" + if( visTokenRange <= 30, "<font color=red>", "" ) + visTokenRange + " ft." + if( visTokenRange <= 30, "</font>", "" ) + ") " + json.get( i, "name" ) ) ]
}]

[H: visTokenNameList = "Not Specified" ]
[H, FOREACH( i, visTokenNames, "" ): visTokenNameList = listAppend( visTokenNameList,   "<html>" + replace( i, ",", "_" ) +  "</html>" ) ]

[H: cancel = input(
   "tab0 | Config Attack | | TAB",
   inWeap,
   inCC,
   "seperator|<html>     ---vvvv---  </i>Mod-Sets</i>  ---vvvv---</html>||LABEL|SPAN=TRUE",
   inMods,
   "tab1 | Primary Target | | TAB",
   "tTarget1 | " + visTokenNameList + " |Target|RADIO|",
   "tab1 | Secondary Target | | TAB",
   "tTarget2 | " + visTokenNameList + " |Target|RADIO|"
)]
[H: abort(cancel)]

[H: flurryRapid = flurryRapid - 2 ]

[H, IF( tTarget1 == 0 ): target1ID = ""; target1ID = json.get( json.get( visTokens, tTarget1-1 ), "id" ) ]
[H, IF( tTarget2 == 0 ): target2ID = ""; target2ID = json.get( json.get( visTokens, tTarget2-1 ), "id" ) ]
[H, IF( tTarget1 == 0 ): target1Name = ""; target1Name = json.get( json.get( visTokens, tTarget1-1 ), "name" ) ]
[H, IF( tTarget2 == 0 ): target2Name = ""; target2Name = json.get( json.get( visTokens, tTarget2-1 ), "name" ) ]
[H, IF( target1ID != "" ), CODE: {
   [H, IF( am.hasHighGround( tToken, target1ID ) ): higherGround = 1; ""]
   [H: tdist = lgm.getDistanceElev(target1ID,tToken)]
   [H, IF(tdist <= 30 && tPointBlankShot): pointBlank = 1; pointBlank = 0]
};{}]

[H, IF(weaponID == ""), CODE: {
   [H: Private = setStrProp(Private, "LastWeap0", Weap0)]
   [H, IF(numWeapChoice >= 2): Private = setStrProp(Private, "LastWeap1", Weap1)]
   [H, IF(numWeapChoice >= 3): Private = setStrProp(Private, "LastWeap2", Weap2)]
   [H, IF(numWeapChoice >= 4): Private = setStrProp(Private, "LastWeap3", Weap3)]
   [H, IF(numWeapChoice >= 5): Private = setStrProp(Private, "LastWeap4", Weap4)]
   [H, IF(numWeapChoice >= 6): Private = setStrProp(Private, "LastWeap5", Weap5)]
   [H, IF(numWeapChoice >= 7): Private = setStrProp(Private, "LastWeap6", Weap6)]
   [H, IF(numWeapChoice >= 8): Private = setStrProp(Private, "LastWeap7", Weap7)]
   [H, IF(numWeapChoice >= 9): Private = setStrProp(Private, "LastWeap8", Weap8)]
   [H, IF(numWeapChoice >= 10): Private = setStrProp(Private, "LastWeap9", Weap9)]
};
{}]

[FOREACH( m, jMMFields, "" ), CODE: {
   [H: changed = 0 ]
   [H: disable = 1 ]
   [H: active = if( json.contains( aTMS, m ), 1, 0 ) ]
   [H: jMM = json.get( meleeMods, m ) ]
   [H: presetVars = "" ]

   [H: tjfjMM = json.fields( jMM, "json")]

   [H, FOREACH( n, tjfjMM ), CODE: {
      [ isJObj = if( json.type( jMM ) == "OBJECT", 1, 0 ) ]
      [IF( isJObj && active ): v = json.get( json.get( json.get( json.get( jPTM, m ), "mods" ), "globalMod" ), "v" ); v = 0  ]
      [IF( isJObj ): tmv = eval( "" + json.get( jMM, n ) ); tmv = eval( "" + replace( replace( m, " ", "_" ), "/", "." ) ) ]     
     
      [IF( isJObj ): disable = if( tmv != 0, 0, disable ); disable = 1 ]
      [IF( isJObj ): changed = if( v != tmv, 1, changed ); changed = if( active != tmv, 1, changed ) ]
      [IF( changed && isJObj ): presetVars = json.set( presetVars, json.get( jMM, n ), tmv ) ]
   }]

   
   [IF( changed && active ), CODE: {
      [MACRO( "subModToggle@this" ): json.set( "{}", "tokenID", tToken, "setID", m, "setType", 0 ) ]
   };{}]
   [IF( changed && ( !disable || !active ) ), CODE: {
      [MACRO( "subModToggle@this" ): json.set( "{}", "tokenID", tToken, "setID", m, "setType", 0, "presetVars", presetVars ) ]
   };{}]
}]
   
[H,IF(weaponID == ""), CODE: {
   [C(numWeapChoice,""), IF( eval("Weap" + roll.count) == "" || eval("Weap" + roll.count) == 0), CODE: {
   };{
      [H: ti = eval("Weap" + roll.count) - 1]
      [H: tWeap = "Weapon" + ti]
      [H, IF( target1ID != "" ): lgm.getWeaponset(ti);""]
      [H, IF( target1ID != "" ): rangeIncrement = floor((tdist-0.01)/WpnRangeInc);""]
      [MACRO("LibAttack@this"): json.set("{}", "weapon", tWeap, "fullRound", fullRound, "flanking", flanking, "higherGround", higherGround, "favEnemy", favEnemy, "rangeIncrement", rangeIncrement, "pointBlank", pointBlank, "cover", cover, "fireIntoMelee", fireIntoMelee, "sneak", sneak, "flurryRapid", flurryRapid, "target1Name", target1Name, "target1ID", target1ID, "target2Name", target2Name, "target2ID", target2ID, "flagSecret", flagSecret, "tempATK", tempATK, "tempDMG", tempDMG, "concealMiss", concealMiss, "manyShot", manyShot, "critConfirm", eval(""+critConfirm), "modCritRange", eval(""+modCritRange), "vitalStrike", vitalStrike, "sizeVariant", sizeVariant, "rollTwice", rollTwice ) ]
   }]
};{
      [H: ti = replace(lower(weaponID),"weapon","")]
      [H, IF( target1ID != "" ): lgm.getWeaponset(ti);""]
      [H, IF( target1ID != "" ): rangeIncrement = floor((tdist-0.01)/WpnRangeInc);""]
      [MACRO("LibAttack@this"): json.set("{}", "weapon", weaponID, "fullRound", fullRound, "flanking", flanking, "higherGround", higherGround, "favEnemy", favEnemy, "rangeIncrement", rangeIncrement, "pointBlank", pointBlank, "cover", cover, "fireIntoMelee", fireIntoMelee, "sneak", sneak, "flurryRapid", flurryRapid, "target1Name", target1Name, "target1ID", target1ID, "target2Name", target2Name, "target2ID", target2ID, "flagSecret", flagSecret, "tempATK", tempATK, "tempDMG", tempDMG, "concealMiss", concealMiss, "manyShot", manyShot, "critConfirm", eval(""+critConfirm), "modCritRange", eval(""+modCritRange), "vitalStrike", vitalStrike, "sizeVariant", sizeVariant, "rollTwice", rollTwice ) ]
}]

[H: PrivateJSON = json.set( PrivateJSON, "CombatConfig", json.set( "{}", "fullRound", fullRound, "rangeIncrement", rangeIncrement, "pointBlank", pointBlank, "flurryRapid", flurryRapid, "favEnemy", favEnemy, "sneak", sneak, "fireIntoMelee", fireIntoMelee, "manyShot", manyShot, "critConfirm", critConfirm, "modCritRange", modCritRange, "sizeVariant", sizeVariant, "rollTwice", rollTwice ) ) ]

[H: tType = listGet( sachoices, specialATKChoice ) ]
[H: cntAll = table( tTable, 0 )]
[H: ref = ""]
[H: i = 1 ]

[H, WHILE( ref == "" && i <= cntAll ), CODE: {
  [H: jType = table( tTable, i )]
  [R: cType = json.get( jType, "name" )]
  [H, IF(tType == cType): ref = ref + json.get( jType, "ref" )]
  [H: i = i + 1 ]
}]

[H: out1 = "<b>" +  macroLink( tType, "dispSATKrules@" + getMacroLocation(), "none", json.set( "", "name", tType, "system", system)) + "</b> (" + ref + ")<br />" ]

[H,IF(flagSecret && (specialATKChoice != 0)),CODE:{
    [H: broadcast(out1,json.union(lgm.getAllGMs(),getOwners("json",tToken)),"json") ]
};{}]
[H,IF(!flagSecret && (specialATKChoice != 0)),CODE:{
    [H: broadcast(out1) ]
};{}]

[H,SWITCH(system), CODE:
  case "Pathfinder": {
   
[SWITCH(specialATKChoice), CODE:
   case 0: {  };
   case 1: { [MACRO("subDisarm"+tPF+"@this"):  ""] };
   case 2: { [MACRO("subGrapple"+tPF+"@this"):  ""] };
   case 3: { [MACRO("subSunder"+tPF+"@this"):  ""] };
   case 4: { [MACRO("subTrip"+tPF+"@this"):  ""] };

]
    };
  case "D&D3.5": {

[SWITCH(specialATKChoice), CODE:
   case 0: {  };
   case 1: { [MACRO("subDisarm"+tPF+"@this"):  ""] };
   case 2: { [MACRO("subGrapple"+tPF+"@this"):  ""] };
   case 3: { [MACRO("subSunder"+tPF+"@this"):  ""] };
   case 4: { [MACRO("subTrip"+tPF+"@this"):  ""] };
]
    };
  default: {}

]

!!
@@ @processAttack
@PROPS@ fontColor=black ; autoExecute=true ; fontSize=1.00em ; sortBy=1 ; color=cyan ; playerEditable=true ; applyToSelected=false ; group=CombatDialog ; tooltip= ; minWidth= ; 
[H: margs = macro.args ]

[H: gLib = "Lib:GlobalsSRDPF" ]

[H: submitAction = replace(json.get(margs, "processAttack"),"<[^>]*?>","") ]
[H: numWeapChoice = json.get( margs, "numWeapChoice" ) ]
[H,IF( json.isEmpty( numWeapChoice ) ): numWeapChoice = 4 ]

[H: tToken = json.get(margs, "id") ]
[H: isTokHere = findToken( tToken) ]
[H: tcmap = getCurrentMapName() ]

[H: ttmap = json.get(margs,"tmap") ]
[H, IF( isTokHere == "" ):  setCurrentMap( ttmap ); "" ]
[H, IF( isTokHere == "" ): isTokHere2 = findToken( tToken); isTokHere2 = 1 ]
[H, IF( isTokHere2 == "" ): execLink( macroLinkText("subReturnToMap@" + getMacroLocation(), "none", tcmap), 1); "" ]
[H: assert( isTokHere2 != "", "Attack Frame: Token not found.  Move to the map containing your token and try again.")]

[H, IF( isTokHere != "" && tcmap != ttmap):  margs = json.set(margs,"tmap",tcmap); "" ]

[H: target1ID = json.get(margs, "target1ID") ]
[H, IF(target1ID == ""): tid1name = ""; tid1name = getName(target1ID) ]
[H: target2ID = json.get(margs, "target2ID") ]
[H, IF(target2ID == ""): tid2name = ""; tid2name = getName(target2ID) ]

[H: tSelected = getSelected() ]

[H, IF(submitAction == "Set 1st"), CODE: {
   [H: margs = json.set(margs, "target1ID", if( listCount(tSelected) > 1, listGet(tSelected,0), tSelected )) ]
   [MACRO("attackFrame@this"): margs ]
   [H, IF( isTokHere == "" ): execLink( macroLinkText("subReturnToMap@" + getMacroLocation(), "none", tcmap), 1); "" ]
   [H: abort(0)]
};{}]
[H, IF(submitAction == "Set 2nd"), CODE: {
   [H: margs = json.set(margs, "target2ID", if( listCount(tSelected) > 1, listGet(tSelected,0), tSelected )) ]
   [MACRO("attackFrame@this"): margs ]
   [H, IF( isTokHere == "" ): execLink( macroLinkText("subReturnToMap@" + getMacroLocation(), "none", tcmap), 1); "" ]
   [H: abort(0)]
};{}]

[H: system = getLibProperty("System", gLib)]
[H, SWITCH(system), CODE:
   case "Pathfinder": {
      [ meleeMods = table( "SysVars", json.get( table( "SysVars", 0 ), "meleeModsPF" ) ) ]
      [H: tPF= "PF"]
      [H: tTable = "PFSpecialATK" ]
      [H: sachoices = "None, Disarm, Grapple, Sunder, Trip"]
   };
   case "D&D3.5": {
      [ meleeMods = table( "SysVars", json.get( table( "SysVars", 0 ), "meleeModsSRD" ) ) ]
      [H: tPF= "PF"]
      [H: tTable = "SRDSpecialATK" ]
      [H: sachoices = "None, Disarm, Grapple, Sunder, Trip"]
   };
   default: {
   }
]
[H: tPF = if( "Pathfinder" == getPropertyType(tToken), "PF", tPF)]

[H,TOKEN(tToken): aTMS = json.get( PrivateJSON, "ActiveTempModSets" ) ]
[H, IF( json.type( aTMS ) == "UNKNOWN" ), CODE: {
   [TOKEN(tToken): PrivateJSON = json.set( PrivateJSON, "ActiveTempModSets", "[]" ) ]
   [ aTMS = "[]" ]
};{}]
[H,TOKEN(tToken): jPTM = json.get( PrivateJSON, "CustomModSetValues" ) ]
[H: jMMFields = json.sort( json.fields( meleeMods, "json" ) ) ]

[H: hasChanged = 0 ]
[H,FOREACH( m, jMMFields, "" ), CODE: {
   [H: changed = 0 ]
   [H: disable = 1 ]
   [H: active = if( json.contains( aTMS, m ), 1, 0 ) ]
   [H: jMM = json.get( meleeMods, m ) ]
   [H: presetVars = "" ]

   [H: tjfjMM = json.fields( jMM, "json")]

   [H, FOREACH( n, tjfjMM ), CODE: {
      [ isJObj = if( json.type( jMM ) == "OBJECT", 1, 0 ) ]
      [IF( isJObj && active ): v = json.get( json.get( json.get( json.get( jPTM, m ), "mods" ), "globalMod" ), "v" ); v = 0  ]
      [IF( isJObj ): tmv = eval( "" + json.get( margs,json.get( jMM, n ) ) ); tmv = json.get(margs, m) ]     
      [IF( isJObj ): ""; tmv = if(tmv == "", 0, tmv) ]
  
      [IF( isJObj ): disable = if( tmv != 0, 0, disable ); disable = 1 ]
      [IF( isJObj ): changed = if( v != tmv, 1, changed ); changed = if( active != tmv, 1, changed ) ]
      [IF( changed && isJObj ): presetVars = json.set( presetVars, json.get( jMM, n ), tmv ); "" ]
   }]

   
   [IF( changed && active ), CODE: {
      [MACRO( "subModToggle@this" ): json.set( "{}", "tokenID", tToken, "setID", m, "setType", 0 ) ]
      [ broadcast(macro.return)]
   };{}]
   [IF( changed && ( !disable || !active ) ), CODE: {
      [MACRO( "subModToggle@this" ): json.set( "{}", "tokenID", tToken, "setID", m, "setType", 0, "presetVars", presetVars ) ]
      [ broadcast(macro.return)]
   };{}]
   [ hasChanged = if( hasChanged || changed, 1, 0 ) ]
}]

[IF(submitAction == "ATTACK"), CODE: {
   [H: ttempATK = json.get(margs,"tempATK") ]
   [H: ttempDMG = json.get(margs,"tempDMG") ]
   [H: tflanking = json.get(margs,"flanking") ]
   [H: thigherGround = json.get(margs,"higherGround") ]
   [H: tcover = json.get(margs,"cover") ]
   [H: tflurryRapid = json.get(margs,"flurryRapid") ]
   [H: trangeIncrement = json.get(margs,"rangeIncrement") ]
   [H: tpointBlank = json.get(margs,"pointBlank") ]
   [H: '<!-- Check point blank -->']
   [H: tPointBlankShot = getStrProp(getProperty("Feats", tToken), "PointBlankShot")]
   [H: tPointBlankShot = if(tPointBlankShot == "", 0, tPointBlankShot)]
   [H, IF( ! json.isEmpty(target1ID) ), CODE: {
      [H: tdist = lgm.getDistanceElev(tToken,target1ID)]
      [H, IF(tdist <= 30 && tPointBlankShot): tpointBlank = 1; tpointBlank = 0]
      [H, IF( am.hasHighGround( tToken, target1ID ) ): thigherGround = 1; thigherGround = 0]
      [H: margs = json.set(margs, "pointBlank", tpointBlank, "higherGround", thigherGround)]
   };{}]

   [H: tfireIntoMelee = json.get(margs,"fireIntoMelee") ]
   [H: tmodCritRange = json.get(margs,"modCritRange") ]
   [H: tcritConfirm = json.get(margs,"critConfirm") ]
   [H: tsneak = json.get(margs,"sneak") ]
   [H: tfavEnemy = json.get(margs,"favEnemy") ]
   [H: tfullRound = json.get(margs,"fullRound") ]
   [H: flagSecret = json.get(margs,"flagSecret") ]
   [H: tflagSecret = if( flagSecret == "" || flagSecret ==0, 2, flagSecret)]
   [H: tconcealMiss = json.get(margs,"concealMiss") ]
   [H: tmanyShot = json.get(margs,"manyShot") ]
   [H: tvitalStrike = json.get(margs,"vitalStrike") ]
   [H: specialATKChoice = json.get(margs,"specialATKChoice") ]
   [H: rollTwice = json.get(margs,"rollTwice") ]
   [H: sizeVariant = json.get(margs,"sizeVariant") ]
   
   [H: tpass = json.set("{}", "weapon", "", "id", tToken, "target1Name", tid1name, "target1ID", target1ID, "target2Name", tid2name, "target2ID", target2ID,"fullRound", tfullRound, "flanking", tflanking, "higherGround", thigherGround, "favEnemy", tfavEnemy, "rangeIncrement", trangeIncrement, "pointBlank", tpointBlank, "fireIntoMelee", tfireIntoMelee, "cover", tcover, "sneak", tsneak, "flurryRapid", tflurryRapid, "flagSecret", flagSecret, "tempATK", ttempATK, "tempDMG", ttempDMG, "concealMiss", tconcealMiss, "critConfirm", eval(""+tcritConfirm), "modCritRange", eval(""+tmodCritRange), "manyShot", tmanyShot, "vitalStrike", tvitalStrike, "sizeVariant", sizeVariant, "rollTwice", rollTwice, "numWeapChoice", numWeapChoice )]

   [H, FOR(pAi,0,numWeapChoice,1), CODE: {
      [H: tweapset = json.get(margs,"weap"+pAi) ]
      [H, IF( target1ID != "" && tweapset != "" ): ti = replace(lower(tweapset),"weapon","")]
      [H, IF( target1ID != "" && tweapset != "" ): lgm.getWeaponset(ti,tToken);""]
      [H, IF( target1ID != "" && tweapset != "" ): trangeIncrement = floor((tdist-0.01)/WpnRangeInc);""]
      [H, IF(tweapset != ""): tpass = json.set(tpass, "weapon", tweapset, "rangeIncrement", trangeIncrement ); ""]
      [H, IF(tweapset != ""): lgm.LibAttack(tpass);""]
   }]

   [H: margs = json.set(margs, "rangeIncrement", trangeIncrement, "flagSecret", tflagSecret)]

  
   [H: idxSA = listFind( sachoices, specialATKChoice ) ]
   [H: cntAll = table( tTable, 0 )]
   [H: ref = ""]
   [H: i = 1 ]

   [H, WHILE( ref == "" && i <= cntAll ), CODE: {
     [H: jType = table( tTable, i )]
     [R: cType = json.get( jType, "name" )]
     [H, IF(specialATKChoice == cType): ref = ref + json.get( jType, "ref" ); ""]
     [H: i = i + 1 ]
   }]

   [H: out1 = "<b>" +  macroLink( specialATKChoice, "dispSATKrules@" + getMacroLocation(), "none", json.set( "", "name", specialATKChoice, "system", system)) + "</b> (" + ref + ")<br />" ]
   [H,IF(flagSecret && (idxSA != 0)),CODE:{
       [H: broadcast(out1,json.merge(lgm.getAllGMs(),getOwners("json",tToken))) ]
   };{}]
   [H,IF(!flagSecret && (idxSA != 0)),CODE:{
       [H: broadcast(out1) ]
   };{}]

   [H,SWITCH(idxSA), CODE:
      case 0: {  };
      case 1: { [MACRO("subDisarm"+tPF+"@this"):  json.set("","id",tToken)] };
      case 2: { [MACRO("subGrapple"+tPF+"@this"):  json.set("","id",tToken)] };
      case 3: { [MACRO("subSunder"+tPF+"@this"):  json.set("","id",tToken)] };
      case 4: { [MACRO("subTrip"+tPF+"@this"):  json.set("","id",tToken)] };
      default: {}
   ]
    
};{   [H: broadcast("<pre>"+json.indent(margs)+"</pre>")] }]

[H,MACRO("attackFrame@this"): margs ]

[H: tName = getName(tToken)]
[H, IF( isFrameVisible( tName ) && hasChanged ), CODE:
  {
    [H: link = macroLinkText( "CharSheet@"+getMacroLocation(), "self", "Page=Main ; Token=" + tToken ) ]
    [H: execLink( link, 1 ) ]
  };{}
]

[H, IF( isTokHere == "" ): execLink( macroLinkText("subReturnToMap@" + getMacroLocation(), "none", tcmap), 1); "" ]

!!

JamesMul
Kobold
Posts: 5
Joined: Wed Feb 21, 2018 8:49 pm

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by JamesMul »

Thanks so much! Works great now.

JamesMul
Kobold
Posts: 5
Joined: Wed Feb 21, 2018 8:49 pm

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by JamesMul »

Sorry for the constant issues, but im trying to figure out how to do twf with a primary and offhand weapon. whenever i do it doesnt apply the correct penalties to all three attacks, and flurry adds an extra one.

User avatar
aliasmask
RPTools Team
Posts: 9023
Joined: Tue Nov 10, 2009 6:11 pm
Location: Bay Area

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by aliasmask »

JamesMul wrote:Sorry for the constant issues, but im trying to figure out how to do twf with a primary and offhand weapon. whenever i do it doesnt apply the correct penalties to all three attacks, and flurry adds an extra one.
TWF and flurry are done differently and are different based on 3.5 or Pathfinder, so which are you using? I know this FW is different than what I use where I coded the flurry to show normal attacks and flurry attacks listed.

I took a quick look and his PF flurry either doesn't work or doesn't work as I imagine. You may have to use 2 lines for the attack. One is named Flurry Main and the other Flurry Secondary. Set up main as normal but put off-hand light so it applies the -2, same for the Secondary. Be sure to set the secondary as a secondary attack (not primary). Then you'll have to go to edit character, core. Add multiattack and the other attacks needed based on your level (ie improved if you have 2 extra attacks). Also, under the secondary attack weapon I would use the stat override and set it to 1.0 so it applies strength correctly.

Then when you attack with flurry, check the flurry checkbox and select your flurry main and secondary. At 13th level, I show 3 main and 2 secondary attacks which is what it should be.

JamesMul
Kobold
Posts: 5
Joined: Wed Feb 21, 2018 8:49 pm

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by JamesMul »

Sorry, 3.5. I was trying to twf, your advice worked out thanks.

SDShannonS
Giant
Posts: 242
Joined: Tue Sep 12, 2006 12:21 am
Location: San Diego, CA, US

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by SDShannonS »

I've just started playing a Druid and have attempted to use "Active Mods > Polymorph > Beast Shape I" but noticed that instead of increasing my Strength and Natural Armor by 2 it increases them by 4 each. I think the relevant piece of code is in the Lib:libDnD35Pathfinder token, specifically the pBeastShape macro:

Code: Select all

[H: tSz = listFind(bsSzA4,tSzS)]
[H: torigS = json.indexOf("[8,4,2,1,0,-1,-2,-4,-8]",SizeM) ]
[H: tOSstr = json.get("[6,6,4,0,0,-4,-8,-12,-16]",torigS) ]
[H: tOSdex = json.get("[-6,-4,-2,0,0,2,4,4,4]",torigS) ]
[H: tstr = if(tTyp,json.get("[-4,-2,0,2,4,6]",tSz),json.get("[0,-2,0,4,6,0]",tSz)) + tOSstr ]
[H: tdex = if(tTyp,json.get("[6,4,2,0,-2,-4]",tSz),json.get("[0,8,4,0,-2,0]",tSz)) + tOSdex ]
[H: tcon = json.get("[0,0,0,0,0,-2,-4,-6,-8]",torigS) ]
[H: tNA = if(tTyp,json.get("[1,1,1,2,4,6]",tSz),json.get("[0,3,2,4,6,0]",tSz)) ]
[H: tSize = json.get("[4,2,1,0,-1,-2]",tSz)]
I'm not exactly sure which line to modify to correct the issue.
"You must be the change you wish to see in the world."
- Mahatma Gandhi

"You know what the chain of command is? It's the chain I go get and beat you with until you understand who's in ruttin' command here."
- Jayne

User avatar
aliasmask
RPTools Team
Posts: 9023
Joined: Tue Nov 10, 2009 6:11 pm
Location: Bay Area

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by aliasmask »

Did you check the values in the active mods and the mod report? You may have to clear your token of mods to fix. Sometimes if you have an active mod and then edit that mod things will get screwy.

Dougal
Cave Troll
Posts: 58
Joined: Sat Sep 08, 2012 11:05 am

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by Dougal »

here is an issue that I am having, Not sure if it is me causing the problem or the framework. Whenever one of my players does a target area (IE for bless, ect) and targets themselves, they do not get the bonus themselves.

Elorebaen
Dragon
Posts: 365
Joined: Sat Dec 22, 2007 5:37 pm

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by Elorebaen »

LM or Alias,

Are your consider Pathfinder 2.0? Testing the waters. Would love to see a 2.0 version of this framework.

Victuz
Kobold
Posts: 4
Joined: Sat Apr 28, 2018 7:22 am

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by Victuz »

I'm not sure if the problem I'm having is caused by me using 1.4.1.8 or if it's an issue with the framework.

My player has ranks in use magic device. But use magic device is no on his sheet, using wands and such from the inventory only informs about a charge being used, not about a roll to succeed. Similarly my player had to add new performance and craft skills as his old ones were not "class" skills and couldn't be changed (minor issue).

Is there any way I can force use magic device to be shown on the sheet?

Dougal
Cave Troll
Posts: 58
Joined: Sat Sep 08, 2012 11:05 am

Re: 91.08 Pathfinder + D&D3.5 Framework

Post by Dougal »

How to load the debugging for this? I want to do some experimentation and want to track down which macros do what so I know where to go to change them.

Post Reply

Return to “D&D 3.5/Pathfinder 1e Campaign Macros”