Advertisement
Guest User

VampHPDrain

a guest
Aug 7th, 2021
1,094
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. async function wait(ms) {return new Promise(resolve => {setTimeout(resolve, ms);});}
  2. if(args[0].hitTargets.length === 0) return {};
  3. let tokenD = canvas.tokens.get(args[0].tokenId);
  4. let actorD = game.actors.get(args[0].actor._id);
  5. let target = canvas.tokens.get(args[0].hitTargets[0].id);
  6. let itemD = args[0].item;
  7. let gameRound = game.combat ? game.combat.round : 0;
  8.  
  9. const diceMult = args[0].isCritical ? 2: 1;
  10. const numDice = 3 * diceMult;
  11. args[0].isCritical ? numDice * 2 : numDice;
  12. let damageRoll = new Roll(`${numDice}d6`).roll();
  13. new MidiQOL.DamageOnlyWorkflow(actorD, tokenD, damageRoll.total, "necrotic", [target], damageRoll, {flavor: "Necrotic Bite - Damage Roll (Necrotic)", damageList: args[0].damageList, itemCardId: args[0].itemCardId });
  14. await MidiQOL.applyTokenDamage([{damage: damageRoll.total, type: "healing"}], damageRoll.total, new Set([tokenD]), itemD.name, new Set());
  15. const effectData = {
  16. label : "Drain",
  17. icon : "icons/skills/wounds/blood-drip-droplet-red.webp",
  18. origin: args[0].uuid,
  19. changes: [{
  20. "key": "data.attributes.hp.max",
  21. "value": `-${damageRoll.total}`,
  22. "mode": 2,
  23. "priority": 20
  24. }],
  25. disabled: false,
  26. duration: {seconds: 86400,startRound: gameRound, startTime: game.time.worldTime},
  27. }
  28. await MidiQOL.socket().executeAsGM("createEffects", {actorUuid: target.actor.uuid, effects: [effectData]});
  29. let hpNow = target.actor.data.data.attributes.hp.max;
  30. let updateHP = hpNow - damageRoll.total;
  31. let the_message = `<p>${tokenD.name} drains ${target.name} of ${damageRoll.total} pts from their maximum Hit Point value!</p><p>${target.name} now has Maximum Hit Point maximum of ${updateHP}.</p><br><p><b>If it reaches O, they die!!</b></p><br><p> ${tokenD.name} regains ${damageRoll.total} Hit Points back!</p>`;
  32. await wait(600);
  33. ChatMessage.create({
  34. user: game.user._id,
  35. speaker: ChatMessage.getSpeaker({actorD: actorD}),
  36. content: the_message,
  37. type: CONST.CHAT_MESSAGE_TYPES.EMOTE
  38. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement