matthileo

Attack Macro

May 27th, 2016
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ^^ user.atk = function() {
  2.    
  3.     var args = Array.from(arguments);
  4.    
  5.     function getNext(key) {
  6.         var i = args.indexOf(key);
  7.         if (i >= 0 && i != args.length - 1) return args[i+1].split("_").join(" ");
  8.         return null;
  9.     }
  10.    
  11.     var target = getNext("-t");
  12.    
  13.     var abilityMod = 0;
  14.     var tohitMod = 0;
  15.     var phrase = "";
  16.     var effectString="";
  17.    
  18.     if (user.character) {
  19.         abilityMod = user.character.dex > user.character.str ? user.character.dexMod : user.character.strMod;
  20.     }
  21.    
  22.     tohitMod = user.character.proficiencyBonus + abilityMod;
  23.  
  24.     var toHit = {
  25.         dieCount: 1,
  26.         dieSize: 20,
  27.         diceMod: '',
  28.         modifier: tohitMod
  29.     };
  30.     var damage=[];
  31.    
  32.     for (var idx in args) {
  33.         var arg = args[idx];
  34.         if (typeof user.attackModifiers[arg] == "function") {
  35.             user.attackModifiers[arg](toHit);
  36.         }
  37.         if (typeof user.damageModifiers[arg] == "function") {
  38.             user.damageModifiers[arg](damage);
  39.         }
  40.     }
  41.  
  42.     var atkRollStr = toHit.dieCount + "d" + toHit.dieSize + toHit.diceMod + " + " + toHit.modifier;
  43.     var attackRoll = roll(atkRollStr);
  44.     if (toHit.dieCount==0)
  45.     {
  46.         attackRoll="";
  47.         var isCritical = inArguments(arguments,"crit");
  48.     }
  49.     else {
  50.         var toHitDie = 0;
  51.         for (var idx in attackRoll.tokens[0].rolls) {
  52.             var r = attackRoll.tokens[0].rolls[idx];
  53.             if (r.kept) {
  54.                 toHitDie = r.keptValue;
  55.             }
  56.         }
  57.         var isCritical = (toHitDie == 20 || inArguments(arguments,"crit"));
  58.     }
  59.     var damageString = '';
  60.     for (var idx in damage) {
  61.         var r = damage[idx];
  62.         var rollDice = r.dieCount;
  63.         if (isCritical) rollDice*=2;
  64.         if (damageString && (r.dieCount || r.modifier)) damageString += "+";
  65.         if (r.dieCount) damageString += rollDice + "d" + r.dieSize;
  66.         if (r.modifier && r.dieCount) damageString += "+";
  67.         if (r.modifier) damageString += r.modifier;
  68.         if (r.comment) damageString += '[' + r.comment + ']';
  69.         if (r.phrase) phrase = r.phrase;
  70.         if (r.effect) effectString+=r.effect+"\n";
  71.     }
  72.     var damageRoll = roll(damageString);
  73.     if (damageString!="") formatAttack(attackRoll, damageRoll, phrase, effectString, target);
  74.     else formatAttack(attackRoll, "", phrase, effectString, target);
  75. }
Advertisement
Add Comment
Please, Sign In to add comment