matthileo

Attack Macro

May 28th, 2016
128
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.     var toHit = {
  19.         dieCount: 0,
  20.         dieSize: 20,
  21.         diceMod: '',
  22.         modifier: 0
  23.     };
  24.     var damage=[];
  25.     var attack=[];
  26.    
  27.     for (var idx in args) {
  28.         var arg = args[idx];
  29.         if (typeof user.attacks[arg] == "function") {
  30.             user.attacks[arg](attack,toHit);
  31.         }
  32.         if (typeof user.attackModifiers[arg] == "function") {
  33.             user.attackModifiers[arg](toHit);
  34.         }
  35.         if (typeof user.damageModifiers[arg] == "function") {
  36.             user.damageModifiers[arg](damage);
  37.         }
  38.     }
  39.  
  40.     var damageString = '';
  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.    
  60.     for (var idx in attack) {
  61.         if (idx>0)
  62.         {
  63.             //You should only call one type of attack. Using the first one in the arguments.
  64.             break;
  65.         }
  66.         var r = attack[idx];
  67.         var rollDice = r.dieCount;
  68.         if (isCritical) rollDice*=2;
  69.         if (damageString && (r.dieCount || r.modifier)) damageString += "+";
  70.         if (r.dieCount) damageString += rollDice + "d" + r.dieSize;
  71.         if (r.modifier && r.dieCount) damageString += "+";
  72.         if (r.modifier) damageString += r.modifier;
  73.         if (r.comment) damageString += '[' + r.comment + ']';
  74.         if (r.phrase) phrase = r.phrase;
  75.         if (r.effect) effectString+=r.effect+"\n";
  76.     }
  77.    
  78.     for (var idx in damage) {
  79.         var r = damage[idx];
  80.         var rollDice = r.dieCount;
  81.         if (isCritical) rollDice*=2;
  82.         if (damageString && (r.dieCount || r.modifier)) damageString += "+";
  83.         if (r.dieCount) damageString += rollDice + "d" + r.dieSize;
  84.         if (r.modifier && r.dieCount) damageString += "+";
  85.         if (r.modifier) damageString += r.modifier;
  86.         if (r.comment) damageString += '[' + r.comment + ']';
  87.         if (r.phrase) phrase = r.phrase;
  88.         if (r.effect) effectString+=r.effect+"\n";
  89.     }
  90.     var damageRoll = roll(damageString);
  91.     if (damageString!="") formatAttack(attackRoll, damageRoll, phrase, effectString, target);
  92.     else formatAttack(attackRoll, "", phrase, effectString, target);
  93. }
Advertisement
Add Comment
Please, Sign In to add comment