Code: Select all
@@ @ConditionReport
@PROPS@ fontColor=black ; autoExecute=true ; fontSize=11pt ; sortBy=41 ; color=yellow ; playerEditable=true ; applyToSelected=true ; group=Utility Mods ; tooltip= ; minWidth=94 ;
<!-- Purpose of this function is to list all active mods on token as well as state condition information. -->
<!-- get Mod and Item sets and lists -->
[H: modDB = getLibProperty("TempModToggleSets","Lib:GlobalsSRDPF")]
[H: tokenModValues = json.get(PrivateJSON,"CustomModSetValues")]
[H: tokenItemDB = getProperty("BonusTypedItems")]
[H: modList = json.fields(modDB,"json")]
[H: itemList = json.fields(tokenItemDB,"json")]
[H: statesList = getTokenStates("json")]
[H: activeItemList = json.get( PrivateJSON,"ActiveItems")]
[H: activeModList = json.get( PrivateJSON,"ActiveTempModSets")]
<!-- Check to see if all active mods are in framework -->
[H, if(json.equals(activeModList,'[""]')), code: {
<!-- fix common bug -->
[H: activeModList = "[]"]
[H: PrivateJSON = json.set(PrivateJSON,"ActiveTempModSets",activeModList)]
};{}]
[H, if(json.isEmpty(tokenModValues)): tokenModValues = "{}"]
[H: hasValidMods = if(json.isSubset(modList,activeModList) && json.isSubset(itemList,activeItemList),1,0)]
[H, if(! hasValidMods), code: {
[H: abort(input("tip|<html>Active Mods or Items don't match existing Mods. <b>Resetting Token Mods</b> (Cancel to Abort)</html>||label|SPAN=TRUE"))]
<!-- clear and reset all mod related variables -->
[H: PrivateJSON = json.set( PrivateJSON, "ActiveTempModSets", "[]", "ActiveItems", "[]" )]
[H: resetProperty( "ArmorClass" ) ]
[H: resetProperty( "SpeedMod" ) ]
[H: resetProperty( "StatCheckMod" ) ]
[H: resetProperty( "DRERMod" ) ]
[H: MiscATK = 0 ]
[H: MiscDMG = 0 ]
[H: InitMod = 0 ]
[H: StrMod = 0 ]
[H: DexMod = 0 ]
[H: ConMod = 0 ]
[H: IntMod = 0 ]
[H: WisMod = 0 ]
[H: ChaMod = 0 ]
[H: FortBonus = 0 ]
[H: ReflexBonus = 0 ]
[H: WillBonus = 0 ]
[H: CMBMod = 0 ]
[H: CMDMod = 0 ]
<!-- clear all states -->
[H: setAllStates(0) ]
<!-- recalc token values -->
[H: tToken = currentToken() ]
[H, MACRO("subUpdateHPStatesBars@this"): "Token=" + tToken]
[H, MACRO("subRecalcAC@this"): "Token=" + tToken]
[H, MACRO("subRecalcMovement@this"): "Token=" + tToken]
[H, MACRO("subRecalcDR@this"): json.set( "{}", "Token", tToken ) ]
<!-- Notify player that token mods have been cleared -->
[H: output = "<b>" + token.name + strformat("</b>: All temporary mods have been cleared, items unequipped, and state icons cleared.<br><br><b>Mods:</b> %{activeModList}<br><b>Items:</b> %{activeItemList}") ]
[H: outputTo("gm-self", output)]
<!-- Since this isnt a UDF, going to abort output of HTML comments -->
[H: abort(0)]
};{}]
<!-- Build Output of active mods -->
[H: output.mods = "[]"]
[H, foreach(mod,activeModList), code: {
[H: '<!-- get mod data -->']
[H: defaultModData = json.get(modDB,mod)]
[H: modCat = json.get(defaultModData,"cat")]
[H: modState = json.get(defaultModData,"state")]
[H: modData = json.get(tokenModValues,mod)]
[H, if(json.isEmpty(modData)): modTip = json.get(defaultModData,"tip"); modTip = json.get(modData,"tip")]
[H: '<!-- validate data -->']
[H, if(json.contains(statesList,modState)), code: {
[H: setState(modState,1)]
[H: stateImage = strformat("<img src='%s' width=50 height=50>",getStateImage(modState))]
};{
[H: stateImage = " "]
}]
[H, if(json.isEmpty(modCat)): modCat = "Active Mod"]
[H: modTip = replace(modTip,'"',""")]
[H: '<!-- create output -->']
[H: modLineOutput = strformat('<span title="<html><table><tr valign=top><td>%{stateImage}</td><td>%{modTip}</td></tr></table></html>">%{mod}</span>')]
[H: '<!-- add to final output json and include id for sorting purposes -->']
[H: output.mods = json.append(output.mods,strformat('<tr id="%s"><td style="padding: 0px 2px 0px 5px;text-align:right" NOWRAP><b>%{modCat}:</b></td><td style="padding-right: 5px">%{modLineOutput}</td></tr>',
replace(lower(modCat+mod),"[^a-z0-9._]","")))]
}]
<!-- Build Output of active items -->
[H: output.items = "[]"]
[H, foreach(mod,activeItemList), code: {
[H: '<!-- get mod data -->']
[H: defaultModData = json.get(tokenItemDB,mod)]
[H: modCat = json.get(defaultModData,"cat")]
[H: modState = json.get(defaultModData,"state")]
[H: modData = json.get(tokenModValues,mod)]
[H, if(json.isEmpty(modData)): modTip = json.get(defaultModData,"tip"); modTip = json.get(modData,"tip")]
[H: '<!-- validate data -->']
[H, if(json.contains(statesList,modState)), code: {
[H: setState(modState,1)]
[H: stateImage = strformat("<img src='%s' width=50 height=50>",getStateImage(modState))]
};{
[H: stateImage = " "]
}]
[H, if(json.isEmpty(modCat)): modCat = "Active Item"]
[H: modTip = replace(modTip,'"',""")]
[H: '<!-- create output -->']
[H: modLineOutput = strformat('<span title="<html><table><tr valign=top><td>%{stateImage}</td><td>%{modTip}</td></tr></table></html>">%{mod}</span>')]
[H: '<!-- add to final output json and include id for sorting purposes -->']
[H: output.items = json.append(output.items,strformat('<tr id="%s" padding=0px><td style="padding: 0px 2px 0px 5px;text-align:right" NOWRAP><b>%{modCat}:</b></td><td style="padding-right: 5px">%{modLineOutput}</td></tr>',
replace(lower(modCat+mod),"[^a-z0-9._]","")))]
}]
<!-- if a state is active on token that matches a condition, print the condition info of state -->
[H: output.states = "[]"]
[H: numConditions = tbl("Conditions",0)]
[H, for(i,0,numConditions), code: {
[H: conditionStr = tbl("Conditions",i + 1)]
[H: curState = listGet(conditionStr,0,";")]
[H, if(getState(curState)), code: {
[H: conditionText = replace(listGet(conditionStr,1,";"),'"',""")]
[H: stateImage = strformat("<img src='%s' width=50 height=50>",getStateImage(curState))]
[H: stateLineOutput = strformat('<span title="<html><table padding=0px><tr valign=top><td>%{stateImage}</td><td><font color=green>%{conditionText}</font></td></tr></table></html>"><font color=blue>%{curState}</font></span>')]
[H: output.states = json.append(output.states,strformat('<tr id="state%s"><td style="padding: 0px 2px 0px 5px;text-align:right" NOWRAP><b>State Info:</b></td><td style="padding-right: 5px">%{stateLineOutput}</td></tr>',
lower(curState)))]
};{}]
}]
[H: output = json.append("",'<table style="background-color:white;border-style:solid;border-width:1pt;padding:0px;border-spacing:0;"><tr><th colspan=2 style="color:blue;text-align:center">Mod Report</th></tr>')]
[H, if(! json.isEmpty(output.states)): output.states = json.sort(output.states,"a")]
[H, if(json.isEmpty(output.mods) && json.isEmpty(output.items)): output.mods = json.merge(json.append("","--- No Active Framework mods ---"),output.states);
output.mods = json.merge(json.sort(json.merge(output.mods,output.items),"a"),output.states)]
[H: output = json.merge(output,output.mods,json.append("","</table>"))]
[H: output = json.toList(output,"")]
[H: am.play.output.basic(output,"self",currentToken())]
<!-- Since this isn't a UDF, going to abort output of HTML comments -->
[H: abort(0)]
!!