#MidiQOL
1 messages · Page 106 of 1
in the sidebar right click on it and export data and then DM it to me don't post it here
do you mean introduced in 39, and fixed in 40?
Actually introduced in 10.0.38 fixed in 10.0.40 - forgot I'd released 10.0.39
only cause theres a chance this affects Araxiel in his current troubleshoot, do you think 40 is coming soon?
If the macro above is all that is done, then I don't think it's relevant. Let me try and see
I just tested his macro and it works in midi 37, he's getting the error above on I'm guessing 39, cause he said newest
but didn't confirm his actual version
38/39 the same
how is that item suppose to have a damage list?
Hint: It has nothing setup on it
your macro works 100% fine with an item that deals damage
oooh shit its an actor on use
it needs to be a passive effect
I have got some WEIRD stuff going on lol
is there a new midi multi attack setting or something?
what is the actual code for after active effects?
ok I dunno why it throws a warning for me, however the main problem with your macro is it violates the temp hp rule
you need to use midiqol functions if you want proper automation
welp
applyTempHP is not going to follow temp hp rules
Its also not going to use a midi workflow button
they just silently appear on the token and overwrite whatever amount was there before
midi's function would not apply if a higher value exists
Heres that key without the warning happening so something about your setup is wrong:
it replaces the old temp hp that was higher with the new
his macro isn't checking
I just watched it replace a 12 with 5
midi's function does check
i dont remember who made that macro for me
same issue
This works perfectly, but again, the temp hp replaces with a lower value, which is not raw, need to replace the core function with a midi one to get it to auto or calculate the math in the macro to account for an existing temp hp being higher.
prolly easier to just look up a midiQOL.applyTokenDamage example and replace your core one
if you want to get ultra technical. The player has to accept the new temp hp value first. If yes, it would cancels out the previous attached spell which gave that original temp hp.
that can be handled by the undo button using a midi function
but the core function doesn't have an undo I don't think
i just want a macro that doesnt bug my player´s character lol.....
the above fix should fix it?
if you still have a problem then its midi 39 thats the problem, downgrade to 37, assuming you are attacking with a standard item
I just used a club from the acolyte
if you don't care about temp hp rules then keep the macro as is, otherwise try to addapt a midi version
I have no clue why damage is twice in that function or if both are the same call but /shrug someone will pick that up and run iwth it for you
I just played with this and I think the problem is that for items without damage args[0].damageList is udefined.
Try
args[0].damageList?.forEach((damagedToken) => {
Yeah I suspect when they dragged and dropped the item they rolled it by accident too, or rolled it when picking it up
since the item itself has no damage
maybe if i swap it to armor and delete that line?
Since it's an actor onuse macro it will get called for every item roll - so the check will be needed
the item itself is oddly an item, not a feature so it has no damage parts setup on it, it probably should be a feature if we're being technical about it.
i can make it a feature
Your original error is probably just cause you or the player double clicked when trying to pickup and drag, alot of folks make that user error, and it wound up rolling the damageless item while they had that on use on them
Does not really matter. The item that is passed to the macro is the item they just rolled (not the item where the macro is stored).
it'll show up in their huds as a weapon which is why I'd lean towards making it a feature so its less available for a player to confuse over
its an error that pop ups on the console when they try to use AA to teleport
thats the weird part
whats your teleport item?
is it thunderstep?
well regardless, what tim actually told you will fix that error
If an item is rolled (which can include a teleport spell) and you have the macro as an actor onusemacro, it will be called when the teleport item is used.
yeah the question mark in his edit null proofs the on use
so if i delete the line it will work?im testing it on a weapon and since the weapon deals damage
the error doesnt pop up
no just replace it with his code
that specific line, I think its just adding a questionmark to a bit
99% of teleportation spells roll to chat but don't actually do anything in midi but the actor on use is gonna fire and throw a null error, if you replace the line that is similar to tposney's suggestion with his suggestion it should cancel out the error as its a null proofing fix
let damageTotal = 0;
args[0].damageList?.forEach((damagedToken) => {
damageTotal += damagedToken.appliedDamage;
});
if (damageTotal > 0) {
damageTotal = Math.floor(damageTotal/2);
await args[0].actor.applyTempHP(damageTotal);
};
the ? fixed it
if you want the temp hp to behave right thats gonna take some finesse as I suck at this
past the above code in and you shouldn't have issues when items that have no damage parts roll
Any guru feel like checking me?
await MidiQOL.applyTokenDamage([{damage: (damageTotal), type: 'temphp' }], damage, new Set(this.actor), null, null);
let damageTotal = 0;
args[0].damageList?.forEach((damagedToken) => {
damageTotal += damagedToken.appliedDamage;
});
if (damageTotal > 0) {
damageTotal = Math.floor(damageTotal / 2);
await MidiQOL.applyTokenDamage([{damage: damageTotal, type: 'temphp' }], damageTotal, null, null, new Set(this.actor));
}
yeah I give up I dunno how to write it
your original function will work sorta, it will quietly overwrite the temp hp field ignoring temp hp rules
the goal is to get a midi function to do it instead so that you can see what it changed and I'm pretty sure midi will respect the rule and not update unless its more
yeah at least is working for teleporting using AA
I think that the last null param should be new Set() instead
I edited what I tried above and it still says not iterable
I found better examples to work with so gonna try those
I think the problem is that this.actor is not the right thing
its an item that hits others and then self heals. this.actor is probably the targets right?
await MidiQOL.applyTokenDamage([{ damage: damageRoll.total, type: damageType }], damageRoll.total, new Set([target]), fullItem, new Set());
remember that is a "passive item"
not a weapon
i think it would be better to became a feature?for easier implementation
I believe that when there is a template spell, after the template is removed after the attack is used (right when they end there turn), which works like normal, it is ALSO removing concentration if they are concentrating on another spell, any way to fix?
The fix was changing it to only effects
That's not supposed to happen and I can't seem to reproduce either. What template spell is removing concentration for you?
It was fixed
Midi QOL concentration was checking for even templates from ALL spells
So now it will only check effects and clear concentration off that.
I have no templated concentration spells so I don't mind
It should work even with that on, I have no issue juggling template spells (without concentration) and a concentration spell with it on
I probably descripted it poorly
Though it works now so
My game is also like very different so that could be the problem as well!
Sadly I won't be able to describe the problem to you over chat, but regardless it works now so
Truth probably just had two concentration items running and one ended when the other was cast
its a mechanic of 5e, you can only concentrate on one spell at a time
I’m probably doing something incorrectly, I replaced all the aoe part and it still didn’t work. 🫤
I'll take a look in a bit here
@violet meadow
When we replace the raytrace with find nearby we get this:
// Midi-qol "on use"
const lastArg = args[args.length - 1];
const tokenOrActor = await fromUuid(lastArg.actorUuid);
const casterActor = tokenOrActor.actor ? tokenOrActor.actor : tokenOrActor;
const casterToken = await fromUuid(lastArg.tokenUuid);
if (lastArg.targets.length > 0) {
let areaSpellData = duplicate(lastArg.item);
const damageDice = 1 + lastArg.spellLevel;
delete(areaSpellData.effects);
delete(areaSpellData.id);
delete(areaSpellData.flags["midi-qol"].onUseMacroName);
delete(areaSpellData.flags["midi-qol"].onUseMacroParts);
delete(areaSpellData.flags.itemacro);
areaSpellData.name = "Ice Knife: Explosion";
areaSpellData.system.damage.parts = [[`${damageDice}d6[cold]`, "cold"]];
areaSpellData.system.actionType = "save";
areaSpellData.system.save.ability = "dex";
areaSpellData.system.scaling = { mode: "level", formula: "1d6" };
areaSpellData.system.preparation.mode ="atwill";
const areaSpell = new CONFIG.Item.documentClass(areaSpellData, { parent: casterActor });
const target = canvas.tokens.get(lastArg.targets[0].id);
const aoeTargets = MidiQOL.findNearby(null,target,5,{includeIncapacitated:true}).concat(target);
const options = {
showFullCard: false,
createWorkflow: true,
targetUuids: aoeTargets,
configureDialog: false,
versatile: false,
consumeResource: false,
consumeSlot: false,
};
await MidiQOL.completeItemRoll(areaSpell, options);
} else {
ui.notifications.error("Ice Knife: No target selected: unable to automate burst effect.");
}
could it be the incapacitated change in midi 37?
did he change and it was a breaking change?
I gotta find the changelog for midi now
when bugbear wrote the change it was before Tposney did something with find nearby and incapacitated
Breaking Addition to findNearby to allow inclusion of incapacitated actors, MidiQOL.findNearby(disposition, token, distance, {maxSize, includeIncapacitated}). Only breaking if you were including a maxSize before, you'll need to use {maxSize: size} instead.
should the function have a null inside with include?
yeah the macro runs with Mr.Primates code but the find nearby throws the startsWith error
oh shit its the last arg
generally that specific error means you're trying to do a fromUuid on something that is undefined or isn't a uuid string
I found the post by bugbear, if you look at the line right before find nearby, its calling target, and target is defined with the naughty last arg
This is the code we are trying to replace:
const aoeTargets = await canvas.tokens.placeables.filter((placeable) =>
canvas.grid.measureDistance(target, placeable) <= 9.5
&& !canvas.walls.checkCollision(new Ray(target.center, placeable.center), { mode: "any", type: "light" })
).map((placeable) => placeable.document.uuid);
cause it doesn't account for large and above creatures
it will calculate from the top left square of creatures larger than medium
bugbear was trying to fix it for us by using findnearby instead
should target be target.uuid?
or should the ID in target be changed to uuid
if (this.targets.size === 0) return;
let areaSpellData = duplicate(this.item);
const damageDice = 1 + this.castData.castLevel;
delete(areaSpellData.effects);
delete(areaSpellData.id);
delete(areaSpellData.flags["midi-qol"].onUseMacroName);
delete(areaSpellData.flags["midi-qol"].onUseMacroParts);
delete(areaSpellData.flags.itemacro);
areaSpellData.name = "Ice Knife: Explosion";
areaSpellData.system.damage.parts = [[`${damageDice}d6[cold]`, "cold"]];
areaSpellData.system.actionType = "save";
areaSpellData.system.save.ability = "dex";
areaSpellData.system.scaling = { mode: "level", formula: "1d6" };
areaSpellData.system.preparation.mode ="atwill";
const areaSpell = new CONFIG.Item.documentClass(areaSpellData, {parent: this.actor});
const target = this.targets.first();
const aoeTargets = MidiQOL.findNearby(null,target,5,{includeIncapacitated:true}).concat(target);
const uuids = [];
for (i of aoeTargets) {
uuids.push(i.document.uuid);
}
const options = {
showFullCard: false,
createWorkflow: true,
targetUuids: uuids,
configureDialog: false,
versatile: false,
consumeResource: false,
consumeSlot: false,
};
await MidiQOL.completeItemUse(areaSpell, {}, options);```
This appears to work.
Didn't actually test vs larger creatures
not sure why that would matter
you get that from the one I just posted?
nah
that error is likely from there being no uuids
let me check
I should be testing vs a large creature?
it works when I clear the target number out of the original spell
I think its some how using the original spells data if its not filled in already?
maybe cause you used this?
fwiw, its working if you set the ice knife to have no target limit
I only thought of it cause I see that warning when my players try to upcast hold person and spells like that
and bane/bless cause the spells have a hard limit set in their targets and the upcast lets them go over so I have to manually edit them
if (this.targets.size === 0) return;
let areaSpellData = duplicate(this.item);
const damageDice = 1 + this.castData.castLevel;
delete(areaSpellData.effects);
delete(areaSpellData.id);
delete(areaSpellData.flags["midi-qol"].onUseMacroName);
delete(areaSpellData.flags["midi-qol"].onUseMacroParts);
delete(areaSpellData.flags.itemacro);
areaSpellData.name = "Ice Knife: Explosion";
areaSpellData.system.damage.parts = [[`${damageDice}d6[cold]`, "cold"]];
areaSpellData.system.actionType = "save";
areaSpellData.system.save.ability = "dex";
areaSpellData.system.scaling = { mode: "level", formula: "1d6" };
areaSpellData.system.preparation.mode ="atwill";
areaSpellData.system.target.value = null;
const areaSpell = new CONFIG.Item.documentClass(areaSpellData, {parent: this.actor});
const target = this.targets.first();
const aoeTargets = MidiQOL.findNearby(null,target,5,{includeIncapacitated:true}).concat(target);
const uuids = [];
for (i of aoeTargets) {
uuids.push(i.uuid);
}
const options = {
showFullCard: false,
createWorkflow: true,
targetUuids: uuids,
configureDialog: false,
versatile: false,
consumeResource: false,
consumeSlot: false,
};
await MidiQOL.completeItemUse(areaSpell, {}, options);```
try this one
hold on
I accidently had a slight regression in it lol
if (this.targets.size === 0) return;
let areaSpellData = duplicate(this.item.toObject());
const damageDice = 1 + this.castData.castLevel;
delete(areaSpellData.effects);
delete(areaSpellData.id);
delete(areaSpellData.flags["midi-qol"].onUseMacroName);
delete(areaSpellData.flags["midi-qol"].onUseMacroParts);
delete(areaSpellData.flags.itemacro);
areaSpellData.name = "Ice Knife: Explosion";
areaSpellData.system.damage.parts = [[`${damageDice}d6[cold]`, "cold"]];
areaSpellData.system.actionType = "save";
areaSpellData.system.save.ability = "dex";
areaSpellData.system.scaling = { mode: "level", formula: "1d6" };
areaSpellData.system.preparation.mode ="atwill";
areaSpellData.system.target.value = null;
const areaSpell = new CONFIG.Item.documentClass(areaSpellData, {parent: this.actor});
const target = this.targets.first();
const aoeTargets = MidiQOL.findNearby(null,target,5,{includeIncapacitated:true}).concat(target);
const uuids = [];
for (i of aoeTargets) {
uuids.push(i.document.uuid);
}
const options = {
showFullCard: false,
createWorkflow: true,
targetUuids: uuids,
configureDialog: false,
versatile: false,
consumeResource: false,
consumeSlot: false,
};
await MidiQOL.completeItemUse(areaSpell, {}, options);```
There
works perfectly
Now I need to remember who the other guy was lol
@narrow saddle⬆️
Do you wanna share it to Mr.Primate or shall I to replace his old code?
Feel free to
Just saw an edit 👀
edit also works perfectly gonna post it to his git now then
I also removed the deprecated completeItemRoll and replaced it with completeItemUse
I'm betting this will fail with auto roll damage off
I always auto roll damage cause I don't fast forward so I can just cancel in the popout
but for people who don't
personally that might be a wise lil trick for you if you get too many complaints about auto fast forward, just shut off fastforward on the damage
if (this.targets.size === 0) return;
let areaSpellData = duplicate(this.item.toObject());
const damageDice = 1 + this.castData.castLevel;
delete(areaSpellData.effects);
delete(areaSpellData.id);
delete(areaSpellData.flags["midi-qol"].onUseMacroName);
delete(areaSpellData.flags["midi-qol"].onUseMacroParts);
delete(areaSpellData.flags.itemacro);
areaSpellData.name = "Ice Knife: Explosion";
areaSpellData.system.damage.parts = [[`${damageDice}d6[cold]`, "cold"]];
areaSpellData.system.actionType = "save";
areaSpellData.system.save.ability = "dex";
areaSpellData.system.scaling = { mode: "level", formula: "1d6" };
areaSpellData.system.preparation.mode ="atwill";
areaSpellData.system.target.value = null;
const areaSpell = new CONFIG.Item.documentClass(areaSpellData, {parent: this.actor});
const target = this.targets.first();
const aoeTargets = MidiQOL.findNearby(null,target,5,{includeIncapacitated:true}).concat(target);
const uuids = [];
for (let i of aoeTargets) {
uuids.push(i.document.uuid);
}
const options = {
showFullCard: false,
createWorkflow: true,
targetUuids: uuids,
configureDialog: false,
versatile: false,
consumeResource: false,
consumeSlot: false,
workflowOptions: {
'autoRollDamage': 'always'
}
};
await MidiQOL.completeItemUse(areaSpell, {}, options);```
This should prevent the synthetic item from getting the item no longer exists error when auto roll damage is off
Why's that?
you technically just need auto roll
I'll adjust that then
Its just a nuanced thing cause they have a damage modifier they can add to spell damage
and I do ar messages when I'm lazy and don't want to automate them lol
it works fine, and thanks for the help on this
posted the issue for Mr.Primate to update his if he wants
I pulled another ninja edit on you
I was about to close out to go to my watch party lol whats the change?
just makin sure it doesn't break it, looks good pushing the change into the issue
Crikey, above and beyond. Thank you.
I’m working now so struggling to follow. But big thanks.
Am I using this one?
use the last one posted
@vast bane sorry didn't remember the rest of the macro and didn't actually look at it.
const aoeTargets = MidiQOL.findNearby(null,target,5,{includeIncapacitated:true}).concat(target).map(t=>t.document.uuid);
Chris hooked us up
Hi all, I have some questions regarding the automation of conditions in foundry and midi-qol. What is the preferred way of doing it? I know there are basically 3 approaches:
- Convenience Effects
- Combat Utility Belt
- Both together
As I understand, the easiest one is CE, as it maps condition names to effects provided by CE. The other one needs ?manual? setup because I would need to define the mapping between conditions and effects. Last one would be to use CE first and CUB second for special case handling. Am I right so far?
What are you using ind your game? Are there mapping issues for CE? Do I miss some conditions if I am going to replace the foundry conditions with CE?
I would appreciate it if you all can give me some information about how you are handling this. It is a little bit unclear what the ramifications of these options are for a new DM.
Thank you very much in advance...
CE has more features and utilization in midiqol but cub can get the job done as well, both is a bad idea
But I think I read that CE has for example a different name for invisibility?
I use DFreds CE with the Replace conditions setting. No need to look any further if you use MidiQOL imho
Yiu don't have a midi compatible mob attack macro do you bugbear? 😂 Just incase
Just cos I have. A feeling that Zhells macro will be interfered by it by midi
No, I used to use Mob Attack tool, but its not v10 so throws and error stops the world working
I don't inherently see anything midi should interfere with in zhells macro, have you tried it?
it won't roll in midi it will do a core roll
Noice I'll test after crazy golf
My DM told me (on game night) that we need it and I'm like ffs 😂
Thank you all for your input, so I can still use CE and don't need to add CUB just for this.
Is anyone else having an issue with midi not disabling the ranged disadvantage by an ally (house rule). I have it set as 0, but now all ranged attack have disadvantage no matter what
Done
Turn on Advantage Attribution in MidiQOL settings to have an indication in the Chat Message as to why an attack has dis/advantage
https://github.com/thatlonelybugbear/FoundryMacros/wiki/MidiQOL-knowledge-database-by-@MotoMoto1234#generic-helpful-bits-of-information
and then check if your Vision on the tokens is not setup up correctly (if that's the case).
When you say don't need to add CUB just for this, what is this ?
Special cases handling?
You can create Custom Effects in DFreds CE, if that is what you're after.
what are people using for auto cover calculations? ATV, Level's? Siimbol's?
depends on what you want out of them, I believe
levels does a percentage cover check and supports its own height system. Simbul's implements cover as presented in the DMG, but has no concept of wall height
and ATV? I'm primarily trying to get a cover solution that plays nicely with spell sniper and sharpshooter.
completely unfamiliar with ATV.
simbul's has that built in:
A special trait has been added to indicate if the actor should ignore certain levels of cover (e.g. Sharpshooter, Spell Sniper, Wand of the Warmage)
(actor special traits)
Also Im sure this is not the write place to ask, but is there another hashtag for other module questions and im missing it. Im using build a bonus a lot and cant find any info on how to use Arbitrary Comparison very well. Ive seen Zhell in here, but didnt know if he had a place for questions
@celest coyote what are you trying to do?
Levels cover is really good. Assuming you're using levels too
(if you are ok with non-DMG based cover rules)
I’ve tried all three and I find Simbul’s to be the least intrusive and easiest of the three. Levels cover calculator is great but I try to use levels only in cases of absolute need because it leaves a lot of room for mistakes in setup. ATV seemed like it should be lightweight and it may be but for the life of me I couldn’t get it to not be an absolute nightmare during combat. Right now I have simbul’s on and set to prompt to confirm level of cover when detected and it’s been the best compromise of performance and control. YMMV of course, just an input from someone who’s tried them all in the past couple months 😅
im very happy to see those points of feedback 🙂 the entire design intent of 5eHelpers (predecessor to Simbul's) was to simply help with common, rules defined operations without assuming much about how the user wants their game to play
I've been pretty happy with midi and levels cover in API mode. My table just uses it as it calls it.
The fact that it unobtrusively gives us an option to say “no, that cover doesn’t make sense” or “yes, nailed it” and then send things on to the midi flow is 😘👌🏻. In general I’ve been very happy with the Simbul’s mods in terms of exactly what you say - they really sort of allow us to use as much or as little as we want.
Thanks for everyone’s opinions. What I’m unclear on is how much of the spell sniper and sharpshooter is handled in core dnd5e (with the spell sniper check box on the special abilities) and how much needs to be handled with DAEs. And what module will provide the smoothest, least intrusive cover and dex save calcs
I’ve got a wizard with spellsniper and a ranger with sharpshooter.
I’ve got the spellsniper check box even with Simbul’s disabled.
And it comes up as a core dnd5e flag when I examine an actor with DF flag inspector
Add flags.midi-qol.sharpShooter which removes long range disadvantage on ranged attacks.
Added support for spell sniper, flags.dnd5e.spellSniper.
Yeah does it also handle the ignore cover for sharpshooters and range weapons?
its a flag stored in the core dnd5e flag area, yes, but its added by simbul's
I'm trying to get this ItemMacro working. It should be dealing an extra 1d8 lightning damage against goblinoids.
if (args[0].hitTargets.length < 1) return {};
actor = await fromUuid(args[0].actorUuid);
let target = await fromUuid(args[0].hitTargetUuids[0]);
if (!actor || !target) return {};
let PC = target.actor.system.details?.race ?? null
let npc = target.actor.system.details.type?.value ?? null
let npcSubType = target.actor.system.details.type?.subtype.toLowerCase() ?? null;
const isSubType = ["goblinoid"].includes(npcSubType); // so you can add other subtypes.
if (isSubType) {
const diceMult = args[0].isCritical ? '1d8 + ': '1d';
const damageRoll = await (new Roll(`${diceMult}8`)).roll();
new MidiQOL.DamageOnlyWorkflow(actor, token, damageRoll.total,"Slashing", [target], damageRoll, {flavor: "Extra damage against Goblinoids (Slashing)", damageList: args[0].damageList, itemCardId: args[0].itemCardId});
}```
What would be the proper function for this?
I didn’t realize that. TIL
since the error is coming from actor, log out actor
it seems to be logging both the item and the source actor
i see token at best, but the error is on actor, so check that
if (args[0].hitTargets.length < 1) return {};
actor = await fromUuid(args[0].actorUuid);
let target = await fromUuid(args[0].hitTargetUuids[0]);
if (!actor || !target) return {};
let PC = target.actor.system.details?.race ?? null
let npc = target.actor.system.details.type?.value ?? null
let npcSubType = target.actor.system.details.type?.subtype.toLowerCase() ?? null;
const isSubType = ["goblinoid"].includes(npcSubType); // so you can add other subtypes.
if (isSubType) {
const diceMult = args[0].isCritical ? '1d8 + ': '1d';
const damageRoll = await (new Roll(`${diceMult}8`)).roll();
new MidiQOL.DamageOnlyWorkflow(actor, token, damageRoll.total,"Slashing", [target], damageRoll, {flavor: "Extra damage against Goblinoids (Slashing)", damageList: args[0].damageList, itemCardId: args[0].itemCardId});
}
console.log(actor);
console.log(target);```
Aye, this is what it's giving me.
there ya go -- its not an actor, its a token, which doesnt have a getRollData function 🙂
I can't seem to find that function in the macro. How do I fix this? 
midi is calling it -- the actor variable you are sending is apparently a TokenDocument rather than an Actor, so, despite the nonsense naming this results in -- in the midi function, pass actor.actor instead of actor
new MidiQOL.DamageOnlyWorkflow(actor.actor, token, damageRoll.total,"Slashing", [target], damageRoll, {flavor: "Extra damage against Goblinoids (Slashing)", damageList: args[0].damageList, itemCardId: args[0].itemCardId});```?
yea
Works perfectly. Thank you ❤️
Is there a way I can format an Activation Condition so it only applies to 'goblinoids' suptype?
For instance, the 'Fearsome Reputation' feature here.
Is there a way to automatically remove an item that was thrown? (ie axe)
don't javelins already do this? Look at the setup of a jav.
this == condition automation and special case handling
I can't think of a single thing that cub provides that midi+dfreds doesn't, but I can think of the opposite.
*for conditions
set dfreds to replace conditions and all the default conditions will have midi flags auto generated on them
you can then right click any ce's you like that already exist or any you make and choose to add them as new conditions
One thing I can think of is hiding actor names, I don't believe midi does this unfortunately, only reason I have cub
I appended *for conditions lol
lol missed that
I use CUB still for name hiding and hp rolling. But you have to turn off enhanced conditions in CUB if you run dfreds.
yeah I have everything except name hiding turned off, wish there was a dedicated module that just did that though, I feel like there's unneccessary overhead with cub just to use that feature
Anonymous
I only use CUB over anonymous cause its 2 birds and 1 stone.
Awesome, I'll check that
I can't use token mold for hp rolling cause token mold and TVA do not like existing together.
level up hp rolling?
Could probably just use a world script to auto roll hp on drop and then drop cub altogether
my group just takes the average so I don't use that
no monster auto drop hp rolling
ahhh, I use tidy 5e's sheet roller, auto would be kinda nice but not a huge deal for me
I think this is a midiqol question, but I'm trying to automate the Rune of Fire from the Inventor homebrew class which adds damage on the first weapon hit on a turn. I've taken the Sneak Attack example in the MidiQOL Sample Items compendium and everything seems to be working.
The only question I have is how do I implement a damage type? Right now the part of the macro that determines damage looks like this: js const damageFormula = new CONFIG.Dice.DamageRoll(`${baseDice}d4[fire]`, {}, { critical: args[0].isCritical ?? false, powerfulCritical: game.settings.get("dnd5e", "criticalDamageMaxDice"), multiplyNumeric: game.settings.get("dnd5e", "criticalDamageModifiers") }).formula // How to check that we've already done one this turn? return {damageRoll: damageFormula, flavor: "Rune of Fire"};
I've tried setting flavor to fire as per the midiqol docs: Damage bonus macros can return an array of [{damageRoll: string, flavor: string}] which will be added to the damage of the attack. The damage roll is a roll expression and flavor should be a damage type, e.g. fire. Damage returned via the damage bonus will NOT be increased for critical hits. but all it seems to do is change the "title" for the damage in the chat card
Should be good as is. You already create a damage roll with fire as the damageType. Is it not getting picked up for resistances etc?
You know, I think you're right and it is working. It just looks kind of... ugly? with the [fire] in the roll text
Yeah thats the way it is handled currently. It probably could do with some CSS love
Eh, as long as it's working, I'm good. Thanks!
Would love to see this. Miss token mold for just this reason.
I'm having a problem where no automations work, and I have to turn off most of the modules, including midi-qol, to even be able to run battles with no automation. But the problem is only on some scenes, I can go to another scene and most everything is working fine. On one of the other scenes things only worked once i put new actors on the scene, as the old actors prototype tokens had been removed to compendiums. So i tried deleting and replacing the tokens on the scene where our party is currently, but it didn't help. I tried using ctr-a delete in case there were hidden tokens - no help. I finally made a new scene by starting over and importing the dungeondraft map again into a fresh scene. Even with no lights or anything else on the map except the walls and the same actors that work fine in other scenes, the automations don't work! The original scene had no problems till last week's game. Any ideas?
Error in console?
Just a few lines. Just be sure to provide an option to suppress the roll so you can bail if needed
would love for it to not 3d dice roll
always spoils when I throw down an npc in the fog
One follow up question: In midi-qol settings, under workflow settings -> workflow --> Special: Apply Convenient Effects, which option would I choose? I assume First CE, then item macro?
item then ce, cause I use Midi SRD+CPR and 90% of my stuff are on the items instead of relying on ce
I think I rely on CE for one item total lol, freedom of movement
OH and I made parry for npcs cause like many npcs have parry
Should just read the HP formula, roll it and update the created Token
CE first tends to break things more than it helps
CE first was great before your module lol
now that we have a midi srd and cpr in v10 its less needed
so basically item effects first, then if absent CE
yeah
If someone is dabbling with macros it's pretty much guaranteed to be better to prioritize item effects instead of CE
Cub rolls 3d dice
tokenmold didn't but tokenmold and tva have a really bad problem together and tva is more important
thank you very much, I really appreciate it. Yeah, I thought so, I had item effects first because I implemented Tentacle of the Deeps for one of my players...
Ah I meant that if you script it, it won't be rolling by default.
... ok, after a week of trying, it seems to be working now after disabling Simbul's cover calculator. Which i had done before, but not before some other adjustments. Is it possible that module can cause problems in maps with lots of walls?
I find cover modules a huge performance hit personally
It depends on the actual error
also simbuls doesn't play well with wall height/levels
ok
Just a note. Simbul's is only active when it's computing cover
and yet with it on melee rolls and a host of other things that shouldn't worry about cover don't work on certain maps, and they start working again when i turn it off 😕
does someone has a macro for a life stealing weapon?
How many walls and tokens are on the scene?
Melee rolls can still suffer from cover. It's rare but possible
it is a complex cave made with the cave wizard in dungeon draft - so hundreds of little wall sections. 5 actors. They don't appear to be near any walls on the map
i think you can use a module that reduces the walls
If you can get a count, that would help
it was called wall optimizer?i think
Anything under...2-3k walls should be fine.
After that you may start hitting computation lag
yeah but i used the cave wizard on dungeondraft and is kind of a nightmare in terms of walls lol....
i recall that players were having a hard time on the map being told that a wall was blocking their action when they weren't near walls
maybe the importer created a wall i had that issue once on a dungeon that i imported to foundry
it was a weird wall on the way
i haven't used that wizard in a long time, the players finally decided to explore the first cavbe i made that they'd avoided for 2 years
Sounds like it's just an overly heavy map. If you can get the wall count from the troubleshooting button, that would help
how do you get the wall count?
Troubleshooting or support button in the config sidebar
827 walls
damn thats a lot of walls
yes, and i simplified it a lot back in DD before exporting!
First step to find out what's up, is on the map that has issues, open console by pressing F12 and check for errors when you roll an item or something.
827 is not alot of walls
Otherwise we cannot help at all and it might not even be a #1010273821401555087 issue
is it a levels map?
levels on top of cover calculations = 
combine that with midi requiring virtually everything to go through the DM client to spit out to everyone and thats some lag
I've had cover off for a while, I just have a hotbar buton to quickly apply the two covers in a pinch when they really matter.
Oh that's fine. Wall count itself isn't the issue
there error happens to me too when I was testing your setup, its a problem with weather fx and fxmaster
that second one is new though
if you are seeing a performance issue, the first thing I'd drop is fxmaster/weather lol. Thats a huge lag hit right there if you got rain going or something
or fog
There are no error messages with Simbul's off. I get all that with Simbul's on. The weather is off. Turning off the weather mod didn't help at all
reinstall simbul's and make sure its dependencies are installed and enabled
those scene control errors are always there if weatherfx is installed
it's dependencies are there, but i will reinstall them all now
if that doesnt solve it, log an issue on their repo -- thats an internal module error
yeah that error sounds like you don't have the dependency enabled
or its not the new version did you only update simbuls cover calc?
All of simbuls stuff uses a dependency called simbuls athenaum or something
does CPR or any module have a lifestealing weapon?lol...
how have we not made lifesteal a quick access share by now lol
the dependency is Simbul's Athenaeum, it was on before. I reinstalled them both. Same results - the game is fine without them on, won't work with them on
Midi has a Longsword of Life Stealing in its' sample
What is VAE? I see it referenced everywhere but can't find something named that in modules
kk gonna use that
Visual Active Effects
Thanks
the link I just shared is the usual gist of what we give someone for life steal
if its actual healing change temphp to healing
Lifesteal Example:
if (args[0].hitTargets.length != 1) return;
const damage = args[0].damageList[0].appliedDamage
if (damage != 0) {
let sourceToken = args[0].workflow.token.document;
await MidiQOL.applyTokenDamage([{
damage: damage,
type: 'temphp'
}], damage, new Set([sourceToken]), null, null);
}
now we have an easier ctrl F
Where would I go to log an issue for Simbul's cover calc?
Ah, so does it make Dfreds Effects Panel redundant?
VAE better for the time being I'm assuming?
its because of CPR, if you aren't using CPR then dfreds EP is fine
Mostly different, really.
CPR auto populates descriptions on effects in CPR vae
ty
The only reason I am using VAE over DEP is the button hook that zhell packages up and gives to us, and CPR automates that even further
Yeah, was just checking that out
Am adjusting a lot of my macros to work with chris's stuff
so will likely do the same for my Starry form buttons
can Active Auras work for this outside of combat though? my first thought was Danger Zone but I haven't actually used it yet
how do you handle time in foundry?
I really don't think thats something you want to do, i know there are some dm's here who do things in real-time but that just sounds
to me
have the trap trigger combat, its an encounter after all
then do an overtime effect.
I have a few traps that are persistent damage, and I just handle them outside combat by firing them again and again as the players try to resolve the trap encounter
Times up and simple calendar
I use SC it works great
I only run in real time during combat if you can call it that
Hmm thats true. I guess I was thinking more of an exploration situation where its purely environmental
I increment game time in splotches by hitting the minutes up 5 at a time and keeping time standing still
I usually wouldn't begin combat for that
I just let it run and skip fw on rests and long actions that require hours
traps can and should be considered encounters, not all encounters are combat
a good fun puzzle trap should be dealt with as combat in rounds to make it interesting anyway
my group metas alot and goofs off
Yikes
is there actually a setting to have time progress only in combats? to be honest I pretty much only use time for effect expiry or other automation requirements. having a ticking clock during combat sounds amusing for me though lol
I just talked about it. If you have times up and simple calendar somewhere in them is the setting where ingame time can stand still and pause is independent of it
pretty sure its an SC setting
something about untethering SC pause from game pause
I meant like a toggle setting where it auto starts simple calendar time in combat and stops it outside of combat rather than manually clicking it yourself because I'm super lazy apparently
if you never hit play on simple calendar, then time only moves in combat with my settings
you can play and pause the game all you want, the ingame time is frozen till you fiddle with sc's controls
cool. I'll check my settings when I'm off work
btw if i want to reduce the healing of the macro to 1/2 what line should i swap?
lol that macro example I gave you is the final iteration of it, it started from a half damage iteration so if you search for something in the macro that seems unique to it, you will probably find the original macro if you dig deep
kk
I think you just add / 2 on the end of the const damage
let damage = Math.floor(args[0].damageTotal / 2);(change let to const in your example
wait damageTotal was wrong
don't use this example at all except to confirm you should just put it in parenthesis and end it with a ;
if (args[0].hitTargets.length != 1) return;
const damage = Math.floor(args[0].damageList[0].appliedDamage / 2);
if (damage != 0) {
let sourceToken = args[0].workflow.token.document;
await MidiQOL.applyTokenDamage([{
damage: damage,
type: 'temphp'
}], damage, new Set([sourceToken]), null, null);
}```
@hasty jackal ⬆️
you don't want to use damageTotal like I showed cause we learned later on in the evolution of the macro that appliedDamage makes it so we don't have to worry about resistances and immunities.
thanks
Anyone know if Midi has an exposed function to check for total cover or an example of an item that does? I'm over automating Witch Bolt.
edit: computeCoverBonus seems a good bet, will do that.
edit2: this is broken or I am, logging an issue >_<
I have 10.0.39 midi and I use FASTFOWARD ABILITY ROLLS, but I have noticed that since some previous versions, when rolling initiative does not make fastfoward, but it jumps the chat message DA, normal AD... has anyone noticed this?
Hi all, one question: I have created a weapon attack with a active effect which should be applied to the target on hit. I am struggling to find this button config (see screenshot). Where and Can this be configured to be not shown?
init is its own thing cause of dnd5e dev reasons. I dunno why midi hasn't dealt with it yet but theres a standalone module that reverts it back to prior dnd5e methods of init.
workflow button>workflow tab>special section>first drop down is either set to off or is set to on and leave the button, OR you have nobody targeted, OR you have a naughty module installed
if 1 and 2 are not the case, number 3 would be probably Ready set roll, effective transferral, or wire installed
you also missed for the record, so it shouldn't apply...
i will check the first option....
it works and does apply the effect only on hit, but I don't want to confuse my players, so the button shouldn't be there
you probably have leave button on or one of the modules above installed
its one of the drop down options in that specials first drop down
but effective transferral and ready set roll also leave the button up
and in midi it will show up if you don't have require target on and you make a roll with no target
since you missed a target, thats unlikely
ah, i think i have the option selected "apply effects and remove button" which does this. It will show the button in the miss case
no it doesn't
so you have one of the modules above
I have apply effects and remove button, I never see that button
You also don't have typical merge cards on so its easy to mistake midi for ready set roll with your setup
no, you have apply effects and do not show button
which is what i have selected now and it works as you say
that is a midi 39 change?
Maybe, don't know?
most of us aren't using midi 38 or 39 cause of breakages
Yep you are right, I didn't realize there were that many options in that drop down
now we know why it exists lol
for those "Oops that was suppose to hit" moments
Yeah
Sometimes the documentation is more trial and error with midi... 😅
For example under GM-> GM roll hiding --> there is an option which says Roll Formula but show DSN roll .
I totally don't know what DSN means and on trying the two options (Roll Formula and Roll Formula but show DSN roll) I could not see any difference...
It's a module called Dice So Nice :p If you don't have the module, that does indeed not make much sense
Dice So Nice, a module for rolling dice on screen
does it happen to anyone else? just before the start of the combat, in the combat tracker...
Aaaahhh, ok, good to know. Like I said, trial and error, as other config options check installed modules (cover calc for example)
I dont have fast forward activated
The devs for the system don't really like automation so when they added the advantage/normal/disadvantage for init, they made it its own thing and midi hasn't adapted it to midi yet. If you want it to work like it used to theres a module that reverts it
I guess its just a low priority thing in midi to not adjust it to work like the rest of the rolls in midi
I don't realy think anyones touched it yet, advantage reminder hasn't given us flags for reminders for init yet either
Does anybody have any experience using midiqol and casting the spell “call Lightning” we’re having trouble getting that one to play nice
My module has it, or otherwise there has been plenty of people who've shared their macros for it in here.
I want to say Midi SRD has it too?
Here’s the issue: the next round of combat my player who cast it should be able to select who to target with the spell, it’s making him basically “recast” the spell
Yep
There are a few implementations of that spell floating around. My module (Chris's Premades) handles it by giving the player a feature to use while the spell is active.
Excellent, I’ll grab that later. Appreciate it 👍🏼
Otherwise, search for Call Lightning in here and you'll find plenty of other examples of it.
My module has a lot of dependencies, so it's not for everyone.
if I recall the only issue with midi srds version is the item itself is setup wrong
I think the save is left on the item and just needs to be cleared
Does anyone know how to make this work?
flags.midi-qol.grants.disadvantage.attack.rwak
I am trying to give disadvantage to all ranged attacks... Weapon and Spells.
It looks like this line grants disadvantage to people trying to attack the token instead... 😦
I found it!... flags.midi-qol.disadvantage.attack.rwak
grant flags typically transfer the effects to whomever is attacking something
I had heard some potential issues with Midi 10.0.38. Is .39 have any foreseeable issues?
I tried turning on enforcement of bonus action and reactions and it works fine to start, but dosn't reset actions and bonus actions at the end of the round, you guys know how to fix this?
all we can say is that tposney is aware of the issues and working on them. I personally never update unless CPR makes me. I let all you folks playtest the new versions for me 😉
midi 37 still here
don't fix what aint broke
do you have DAE installed?
and is that Merchant sheet npc I see off to the left?? that module is so dead in v10
Does anyone know if I could by any chance automate this using a DAE?
Any temporary hit points applied by your inscriptions can stack up to an amount equal to three times your Artificer level + your Intelligence modifier (minimum of +1), but cannot exceed this amount.
Edited for the only relevant effect here.
Specifically emulating the maximum amount of temp HP.
Basic math can do this.
const tempHP = /* some value you get somehow, idk */
const rollData = actor.getRollData();
const max = 3 * rollData.classes.artificer.levels + rollData.abilities.int.mod;
await actor.applyTempHP(Math.clamped(tempHP, 1, max));
So, does this ability just mean that you can add tempHp from multiple sources, up to the max amount?
How do your inscriptions apply the tempHp in general and can these apply tempHp to non-owned tokens as well?
sounds like homebrew or paraphrased feature
Can someone help me setting up Supreme Sneak (One DnD) with AE. The feature provides advantage in stealth checks, but i'm not sure which attribute key + change mode + effect value should i go with 🤔
if you have dae installed, the auto complete should get you there if you type advantage.ability
i was going with system.abilities.... -.-" Thank you once again! ❤️
i believe i still have it installed but not activated, i use loot piles now for merchants, also i do have DAE
you need dae for midi
yea i was answering both questions, i do NOT have mercahnt sheet active and i DO have DAE
your spcial durations are not working then?
well the problem is that for the bonus action and reaction it's just drop down toggle and it puts the effect on the creature without a duration, is there a way to configure the bonus action / reaction effects independent of that?
becasue it's not coming from an item or that would be easy it's sjut coming from the module with no config for it
I guess you are missing Times Up?
nope, i do not have that
I thought the combat centric ones were just midi/DAE but I guess its times up that does them
install times up and you should start to see special durations
that feels like kind of a big thing to not be standard in it, but yea i'll grab that module, also how did you edit the effect itself? of course you can do it for each indivitual creature after it's applied but i don't really want to do that
I'm on an actor
ah
Its also a convenient effect:
you don't need dfreds though, midi will make it on its own if dfreds is absent
Its recommended though
is that in the codex or under dfreds config?
They aren't all required modules cause technically the modules still mostly function without those parts
dfreds menu in its main window, the jazz hand
ahh, alright, effects pannel right?
no dfreds convenieent effects
but all you need is times up
dfreds just lets you edit it
the flags are there on the efect but the modules absent so it fails to work till times up is enabled
good to know, day by day i make my DnD more efficient
Ima gonna ask in here, cause it's automation related:
I have a NPC with cold regeneration. As long as he's not hit by fire, he regains 5hp at the start of his turn. He even regenerates from 0hp, if he didnt take fire damage last turn.
Now I have a regeneration effect: flags.midi-qol.OverTime.regenerate
How do i turn that off for 1 turn if fire damage was taken?
Second question: How can an unconscious/incapacitated/dead NPC (on 0hp) take a turn? Foundry won't let me
The second question is a core dnd5e combat tracker setting if I recall correctly
alright, he takes turns again, even if he's dead, however the regeneration wont work:
label=Regenerate,turn=start,damageRoll=5,damageType=healing,condition=@attributes.hp.value < @digital lagoontributes.hp.max
I don't think there is a way to automate it without going nuts
I just put a label on the overtime that says "cancel this if X damage was dealt."
can i not add an effect that "pauses" the regeneration effect if fire damage was taken?
not that I'm aware of
you could make the overtime have a special duration of is damaged by fire
if you can help me with that?
and then have an effect macro secondary effect that fires the overtime back up at end of turn
how do i do that?
I dunno how to do the start back up part, thats more krigs department
special druation is prebuilt if you have times up/dae/midi
its just a really far down one
Is the effect set to flags.midi-qol.OverTime OVERRIDE with that info? Seems to be right
fire damage kills the overtime, then you need a secondary effect that rerolls the item back onto them at end of turn
Ah, no regenerate
i still get this popup too
alright, will build it into his feature
use the real overtime flag
that flag is old and probably deprecated
That's another issue Moto found, Midi restricts actions from incapacitated actors?
no
You just want flags.midi-qol.OverTime as the attribute key
it doesn't if he uses overtime
oh shit
no the fix for overtime and incapacitated is in the broken midi's
if hes on 37, you can't run an overtime on an incapacitated actor
he just fixed that but 38 and 39 are kinda broken
when we do finally have a fixed one, its only fixed for the real overtime key, that regenerate one is ooooold
oh jesus thats old
well you can go to 37, but you'd have to manually update it
38 and 39 don't play well with CPR
you can go to 39 if you don't mind midi breaking mid session and having to downgrade to 37, pick your poison
it's that thing you do when you beat on someone's chest to the tune of stayin' alive
thanks, ill try to manually upgrade to 37... but the overtime still wont work?
tim just released a new version I think
lol
I found out by going through the readme lol
forget what I said about 38/39 he just dropped the updates we've been waitin on
8 mins ago
😄
so i'll yolo update it to .40 then, yes?
let's see if everything broke
hm
didn't break, but the OverTime effect still doesn't seem to affect my dead npc
updating now to test
its a setting somewhere in midi
Are OT effects supposed to affect dead NPCs? 🤔
its in 38 or 39's patch notes
oh
is it dead or incapacitated?
its a new overtime command
Additional option for overTime effects allowIncapacitated=true|false. If true overtime effect will still be processed for incapacitated actors. Useful for effects that allow a saving throw to remove a condition, e.g. power word stun.
its in midi 37+
looks like false is the default, will fix my cheat sheet accordingly
right click the actor, are they incapacitated or dead
heres a funny hack for creatures that regenerate at 0, give them condition immunity to dead
They don't call me janky for nothin
omg I got an even funnier hack if you have dfreds
add an effect macro to dead in dfreds, on suspend, apply dfreds CE: "Dead?"
when a condition is immune, it gets applied suspended
I highly doubt midi's suspension for immunities works with effect macros suspend flag though lol
eh
simply clone dead, and add ? on the end of its name then make an effect macro on suspend for dead and call it dead?
I'm actually doing this, thats hilarious and kinda friday the 13th ish
the reason you have to do CI dead, is cause npcs get deaded, while pc's get unconscious
I wonder if its only checking for incapacitated
@violet meadow hows the undo button look?
didnt have to do any of that
the override when dead works
allowIncapacitated=true this
I had a feeling he was checkin more than just that cause I think it was born from a complaint that regeneration wasn't firing
how do i now make it a feature of this npc, that i only have to click to reapply the regeneration? I made the "Cold Regeneration" into a convenient effect
i want the feature to apply the effect to himself
as for how to automate if damage is taken, the main snag is you need to be able to reapply the overtime if it expires due to the special duration at end of turn. Set a second effect macro on the cold regeneration. On this blank ae, have it transfer on equip, and have it have an effect macro that is at end of combat turn: origin.use()
alright, I would love to do that.
Now my questions: What's "On this blank ae"?
make two ae's
see how theres already one?
add a second one
but have no keys on it
also make that existing one a standard item transfer, NOT transfer on equip
you're losing me here, sorry 😦
do you want the overtime to cancel if they take fire damage?
so I have the convenient effect "cold regeneration". That one works and turns off (removes itself from the actor) if fire damage is taken.
Next step is the reapplying
if you do, then it will kill the effect, then next round they can regen again, to get the regen to start back up you need a way to reapply the overtime at the end of the turn
do i edit the convenient effect? or a Feature of the actor?
nm, if you are using dfreds none of this will work
the origin for dfreds is the secret sidebar item
so if i dont use a convenient effect ... ?
Regeneration item has 2 ae's the first ae is transfer via standard effect transfer, this has your overtime on it and it has a special duration of isdamaged fire
aka no boxes checked in the first tab of the ae
the second one is where the magic happens, the second ae has no keys in it, its a transfer on equip active effect with an effect macro for turn end, that fires the macro origin.use()
make sure the regeneration item details are set to self/self
range and target
Hey yall, question. I have a player who prefers to roll physical dice in my game. This becomes an issue with saving throws because they are prompted to make the save in foundry but don't want the dice roll. Is there anyway in midi to allow a user to essentially cancel a saving throw prompt?
yeet them, or if you have to keep them, Df manual rolls
hahaha... it's my wife
ahhh I hadn't seen df manual rolls, that is cool
do you know if df works with lmrtfy? I'd assume probably not
the only thing df manual rolls fails on is when midi is given an explosion dice option
10d4x fails to df manual roll all explostions but initial rolls are manual, but since dnd5e does not do explosion dice options, its understandable tposney never accounted for it
so it looks like this now (doesn't work yet)
only other known conflict is df manual rolls does not like Maxwells Malicious Maladies with the midi roller.
here's the other windows
why does the red one have a duration?
clear the key oout of red one, have it just be empty
the red one should have no duration, neither of them should, the green one should have a special duration of is damaged by fire
you don't
it doesn't seem to do anything other than post it into the chat
did you make an effect macro on the red one?
well you see it in the first picture
the red one gets the macro not the green one
the red one has the macro, i just didnt match the pics, wait
are you sure?
aye
if its on the red one, then at the end of the first turn in combat it will fire the green overtime
this sorta assumes the creature starts combat at full health fwiw
hol up
problem solved, add another effect macro
on combat start 😉
Cool tks, yeah I don't think I use exploding dice if I'm understanding what that is correctly
so on end of turn and on combat start, origin.use()
to be clear you do not want on turn start
I mean literally on combat start, beginning of combat
if you make the macro fire on turn starts, then it defeats the purpose cause overtime fires after it
but nothing is happening
is it in combat?
(is it damaged?)
there is no option on turn end 😦
this is wrong
each combat turn will break it, you want on the actors turn at end
each turn means it will fire at the end of all turns in a round
you want it to fire on just the end of the actors turn so it starts up AFTER overtime could have been triggered
Not an UNDO button exactly, but a MidiQOL exposed Method to execute and get the previous state (before the latest item Roll).
you do not have midi qol enabled, effect transfer on, or a token on the map
workflow button, workflow tab, first drop down of special section is set to off
(or you are using another roller)
delete the dfreds CE or rename it, or shut off CE transfer on the item, thats why you have 3 regeneration effects
ok you have the glitch, you edited an owned item
its not a ce, you just have 3 ae's one is the broken editing an owned item bug
so, ill make a new item and copy the effects over?
my guess is thetemporary one is the bugged one that needs to get yeeted
no you just need to get rid of whichever one of those is bad
its more than likely the temp one
your dfreds CE setting in midi is the worst setting fyi
you have ce before ae
unless you literally rely on dfreds CE for everything, you usually want it the other way around
and the reason why its probably not working is cause you have a dfreds CE made in dfreds named the same as the item, and its rolling and applying that old one instead
alright, i removed the CE, i changed the midisetting, but it's still just posting to chat each turn ... twice
ah
it's happening on everyones turns TT
ok the red one's broken
seems like "on combat turn ending" is everones combat turns after all
lemme reload and restart combat
hm seems to be working now
it's refreshing itself every turn. Can i somehow prevent this? (it's just kinda spammy)
is there some kinda if () i can put into the on turn end Effect Macro around the origin.use()?
Evening ladies, what fresh horrors are we conjuring with my modules?
cold regeneration
Oh neat-o. Yeah just slap an if( /* something that should stop the script */) return; into the EM
yes, would love that. just don't know how to get the current actors active effects :/
like literally 0 idea which keywords? variable names?
Why is it triggering after each combatant's turn?
not anymore, fixed that
What's the issue then?
the only issue is that it's reapplying every turn, so i would like to put the condition into the ... effect macro that reapplies it every turn
actor.effects.find(e => e.label == "Name of Effect to Find"), I think EM supports those helper ... variables? Is that what you call them?
label
i would like it to not reapply if this actor has the "Cold Regeneration" effect active
FUCK I wrote label to begin with
Just actor. Though it's safe to assume there is a token.
wait for v11 😄
By "active", you mean "not disabled"?
const hasColdRegen = actor.effects.some(e => e.label === "Cold Regeneration");
if(hasColdRegen) return;
// rest of the script here
there
doesn't seem to work 😦
if(hasColdRegen) return;
origin.use()
edited
Hey Moto, do you still have this item? applyTempHP from core dnd5e does check for if greater then apply so I'm wondering if there's a bug to report somewhere in this from our chat yesterday
thank you so much
you have a dfreds CE
your problem was because you have CE before AE
it's all working now 🙂
ok
thank you 😄
Why was I credited in the DAE changelog?
is dfreds CE an issue generally? 😦
also if it really needed to check, that means dfreds stacking is broken, which I've been saying forever btw
Wasn't that @coarse mesa 's fix?
I feel like stacking is broken in the new dfreds
now that the fun automation is done, time to actually prep the session
they might not even fight this guy 😄
I don't think the core roller checks temp hp values
midi does
@gilded yacht I think you got your wires crossed. I didn't do anything for DAE lol
It do;
async applyTempHP(amount=0) {
amount = parseInt(amount);
const hp = this.system.attributes.hp;
// Update the actor if the new amount is greater than the current
const tmp = parseInt(hp.temp) || 0;
return amount > tmp ? this.update({"system.attributes.hp.temp": amount}) : this;
}```
Lukas did but it was in your server
Ah
to be clear, your macro is, not the function alone
applyTempHP will only update if the new amount is higher than the existing
bruh
That's the function definition, Moto, from core dnd5e
Hence why it's an anomaly if the item you tested yesterday did not respect it and used applyTempHP
then its a bug
Shock and horror guys, the system function to apply temp hp applies temp hp the way the system is meant to
it aint asking though 😛
last time we were doing this, we had to change to a midi function cause the temp hp was updating regardless of how much was already on them
It shouldn't
slap on a dialog
no slapping please 😦
disable all modules.
I don't even remember who it was, and it wasn't my own item, I do know that it was not applyTempHP
I'd still change to the midi function for the undo damage button however
it was applyTokenDamage
the undo button on temp hp is the closest we will have to rules as written temp hp
core temp hp is not raw
the player can take the new temp hp
Pretty sure it checks
not if you use applyTokenDamage
it was just silently replacing nonstop WAIT, I still have the item lol
let damageTotal = 0;
args[0].damageList?.forEach((damagedToken) => {
damageTotal += damagedToken.appliedDamage;
});
if (damageTotal > 0) {
damageTotal = Math.floor(damageTotal / 2);
await MidiQOL.applyTokenDamage([{damage: (damageTotal), type: 'temphp' }], (damageTotal), null, null, new Set(this.actor));
}
have fun
this does not check for higher values
Isn't it this item? #1010273821401555087 message The macro should respect it, which is why I think there's a bug report if that was not your experience.
let damageTotal = 0;
args[0].damageList.forEach((damagedToken) => {
damageTotal += damagedToken.appliedDamage;
});
if (damageTotal > 0) {
damageTotal = Math.floor(damageTotal/2);
await args[0].actor.applyTempHP(damageTotal);
};```
oh wait
I fixed it already damn it
replace it with the core one
I think we were just using applyTokenDamage?
we switched to midi purely because it was resetting the temp hp to lower values
Nah it wasn't.
but I'm sure midi touched that too, so who knows what works the way it's supposed to. Disable all modules and try again.
Is it possible to macro having advantage on Saving Throws against a dmg type.?
If you already use Chris' Premades, they have one in there for you, else it's pretty cumbersome
(apperently this is a midi - involved thing??? - i can never tell when im supposed to post here.
this macro is the offending macro
it just replaced 12 with 6
that sure looks like applyTempHP to me lol
so how do i give it to an actor?
CPR doesn't save against damage types, it saves against conditions right?
its literally Conditional resistance
and vulnerability
It's in the compendium CPR Race Feature Items under Dwarf
easiest way to test CPR 's conditional resistance is to cast poison spray on a dwarf
its not going to work on just poison damage, it will only give the advantage if theres a save for macro.ce Poisoned
i FINNALLY UNDERSTAND WHAT THAT MODULE IS NOW
sweats
I treat the dwarf feature as being poorly worded
Tested. Cannot reproduce. You have a module destroying this core system function.
Isnt that what it needs to do?
I can only think of one thing that does poison damage for a save that isn't poisoned condition also, and thats poison spray lol
Literally all other racial resistance ones are for advantage on condition saves
i overhauled poison in my world :S
I think its the multi target thing breaking it
Show me what applyTempHP looks like in your game.
and it works simular to fire dmg, which is also possible to have resist.
How wrapped is it...
I am right that you have to swap to macro.ce right @scarlet gale or the CR/CV won't get picked up?
Correct
not at all, if we are discussing plain MidiQOL
Just Moto doing something weird then. 👍
let damageTotal = 0;
args[0].damageList.forEach((damagedToken) => {
damageTotal += damagedToken.appliedDamage;
});
if (damageTotal > 0) {
damageTotal = Math.floor(damageTotal/2);
await args[0].actor.applyTempHP(damageTotal);
};
It breaks when theres more than 1 target, I think its checking the first targets value of temp hp vs the new
No it does not
if you only hit one thing its fine, but if you hit 3, suddenly it starts replacing no matter what
the midi function that does the same thing, works so /shrug
I guess this is a lesson to always use midi
this function rings a bell 🤔
I don't think midi touches it
the item was meant to be an actor on use, so I guess midi touches it
different issues
🤦♂️
and the item I made, was to test his multi target feature of it so:
and he swings against 4 people including himself
hol up...including himself...
canvas.tokens.controlled.forEach(t => t.actor.applyTempHP(1)); works as expected (did not lower any temp hp on any of the actors who all had more than 1 temphp)
he's...damaging himself...
Your shit's bugged. 👍
not bugged
foundry was just smarter than me
the new value is not smaller
its just the new value minus the damage he took
So when you said it was lowering the temp hp, what you meant was not in fact that it was lowering the temp hp
I never put special in the range, so hes hitting himself
you are kind of racing foundry function vs Midi damage application
yep thats precisely it
and why midi works better is cause it pauses for midi damage
to be fair, normally you don't hit yourself with your club
Doesn't core only work on owned tokens?
I only put the aoe in cause he wanted to know if the more than one target addition worked
Of course. It's an update to an actor.
the temp hp only goes to the owned token
yeah that is applying on the attacking actor anyways
Was missing that context
When is the macro triggered?
midi function is still better for undo button which was the whole reason I went that way instead anyway
born this way. Can't be helped.
actor on use, after active effect, its not my item, I just left it on my combat dummy
it was for araxiel
the final code was:
if (args[0].hitTargets.length != 1) return;
const damage = Math.floor(args[0].damageList[0].appliedDamage / 2);
if (damage != 0) {
let sourceToken = args[0].workflow.token.document;
await MidiQOL.applyTokenDamage([{
damage: damage,
type: 'temphp'
}], damage, new Set([sourceToken]), null, null);
}
Had this at some point #1010273821401555087 message
I bookmarked a lifesteal cause its asked for so much
but I already forgot what I put for keywords
Lifesteal Example:
I got sick of looking for it lol
How do I use
flags.midi-qol.DR.non-magical-physical
for a heavy armor master passive effect?
or is there an implementation i can just steal somewhere?
or the non magical physical flag
with change mode set to custom the character doesnt take dmg no more 😦
Uncaught (in promise) Error: undefined. Unresolved StringTerm true requested for evaluation
[Detected 1 package: midi-qol]
setting it to "Override" works
this heavy armor master effect seems to work
You’re the puppet master who made it happen 🤷♂️
I think these keys were changed in 38 or 39, isn't it just add now?
or was it absorption that changed
Hey guys, I would love to do the feat Flames of Phlegethos. I have seen that @sudden crane did that sadly I didn't really understand how it was done as I am lacking in the knowledge department
i take that back
this is premade somewhere I swear
He writes about hooks and world scripter which I have no idea what that is 😄
add seems to ... add ... more? like idk how much more, the char always took 0 dmg
Flames has no checked box in there
yeah I swear I just saw this somewhere guess I'm mistaken
Heavy armour master is.
I freshly imported the chara with that feat from dndbeyond and still had to add the effect myself
@short aurora About the Issue you created for MidiQOL.computeCoverBonus.
Does the answer on the issue make sense?
heavy armor master is automated via ddbi if you own the phb
i do own the phb
feats only come automated in the character importer
that's what I'm using
you either imported just the feat, or you imported without the midi/dae checkbox in the character importer
a
there's an active effects tab, let's see
still didn't "import" the heavy armor master feat in a working manner
ah
had to freshly import
still seems kinda buggy, substracting 6 instead of 3
I have one, but I need to update it to use the new MidiQOL onUse target, this will allow me to remove the active aura that I used to be able to intercept the workflow when the owner of the feat is damaged
only works right with Override instead of Add
mouse over the token icon
what does yours say in the tooltip
dr: non-magical:9
9 seems wrong
are you editing owned items and getting the glitch?
check the actors effect tab
show me the effect tab of the actor cause you just mentioned changing the mode
isnt this the effect tab?
show me the tooltip of the actor
i am confuse
you just showed us 2 different actors so either your actors unlinked or you have two actors named that
the sheet has 38 hp, your token damage says 35
what version of midi are you on?
I dunno why anyone updates lol
like 10 mins after it came out
bro we went over this earlier, because otherwise i couldnt regenerate my dead actor
(or so you said)
midi 37 has that feature
I never said update to the brand new, I even looked up what midi had it, and told you then
I was on .35 and didnt wanna bother to update manually
yes alright, so it's bugged in .40 then? :/
I dunno, I was just here to clarify the checkmark was accurate, it is for me so its staying on in the wiki
disable modules test, or downgrade to 37 and test
gonna try with just midi
custom throws an error for me, i gotta use override
What error?
threw*. seems to work now on the freshly imported char
twas something along the lines of
[Detected 1 package: midi-qol]
may want to relay this to Mr.Primate then cause ddbi imports it as add
No errors in midi 37 with custom in heavy armor master fyi
override leads me to believe they got issues with their actors if it only works with override
do you have that optional DR rule on?
From a quick test, this will be triggered when you change modes with the transferred Active Effect already on the Actor.
@gilded yacht might need to take a look.
The first attack after you change mode in an AE (eg. flags.midi-qol.DR.non-magical-physical | Custom | 3 to flags.midi-qol.DR.non-magical-physical | Override | 3) will trigger the error above.
where do i find this?
found it
i have that checked
I will have to double check that then. For now use Override though
I should probably have been more precise in the ticket; your answer does make sense, I just can't seem to reproduce that result with Simbul's Cover Calculator. It works just fine in normal play, but trying to call that function and I get non-sensical results, so I was going to sus out what I did wrong from an example
Hi, guys. I can't get the Flame Blade spell to create an item on my players' inventory. Tried Mr. Primate's and Midi SRD's versions, they create the effects fine, but not the item. Any idea why?
Mr Primate's probably gets it from MidiSRD. I will check Midi SRD. Any errors when you use it?
Is there any way to, in a macro (like in the preItemRoll macroPass), just abort the entire process?
just this
return false;
Sorry, to clarify, I mean abort the item, not just the macro (if returning false will do that, then great! but it feels weird so I wanted to make my question clear XD).
Yeah, both MidiSRD and Mr Primate's give this
It will.
Check theMidiQOL readme for a brief Hooks read. It states which ones can abort the workflow etc.
Version of MidiQOL, DAE, MidiSRD?
MidiQOL: 10.0.39
MidiSRD: 10.10.2
DAE: 10.0.27
Update MidiQOL and DAE and check again
I will take a look in a bit
Updated and it worked fine!
There is, however, a new angry red error in the console, though it doesn't stop the spell from working. nvm, it didn't show up again when I tried to replicate.
Thanks, @violet meadow , you're the best!
in CPR's Module is this what im supposed to replace