DN's D&D4e Character Sheet Framework

Framework(s) for D&D 4e, including Veggiesama's.

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

jffdougan
Cave Troll
Posts: 55
Joined: Mon Jan 04, 2010 1:50 pm
Location: Central IL

Re: DN's D&D4e Character Sheet Framework

Post by jffdougan »

Any advice for getting a die roll into an effect line? (I'm working on the nightmare of a token that is a new-style beholder.)
LFR Characters:

Tiernan, Vestige'lock 9
Tiernan's adventure wishlist
CORE 1-12 (H3), AGLA 2-1 (H3)

Calisto, Arcas, Ganymede, & Thalia, Half-elf Sentinel Druid 2 and wall of fur
Knossos, Minotaur Lifespirit Warden 1

Malph
Kobold
Posts: 4
Joined: Tue Jul 12, 2011 11:30 pm

Re: DN's D&D4e Character Sheet Framework

Post by Malph »

I'm a complete newbie to MapTools, so excuse my naivete.

I have MapTools installed, and this Framework loaded. When I make a Token DNA, a Character Sheet loads. However, when I try to click on different tabs (Feats, Rituals, etc) it just re-directs me to the original sheet, and doesn't load anything new. Am I doing something wrong?

I have MapTools v1.3.b86 not sure if that's a problem.

Sorry if this a simple problem... I probably should have been killed in traffic by now =P

User avatar
Zalarian
Cave Troll
Posts: 90
Joined: Fri Aug 08, 2008 11:19 pm
Location: South Florida, USA

Re: DN's D&D4e Character Sheet Framework

Post by Zalarian »

jffdougan wrote:Any advice for getting a die roll into an effect line? (I'm working on the nightmare of a token that is a new-style beholder.)
You should be able to do something like this:

I roll a d6 and got a =(1d6)
Hybrid File
LFR Roster
LFR Roster:
P2 Zerin Stargazer / P2 Crymisil Silvershroud / E1 Llendil R'uthgalad Nelath
P3 Maddox "Mongoose" / P2 Vargaz / H3 Soulherder Vanya Mythseeker
E1 Kyla Marillion / H2 Ender/ P1 Locknar the Red of the Blue Order/ P3 Corinth Enilef
H3 Korben Airspur / H1 Alif Fluidsmith / H3 Navarre
Skype ID:Zalarian
I have no issues playing low

User avatar
Zalarian
Cave Troll
Posts: 90
Joined: Fri Aug 08, 2008 11:19 pm
Location: South Florida, USA

Re: DN's D&D4e Character Sheet Framework

Post by Zalarian »

Malph wrote:I'm a complete newbie to MapTools, so excuse my naivete.

I have MapTools installed, and this Framework loaded. When I make a Token DNA, a Character Sheet loads. However, when I try to click on different tabs (Feats, Rituals, etc) it just re-directs me to the original sheet, and doesn't load anything new. Am I doing something wrong?

I have MapTools v1.3.b86 not sure if that's a problem.

Sorry if this a simple problem... I probably should have been killed in traffic by now =P
About the only thing I can suggest is to make sure that the token is highlighted.
Hybrid File
LFR Roster
LFR Roster:
P2 Zerin Stargazer / P2 Crymisil Silvershroud / E1 Llendil R'uthgalad Nelath
P3 Maddox "Mongoose" / P2 Vargaz / H3 Soulherder Vanya Mythseeker
E1 Kyla Marillion / H2 Ender/ P1 Locknar the Red of the Blue Order/ P3 Corinth Enilef
H3 Korben Airspur / H1 Alif Fluidsmith / H3 Navarre
Skype ID:Zalarian
I have no issues playing low

User avatar
PinkRose
Dragon
Posts: 732
Joined: Sat Nov 15, 2008 2:28 pm
Location: The City of Roses, Oregon

Re: DN's D&D4e Character Sheet Framework

Post by PinkRose »

OggDude, glad you like the FW.
I am a special snowflake!

Malph
Kobold
Posts: 4
Joined: Tue Jul 12, 2011 11:30 pm

Re: DN's D&D4e Character Sheet Framework

Post by Malph »

Zalarian wrote:
Malph wrote:I'm a complete newbie to MapTools, so excuse my naivete.

I have MapTools installed, and this Framework loaded. When I make a Token DNA, a Character Sheet loads. However, when I try to click on different tabs (Feats, Rituals, etc) it just re-directs me to the original sheet, and doesn't load anything new. Am I doing something wrong?

I have MapTools v1.3.b86 not sure if that's a problem.

Sorry if this a simple problem... I probably should have been killed in traffic by now =P
About the only thing I can suggest is to make sure that the token is highlighted.
I made sure it's highlighted. Still, when the Character Sheet is up, and I click on the little Edit button at the top, it brings up a new page with stats/skills/etc, and options at the top for Feat, Rituals, Equip, etc. but when I click one, it just reverts back to the original Sheet page (which shows Power Groups, Knowledge Checks, Notes, etc. and not "Feats/Rituals/Eqiuptment/etc" at the top.

Malph
Kobold
Posts: 4
Joined: Tue Jul 12, 2011 11:30 pm

Re: DN's D&D4e Character Sheet Framework

Post by Malph »

Apologies if these questions are dumb!
I looked over the FAQ, I didn't find the answers.

1. When I add a new power, I don't understand most of it. Where do I put the attack ([1d20+X]), where do I put the damage?
2. The FAQ talks about clicking a power to Edit it. But when I click a power, I get this:

   Invalid condition in IF(DNT_EntryEffect == "") roll option.       Statement options (if any): R, if(DNT_EntryEffect == ""), CODE       Statement Body (first 200 characters): { [H: ""] };{
Effect: [R: RegEx(DNT_EntryEffect)]
[H: DNT_RowColor = if(DN

3. What does "Number of Attack and Damage Routines" mean?
4. Does "Targets" refer to the Defense targetted (AC, Reflex, Will, etc) or the number of targets it attacks?
5. What does clicking "output" boxes mean?

Finally, is there a video or some tutorial somewhere that gives step-by-step instruction on making a power?

Thanks!

Malph
Kobold
Posts: 4
Joined: Tue Jul 12, 2011 11:30 pm

Re: DN's D&D4e Character Sheet Framework

Post by Malph »

I'm an idiot. Doh! I found a few answers to my previous questions.

Here's something I can't find:
1. Is there a way to make certain special things activate only when certain conditions are active? For example, can you make Nimble Blade (+1 to attack) and Sneak Attack damage automatically apply itself only when I have Combat Advantage on the attack?
2. When I type in "Proficiency" on a weapon, it goes up by the Enchantment bonus after I save. Is it supposed to do this? What's a User Bonus?

jffdougan
Cave Troll
Posts: 55
Joined: Mon Jan 04, 2010 1:50 pm
Location: Central IL

Re: DN's D&D4e Character Sheet Framework

Post by jffdougan »

Malph wrote:I'm an idiot. Doh! I found a few answers to my previous questions.

Here's something I can't find:
1. Is there a way to make certain special things activate only when certain conditions are active? For example, can you make Nimble Blade (+1 to attack) and Sneak Attack damage automatically apply itself only when I have Combat Advantage on the attack?
2. When I type in "Proficiency" on a weapon, it goes up by the Enchantment bonus after I save. Is it supposed to do this? What's a User Bonus?
A User Bonus would be the bonus to attack and/or damage from something like an Expertise Feat or a Focus Feat.

My suggestion for some of the other problems you were describing is to make certain that you are running MapTool with enough memory. The suggested settings for Zalarian's hybrid file are 1024/1024/10
LFR Characters:

Tiernan, Vestige'lock 9
Tiernan's adventure wishlist
CORE 1-12 (H3), AGLA 2-1 (H3)

Calisto, Arcas, Ganymede, & Thalia, Half-elf Sentinel Druid 2 and wall of fur
Knossos, Minotaur Lifespirit Warden 1

dustyX
Kobold
Posts: 7
Joined: Fri Sep 03, 2010 9:27 pm

Re: DN's D&D4e Character Sheet Framework

Post by dustyX »

Another minor frame work bug fix, didn't notice it until messing around an item that had powers that it wouldn't display damage type and in some cases wouldn't display damage totals, but the damage link would still work.

In any case, replace ItemsUseAttack in Lib: Execute with this code.
Bug Fix For Items

Code: Select all

<!-- ItemUseAttack -->
[H: DNT_DiceString = " + %s(%s)"]
[H: DNT_ModString = "%s(%s)"]
[H: DNT_Slot = json.get(macro.args, "Slot")]
[H: DNT_Entry = getProperty("DNA_Item" + DNT_Slot)]

[H: DNT_PowerSlot = json.get(macro.args, "PowerSlot"))]

[H: DNT_HideRoll = json.get(macro.args, "HideRoll")]

[H, ForEach(DNT_Variable, "PowerAttacks, PowerAtkAbil, PowerAtkBonus, PowerAtkVS, PowerDmg, PowerDmgAbil, PowerDmgBonus, PowerDmgType, PowerCritDmg, PowerCrit, PowerConditions, PowerDamageSpecial"): set("DNT_" + DNT_Variable, json.get(DNT_Entry, DNT_Variable + DNT_powerSlot))]

[H: DNT_NumberOfAttacks = if(DNT_PowerAttacks == "Multi", if(json.get(macro.args, "NumberOfAttacks") == "", 1, json.get(macro.args, "NumberOfAttacks")), DNT_PowerAttacks + 0)]

[H, if(DNT_PowerAtkAbil == ""): AttackAbility = 0; AttackAbility = json.get(json.get(getProperty("DNA_AbilityScores"), DNT_PowerAtkAbil), 2) + getProperty("DNA_LevelBonus")]
[H, macro("Replace@Lib:Sheet"): DNT_PowerAtkBonus]
[H: AttackBonus = macro.return]
[H, if(AttackBonus == ""): AttackBonus = 0]
[H, if(isNumber(AttackBonus) == 1), CODE:
	{
		[H: DNT_AttackBonus = AttackBonus]
	};{
		[H: DNT_AttackBonus = eval(AttackBonus)]
		[H: AttackBonus = strformat(DNT_DiceString, AttackBonus, DNT_AttackBonus)]
	}
]

[H, if(DNT_PowerDmgAbil == ""): DamageAbility = 0; DamageAbility = json.get(json.get(getProperty("DNA_AbilityScores"), DNT_PowerDmgAbil), 2)]
[H, macro("Replace@Lib:Sheet"): DNT_PowerDmgBonus]
[H: DamageBonus = macro.return]
[H, if(DamageBonus == ""): DamageBonus = 0]
[H, if(isNumber(DamageBonus) == 1), CODE:
	{
		[H: DNT_DamageBonus = DamageBonus]
	};{
		[H: DNT_DamageBonus = eval(DamageBonus)]
		[H: DamageBonus = strformat(DNT_DiceString, DamageBonus, DNT_DamageBonus)]
	}
]

[H: DNT_PowerCrit = if(DNT_PowerCrit == "", 20, DNT_PowerCrit)]

[H: DNT_RawDmgDice = PowerDice(DNT_PowerDmg, "")]

[H: DNT_MaxDamageRoll = listGet(stringToList(DNT_RawDmgDice, "d"), 0) * listGet(stringToList(stringToList(stringToList(stringToList(stringToList(DNT_RawDmgDice, "r"), "R"),"e"), "E"), "d"), 1)]

[H: DNT_ScreenCheck = if(isGM() == 1 && getLibProperty("GMScreen", "Lib:Information") == 1, 1, 0)]

<br>
[R: if(DNT_NumberOfAttacks > 0 && DNT_ScreenCheck == 1, "<b>[Rolls behind the GM Screen]</b><br>", "")]
[R, for(DNT_AtkNum, 1, DNT_NumberOfAttacks + 1, 1, "<br>"), CODE:
	{
		[H: Die = if(json.get(macro.args, "GMDieRoll" + DNT_AtkNum) == "", 1d20, json.get(macro.args, "GMDieRoll" + DNT_AtkNum))] 
		[H: DNT_StaticAtkMods = 0]
		[H, forEach(DNT_Mod, "Charge, Marked, CA, Long, Cover, Conceal"): DNT_StaticAtkMods = DNT_StaticAtkMods + json.get(macro.args, DNT_Mod + DNT_AtkNum)]
		[H: DNT_AtkMod = if(json.get(macro.args, "AtkMod" + DNT_AtkNum) == "", 0, json.get(macro.args, "AtkMod" + DNT_AtkNum))]
		[H: AttackMods = if(isNumber(DNT_AtkMod) == 1, DNT_StaticAtkMods + DNT_AtkMod, DNT_StaticAtkMods + " + " + DNT_AtkMod)]
		[H, if(isNumber(AttackMods) == 1), CODE:
			{
				[H: AttackMods = AttackMods + DNT_StaticAtkMods]
				[H: DNT_AtkMods = AttackMods]
			};{
				[H: DNT_AtkMods = eval(AttackMods) + DNT_StaticAtkMods]
				[H: AttackMods = strformat(DNT_ModString, AttackMods + if(DNT_StaticAtkMods == 0, "", "+" + DNT_StaticAtkMods), DNT_AtkMods)]
			}
		]	
		
		[H: DamageMods = if(json.get(macro.args, "DmgMod" + DNT_AtkNum) == "", 0, json.get(macro.args, "DmgMod" + DNT_AtkNum))]
		[H, if(isNumber(DamageMods) == 1), CODE:
			{
				[H: DNT_DmgMods = DamageMods]
			};{
				[H: DNT_DmgMods = eval(DamageMods)]
				[H: DamageMods = strformat(DNT_ModString, DamageMods, DNT_DmgMods)]
			}
		]
				
		<b>Attack[R: if(DNT_NumberOfAttacks == 1, "", " #" + DNT_AtkNum)]</b>[R, if(json.get(macro.args, "Target" + DNT_AtkNum) == ""): ""; " against " + json.get(macro.args, "Target" + DNT_AtkNum)]: 
		
		[R, if(DNT_HideRoll == 1), CODE:
			{
				[GT, ST, T(if(Die == 1, "<b>Miss!</b>", Die + AttackAbility + DNT_AttackBonus + DNT_AtkMods)): Die + AttackAbility + AttackBonus + AttackMods]
			};{
				[T(if(Die == 1, "<b>Miss!</b>", Die + AttackAbility + DNT_AttackBonus + DNT_AtkMods)): Die + AttackAbility + AttackBonus + AttackMods]
			}
		]
		
		vs 
		
		[R: DNT_PowerAtkVs] 
			
		[R, if(DNT_AtkNum == 1 && DNT_PowerDamageSpecial != 1 && DNT_HideRoll != 1), CODE:
			{ 
				[H: DNT_DmgDiceResult = DiceRoll(DNT_RawDmgDice)]
				[H: DamageDice = strformat("%s(%s)", DNT_PowerDmg, DNT_DmgDiceResult)]		
				[H: DNT_TotalDamage = eval(string(DNT_DmgDiceResult)) + DamageAbility + DNT_DamageBonus + DNT_DmgMods]
				     <b>Hit</b>: [GT, ST, T(DNT_TotalDamage): DamageDice + DamageAbility + DamageBonus + DamageMods] [R: DNT_PowerDmgType] <span style="color:black">[R, switch(DNT_PowerDamageSpecial): case 2: macroLink("healing", "Health@Lib:Execute", "none", json.set("", "Type", 2, "Amount", DNT_TotalDamage), currentToken()); case 3: macroLink("HP + Surge", "Health@Lib:Execute", "none", json.set("", "Type", 3, "Amount", DNT_TotalDamage), currentToken()); case 4: macroLink("temp HP", "Health@Lib:Execute", "none", json.set("", "Type", 4, "Amount", DNT_TotalDamage), currentToken()); case 5: macroLink("HP + as if Surge", "Health@Lib:Execute", "none", json.set("", "Type", 5, "Amount", DNT_TotalDamage), currentToken()); case 6: macroLink("HP + costs Surge", "Health@Lib:Execute", "none", json.set("", "Type", 6, "Amount", DNT_TotalDamage), currentToken()); default: macroLink("damage", "Health@Lib:Execute", "none", json.set("", "Type", 0, "Amount", DNT_TotalDamage), currentToken())]</span>
			};{
				[H: ""]
			}
		]	
		
		[R, if(DNT_AtkNum == 1 && DNT_PowerDamageSpecial != 1 && DNT_HideRoll == 1), CODE:
			{ 
				[H: DNT_DmgDiceResult = DiceRoll(DNT_RawDmgDice)]
				[H: DamageDice = strformat("%s(%s)", DNT_PowerDmg, DNT_DmgDiceResult)]		
				[H: DNT_TotalDamage = eval(string(DNT_DmgDiceResult)) + DamageAbility + DNT_DamageBonus + DNT_DmgMods]
				     <b>Hit</b>: [GT, ST, T(DNT_TotalDamage): DamageDice + DamageAbility + DamageBonus + DamageMods] [R: DNT_PowerDmgType] <span style="color:black">[R, switch(DNT_PowerDamageSpecial): case 2: macroLink("healing", "Health@Lib:Execute", "none", json.set("", "Type", 2, "Amount", DNT_TotalDamage), currentToken()); case 3: macroLink("HP + Surge", "Health@Lib:Execute", "none", json.set("", "Type", 3, "Amount", DNT_TotalDamage), currentToken()); case 4: macroLink("temp HP", "Health@Lib:Execute", "none", json.set("", "Type", 4, "Amount", DNT_TotalDamage), currentToken()); case 5: macroLink("HP + as if Surge", "Health@Lib:Execute", "none", json.set("", "Type", 5, "Amount", DNT_TotalDamage), currentToken()); case 6: macroLink("HP + costs Surge", "Health@Lib:Execute", "none", json.set("", "Type", 6, "Amount", DNT_TotalDamage), currentToken()); default: macroLink("damage", "Health@Lib:Execute", "none", json.set("", "Type", 0, "Amount", DNT_TotalDamage), currentToken())]</span>
			};{
				[H: ""]
			}
		]			
	
		[R, if(Die >= DNT_PowerCrit && DNT_PowerDamageSpecial != 1 && DNT_HideRoll != 1), CODE:
			{
				[H, if(DNT_PowerCritDmg == ""): CriticalDmg = 0; CriticalDmg = eval(string(DNT_PowerCritDmg))]
				[H: DamageDice = strformat("%s(%s)", DNT_PowerDmg, DNT_MaxDamageRoll)]
				[H: DNT_TotalDamage = DNT_MaxDamageRoll + DamageAbility + DNT_DamageBonus + DNT_DmgMods + CriticalDmg]
				     <span style='Color:red'><b>Critical:</b></span> [T(DNT_TotalDamage): DamageDice + DamageAbility + DamageBonus + DamageMods + CriticalDmg] <span style="color:black">[R, switch(DNT_PowerDamageSpecial): case 2: macroLink("healing!", "Health@Lib:Execute", "none", json.set("", "Type", 2, "Amount", DNT_TotalDamage), currentToken()); case 3: macroLink("HP! + surge", "Health@Lib:Execute", "none", json.set("", "Type", 3, "Amount", DNT_TotalDamage), currentToken()); case 4: macroLink("temp HP!", "Health@Lib:Execute", "none", json.set("", "Type", 4, "Amount", DNT_TotalDamage), currentToken()); default: macroLink("damage!", "Health@Lib:Execute", "none", json.set("", "Type", 0, "Amount", DNT_TotalDamage), currentToken())]
			};{
				[H: ""]
			}
		]		

		[R, if(Die >= DNT_PowerCrit && DNT_PowerDamageSpecial != 1 && DNT_HideRoll == 1), CODE:
			{
				[H, if(DNT_PowerCritDmg == ""): CriticalDmg = 0; CriticalDmg = eval(string(DNT_PowerCritDmg))]
				[H: DamageDice = strformat("%s(%s)", DNT_PowerDmg, DNT_MaxDamageRoll)]
				[H: DNT_TotalDamage = DNT_MaxDamageRoll + DamageAbility + DNT_DamageBonus + DNT_DmgMods + CriticalDmg]
				     <span style='Color:red'><b>Critical:</b></span> [GT, ST, T(DNT_TotalDamage): DamageDice + DamageAbility + DamageBonus + DamageMods + CriticalDmg] <span style="color:black">[R, switch(DNT_PowerDamageSpecial): case 2: macroLink("healing!", "Health@Lib:Execute", "none", json.set("", "Type", 2, "Amount", DNT_TotalDamage), currentToken()); case 3: macroLink("HP! + surge", "Health@Lib:Execute", "none", json.set("", "Type", 3, "Amount", DNT_TotalDamage), currentToken()); case 4: macroLink("temp HP!", "Health@Lib:Execute", "none", json.set("", "Type", 4, "Amount", DNT_TotalDamage), currentToken()); default: macroLink("damage!", "Health@Lib:Execute", "none", json.set("", "Type", 0, "Amount", DNT_TotalDamage), currentToken())]
			};{
				[H: ""]
			}
		]
	}
]


[R, if(DNT_PowerDmg == ""  && DNT_PowerDmgAbil == "" &&  DNT_PowerDmgBonus == "" || DNT_NumberOfAttacks > 0 || DNT_PowerDamageSpecial == 1), CODE:
	{
		[H: ""]
	};{
		[H: DamageMods = if(json.get(macro.args, "DmgMod1") == "", 0, json.get(macro.args, "DmgMod1"))]
		[H, if(isNumber(DamageMods) == 1), CODE:
			{
				[H: DNT_DmgMods = DamageMods]
			};{
				[H: DNT_DmgMods = eval(DamageMods)]
				[H: DamageMods = strformat(DNT_ModString, DamageMods, DNT_DmgMods)]
			}
		]
		
		[R, if(DNT_HideRoll == 1), CODE:
			{
				[H: DNT_DmgDiceResult = DiceRoll(DNT_RawDmgDice)]
				[H: DamageDice = strformat("%s(%s)", DNT_PowerDmg, DNT_DmgDiceResult)]	
				[H: DNT_TotalDamage = eval(string(DNT_DmgDiceResult)) + DamageAbility + DNT_DamageBonus + DNT_DmgMods]
				[R: if(json.get(macro.args, "Target1") == "", "", strformat("<b>Target:</b> %s ", json.get(macro.args, "Target1")))]<b>Hit</b>: [GT, ST, T(DNT_TotalDamage): DamageDice + DamageAbility + DamageBonus + DamageMods] [R: DNT_PowerDmgType] <span style="color:black">[R, switch(DNT_PowerDamageSpecial): case 2: macroLink("healing", "Health@Lib:Execute", "none", json.set("", "Type", 2, "Amount", DNT_TotalDamage), currentToken()); case 3: macroLink("HP + Surge", "Health@Lib:Execute", "none", json.set("", "Type", 3, "Amount", DNT_TotalDamage), currentToken()); case 4: macroLink("temp HP", "Health@Lib:Execute", "none", json.set("", "Type", 4, "Amount", DNT_TotalDamage), currentToken()); case 5: macroLink("HP + as if Surge", "Health@Lib:Execute", "none", json.set("", "Type", 5, "Amount", DNT_TotalDamage), currentToken()); case 6: macroLink("HP + costs Surge", "Health@Lib:Execute", "none", json.set("", "Type", 6, "Amount", DNT_TotalDamage), currentToken()); default: macroLink("damage", "Health@Lib:Execute", "none", json.set("", "Type", 0, "Amount", DNT_TotalDamage), currentToken())]</span>
			};{
				[H: DNT_DmgDiceResult = DiceRoll(DNT_RawDmgDice)]
				[H: DamageDice = strformat("%s(%s)", DNT_PowerDmg, DNT_DmgDiceResult)]	
				[H: DNT_TotalDamage = eval(string(DNT_DmgDiceResult)) + DamageAbility + DNT_DamageBonus + DNT_DmgMods]
				[R: if(json.get(macro.args, "Target1") == "", "", strformat("<b>Target:</b> %s ", json.get(macro.args, "Target1")))]<b>Hit</b>: [T(DNT_TotalDamage): DamageDice + DamageAbility + DamageBonus + DamageMods] [R: DNT_PowerDmgType] <span style="color:black">[R, switch(DNT_PowerDamageSpecial): case 2: macroLink("healing", "Health@Lib:Execute", "none", json.set("", "Type", 2, "Amount", DNT_TotalDamage), currentToken()); case 3: macroLink("HP + Surge", "Health@Lib:Execute", "none", json.set("", "Type", 3, "Amount", DNT_TotalDamage), currentToken()); case 4: macroLink("temp HP", "Health@Lib:Execute", "none", json.set("", "Type", 4, "Amount", DNT_TotalDamage), currentToken()); case 5: macroLink("HP + as if Surge", "Health@Lib:Execute", "none", json.set("", "Type", 5, "Amount", DNT_TotalDamage), currentToken()); case 6: macroLink("HP + costs Surge", "Health@Lib:Execute", "none", json.set("", "Type", 6, "Amount", DNT_TotalDamage), currentToken()); default: macroLink("damage", "Health@Lib:Execute", "none", json.set("", "Type", 0, "Amount", DNT_TotalDamage), currentToken())]</span>
			}
		]
	}
]

[R, if(DNT_PowerDmg == ""  && DNT_PowerDmgAbil == "" &&  DNT_PowerDmgBonus == "" && DNT_NumberOfAttacks == 0 || DNT_NumberOfAttacks == 0 && DNT_PowerDamageSpecial == 1): if(json.get(macro.args, "Target1") == "", "", strformat("<b>Target:</b> %s ", json.get(macro.args, "Target1")))]

[R: if(json.isEmpty(DNT_PowerConditions) == 1, "", "<br><b>Conditions:</b>")]

[R, forEach(DNT_Condition, DNT_PowerConditions), CODE:
	{
		<span style="color:black">[R: macroLink(DNT_Condition, "ConditionEdit@Lib:Execute", "none", 	
	json.set("", "Add", json.append("", DNT_Condition), "End_" + DNT_Condition, json.get(DNT_Entry, "ConditionEnd" + DNT_PowerSlot + DNT_Condition), "Damage_" + DNT_Condition, json.get(DNT_Entry, "ConditionDamage" + DNT_PowerSlot + DNT_Condition), "Notes_" + DNT_Condition, json.get(DNT_Entry, "ConditionNotes" + DNT_PowerSlot + DNT_Condition), 	"Penalty_" + DNT_Condition, json.get(DNT_Entry, "ConditionPenalty" + DNT_PowerSlot + DNT_Condition), "SetBy_" + DNT_Condition, getName(currentToken()), "Round_" + DNT_Condition, getInitiativeRound()), "selected")]
		</span>
	}
]

[R, if(json.get(DNT_Entry, "PowerDesc" + DNT_PowerSlot) != ""): strformat("<br><b>Power Info:</b> %s", RegEx(json.get(DNT_Entry, "PowerDesc" + DNT_PowerSlot)))]

User avatar
PinkRose
Dragon
Posts: 732
Joined: Sat Nov 15, 2008 2:28 pm
Location: The City of Roses, Oregon

Re: DN's D&D4e Character Sheet Framework

Post by PinkRose »

Good catch, DustyX.
Thank you for the fix too.
I am a special snowflake!

User avatar
static
Kobold
Posts: 19
Joined: Tue Jul 26, 2011 5:31 pm

Trying to bring it all together

Post by static »

How exactly does one go about copying the lib tokens and properties from your character sheet framework into an existing MapTool campaign. I have gotten pretty far with a map in MapTool and I really like it for my campaign, but I also really like your character sheet. So, I need to know how all this connects. I have MapTool and a campaign map, I have InitTool and a group of characters that I have assigned tokens too (png tokens, not rptok tokens), I have CharTool and all my characters on cards (but it doesn't seem to do much else), I have Dice Box loaded into my Campaign map, and I have downloaded many monster tokens, some of which have this 'handout' that they can show while others do not. And I can't figure out how to save my png tokens into rptok tokens and keep the associated Character sheet info on them. That's a lot, I know, and I probably have more, but I have spent the last week trying to get answers, and every answer raises new questions. Please help me. The forums are good, but like most forums, many of the conversations here are geared to people who have a fluent knowledge of the programming involved, and Also, this one topic alone has over 300 posts (DN's D&D4e Character Sheet Framework) That's a lot of information to sift through assuming what I need has been covered. And I have been through over half of the pages here... So, once more, please help.

Also, from what I can gather so far, a suggestion (in the form of a request)

1. Power Tab - Power Entry
What is 'Tracking Power' for?

2. Power Tab - Power Entry - Power Attack and Conditions Entry
Is it possible to add a multiplier to the Damage Dice Section so that a Daily power that does 2[W] or 3[W] etc... will calculate the proper damage for the 'Hit' output? As of now, the 'Info' card will read what the associated weapon does, but will not compute doubles or triples or...

For example: Zalan has Paladin's Judgment (PH, pg 92), and uses a Lightning Scimitar +2 with an attack bonus of +9 and a damage bonus of +8.
The Info card reads:
Hit: 1d8 + 8 damage (Critical: 8+1d8+2d6 lightning). *NOTE: 3[W] + Strength modifier damage, and one ally within 5 squares of you can spend a healing surge.* (the text between the * * was added to the 'Hit:' box)
What I'm suggesting would instead read:
Hit: 3d8 + 8 damage (Critical: 24+1d8+2d6 lightning). *and one ally within 5 squares of you can spend a healing surge.* (again, the text between the * * is added to the 'Hit:' box but without the special note)

Or, am I doing something wrong?
"I love mankind. It's people I can't stand!" - The Gospel According to Peanuts, Robert Short

User avatar
PinkRose
Dragon
Posts: 732
Joined: Sat Nov 15, 2008 2:28 pm
Location: The City of Roses, Oregon

Re: DN's D&D4e Character Sheet Framework

Post by PinkRose »

1. What is 'Tracking Power' for?
You can connect powers together so that if you use one, it will automatically use the other.
Very useful for Channel Divinity powers and the same. You make them all Encounter powers and select one in the "Track Power" drop-down. If you use it, the others will automatically be lined through and will show as used.

2. Is it possible to add a multiplier to the Damage Dice Section
For Weapons just input the number of W for a weapon. 1, 2, 3.
For a spell, put in the dice, 1d8, 2d8, 3d8.

And if you have any other questions please ask.
I am a special snowflake!

sleepychewer
Kobold
Posts: 1
Joined: Wed Jul 27, 2011 3:21 am

Re: DN's D&D4e Character Sheet Framework

Post by sleepychewer »

I've taken a look at the FAQ, and looked around a bit besides, and I'm probably just missing something.

Is there a way to input items somewhere else to be given out to players in game, either attached to monsters or a treasure chest or the like?

I see how to add an item to a character, but I'm hoping there is a way to set that up in advance somehow, then hand out the finished item during gameplay. Npcs don't seem to have a way to add items, and I wouldn't know how to begin to add them to some sort of treasure token.

Could someone point me in the right direction? In the same vein, any documentation on how to do common things apart from what's in the FAQ would be a big help, it's got a lot of data in it, but some stuff has still been tricky to figure out.

Thanks.

User avatar
static
Kobold
Posts: 19
Joined: Tue Jul 26, 2011 5:31 pm

Re: DN's D&D4e Character Sheet Framework

Post by static »

Thank you, that was very helpful. :D
Now, I'd like to ask about tokens...
1) How do I set the players as owners? The tokens that I have set up all my player's powers on list only me as the owner. Aren't the players supposed to have individual ownership along with the DM's overall ownership?
2) How do I get those handouts onto my monsters? I tried the statcard listed in the monster importing tutorial, but nothing happened except for the addition of the statcard entry at the bottom of the properties tab.
Thanks again for the help.
"I love mankind. It's people I can't stand!" - The Gospel According to Peanuts, Robert Short

Post Reply

Return to “D&D 4e Frameworks”