#MidiQOL
1 messages ยท Page 25 of 1
Can we get it to prompt for Ath or Acr?
technically a grapple can be contested by either in 5e if i recall.
You could, but why?
becaues its a grapple check
It automatically chooses the highest
changing it now
he needs to replace the second ath with skilltoberolled but I can't remember the formatting, I know its different
ah ok ```js
skill:${skilltoberolled}
yeah
sorry when I make macros I leave stuff in, I'm a hoarder
I gave him a taunt key with that left in, so it mislead you ot think he was using it lol
I do to, but at least comment it out ๐ and make a note
yeah just to make sure that you will spot it easier in the future
yeah
Yep, depending on your attack workflow you might be able to auto trigger that as an onuse
hopefully the author of more automated spells is still hard at work on v10 cause the v9 battlemaster suite is pretty slick
When i fast forward the rolls via the macro, I get this error. Timing?
Something probably has changed in Monks. I haven't investigated yet.
np, its a minor thing
If you FF you can grab the passed result from the flags
flags.midi-qol.grants.critical.range - how to use this? What sould I type next to it?
thats a boolean for things like unconscious
so 1 or 0
wait no...bad answer
You want it to be 5 for the distance or lower that it would be true
the only use case I know of is unconscious right?
you shouldn't need to make this, dfreds has it already
flags.dnd5e.weaponCriticalThreshold | Override | the lowest number you want it to trigger Crit
@vast bane I asked ripper for ya regarding the recent used action thing you mentioned a few days ago and it is just a flag on the actor, so when using macro.createItem, it should be a snack to populate that one with the created item. Will try to get an example and dump it in the channel here later, my cleric doesn't like the way aura of vitality works right now
that would be SO frikkin cool if it could be done
basically edit the combatbooster flag to put the newly created item in the history at the front
so things like spirit guardians, aura of vitality and such woudl get the feature added to the history without using it yet
Oh you mean for things like Paralyzed etc? Sorry flags.midi-qol.grants.critical.range | Override | 5 would be 5ft away
oh was it paralyzed, I thought it was unconscious
all of them
its in dfreds CE's in all the relevant ones if you have midi installed
I wonder if macro.createItem has the new item ID on the actor it created at somewhere I can fetch it, that would mean I just gotta push it to the array flag in combatbooster
have you seen the latest idea for createitem?
make a bait and switch item, that has an ae that creates an item on the actor when its attuned to, and have that ae have a cursed item
and destroy the original with effect macro I think
very very little setup required to handle unidentified items
you don't have to have it be cursed, just unidentified
one of the longest wanted items in dnd5e is in midi pretty decently easy I think
Why don't you get the item by name on the actor and find the id?
duplicates n' shit
On the same actor?
not relevant in this use case, I just wanted to do it proper :p
combat booster does have a weird issue where it looks at the proto actor even if you are using a canvas actor beware of that weirdness
maybe check the DAE flags for a createdItem with its UUID, which probably DAE needs so as to delete it afterwards
so I bet you th
So its probably referencing the proto actors flags, beware of that. So any npc's using this idea will probably have issues
Sanity check, in the newest version, if I delete all instances of an active effect belonging to a concentration item, then concentration should drop, right?
he did that so that your 20 goblins would all have the shortbow and shortsword in its history even though only 1 of them has gone
havent tried now that I think of it though
I don't think concentration works backwards like that, its the other way around, if you lose conc it kills it
It works on some of my features but not all of them, I pray tposney doesn't get too tired of me hurling issues at them
Oh wait, it turned into a setting, maybe it's off by default
It was! praise, no issue necessary
I once asked about this. No one told me you could request contests with this module ๐ญ
This module can run macros, it's a macro that utilizes the module Monk's Tokenbar to actually do the contest roll, might be why you weren't told =/
It's not possible with just midi
Bugbear did Crymic say anything?
Yeah why I said this module I meant MonksTokenBar sorry was unclear
I haven't seen anything ๐คท
Have you tried to use MidiQOL.applyTokenDamage instead?
Will that give a chat card?
Also I'm more concerned about knowing if there's actually a bug at this point tbh
Yeah sure? Not sure what you mean by secondary item
https://foundryvtt.com/packages/chroniclers-modified-rolls
Does anyone know if this module integrates well with midi?
Chronicler's Modified Rolls, a Module for Foundry Virtual Tabletop
The secondary damage is from the same item? I was thinkig you needed it for like a different effect or something, nvm
Gonna go with presumably no.
Forgive me, but what was the initial ask? I tend to forget ๐
@undone sorrel ๐
Uh the initial use case was for booming blade
So the secondary damage is the applied after moving
So you create an Effect that triggers the damage when it gets deleted?
not only is it probably no, but midi probably does it already
Basically yeah
oh wait no, why do you want to modify it? What sthe Use case? Cause DF Manual rolls is a better fudger
and works with midi
The use case are players that can modify a hit roll or save after it has been made (favoured by the gods and things like that)
Do you want to be thorough about it?
duplicate the original item, changing the relevant data to whatever you need for this secondary type of attack and roll that ephemeral item when the effect is deleted ๐
with a MidiQOL.completeRoll(item, { parent: actor }) going off memory now
do not auto remove attack and damage buttons
if you turn that off in midi, you can roll damage even though you missed
If you leave the buttons in the merge card, then when you miss, the damage is still there to manually roll for a hit:
I only tick off the attack one
How much more thorough is this actually? Seems like a lot more work to arrive at the same solution
so they could have a feature for favor of the gods, and then click the damge there if they would hit
Favoured by the gods modifies to hit, not damage
and what does to hit decide lol
whether you can or can't roll damage
if the button is never removed, then you can still just roll the damage
overruling the miss
I would expect it to be a not well intergrated one tbh.
I think MidiQOL changes the card enough, so that if the module doesn't know how to interpret the data it would just fail ๐คท
the miss is superficial anyway, you can turn off checking for hits in midi, whats making it hard to undo a miss is usually folks remove the damage and attack buttons
Yeah but then I'll have to manully roll 2d4, then do math. And isn't the purpose of automation to avoid doing those things?
so the above guy missed, someone favored the gods, he winds up hitting, he manually clicks damage there, and finishes the workflow
How about saves?
It would get you the correct item attack/damage card displaying, with the rolls etc.
how could you ever automate a choice
roll the 2d4, if you save, undo what was automated
otherwise you would get prompted EVERY time for what you want
that is worse than manually doing something I'd argue
defeats the purpose of fast forward if you have to click no to something to do all your d20 rolls
๐ฎโ๐จ I guess that's what I have to do then. Seems a bit over the top when DamageOnly solves this exact problem
I want to be able to say "hey, foundry, roll 2d4 and check if that changed a miss into a hit"
it sounds like you want ready set roll instead of midi then
Rn im not at my pc so I'll check things later, though
I want a combination of both which doesn't exist xD
physical dice I mean, and then have df manual rolls be your intermediary
create a version 9 build of better rolls for 5e I think, that was semi compatible with midi
but you have to find really old versions of dnd5e, better rolls, and midi to pull it off
You can worldscript this
and it would be a prompt for every roll right?
Depends if they want to see it, could just be background
If it's one actor that has the feature, go in on each pre attack roll or whichever phase is most appropriate in midi, do the roll and if it changes a miss into a hit, push that to the workflow and use the feature or prompt for the feature
Just kinda depends how much they're willing to let go of RAW because I doubt a feature that changes an outcome is supposed to be powergamed that much
I don't want it prompting it always
that wouldn't work, that would give him many many free swigns at the limited feature
Just limit it to the feature's uses
thats the only way you'd be able to automate a choice that needs to be decided before the workflow finishes
but its a choice, auto choosing the first 4 misses is going to wear out, what if the first 3 are just saves against a level 1 sacred flame
Couldn't I tell it to redo the workflow but adding something else?
That would rerroll the initial roll, right
thats precisely how ready set roll and better rolls works, midi just doesn't do it well
the best midi could do is prompt you yes no at various hooks to repeat or accept a value it got
They said only if it changes a miss into a hit, you can check for that and give a prompt when it would be relevant. I'd find it less engaging as a player, but if you do full auto and you want those kind of features, that's how I'd implement it.
Can also just display the result and offer the gods intervene to change them, add the bonus, without it needing to always be possible, if you want to hide that
thats alot of pausing fast forwards when you could also just hit the undo keys
It's the same clicks realistically
Hmm
It's just about the exact same time/workflow
but undoing is on demand 100% useful, prompts for no reason are a waste
the player will get sick of the prompts
It'll only prompt for failed whatever the bonus was to, and you can always limit it further, so the prompt will in theory never be for no reason
you can just roll the damage on a missed attack, you can undo the saves
There is nothing that would do this, right?:
- Take the results of the roll
- roll something else
- Add 2 and 1 and send it to midi as a block
Yeah, the more i wrote, the less likely that sounded xD
You could make an issue in MidiQOL for tposney to take a look and it would be your bet bet actually to see if something's up or if there is a better way!
Sure, you can worldscript that, but kinda curious what you intend to do with step 4
Do a backflip and make a sandwich
yes but it would prompt way more often and save no time, causing no point to automating, yes it would be cool, but it wouldn't be efficient, which is the whole point of automation. arguably you'd be saying no a ton to the prompt to use the feature that does that.
You can do it. Add something like 1d4 to the rolled Attack roll? and check if that hits?
itd'be the same as the always prompt smite idea
the feature has limited uses
You can just do it automatically and subtract the uses
Oh, i wouldn't like it to be prompted every time, just a button to activate that
Like check the result of the attack and if it is within a range that 1d4 would make it to actually hit, prompt a dialog to add it and spend one charge
Teccam, how is this feature worded? Can the player see the roll result, before deciding?
what if its wasted on something you didn't care about, like a grapple check, or a medicine check, or a nature check, or a save against something thats about to die.
Do they know if they failed or succeeded in either a hit or a save?
its 2d4 bugbear
Yes
so wider range
You can click no to the Dialog, Not wasted
So roll result, but not success result?
So if I roll to attack, I get to see I hit a 17 and then decide if I want to add this feature, but I don't know if I hit before deciding?
its for all d20 rolls basically, thats gonna be alot of prompts in all turns as things target them and they target things
And I don't care about that one, i always tell them
Can you post the description of the ability? Or link me if you did
Starting at 1st level, divine power guards your destiny. If you fail a saving throw or miss with an attack roll, you can roll 2d4 and add it to the total, possibly changing the outcome. Once you use this feature, you can't use it again until you finish a short or long rest.
Definitely worldscript material then, if it's okay the player knows if a roll succeeded or not. Prompt them with a dialog that shows the roll that failed, tell them the Gods offer them a second chance, insert the secondary roll that you already rolled
EZ
Thing is I don't want it just for that ability, that ability is just an example. I'd like some universal way of changing a result into midi's workflow
Not even worldscript. Actor on Use and I probably have already shared one such for MidiQOL
Let me find it
With a failed saving throw? Isn't that prompted by the wrong actor?
The save is doable with a MidiQOL optional bonus flag on saves
and it can use the resource or whatever too
You click on it, if you fail.
For attacks, if its in range it can prompt the user to activate the ability
that was an example, not an ask for them. They just wanted to be able to retroactively change attacks to misses and saves from failures to successes in midi.
kinda how ready set roll or retroactive advantage did
(thats what i've been saying the whole time)
I'd like to see the saving throw fail thing, because that doesn't make sense to me unless the workflow is stalled and I wasn't aware the flags could do that.
Yeah, guys, thanks for the help but no need to mess that much if it's not possible/easy! I appreciate it, though
yeah I'd love to see a saving throw reaction pause cause the war magic wizard gets one that I can't figure out how to prompt
It's possible, but not on demand, you can incorporate it into feature(s). All assuming you full auto.
It prompts the user on fail. Do you want to roll the bonus? User does math. User decides click or no click ๐
its basically shield for saves
So it stalls the workflow for midi to not apply the failed save effects or what?
I genuinely would take a reaction save using that bugbear, my wizard has the war magic level 3 feature
When you use this feature, you can't cast spells other than cantrips until the end of your next turn.```
You need to click yes or no to go on
optional effect macro to push a reaction effect from DFreds.
The rest is again bonuses optional
no, that it.
It will prompt you if you fail a save. If you choose success, well you then succeeded /
I was really trying to figure out if there was a bug before raising an issue but at this point I think I'm pretty convinced something unintended is going on at the very least
It is a pretty old function to be honest.
its value was somewhat diminished with the introduction of damageBonusMacro
And applyTokenDamage which can damage respecting failed saves etc
ooh I get what you mean now
wait, I think leg save doesn't show you does it?
I don't think it shows the result\
so we'd have to do the math
Not sure if it respects the formula reveal settings from Midi
It shows the Roll no?
DSN does for you
I was wrong
Instead of success put +1d2638 ๐
thats a really large dice
how would I set the charges on it?
I do the dex save with adv reminder
would I have to put it on a resource on the player?
I can't reference the charges of an item?
Use the resources available to the player instead
oh wait duh
And yes you can
put this on the item duh
Pro tip. Read here: https://gitlab.com/tposney/midi-qol#optional-bonus-effects
๐
yeah so what would be the charges field in an item? If its on the feature, then wouldn't something like @item.uses be it?
how do I find the field that is the charges on the item?
oh, it would be `@itemuses.abilityname right?
Added additional option for optional.NAME.count ItemUses.ItemName, which will use the value of the uses field for the item name ItemName (which must be on the actor), it means you don't need to use a resources entry for these any more.
This might have not made its way in the readme ๐ค
you had me back in there trying to see where I missed that!
And also something I haven't tried... ```
flags.midi-qol.optional.Name.ac bonus to apply to AC of the target - prompted on the target's owner's client. (A bit like a reaction roll)
thats in there at the bottom
yeah just to point it out.
can you tell me the purpose of NAME in that?
does it need to match something?
or can I make it up?
You can have multiple ones.
It bundles the ones with the same NAME together
I am using the same NAME to all of them
k thanks setting up arcane reflection with it now
Not a specific reason to change it if you dont need something in particular
@item.uses.value
what if theres a space in the features name?
I wonder if badgers suggestion works?
Did I misunderstand what you meant when you say duplicate? it seems like using foundry's duplicate() util method doesn't return a data structure usable by completeItemUse ( deepCopy doesn't even work on Item5e apparently)
ItemUses."Arcane Deflection" or I think it should be ok with ItemUses.Arcane Deflection. tposney usually accounts for these things
if you need the charges on the rolled item, yes, that is how you get it
the aes are on the actual item, so I wonder if dae has the roll data of the item or whatever?
item.toObject()
I feel like your method bugbear, is for when its not on the item its referencing?
No idea! Try it as I haven't for a long time and I tend to forget ๐
bah why am I bothering the two of you, I can just set it up both ways and see which one works so you don't have to worry lol
Arcane Deflection adds 2 ac AND 4 saving throw, so could I put the save.all AND the new ac thing in the same item?
Yeah you will need more than that. I don't have time now but an example of something similar ```js
//const spells = game.packs.get("world.spells-mine"); //I put a spell named "Grease At Will" in a compendium named "Spells mine"
//const GreaseId = (await spells.getIndex()).find(i => i.name === "Grease At Will")._id;
//const Grease = (await spells.getDocument(GreaseId)).toObject();
//From here on its what you need
const pseudoNewItem = oldItem.toObject();
pseudoNewItem.data.target = { "type": "radius", "units": "ft", "value": 60 };
pseudoNewItem.data.range = { "value": "", "long": "", "units": 'self'};
pseudoNewItem.data.preparation = { "mode": "innate", "prepared": "true" };
pseudoNewItem.data.save = { "ability": "dex", "dc": ${actor.getRollData().attributes.spelldc}, "scaling":"spell" }
const ownedItem = new CONFIG.Item.documentClass(pseudoNewItem, { parent: actor });
await MidiQOL.completeItemRoll(ownedItem, {configureDialog: false});
You need to "create" the ephemeral Item on the actor and roll that
I think that it should differentiate based on workflow type or someting
uh oh, I think ac is v10 only
but thats ok I can make another item that is just a reaction
oh nm I spelled it wrong thats why dae wasn't picking it up
wow holy shit, genius idea, you could do things like cutting words this way, set it as an aura that affects enemies within X distance
I think theres even a setting in active auras for ignore self
Okay yeah Thanks that worked. Is there cleanup necessary for the item "created"?
problem would be expending the resource though
call a macro to deal with that flags.midi-qol.optional.Name.onUse
that's the good thing. It's an ephemeral one so no need there isn't something to clean up afaik !
Hey you know what fine print I forgot to notice?
Requires auto fast forward
bugbear's default state of mind
new Item.implementation(itemData, {parent: actor, temporary: true}) is the officially supported method for creating ephemeral items.
@undone sorrel ๐
what are the differences between the methods?
One is supported, one is idk
๐คท CONFIG.Item.documentClass in console links to the Item5e class, same as new Item.implementation
well it uh worked I guess so thanks ๐
Just a bit of a roundabout then? It should need temporary: true then as well
wait what am I on about
shit ain't async
okay well the macro FINALLY works, thanks for all your help bugbear
hopefully Crymic will answer so I'll know whether the DamageOnly thing is actually an issue that needs raising
Honestly, if you think it's an issue, throw it up as an issue. Worst case is you get told no. :p
well fun fact, you can make the item client wide available if you do something like ```js
game.ownedItem = new Item.implementation(itemData, { parent: token.actor });
until a reload ๐
just gonna keep that in mind for... shenanigans
you never know when you need a semi ephemeral Item ๐คท
No need to add it as an update to an Actor
I am cheap like that.
I have the perfect meme reply but it isn't fit for this server.
Anyone know how much I can shove into macro.updateActor? Wondering if I can set/update a flag through it or if I have to run a macro separately. edit: Hmm, think it only accepts strings, booleans and numbers, so not applicable for me.
@vast bane about our previous conversation on the possibility to edit any roll. I have an idea for a hypothetic module and I'd like you to check if it's theoretically possible (not that i am in any power to implement it, just for curiosity sake):
- A module that has a button or a right click - "edit roll" function. It would do the following:
- Take said roll result as a single value (no dice or 8+3+5 shenanigans).
- Prompt whoever activated it to write the modifier.
- Create an item in the actor with an effect that overrides his next roll.
- Roll again whatever was rolled in the first place (to reset midi's workflow).
- Delete the item/end the effect
Effect Macro on Effect creation should be an easy way out
Dice Tray+DF manual rolls, would even be compatible with midi
Hell could even see if df manual rolls has a macro api to trigger it on a workflow or something
Yeah sounds like you are just describing DF manual rolls ๐
then it'd be easier to dice tray a regular roll
yeah but if he doesn't have actual dice, dice tray is a nice trick to use to prescreen your roll for success/failure
It does not, looked into that before, but it seems to flag the rolls, so theoretically you just have to add those flags to the roll object
(And have Manual Rolls installed)
yeah I have a manual roller so I have it too
It also has settings to let the DM fudge without being caught
What is the mechanic thats being implemented here?
he wants better rolls+midi
my suggestion would be to put your word in over at ready set roll to do compatibility checks
Oh boy.. At that point might as well just update to V10 and do RSR + Midi ๐
Btw what feature from BR/RSR is it that they want?
retroactively change a roll, or earlier they were talking about prompting before the rolls accepted to do various things like add a dice to it, fudge it, change to advantage/disadvantage
Sometimes you also just have to accept that there is a fundamental difference between online and offline play, and some things are just not possible at the same time, e.g. automation and retroactive changing stuff is just inherently incompatible
You take what you throw is generally the way to play
Feck, my plan hath come undone, CombatBooster's recent actions updates itself after both Midi and Effect Macro does their thing, so it overwrites the array.
I know, but i like to know how possible/crazy certain convenient things would be
Do you want to add something in the front in the recent actions?
I might do that eventually
Yup, the closest I've come is having an ItemMacro run by the item, Effect Macro triggers a step too soon if you do on effect creation.
if (args[0] == "on") {
const casterActor = game.actors.get(args[1].actorId);
const newItem = casterActor.items.getName("Vitalize").id;
let recentItems = casterActor.getFlag("combatbooster","recentItems")
recentItems = [newItem].concat(recentItems);
await casterActor.setFlag("combatbooster","recentItems",recentItems);
}```
But this happens during the item's roll and right after the roll, CombatBooster updates and instead of the newly created item being the first in the array, it is overwritten by an array with the original item, if that makes sense.
How about using End of Combat Turn for EM to fire?
its updating by pulling the proto actors info
It's too late, this feature is immediate use.
combat boosters history is all proto actors actions, thats why if you rename the ability on the canvas actor it fails to work anymore with combat booster
are you testing all this on a linked actor?
These are linked actors. It's Aura of Vitality. You cast a spell and get a new bonus action to heal a target.
I have the original spell that handles concentration and spell slot consumption, create a new item with a bonus action to heal a target.
ItemMacro that Hook.once MidiRollComplete?
on phone so typing is a mess
That could definitely do, let me check
yeah I dunno why you are trying to do it at the start
you want it to create the history entry after the item is created, not for the first time its launched
you could also create a fake positive action use
... it is after the item is created Moto.
because combat booster just matches the name\
can you roll an item and never show any of it in chat?
you could just create a fake item to generate the history
then the workflow timing doesn't matter
combatbooster looks for the item on the actor that matches the name
it doesn't, it's an array of ids
so after the spell is cast to create the item, launch a fake item silently to generate the flag
It's still slightly before CombatBooster does it's thingโข, I'll go look at some debug hooks and else pester ripper on that one, great suggestion tho.
You'll need to duplicate first and push in the new data
Apparently the issue is actually that CombatBooster looks at the chat message created by the item and then straight up waits 2 seconds before updating. In theory I could just hook onto the same and then wait 3 seconds but uhm... I will get back to that. >_>
Hooks.on("createChatMessage", function (msg) {
try{
if (
!game.user.isGM ||
!msg.speaker.actor ||
!game.settings.get("combatbooster", "enableHud")
)
return;
const actor = game.actors.get(msg.speaker.actor);
const messageContent = $(msg.content);
if(!messageContent.length)return;
const itemId = messageContent[0].dataset?.itemId;
if (!itemId) return;
let oldItemsIds =
actor.getFlag(COMBAT_BOOSTER_MODULE_NAME, "recentItems") ?? [];
let newItemsIds = [itemId];
for (let itemIdo of oldItemsIds) {
if (itemIdo !== itemId) {
newItemsIds.push(itemIdo);
}
}
setTimeout(() => {
actor.setFlag(COMBAT_BOOSTER_MODULE_NAME, "recentItems", newItemsIds);
}, 2000)
}catch(e){}
});```
thanks to ripper who has been very cooperative on their discord
hard coded update delays is quite the wrench, lolol
lol that is actually my doing, that was a bug fix lol I reported that and he said he'd add a 2 second delay
I'm getting into race conditions with hard coded delays and I think the wet I feel on my face is from tears
there was a bug with argon and booster where it would not have the modifiers from the canvas actor in time for the first roll
hard coding delays will always break, eventually
its kinda a janky idea we're doing anyway, I don't think it needs to be perfect
we just want the combat booster history to update with an item that hasn't actually happened yet
I strive to make coding the most perfect thing in my life, because everything else in it is a lost cause
you can filter for that
Doesn't setting a flag trigger a hook? In the same vein of ^filtering for that, I guess I could just hook onto that
if the module itself is hardcoding a delay...all bets are off, basically
well if it runs twice
unless its also being responsible and firing a hook when it completes
why do you need to play with the hook?
technically DAE runs twice also
why not just run an item called the same as the future created item?
The hard coded delay means I need to find a way around it or whatever I do is meaningless, my shit's too fast
like flat out make the whole fake item in the item macro of aura of vitality
Setting a flag is a Document update
have it fire befoire the item rolls, combat booster reads the ability being used, puts it in the history, then casting aura of vitality happens and theres a history entry behind it for the new created aura of vitality heal
I would make a temporary item if I want it to do other functons, or you can use completeitemroll
hes gonna use the new dae createitem function for aura of vitality
what function is that?
im saying this would be nearly trivial IF combatbooster also fired a hook when it was about to, or just finished updating the history
that way you dont care about the delay, just a single Hooks.once('combatbooster.preHistoryUpdate', fn) or something
I agree, I posted an issue on ripper's githubbers.
Meanwhile my thinking is shot because stray updateActors can finish before combatbooster, so I need to hook on, filter it and wait for recent actions flag to be updated, hook off and oh boy that sounds like a recipe for disaster if anything goes awry.
Can't you just use the same item, and slap in a big fat if statement
I just don't understand why you guys are fiddlin with all that stuff. If you cast a spell called bob, delete it, and then rename wish to bob, and try to cast the history entry for bob, it will cast wish
So just prefire the aura of vitality in the history before you cast aura of vitality and bam, its probably 2nd in line then from the fake entry beforehand
If you remove an item, it will remove it from the recent actions. It's based on ids.
Item ids, not names.
hmmm are you on v10?
yes
in v9 I can do that /shrug
infact I've even said so much in weird conversations about warpgate macros with booster
and at the time zhell and badger said booster behaved weirdly how it was using the proto actors names and trying to match the canvas actor
isn't it a concentration spell?
yeppers
and you can put macros in your items, right?
yeah booster has a different behavior for linked actors vs unlinked, thats a bummer
Midi SRD v10 compatible version: https://github.com/thatlonelybugbear/midi-srd/releases/download/10.0.2/module.json
Send me messages with any issues you find and I will try to fix
@vast bane The Grappling Strike we got working earlier works for me as the GM, but not the player, any thoughts?
This is the error player gets btw:
Macros.js:242 Advanced Macros | TypeError: Cannot read properties of undefined (reading 'tokenId')
at eval (eval at executeScript (Macros.js:44:15), <anonymous>:5:44)
at Macro.eval (eval at executeScript (Macros.js:44:15), <anonymous>:32:5)
at Macro.executeScript (Macros.js:46:15)
at ๐Macro.prototype._executeScript#0 (libWrapper-wrapper.js:187:52)
at Macro.renderMacro [as renderContent] (Macros.js:218:16)
at Macro.executeMacro (Macros.js:239:23)
at ๐Macro.prototype.execute#0 (libWrapper-wrapper.js:187:52)
at eval (eval at Item._executeScript (helper.js:82:18), <anonymous>:4:48)
at Macro.eval (eval at Item._executeScript (helper.js:82:18), <anonymous>:5:9)
at Item._executeScript (helper.js:88:12)
at Item.executeMacro (helper.js:60:23)
at HTMLDivElement.<anonymous> (helper.js:170:20)
at HTMLDivElement.dispatch (jquery.min.js:2:43064)
at y.handle (jquery.min.js:2:41048)
Does "Recharging" abillites (like Dragon's Breath) should roll automaticlly on a turn start? If not - is there a way to enable that? In a big fight there is no way for me to remember to click the recharge button :/
Simbul's Creature Aide is a module that does that for you on v10, v9 is dnd5ehelpers
great, thank you
Is there a way to automate damage when a creature hits another creature? Say for example a PC hits a creature with the Heated body feature and is supposed to take a certain amount of damage?
<#1010273821401555087 message>
Create a script macro, executed as GM on your hotbar, or macro folder and paste the macro you have worked out with Moto.
Then in the ItemMacro of the Item, paste the one in the link. Does it make sense?
<#1010273821401555087 message>
Same principle as in this Fire Shield spell (need to test it some more, cause of all the different settings people can have when using MidiQOL).
Not that easy to follow, but take a look if you are hooked with macros
I can help more after the weekend
i believe i have done all that, it appears the item macro is not passing the args when the player clicks the item. Also DANG sorry to hear about your fibre.
Ah now it's all good. Thanks though!
You need to use it as a Midi onUse macro
The one line macro
Change the macro name in the item macro to match the big ones's
Not sure i understand, you mean like this:?
Do you have an icon for Item macro on the title bar of the item?
Alright and the onUse call on the Item should be ItemMacro | After Active effects
Yup, It works for me as the GM, not for the player.
Here's the macro I found that works for your newly macro.createItem'd items getting thrown into you recent actions with Combat Booster. Add it as an ItemMacro or macro.execute to be run by a secondary effect to your macro.createItem effect. If I make an SRD ability, I'll throw it in as an example later.
if (args[0] == "on") {
const casterActor = await game.actors.get(args[1].actorId);
// Improvement: get the actual item ID
// for the time being, put in the name of the newly created item
const newItem = await casterActor.items.getName("Vitalize").id;
// pushing the newly created item into the first of the recent actions in CombatBooster for ease of access
// CombatBooster does not have a specific hook, so we use updateActor and filter accordingly.
const combatboosterHook = Hooks.on("updateActor", async (actor, changes) => {
if (changes.flags?.combatbooster && actor == casterActor) {
Hooks.off("updateActor", combatboosterHook);
let recentItems = await casterActor.getFlag("combatbooster", "recentItems")
recentItems = [newItem].concat(recentItems);
await casterActor.setFlag("combatbooster", "recentItems", recentItems)
}
});
}```
If anyone got a recommendation of a failsafe in case CombatBooster fails and never triggers, so I can `Hooks.off` *eventually*, I'm all for adding it, I couldn't think of one.
Do you have the GrapplingStrikePlauer macro shared with the player?
I made him the owner of it
Do not give him ownership
Only the GM cause otherwise the Execute as GM doesnt work
Meaning do not share it. Just keep it for the GM
Observer?
Oh changing it back
So yeah, no sharing with player, everything set up with ItemMacro | After active effects.
same syntax error
Item macro does not pass the arg, or it gets stopped by advanced macros
Go to Item Macro settings
yup?
Uncheck sheet hooks if checked
Hooks once combatUpdate to a new turn?
And then hooks off the updateActor?
That's not a bad idea, thanks.
Do you have a token on the scene? Of the attacker?
Yes
doing it from the sheet as a pre game test
player is owner of that actor and linked token
or a.... giggles 30 second delay? or so?
could also consider using Hooks.once and readding yourself if the condition is NOT met
dont have to track the hook ID that way (except...yea, for forcefully killing it)
Or of ideas right now.
args[0] not being defined
ItemMacro sheet hooks off.
Fails to transfer them properly ๐ค
Seems to be the case.
Yeah I cannot think of something right now
no worries, thanks for trying! ๐
What do the item details look like?
nope V10
Is ASE v10?
Nope?
I am wondering if it breaks something
And make sure to update all modules and DND system, cause latest midi and DAE need that
Error?
like i said, you tried, thanks for the help!
no error atm.
just fails to pass
which is weird.
tfw you giggle and then realize your players could use the ability out of combat and a hardcoded delay in some way suddenly doesn't sound so crazy <_>
Can you put a console.log(args) as the first line of both macros?
๐ค
Fixed it
i hate it so much
I did not have this checked....
works fine now SMH
Interesting that Monks did not warn me that a player was trying to do something that was denied.
but hey, keep away that console spam right?
Monk did not see Bugbear coming
I don't suppose there's a hidden hotkey for the apply button that comes with the midi damage card?
Else I'll try and tinker a macro that will allow me to..
Like, an Apply All? We just have it auto apply... the undo button is still there if you need it
We don't auto apply; the players understand this for damage, but always seem confused about healing not auto applying. A strange cognitive dissonance that repeats itself weekly at this point, so I thought we could move to me having apply buttons for that kind of thing.
Oh FFS! Probably you don't even need the workaround if that was the case!
You could just quickly try with the ItemMacro back in its place
Everything works as it was originally set
(note to self to remember that)
Monk's did not tell me about the setting block, but i get 30k deprecation warnings every time I load a scene.
Consoles are fun.
I blame @vast bane for this <#1010273821401555087 message>
haha
Got that long reach you know!
Speaking of which, I'm using a setup that involves a touch screen table...so I want to hide VAE on that user only so it doesn't appear in the middle of the large screen. Any way to do that?
I generally abhor client-side settings. You can just nuke it through the html I suppose.
I turned that on when it first was added and forgot about it. Up until that point I had been modifying Monks API to allow for players to request rolls (somewhat ๐)
Is anyone else seeing an interaction between Dfreds Convenient Effects and Active Token Effects where adding the Equipment Effects to a token resizes the token each time you click them? Could be something simple (new to Foundry) but I know ATE just got updated and didnt know if anyone else has run into this.
Some screenshots would be helpful to better understand the issue, as it doesn't sound MidiQOL specific
@violet meadow didn't you have a code snippet to filter game messages for the last midi damage card? If so, can I steal that from somewhere?
Crap I thought I was in the Module troubleshooting discussion...not the MidiQOL channel my bad
well almost nowadays ๐
I am sure there should be a better way <#1010273821401555087 message>
Thanks!
v9 v10 conversion etc etc
Cause if you run that snippet in v10 you get only ~100 deprecation warnings ๐
dev tools to the resque
MCDM minion rule is dope "Every minion has the Minion trait, which affects the creature
in the following ways:
โข If the minion takes any damage from an attack or as
the result of a failed saving throw, their hit points are
reduced to 0.
โข If the minion takes damage from another effect, they die
if the damage equals or exceeds their hit point maximum,
otherwise they take no damage" - but writing this defeated me ๐ The first part is manageable, but the second I wouldn't even know where to start ๐
The second part needs a flags.dae.onUpdateSource targeting hp data. Take a look at the DAE readme.
You create the effect with this DAE,~~ transfer to Actor on Item equip~~ and it "monitors" hp changes, using a filter for: filter: 'data.attributes.hp.value' or 'system.attributes.hp.value'
Then it can trigger a macro, inserting logic as to when the Minion drops to 0 HP or regaining the lost HP essentially canceling the damage.
so if his hp goes to 0 he doesn't heal - ok yeah, thats the start
(Why not just use a prehook?)
Because its there ๐
and also probably doesn't cut it upon rereading. Need to check for incoming typoe
Why not just look at the update in the preUpdateActor hook, and if it would not set hp to 0 or lower, remove it from the update?
(and do nothing if the actor does not have the Minion trait)
The macro will be running in the preUpdateActor call anyways, so you will need to dig through the available data
But it saves you from some filtering at least and the need to actually create the Hook (if it works as intended) ๐คท
hmm can't find flags.dae.onUpdateSource in DAE readme
https://gitlab.com/tposney/dae/-/tree/v10#supported-fields-for-dnd5e in the special flags category
ok I see it - thx
the macro isn't set to execute as GM or you don't have advanced macros or there wasn't a GM logged in.
you were suppose to make a second world macro that was execute as GM, didn't I give that to you as an export so that shouldn't be an issue unless you don't have advanced macros.
Is the world macro set to players having observer permission?
You will need to create the feature with the flags.dae.onUpdateSource | CUSTOM | Label, ItemMacro, system.attributes.hp.value and ROLL the item once.
Then the effect will be created on the source and during an HP update, you can find what you need.
In the damageDetail you can check for damageType and make sure it is not types you dont want.
These are all available as args[args.length-1] (or args.at(-1) ๐ )
ok i think I get it - I'll try to tinker with it tommorow
prety sure that doiesn't matter for us midi users
but hisissue was actually that he never gave players the setting to use mtb
Still does cause it cancels the execute as GM afaik. That was one of the issues, but yeah in the end it all boiled down to the one setting from MTB.
Did you have it on when the macro was not working for you Moto?
no I was totally all set, the problem was execute as GM wouldn't work cause of no args swap over
in the original form
once you made it a two macro solution it worked for me perfectly
Yeah, they are using the one macro version after selecting the option in MTB, that's why I was asking you.
But hey, if it works ๐คท
0_o I gave them the two macro setup lol
literally, two items
@abilities.str.mod Does not seem to work. I do not see any changes in the docs. Am I just crazy?
the item that was a feature had the gm args macro in it lol
Does not work where?
in a damage formula
on an item? that seems to core to be midi lol
Yep. Core.
can you show us it with a snippet?
sizeRoll(1, 8, @size, 0) + @abilities.str.mod[Strength] = 1d8+0 for a 12 strength
... what is that?
well thats not wise to use in midi
this is like the back of a cereal box, find all the bad things
OOPs -- wrong forum
What... what is a sizeRoll
How did I get here?
I am panicking. What is a sizeRoll?!
pf2e maybe?
All end up in #1010273821401555087
We welcome all, blessed be the way of tposney
now I need to know
Ah. pf1e
but also, sizeroll aside, its naughty to do a non damage flavor in damage formulas in midi qol
ah ๐ฆ
I have eveything else off ๐
Are we having a contest of whose is smaller?
I have other systems on cause my side project is converting battletech to a d20 system to work inside dnd5e so I need to ask around
I just don't know how I'm gonna be able to do multiple bars for mechs in dnd5e
cause in that game each part of a mech has hps
Bar Brawl and make each part an item with uses on it for "health"?
(if you need to see them easily)
Identical to my muted channels too. No wonder it's always us 3 here.
yeah thats my fallback, but it sgonna be a pain to use with midi if I wanna try to do it
do they have resistance to moto moto?
nobody can resist a moto moto
I think a few might have immunity to it at this point
but isn't the point of why you don't, because it will pierce immunities?
also, atleast in v9, it breaks if you put two flavors back to back
no roll no error
yeah it will probably break it, but if you add it in a world script, then someone could resist moto moto
does a custom resistance not work?
isn't the custom damage types broken in midi?
I know custom conditions are or wrere, well are in v9, likely fixable in v10
Not as far as I know, seems to respect them fine
cause I had hoped I could create a uniformed stat drain immunity ability but nope, monsters can still stat drain
Ah this was for conditions in the end:<#1010273821401555087 message>
potayto, potahto ๐
oh hey, idea
if they are immune to a condition called say Stat Drain. Put a blank Stat Drain on them that doesn't stack permenantly? Right?
That...seems to simple, but why wouldn't that work lol?
Anyway, there seems to be an issue with custom resistances, but won't test it now anymore and it might be user error.
Got to prep a bit for the weekend session and go to sleep. ๐
Gith invade Forgotten Realms and next step a bit of spelljammer
yeah I need to scrub my session for tomorrow of the mess from last week but most my prep is all set cause I overprep anyway
Anyone know why my monks token bar initiative requests are no longer normal? It fast forwards and... I dunno even what the hell this is:
You got tiebreakers on?
yeah but the macro is this: game.MonksTokenBar.requestRoll([],{request:'misc:init', silent:false, fastForward:false, rollMode:'roll'}) Its fast forwarding even though this is set to false AND it even does it with only MTB enabled, plus even when midi is on, I don't fast forward.
Also @vast bane sanity check cause I think the TokenBar shove macro works as one, without the execute as GM part.
Do you have both selected?!
yep and I had them well before you remade it
my macro failed long ago cause the player did not have permissions to apply an effect on an unowned token, thats why you remade it, so the gm had the args
the monks roll was always functional, it was the dfreds line that failed
๐คท
No reason anymore. With the game.dfreds.effectInterface.addEffect() is fine
are you sure that guy was not using the two item method? the feature I gave him had the one line args in the item macro, so he was probably always using it lol
and never knew he had it
I can't figure out what has changed that would cause MTB's intiatives to all fast forward this is so annoying
That snippet works fine for me (I lied, still here)
do you get prompted for advantage/normal/disavdantage?
fast forward ๐คท
yeah thats the problem for me, I have fast forward off with everything, and its fast forwarding that roll, even when just mtb is enabled, its JUST initiative that fast forwards
it never did this before cause I have a player with an advantage reminder for intiiative rolls
its also not respecting overrides in core or in midi, I can't hold alt or ctrl down to change the roll
something is screwy with my server, I logged in a player and requested init from them and its refusing to resolve:
yes, this is just MTB, so no world scripts
I'm doing a full reboot of the local machine now to see if that fixes it
Have you considered just deleting everything and reinstalling
the old issue was core, not modules
I've already done that, but I carry over the world
Its a v9/v10 cache issue another reason not to fiddle with v10 I guess
That's not a thing. ๐
I fixed this, it was a monks tokenbar setting (allow players to request roll)
I'm guessing this is Midi related - Is there an activation condition kind of thing I can set so that a weapon crits on a 19 if the target is undead?
not by default - pretty sure you'll have to rely on macros to implement this in a automated fashion. The divine smite might macro is likely a good starting point (in midi sample items). Your best bet without using macros is to manually add the increased crit range effect to character (flags.dnd5e.weaponCriticalThreshold) when fighting undead (for example - by having two versions of the weapon )
I'd check to see if theres a champion feature in midi srd for it
While wearing this breastplate, you can use an action on your turn to channel the armor's magic and cause it emit a flash of blinding, radiant light. All other creatures within 10 feet of you are forced to make a DC 14 Constitution saving throw when you do. On a failure, a creature is blinded until the end of its next turn. Undead creatures have disadvantage on the saving throw, and take 2d8 radiant damage on a failure. Once you use this feature, you can't use it again until the following dawn.
Is there a way via ItemMacro I can detect whether or not the target of the saving throw is undead, and thus impose the disadvantage and extra radiant damage upon them?
if you apply damage to each separately with DamageOnlyWorkflow i have an idea how it could work, but that is highly inefficient i guess
pretty sure the Midi Big Brains here have a better idea ๐
I'm a tiny brain but I have to believe there are examples in midi srd or sample items for this stuff
or similar things
No help sorry but I do love the idea of skeletons stumbling around blinded
I did manage to find this from a Sunblade. Perhaps I could cannibalize this code somehow.
if (!["mwak"].includes(args[0].item.data.actionType)) return {}; // weapon attack
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.data.data.details?.race ?? null
let npc = target.actor.data.data.details.type?.value ?? null
const isType = ["undead"].includes(PC ? PC : npc || "");
if (!isType) return {};
const diceMult = args[0].isCritical ? '1d8 + ': '1d';
const damageRoll = await (new Roll(`${diceMult}8`)).roll();
new MidiQOL.DamageOnlyWorkflow(actor, token, damageRoll.total,"Radiant", [target], damageRoll, {flavor: "Extra damage against undead (Radiant)", damageList: args[0].damageList, itemCardId: args[0].itemCardId});
// if (game.dice3d) await game.dice3d.showForRoll(damageRoll);```
Though that's for melee weapon attacks, not saves.
babonus can do it. ๐คท
I don't know how to give undead disadvantage - but I have something that only deals damage to undead that failed the save
if (!["save"].includes(args[0].item.data.actionType)) return {};
actor = await fromUuid(args[0].actorUuid);
if(!actor) return {};
for(let i=0;i < args[0].failedSaveUuids.length;i++)
{
let target = await fromUuid(args[0].failedSaveUuids[i]);
let PC = target.actor.data.data.details?.race ?? null;
let npc = target.actor.data.data.details.type?.value ?? null;
let isUndead = ["undead"].includes(PC ? PC : npc || "");
if (isUndead)
{
const damageRoll = await (new Roll(`2d8`)).roll();
new MidiQOL.DamageOnlyWorkflow(actor, token, damageRoll.total,"Radiant", [target], damageRoll, {flavor: "Extra damage against undead (Radiant)", damageList: args[0].damageList, itemCardId: args[0].itemCardId});
}
}
Unfortunately, this is using the save results to apply damage, you'll need someone more familiar with the midi API to automate granting undead disadvantage.
Nice!
Thank you!
If you're using dae you can have the macro apply an effect that gives disadvantage right before the save happens with a special duration of isSave
Is there anything babonus can't do? ๐๏ธ
distribute premades is my first guess
is the ui too hard to use or
I don't use the module, but the point is that premades lets the community share work so that we're not all starting from scratch.
also I learned more from picking apart midi srd/sample items than the readme
it is as shareable as any other embedded document because it is just flags embedded in documents
and it has a UI and bonuses can be edited as much as you like
There is nothing to 'learn', it's flooded with tooltips and descriptions
Well if babonus can do what they want, set it up for them and share the item?
Hi! if you are available, i'm trying to work out how to set vortex warp. I set the item macro but i don't know how to proceed or configure the rest (and I'd also like auto fail friendly), could you help me please?
I bet thats another spell that could benefit from the new createitem key
have it grant a temporary use item that is a misty step clone
would make automated animations simpler too
i actually tried to do that on my own but failed miserably xD
where did you fail
step 1, i guess
what was step 1?
this
Step 1 should be creating the temporary item in the sidebar that is a clone of misty step as a feature instead of a spell
it just created a temporary effect on the targed that did nothing
that key is definitely not right
wait I dunno, I'm in v9 mode today, does the drag and drop really not do a real link?
did you literally drag the item from the side bar onto that effect value field, or did you click the uuid button?
but thats not step 1
step 1 is making the misty step clone as a feature instead of a spell
and that is very easy, make a feature called Misty Step with Automated Animations installed
put it in the sidebar(though you really should put it in a compendium of createitem stuff). drag the feature onto the above effect value window(clear that bogus one out)
the drag and drop was item.thoseNumbers&letters
i tried both ways
ok whats the item?
cause you can very easily just let automated animations handle it if you have that installed, by making a blank ass feature called "Misty Step"
now the target just has the effect
what is the item you are putting in the effect value
you are on like step 20 and haven't resolved step 1 with me yet
a misty step which activates automated animations
ok, thats ok cause its probably tposney's version
personally I would not use a spell though, cause the other dude won't have spell slots and the resource popout is pointless
but lets get proof of concept handled
show me the effect vaalue of that effect in the image you just posted on the other actor
edit that effect, show me effect tab
it has no item macro or anything, i imported it from somewhere i don't remember, but it just works, because it targets a space or something like that
Step 1: Make Misty Step or find an Automated Misty Step
Step 2: Make an effect on vortex warp that uses createitem and drag step 1 to the effect value field(do not just plug in a uuid thats wrong DRAG AND DROP)
Step 3: Confirm the actor you are casting the spell on does not have vortext warp on them still from previous failures as affects do not stack
Step 4: With an actor target who does not have a vortex warp effect on them, target them and cast the spell on them and auto fail it.
Step 5: If Step 1 was a spell, find the spell on the new actor, if it is a feature, find the feature and roll it.
yeah, i can change that, i can just copy the same things but just as a feature instead, i can work on that later
click details of this please
and show me the effect value
in the effect tab
I'm pretty sure you are screwing up step 2 above
showing the effect value of the casted spell on the target will confirm this
that's step 2
i imported a new misty step because the one before was modified
that actor should have a misty step in their spellbook tab now
ok imported sounds really bad, thats probably the cause of your problems
you already have atleast 1 perfectly automated misty step in midi sample items
oh, true, it has it
do you have automated animations?
i don't
thats ok, automated animations is a better method
yup
this misty step works perfectly
it does its animation and everything
it doesn't have an item macro
just create a generic ass self/self feature called Misty Step, pop it in a compendium somewhere so it doesn't get deleted and then drag it to the sheet(probably give it a fancy icon)
actually call it misty step2 or Vortex Warp2
then clone the automatic recognitition entry for misty step and rename the clone to that
cause I assume vortex warp has a different range finder than misty step
self/self? doesn't it have to target a space?
importers man...I'm tellin ya they totally screw up automation man
yup
but that misty step works
100% of your misty step is handled by automated animations, its the only animation with automation in it in aa
You could create a loot item called Misty Step and it would work ๐
i don't know how to do that
the point of self/self in the fake misty step, is so that the user doesn't need a target to cast the spell
well I don't think I can help you with this step because v10 AA looks waaaay different than v9
module settings>automated animations>auto recog button>presets tab>misty step
the ui looks different in v10 for aa but I'm sure the buttons there somewhere
Its also worth pointing out that a macro guru could probably do this with an item macro much easier and without the added step of firing a button on the other actor
this is just how I'd do it without bothering folks to write macros
found it, done that
what sthe new vortex warp entry caled
cause the name of your temp item needs to match it perfectly
also when you duplicate it, there should be a pretty obvious setting for the range
change the duplicated new auto recog to whatever vortex warp is cool with
k now make a feature called that item, make sure the feature is set to 0 action or 1 special, and then set its target/range to self/self
probably give it vortex warps icon
issue is that vortex warp is 90 ft from the caster, not the creature
then store it somewhere that wont get it deleted by accident like a compendium
(but let's ignore that by now)
and once its in the stored location, drag it to the effecdt value where misty step was dragged
I don't think that range finder issue matters
its too niche to matter when it would
yup, now it works! thanks!
though I might suggest setting it to 180 instead of 90 then since the range isn't right anway, that way the target can go the full radius of 180 around the caster
thats the genius of this idea though, you don't have to redo it all, just edit the auto animation entry
yeah, it's a good idea, thanks for it
but it still has its issues
oh wait that might be bad...we need a smart person
idk if those are solved by that macro
I'll ask in dnd5e
there is a chance that a 180 aura would fail to animate if the maps dimensions are smaller than 180, so you may have to keep it down to 90
its a v9 limitation not sure if its still in v10
you should resize it based on canvas.scene.data.grid or canvas.scene.grid
I don't think we have access to what automated animations is doing with the preset teleport magic
I compare it then add a -3 if it's too large
it's not having issues though
yeah which is fine, v9 can't even createitem so it won't be an issue if anyone searches and follows you with vortex warp in v9
I'm just hoping that the macro LukasPrism found solves all of this. If not, your version is good enough
you also want that vortex warp ae to end after like 1 turn or round or 6 seconds
Nevermind - the token I was targeting no longer had an actor in the world...
this one better
make sure that feature is an X action and not X special then
it's set to 1 None, and it still works
so the ae ends when it uses the feature?
oh you know what, you could have also made it an expendable lol and destroy on consume
yup
what would be the activation condition for this? If the target takes any of the cold damage, the target must succeed on a DC 15 Constitution saving throw or have disadvantage on its attack rolls until the end of its next turn.
currently set up like this:
maybe if target doesn't have cold immunity?
Is Ready Set Roll wholly incompatible with Midi or is there some settings I can disable with Midi to make it work well with each other?
none of the other rolling modules work with Midi.. pick one and go with it ๐
If you want RSR , use it, and not Midi.. if you want automation, use Midi (and nothing else)
this would just be a simple check after postActiveEffects see if the targets hp changed. the damangeList in the workflow tells you how much of a different things changed.
That's a shame. So many non-rolling things that work well with Midi(Prompting Rolls with Monks, Requiring Targets, Showing Hit or miss among others). But it handles rolling so awkwardly/badly when compared to BR/RSR.
well, i think it's geared toward those creatures with cold immunity. They'll take the slashing damage, but not the cold damage.
and if they don't take the cold damage, they don't have to make the save
it provides both damage types
right.
so if it's 0 then just don't have it goto the next stage
There's a reason Better Rolls died for 5e, because no one wanted to deal with the awkward way it handled rolls ๐
so, just wondering how to structure it so it if there is no cold damage, no saving throw ... etc.
you'd just write a loop which checks each target's damageList
can do it in either in a for or reduce
hm.
also, for the midi regeneration item, how would you halt it for that turn if the creature has, say, taken fire damage?
guess what you could do... is have DAE create the regen effect at the end of turn. Have the effect have a times up ending condition if taking fire damage
so then it removes the effect when taking damage, then end of the turn they recreate it
you'll need to make sure it checks if it already exists prior to applying it, so you don't end up with dupes
Ah I just tested it. It queries at tye start of the turn. So if he took fire damage Iโll just say no thanks to the regen.
5e helpers adds the dialog
@river urchin How'd you get on? My setup is very simple, most important thing is just calling the ItemMacro at the bottom. I also added the auto fail friendly at the bottom of the decription (you don't need the brackets)
This is the item macro I'm using (if you don't have JB2A patreon you'll need to swap some of the file paths to anims you do have) #dnd5e message
Actually, does anyone know if there's a way you can put a scaling formula in the range? ๐ค I'm guessing not
I'm fine with doing that manually with Rangefinder anyway
It it possible to trigger a macro via Midi-Qol (dae) when an actor with a specific effect is damaged?
I know I can use flags.dae.onUpdateTarget but the problem is - I need this as a passive skill, and for this flag to work I would need to apply an effect every time manually
Double active effect can pull this off
Secondary effect has the special end. The primary effect detect when the secondary effect ends and can remake it
great - thx
I've done it so the first effect end when the token is added to a combat - and when that effect end it fires the abillity that adds the second effect
ok second question - my macro fires on "flags.dae.onUpdateTarget" - how can I make a condition so that macro do something when the actor is hit by an attack or fails a saving throw?
MTB works with midi because Ironmonk and tposney have worked out synergy together. If you want midi support post an issue on RSR's github
You're probably going to need a world script. All workflows run client side
I tried that but couldn't get midi-qol.damageRollComplete" to work
so the first condition (being damaged) wasn't met
You use that or go by chat
(This is a PSA that if you have to 'go by chat' in v10, you are doing it wrong.)
Is this for a specific spell or feature that isn't homebrew?
I'm curious if you could fool a workflow into thinking you're in a different position, for range and cover purposes? Back on the Echo wagon again... I'm using Crymic's suggestion for the character to have a separate rangeless weapon for the Echo but there's also cover to consider. If there was a way for midi to think your character was standing where the Echo is for that attack that would be neat
Standard procedure is to look at whatever hooks are firing, and seeing what you can change about the data passed through. Maybe that includes coordinates. Maybe not.
Matthew Colville MCDM created a "Minion" feature. I've playtested it and it is one of the best addition to the game - heroes feel really epic when fighting hordes of enemies. However automating the process would really streamline those fights.
ah, still working on that
yeah - no luck so far
IIRC midi-qol flanking is checked whenever you change your target
Did the updateActor hooks approach not work?
in regards to Minions.
In regards to the echo message
you mean "flags.dae.onUpdateTarget"?
Interesting, although we don't use flanking. I probably could teleport the player to the echo space before the attack roll and port them back after lol. Just wondering if there would be a less drastic approach, might have to ask Tim
ok then I have no idea how to do that
You have damage applied automatically, right?
yes
Damage means an actor's hp is updated.
This triggers a preUpdateActor and updateActor hook
The pre hook triggers before any updates are applied
You can use that to read the target's current hit points, as well as see what their future hit points will be (because the object used to update the actor is passed to the hook as well)
You can use this to determine if the actor should be straight-up killed - that's what you want, right?
ok then I will have te trigger - but how then check if the target failed a saving throw or was hit by an attack?
I just have ASE summon pre setup token for the echo. Works well enough
because if his hp was modified in any other way I don't want him to die
The hooks also pass an object of options. Depending on your modules, it may be you can pass a tag or something along (or maybe there already is one)
Slap this in the console:
Hooks.on("preUpdateActor", (...T) => console.log("PREUPDATE:", T));
Hooks.on("updateActor", (...T) => console.log("UPDATE:", T));
then do whatever it is you like to do to deal damage
It will show you what is passed to the hooks and what you have to work with
Oh I have a nice warp gate echo to summon, effects and all, echo swap etc. But itโs just a placeholder really, the attacks need to come from the player token so it gets bless, smite etc added properly
ok reading it now
Could just have the echo copy all the effects during a midi pre attack hook
And adjust spell slots etc? I thought going the other way might be simpler
It is. 100% is
it's kinda jank and I don't recommend it but can you just locally overwrite the coordinates during an attack?
What do spell slots have to do with the echo?
This is what Iโm hoping
If the fighter/paladinโs echo uses a smite it needs to come off the players sheet
Oh hmm
Should test that first. If midi prevents you from making an attack with a melee weapon while you are more than 5 feet away from the target, try placing the token within 5 feet, put _token.document.x = someRidicilousValue in the console and see what happens
You can turn off range checking
or do that
But the idea is you do want range checking, but from a different position, right?
Yeah thought about that too, but this player is the one who needs range checking the most
Try the above to see if Midi can be fooled then
Ok hang on
Sounds dumb still, but syncing the effects between two tokens can't be that hard
data.x if on v9
Especially if you only check for differences
It did get fooled, thought there was a wall in the way (there is one miles away)
and what about just summoning a copy of yourself with a modified token to indicate the echo?
That would be great if he wasn't a paladin that also cast spells and had smite slots to manage
Would require resummoning it
I think Zhell might be onto something... if I can run an itemMacro that spoofs my position then we're golden
i dont follow
Thankfully my echo knight player hasn't multiclassed yet
Automation requires that they have everything within Foundry thinking they are where they are not.
in short.
but if its the same linked actor token....attack...from the echo?
Oh because they're both linked, they'd have slot parity... but there would be other consequences (it would get hit by auras, miss out on spells, get targeted by things it shouldn't etc)
That might be the easiest
Can confirm. Not even babonus likes linked actors with multiple tokens on the scene.
not even babonus
There's zero way to know which token you are rolling from ๐คท
cus each token links to the same sheet when the actor is linked
If 2 auras from the same linked token overlap does it make an infinite loop?
no
ActorSheet.token -- if null, its opened from the sidebar
if I can get the echo's position (by it's name), tell midi that's where my paladin is for that attack... then job done.... I just don't know how to write that
takes a village
But for linked as well?
si
Chat has midi flags with roll data
Dunno if this changed in v10, didn't check for it
You should need much fewer flags in chat
This works, so presumably there would be a way to put the coordinates for the next attack in the ItemMacro for this weapon, based on the location of the echo?
well I was able to make a hook that chceks if damage was done, but I don't think it's possible to check if it was a succesful save or a hit without chat
Yeah just get its coordinates and slap those on your own token
No weird data passed through by Midi?
That test token just zoomed off the map lol
You tried to move it?
This was just a test. You would (should) put it back at its old coordinates afterwards.
sadly no - the only time when I was able to do that was with overTime effect from midi (args[0].failedSaves.length) <- but it only works with the overTime
Ah too bad. Maybe Midi has its own hooks
CONFIG.debug.hooks = true and you'll see all of them as they trigger
I just hovered it... went way off into the padding... nbd
I would likely need a Before Attack Roll onUse macro, that somehow caches the position and an After Attack Roll one that restores original position
https://gitlab.com/tposney/midi-qol#midi-qol-called-hooks
This sounds like something you want to handle with a wordscript hook
Store and set new position:
token.document._oldx = token.document.x;
token.document._oldy = token.document.y;
token.document.x = newX;
token.document.y = newY;
then just overwrite x and y with _oldx etc
(yes you can store all you like directly on the docs)
yeah I'm using them already ๐
just remember to delete them afterwards
Post check saves hook iirc
they're probably ok to stay? they'll get reused every round just about
I'm gonna need to use all my macro copy/paste skills to make this work rubs hands together
I'm sure they don't exactly hurt
nothing stopping you from making the player do it ๐
Said player has issues dragging items to their hotbar
how can I set up a staggered attack with MidiQOL?
aka something like Ice Knife
attack roll, damage, then save, then damage
OK trying it out for real... don't even need to do the position restore, he snaps back anyway ๐คทโโ๏ธ
This is seriously sweet and so simple
Use an item macro. Here's the ice knife macro from the ddb importer:
https://github.com/MrPrimate/ddb-importer/blob/main/macros/spells/iceKnife.js
Integrate your dndbeyond.com content into Foundry virtual tabletop - ddb-importer/iceKnife.js at main ยท MrPrimate/ddb-importer
how do I modify this .3.
I see the damage parts
but I need it to be an AOE with a placed template
Midi even tells you if your echo is too far away from the target to do the attack ๐
I'll have to copy that for my echo knight player
Didn't even need warp gate, for once
I'm just going to figure out how to tidy things up so it works with any weapon of his
Drop-down box maybe
Yeah he uses his Halberd 99% of the time so that as default might do the trick
Grab the list of equipped weapons and if there is only one don't even prompt
Out of curiosity, did you test as a player or gm?
I have a Booming Blade macro that makes a dropdown and does exactly this. Somewhere in #macro-polo
GM, but they're both owned by him
I should test that
It's a local change, you want to make sure it works on their client
I believe midi does it all on the client, but yes will test
Well it sure doesn't do damage application on the client ๐
Midi processes the attack locally then has a GM handle damage
Perfect. ๐
that's waaaay down the workflow ๐
Hooks.callAll("midi-qol.damageRollComplete", workflow) - called after damage application is complete. The targets may not have their hit points updated when this call is made since the hit point update is farmed off to a gm client
That's the exact wording
I think the client does the math and the GM just applies it
What are you trying to make?
Might just be easier to have it have another item or feature if the template needs to be manually placed after the attack
Yep all works fine... only slight wrinkle is if he mouses over his token before he rolls damage it will jump to where the echo is (on the client only). I might just add an after attack roll onUse to put him back, just to be safe
for some reason thats the only midi-qol Hook that doesn't work for me
You need to apply damage for that to fire
If the attack is a hit atleast
yeah I figured that out - sadly it didn't - all other hooks are working
Oh shit misread. Though was midi roll complete
I'm trying something like if (workflow, "hitTargets", Set(1)) but It's a longshot
OK this feels a bit hacky, but it works ๐คทโโ๏ธ
let target = canvas.scene.tokens.getName("Vestige of Vengeance").object;
let oldx = token.document.x;
let oldy = token.document.y;
token.document.x = target.document.x;
token.document.y = target.document.y;
dnd5e.documents.macro.rollItem("Halberd +2");
await new Promise((resolve) => setTimeout(resolve, 1000));
token.document.x = oldx;
token.document.y = oldy;
(enough time for midi to bring up the attack dialog is all you need)
Can you await the full item roll?
I don't know how to do async stuff... I tried just putting await at the front, that didn't work
Might need to use the midi method to roll the item
I couldn't get it to work as an itemMacro but it would prob be better if it was
You want the coords reset as soon as the attack dialog is rendered?
yeah
actually, no sorry
they should reset regardless, because midi might not allow an attack
this way he's going home whether the dialog comes up or a range warning banner
let me test... midi does pop a banner to let you know you're not in range, will see what happens with this macro
It's not really a thing you should ever use in a regular script macro
purple is me moving to the echo and back again
That's a log, not a return value
I'm just seeing what's going on lol... idk how to do what you're asking
the good news is, he's moving back after the attack fails
big piledriver, floor smash, and then that floor is an AOE damage and then difficult terrain
motto motto helped me with a workaround, but i'll try this one now, thanks!
I don't have jb2a patreon, how does the path to file work? If this is the file i want modules/JB2A_DnD5e/Library/Generic/Magic_Signs/Runes/EvocationRuneIntro_01_Regular_Red_400x400.webm after comparing with the paths you have, what i shoud write is this JB2A_DnD5e.Library.Generic.Magic_Signs.Runes.EvocationRuneIntro_01_Regular_Red_400x400 ? (essentially starting by jb2a's folder and changing / to . and excluding .webm?
nope, it doesn't work that way
(i have sequencer installed, but i guess it's trying to search on sequencer's folders instead of jb2a's?)
jb2a.magic_signs.rune.evocation.intro.red
Browse all of our free and Patreon-locked assets!
Their asset browser is very easy to use
Browse all of our free and Patreon-locked assets!
you want the right hand sequencer code in the bottom right of this sites previews for most stuff, the only reason you would use a filepath link is if you are trying to use a custom path in automated animations UI. Most macros should want the right hand versions.
Aaaah
Thanks
now it works like a charm @coarse mesa ! Though i'd like to see the range of the teleport as a ring around the target token, as if was casting misty step (which has like a circle around to tell you where you can click)
Ok so now i'm trying to emulate this effect
Disruption Field. Waves of energy ripple in a 10-foot sphere centered on you. Every creature other than you that starts its turn in that area, or that moves into that area for the first time on a turn, takes 1d8 force damage.
I obviously started by copying spirit guardians and modifying it, but i'm doing something wrong
(the first console image is for my feature and the other one is for spirit guardians, in red i mark the part i changed)
It's failing to deal the damage on entry
theres more to the tabs than what you showed, make sure the other tabs are right, I dunno about v10 spirit guardians, but v9 was an active aura
yep, it's also an aura, all of what i don't show are the same
i'm feeling i'm messing with midi's workflow by leaping over the saving throw step (edit: nope, tried making it through a saving throw but it still fails to deal damage on entry)
(well, the aura is 10 ft instead of 15, and affects all instead of enemies)
The sneak attack in the sample items. Is there a way I can modify it to consider both NPC Challenge Ratings and PC rogue levels? I'd like to use this on NPC rogues, too.
const version = "0.9.52"
try {
if (!["mwak","rwak"].includes(args[0].itemData.data.actionType)) return {}; // weapon attack
if (args[0].itemData.data.actionType === "mwak" && !args[0].itemData.data.properties?.fin)
return {}; // ranged or finesse
if (args[0].hitTargets.length < 1) return {};
token = canvas.tokens.get(args[0].tokenId);
actor = token.actor;
if (!actor || !token || args[0].hitTargets.length < 1) return {};
const rogueLevels = actor.getRollData().classes.rogue?.levels;
if (!rogueLevels) {
MidiQOL.warn("Sneak Attack Damage: Trying to do sneak attack and not a rogue");
return {}; // rogue only
}
let target = canvas.tokens.get(args[0].hitTargets[0].id ?? args[0].hitTargers[0]._id);
if (!target) MidiQOL.error("Sneak attack macro failed");
if (game.combat) {
const combatTime = `${game.combat.id}-${game.combat.round + game.combat.turn /100}`;
const lastTime = actor.getFlag("midi-qol", "sneakAttackTime");
if (combatTime === lastTime) {
MidiQOL.warn("Sneak Attack Damage: Already done a sneak attack this turn");
return {};
}
}
let foundEnemy = true;
let isSneak = args[0].advantage;
if (!isSneak) {
foundEnemy = false;
let nearbyEnemy = canvas.tokens.placeables.filter(t => {
let nearby = (t.actor &&
t.actor?.id !== args[0].actor._id && // not me
t.id !== target.id && // not the target
t.actor?.data.data.attributes?.hp?.value > 0 && // not incapacitated
t.data.disposition !== target.data.disposition && // not an ally
MidiQOL.getDistance(t, target, false) <= 5 // close to the target
);
foundEnemy = foundEnemy || (nearby && t.data.disposition === -target.data.disposition)
return nearby;
});
isSneak = nearbyEnemy.length > 0;
}
if (!isSneak) {
MidiQOL.warn("Sneak Attack Damage: No advantage/ally next to target");
return {};
}
let useSneak = getProperty(actor.data, "flags.dae.autoSneak");
if (!useSneak) {
let dialog = new Promise((resolve, reject) => {
new Dialog({
// localize this text
title: "Conditional Damage",
content: `<p>Use Sneak attack?</p>`+(!foundEnemy ? "<p>Only Nuetral creatures nearby</p>" : ""),
buttons: {
one: {
icon: '<i class="fas fa-check"></i>',
label: "Confirm",
callback: () => resolve(true)
},
two: {
icon: '<i class="fas fa-times"></i>',
label: "Cancel",
callback: () => {resolve(false)}
}
},
default: "two"
}).render(true);
});
useSneak = await dialog;
}
if (!useSneak) return {}
const diceMult = args[0].isCritical ? 2: 1;
const baseDice = Math.ceil(rogueLevels/2);
if (game.combat) {
const combatTime = `${game.combat.id}-${game.combat.round + game.combat.turn /100}`;
const lastTime = actor.getFlag("midi-qol", "sneakAttackTime");
if (combatTime !== lastTime) {
await actor.setFlag("midi-qol", "sneakAttackTime", combatTime)
}
}
// How to check that we've already done one this turn?
return {damageRoll: `${baseDice * diceMult}d6`, flavor: "Sneak Attack"};
} catch (err) {
console.error(`${args[0].itemData.name} - Sneak Attack ${version}`, err);
}```
const rogueLevels = actor.getRollData().classes.rogue?.levels ?? actor.getRollData().details.cr;
Perfect, thank you!
I use max dice crits in my game, where one adds the maximum dice, and then rolls again. Is there a way I can also do that here instead of just rolling the dice twice?
dunno.
Is that a system setting?