It can be used to automatically and without prompting to channel X amount with a call like this:
Code: Select all
[MACRO("TurnUndeadDnD35@Lib:libDnD35Pathfinder"): json.append("",id,amount)]
- id - token id
- amount - amount of energy to be spent.
channelEnergy([id,amount,turnUndead])
- id - default is Wiki: currentToken() or Wiki: getSelected()
- amount - default is 1
- turnUndead - default is 0 (no)
- When turnUndead is 1, energy is always 1
||| TurnUndeadDnD35 |||
Code: Select all
@@ @TurnUndeadDnD35
@PROPS@ fontColor=black;autoExecute=true;fontSize=0.95em;sortBy=21;color=default;playerEditable=false;applyToSelected=true;group=;tooltip=;minWidth=
[H, if(! json.isEmpty(macro.args)), code: {
[H: id = json.get(macro.args,0)]
[H, if(id == 0): macro.args = "[]"]
[H: numArgs = json.length(macro.args)]
[H, if(numArgs >= 2): energyAmount = json.get(macro.args,1);energyAmount = 1]
[H, if(numArgs >= 3): turnUndead = json.get(macro.args,2); turnUndead = 0]
[H: skipInput = 1]
};{}]
[H, if(json.isEmpty(macro.args)), code: {
[H: id = if(json.isEmpty(currentToken()),getSelected(),currentToken())]
[H: skipInput = 0]
};{}]
[H, if(json.isEmpty(id)): abort(0)]
[H: switchToken(id)]
[H: TurnLevel = number("0"+getStrProp(Levels, "TurnLevel"))]
[H: currentTurns = number("0"+getStrProp(Daily, "ChannelEnergy"))]
[H: MaxTurns = ChannelEnergy + ChaB]
[H: turnsRemaining = MaxTurns - currentTurns]
[H, if(! skipInput), code: {
[H, if(TurnLevel), code: {
[H: turnUndead = 1]
[H: energyAmount = 0]
[H, if(currentTurns < MaxTurns): abort(input("turnUndead|Channel Energy,Turn Undead|Pick One or Cancel|RADIO|SPAN=TRUE ORIENT=H SELECT=1",
"energyAmount|1|Energy/Turns Used|TEXT|WIDTH=6"))]
};{
[H: turnUndead = 0]
[H: energyAmount = 0]
[H, if(currentTurns < MaxTurns): abort(input("energyAmount|1|Energy Channelled|TEXT|WIDTH=6"))]
}]
}]
[H, if(! isNumber(energyAmount)): energyAmount = 0]
[H, if(turnUndead && energyAmount && turnsRemaining), code: {
[H: energyAmount = 1]
[H: KnowledgeReligion = 0]
[H: religionID = json.get(table("SysLocale", 0), "religion")]
[H: numSkills = json.length(SkillsJ)]
[H, FOR(i, 0, numSkills), CODE: {
[cSkill = json.get(SkillsJ, i)]
[H, IF(json.contains(cSkill, "fullname")): skN = json.get(cSkill, "fullname"); skN = json.get(cSkill, "name")]
[IF(json.contains(cSkill, "subcat")): subcat = json.get(cSkill, "subcat"); subcat = ""]
[IF(skN == "Knowledge" && isNumber(subcat)): foundKR = if(subcat == religionID, 1, 0); foundKR = if(lower(subcat) == lower(table("SysLocale", religionID)), 1, 0)]
[IF(skN != "Knowledge"): foundKR = 0]
[IF(foundKR): KnowledgeReligion = json.get(cSkill, "rank")]
}]
[H: turnBonus = if(KnowledgeReligion > 4, 2, 0)]
[H: TurnRoll = 1d20]
[H: DamageRoll = 2d6]
[H: ttres = TurnRoll + ChaB + turnBonus]
[H: mhd = eval(tbl("TurnUndead", ttres))]
[H: tableBonus = mhd - TurnLevel]
[H: turnDamage = DamageRoll + TurnLevel + ChaB]
[H: tout = strformat("<b>Turn Undead: </b>Turned <b>%{turnDamage} HD</b> (max %{mhd} HD each)")]
[H: ttip = strformat("<table><tr><td>Turn Check (table lookup):</td><td>Roll (%{TurnRoll}) + ChaB(%{ChaB}) + Bonus(%{turnBonus}) = %{ttres}</td></tr>
<tr><td>Max Turn Level:</td><td>Turn Level (%{TurnLevel}) + Table Bonus (%{tableBonus}) = %{mhd} HD each</td></tr>
<tr><td>Turn Damage:</td><td>Turn Level (%{TurnLevel}) + 2d6 (%{DamageRoll}) + ChaB(%{ChaB}) = %{turnDamage} HD turned</td></tr>
<tr><td> </td></tr>")]
[H: currentTurns = currentTurns + energyAmount]
};{}]
[H, if(! turnUndead && energyAmount), code: {
[H, if(energyAmount <= turnsRemaining), code: {
[H: tout = strformat("<b>Channel Energy:</b> %{energyAmount} Turn(s) used")]
[H: currentTurns = currentTurns + energyAmount]
};{
[H: tout = "<b>Channel Energy:</b> Not enough Energy"]
[H: energyAmount = 0]
}]
[H: ttip = "<table>"]
};{}]
[H, if( turnUndead && turnsRemaining <= 0), code: {
[H: tout = "<b>Turn Undead:</b> Out of Turns."]
[H: ttip = "<table>"]
};{}]
[H: ttip = ttip + strformat("<tr><td>Turn Level:</td><td>%{TurnLevel}</td></tr>
<tr><td>Energy/Turns Used:</td><td>%{energyAmount}</td></tr>
<tr><td>Current Energy/Turns:</td><td>%{currentTurns}</td></tr>
<tr><td>Max Energy/Turns:</td><td>%{MaxTurns}</td></tr></table>")]
[R: strformat('<span title="<html>%{ttip}</html>">%{tout}</span>')]
[H: Daily = setStrProp(Daily, "ChannelEnergy", currentTurns )]
!!