Xelciu wrote:Thank you for all the useful information, now I have better understanding of the framework features.
Not only that, just the "Single=1" code line helped me immensely in creating a lot of different powers.
New questions arose and first of them is how do I upgrade the release without loosing all the tokens? Should I just save them and drop onto a new campaign file?
And here's a new batch of problems:
1. Healing surge value bonus, since me bard has song of rest and I would like to automate the process.
Is it possible to mod the surge macro for a popup window of bonus surge value?
I was also playing with togglable effects with no success, doesn't seem to have correct target recognition coded on it.
Code: Select all
[MACRO("Banner@Lib:MacroPolicebox"): "Power="+getMacroName()+"; FlavorText=You plink and we rest; PowerSpecs=At-Will &diams Arcane, Healing<br>No action, Close burst 10; Attack=Feature; Type="+Class+" Feature 1"; Range="+10+"]
<b>Effect:</b> [MACRO("Choose Targets@Lib:MacroPolicebox"): "Prompt=Song of Rest Effect Text ; "] Each target gains your Charisma modifier <b>([r: Cha])</b> to healng surge value<br>
[h:varsFromStrProp(macro.return)]
[MACRO("Register Effect@Lib:MacroPolicebox"): "Name=Song of Rest-Surge Bonus ; Property=SurgeSpecBonus ; Mod=4 ; Duration=Toggle ; Token="+AllHits]
2. You mentioned about a group barbarian, well I have a berserker and I wonder how do you do multihitting powers like vault of the fallen where you can choose one or two targets.
Easiest solution I came up with is just click the quick button many times.
3. Not only that, berserker can fling into rage which gives bonus d8 on each attack. Now if I slap GenDamMod on him with d8 it's gonna roll once and then apply that all the time, so temporally there's a bonus d8 button. Is it possible for the frame to slap a rage effect on the barbarian and then each power will have a link to check for that state and roll bonus damage if it's present?
My other idea (which I also don't know if it's possible) was a question popup window like the one confirming damage so he could confirm or deny being enraged.
4. There's a power which moves the enemy to new position and then applies slow on anyone adjacent to him. As always can be solved with just a small burst slow and no damage but I was wondering...
Is it possible for the framework to have another attack macro after IFallhits? So it would move the token and then apply burst slow.
5. Shamans are a headache, if you have any in your groups please share. Mine is currently having all the spirit powers as ranged attacks and many minibuttons for all the "if next to spirit..." powers.
6. Can I have one macro recognize friendly-enemy state and then deal damage to baddies and buff the allies?
Terribly sorry for all the open questions, as I stated before I don't have programming experience so without code samples I can't figure it out.
Great questions, Xelciu! Let's get right into it. Upgrading is as simple as replacing the MPB token in the campaign you have built using the new one you have downloaded. To be extra sure, download the properties file and import them as well. I also fixed the Skill Challenge and Trap tokens one or two service levels ago so use the new SL 28 versions if you need them.
I know you said you aren't a programmer so let me know if any of the following seems crazy:
1. I am guessing you have a DDI account and are importing your CB file. Even if you are building the Bard's
Song of Rest class ability from scratch, do so as an encounter attack power that targets allies. I know that sounds strange but stay with me on this one. Put the attack bonus as "51" and leave the damage as 0. You can then use
FL->Append RE Block to create an Allies block which contains the RE line at the end of the code you posted. Here's how mine turned out:
Code: Select all
[h:varsFromStrProp("Targets=;"+macro.args)]
[MACRO("Attack Power@Lib:MacroPolicebox"): "Power="+getMacroName()+"; FlavorText=Your flavor text here.; PowerSpecs=<b>Encounter &diams Healing<br>No action, </b>Close burst 10; Attack=auto vs. AC; Type="+Class+" Attack 26; Range="+10+"; Select=Allies; IncludeSelf=1; AttackAdjustment=51; Targets="+Targets]
[h:varsFromStrProp(macro.return)]
[IF(AllHits!=""), CODE: {
When you play an instrument or sing during a short rest, you and each ally who can hear you are affected by your Song of Rest. When an affected character spends healing surges at the end of the rest, that character regains additional hit points equal to your Charisma modifier <b>([r: Cha])</b> with each healing surge. A character can be affected by only one Song of Rest at a time<br>
};{}]
[IF(Allies!=""), CODE: {
[MACRO("Register Effect@Lib:MacroPolicebox"): "Name=SONG OF REST-NULL ; Property=SurgeSpecBonus ; Mod=Cha ; Duration=Encounter ; Link=Self ; Token="+Allies+","+getName()]
};{}]
Notice the "Link=Self" option being used. This tells us the Cha value belongs to your Bard rather than the token the effect is being registered on. Run this macro before your party takes a SR. They can then run the Surge macro before SR. Yes, I could pop up an extra field to accept ad hoc bonuses to the surge but this is the customary way. To keep things simpler, you could just do the healing separately by setting the Damage field to "-Cha" and forgetting
FL->Append RE Block altogether. Either way, notice the "+getName()" option which allows the bard to get in on the action too.
2. Here is what looks like when you import it:
Code: Select all
[h:varsFromStrProp("Targets=;"+macro.args)]
[MACRO("Attack Power@Lib:MacroPolicebox"): "Power="+getMacroName()+"; FlavorText=You leap from one foe to the next, leaving blood in your wake.; PowerSpecs=<b>Encounter &diams Primal, Weapon<br>Standard, </b>Melee weapon; Attack=melee vs. AC; Type="+Class+" Attack 1; Single=1; AttackAdjustment=Str; Targets="+Targets]
[h:varsFromStrProp(macro.return)]
<b>Effect:</b> If you target two creatures, you can shift 1 square after the first attack. Thaneborn Triumph: The number of squares you can shift equals your Charisma modifier <b>([r: Cha])</b>.<br>
[IF(AllHits!=""), CODE: {
1MHW + 1d6 + Strength modifier <b>([r: Str])</b> damage.<br>
};{}]
Now let's use
this method to change it like so:
Code: Select all
[MACRO("Attack Power@Lib:MacroPolicebox"): "Power="+getMacroName()+"; FlavorText=You leap from one foe to the next, leaving blood in your wake.; PowerSpecs=<b>Encounter &diams Primal, Weapon<br>Standard, </b>Melee weapon; Attack=melee vs. AC; Type="+Class+" Attack 1; Single=1; AttackAdjustment=Str"]
[MACRO("Move to Token@Lib:MacroPolicebox"): "Range=1"]
[MACRO("Attack Power@Lib:MacroPolicebox"): "Power="+getMacroName()+"; FlavorText=You leap from one foe to the next, leaving blood in your wake.; PowerSpecs=<b>Encounter &diams Primal, Weapon<br>Standard, </b>Melee weapon; Attack=melee vs. AC; Type="+Class+" Attack 1; Single=1; AttackAdjustment=Str"]
<b>Effect:</b> If you target two creatures, you can shift 1 square after the first attack. Thaneborn Triumph: The number of squares you can shift equals your Charisma modifier <b>([r: Cha])</b>.<br>
[IF(AllHits!=""), CODE: {
1MHW + 1d6 + Strength modifier <b>([r: Str])</b> damage.<br>
};{}]
If there is only one target, then just put the ABOS directly on the barbarian (so he doesn't move) and then just intentionally miss with the second attack. You can also make things a bit fancier where a prompt can ask how many targets there are and then take the appropriate action.
3. In your Rage macro, include this line:
Code: Select all
[MACRO("Register Effect@Lib:MacroPolicebox"): "Name=Rage Bonus ; Property= GenDamMod ; Mod=1d8 ; Duration=Attack"]
Run this before each attack while raging and the bonus will automatically turn itself off when you finish. If you want to control when it shuts off, then set "Duration=Toggle" and run the macro again when done. Slayve did a good job of answering your question about detecting the Raging state so I endorse his advice.
4. What "slow" power are you referring to? Yes, you can launch another macro from your AllHits block. Again, just use
FL->Append RE Block to add an AllHits block. Specify an effect (it can be "harmless" as explained in my training video) and then click OK for a branching link. Use "Move to Token" as above to move when you want to.
5. For your shaman, you can use this macro to see if your SC (let's call him "Spot") is beside you and then define it as an Attack trigger:
Code: Select all
[h,MACRO("Choose Targets@Lib:MacroPolicebox"): "ErrorCheck=0; Select=Allies"]
[h,IF(listContains(macro.return, "Spot")), CODE:
{
[MACRO("Register Effect@Lib:MacroPolicebox"): "Name=Spot Adjacent ; State=Reminder1 ; Duration=Attack"]
}]
In your track powers you can then use "{IF(state.Reminder1) …" statements to selectively apply different modifiers. Give an example of a shaman power you had in mind.
6. Yes. Again, give me the power you have in mind and I will show you how.
Never apologize for asking questions as I love working out problems like this! Slayve has asked many questions and he is now probably the biggest MPB expert on these forums. I believe very passionately in my work and get a kick out of the fact it is bringing so much enjoyment to people's games so keep them coming ...