Error cannot be found in the console - the retaliatory damage straight up doesn't happen (the damage resistance does apply for some reason)
if (args[0].tag === 'OnUse') {
const itemCard = game.messages.get(args[0].itemCardId);
const DIV = document.createElement('DIV');
DIV.innerHTML = itemCard.content;
await actor.effects.find(eff=>eff.origin === args[0].item.uuid)?.delete();
new Dialog({
title: 'Type of Resistance?',
buttons: {
one: {
label: 'Fire Resistance',
callback: async () => {
await actor.createEmbeddedDocuments('ActiveEffect', [
{
changes: [
{
key: 'system.traits.dr.value',
value: 'fire',
mode: 2,
},
{
key: 'flags.midi-qol.onUseMacroName',
value: `ItemMacro.${item.uuid},isDamaged`,
mode: 0,
},
],
duration: {
startTime: game.time.worldTime,
seconds: 60,
startRound: game.combat?.round,
startTurn: game.combat?.turn,
},
icon: 'icons/magic/defensive/shield-barrier-flaming-pentagon-blue.webp',
name: 'Chill Shield',
origin: args[0].item.uuid,
flags: {
'times-up': {
isPassive: true,
},
dae: {stackable:'noneName'}
},
},
]);
DIV.querySelector('div.card-buttons').innerHTML = 'The creature gains resistance to fire damage';
const update = [{
_id: args[0].itemCardId,
content: DIV.innerHTML
}]
await ChatMessage.updateDocuments(update);
},
},
two: {
label: 'Cold Resistance',
callback: async () => {
await actor.createEmbeddedDocuments('ActiveEffect', [
{
changes: [
{
key: 'system.traits.dr.value',
value: 'cold',
mode: 2,
},
{
key: 'flags.midi-qol.onUseMacroName',
value: `ItemMacro.${item.uuid},isDamaged`,
mode: 0,
},
],
duration: {
startTime: game.time.worldTime,
seconds: 60,
startRound: game.combat?.round,
startTurn: game.combat?.turn,
},
icon: 'icons/magic/defensive/shield-barrier-flaming-pentagon-blue.webp',
name: 'Warm Shield',
origin: args[0].item.uuid,
flags: {
'times-up': {
isPassive: true,
},
dae: {stackable:'noneName'}
},
},
]);
DIV.querySelector('div.card-buttons').innerHTML = 'The creature gains resistance to cold damage';
const update = [{
_id: args[0].itemCardId,
content: DIV.innerHTML
}]
await ChatMessage.updateDocuments(update);
},
},
three: {
label: 'Lightning Resistance',
callback: async () => {
await actor.createEmbeddedDocuments('ActiveEffect', [
{
changes: [
{
key: 'system.traits.dr.value',
value: 'lightning',
mode: 2,
},
{
key: 'flags.midi-qol.onUseMacroName',
value: `ItemMacro.${item.uuid},isDamaged`,
mode: 0,
},
],
duration: {
startTime: game.time.worldTime,
seconds: 60,
startRound: game.combat?.round,
startTurn: game.combat?.turn,
},
icon: 'icons/magic/defensive/shield-barrier-flaming-pentagon-magenta.webp',
name: 'Grounded Shield',
origin: args[0].item.uuid,
flags: {
'times-up': {
isPassive: true,
},
dae: {stackable:'noneName'}
},
},
]);
DIV.querySelector('div.card-buttons').innerHTML = 'The creature gains resistance to lightning damage';
const update = [{
_id: args[0].itemCardId,
content: DIV.innerHTML
}]
await ChatMessage.updateDocuments(update);
},
},
four: {
label: 'Thunder Resistance',
callback: async () => {
await actor.createEmbeddedDocuments('ActiveEffect', [
{
changes: [
{
key: 'system.traits.dr.value',
value: 'thunder',
mode: 2,
},
{
key: 'flags.midi-qol.onUseMacroName',
value: `ItemMacro.${item.uuid},isDamaged`,
mode: 0,
},
],
duration: {
startTime: game.time.worldTime,
seconds: 60,
startRound: game.combat?.round,
startTurn: game.combat?.turn,
},
icon: 'icons/magic/defensive/shield-barrier-flaming-pentagon-green.webp',
name: 'Airy Shield',
origin: args[0].item.uuid,
flags: {
'times-up': {
isPassive: true,
},
dae: {stackable:'noneName'}
},
},
]);
DIV.querySelector('div.card-buttons').innerHTML = 'The creature gains resistance to thunder damage';
const update = [{
_id: args[0].itemCardId,
content: DIV.innerHTML
}]
await ChatMessage.updateDocuments(update);
},
},
},
}).render(true);
}
if (args[0].macroPass = 'isDamaged') {
const attackerToken = fromUuidSync(args[0].tokenUuid).object;
const defenderToken = args[0].options.token;
const defenderActor = args[0].options.actor;
if (!attackerToken || !defenderToken || !defenderActor) return;
const distance = 5;
if (MidiQOL.getDistance(attackerToken, defenderToken) > 5) return;
const dmgType =
defenderActor.effects.find((eff) => eff.name.toLocaleLowerCase().includes('warm shield')) ? 'fire' :
defenderActor.effects.find((eff) => eff.name.toLocaleLowerCase().includes('chill shield')) ? 'cold' :
defenderActor.effects.find((eff) => eff.name.toLocaleLowerCase().includes('airy shield')) ? 'lightning' :
'thunder';
const itemCard = await item.displayCard({ createMessage: false });
const DIV = document.createElement('DIV');
DIV.innerHTML = itemCard.content;
DIV.querySelector('div.card-buttons').innerHTML = `The attacker suffers <b>${dmgType}</b> damage`;
DIV.querySelector('footer.card-footer')?.remove();
const roll = await new Roll(`2d8[${dmgType}]`).toMessage({ flavor: DIV.innerHTML, speaker: ChatMessage.getSpeaker({ scene: game.canvas?.scene, actor: defenderActor, token: defenderToken }) });
await game.dice3d?.waitFor3DAnimationByMessageID(roll.id);
const total = roll.rolls[0].result;
await new MidiQOL.DamageOnlyWorkflow(
defenderActor,
defenderToken,
total,
dmgType,
[attackerToken.document],
roll.rolls[0],
{ itemCardId: roll.id, damageList: args[0].damageList }
);
}