matthileo

stealth update

Aug 13th, 2016
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.62 KB | None | 0 0
  1. HELPER FUNCTIONS AND CORE MACROS
  2. Copy and paste the following, each one at a time, until you get to the section labeled SETUP FIRST CHARACTER. Once you reach that section, customize the two listed commands for your character.
  3.  
  4. --------------------------------------------------
  5.  
  6. $$ user.getNext = function (key, def)
  7. {
  8. var i = args.indexOf(key);
  9. if (i >= 0 && i != args.length - 1) return args[i+1];
  10. return def;
  11. }
  12.  
  13. --------------------------------------------------
  14.  
  15. $$ user.getDieRoll = function(roll)
  16. {
  17. var dieRoll = 0;
  18. for (var idx in roll.tokens[0].rolls) {
  19. var r = roll.tokens[0].rolls[idx];
  20. if (r.kept) {
  21. dieRoll = r.keptValue;
  22. }
  23. }
  24. return dieRoll;
  25. }
  26.  
  27. --------------------------------------------------
  28.  
  29. $$ user.setupArgs= function(args) {
  30. var newArguments = [];
  31.  
  32. for (var idx in args)
  33. {
  34. if (args[idx].startsWith("$time"))
  35. {
  36. newArguments.push(getTime(args[idx]));
  37. }
  38. else
  39. {
  40. newArguments.push(replaceString(args[idx]));
  41. }
  42. }
  43. return newArguments;
  44. }
  45.  
  46. --------------------------------------------------
  47.  
  48. $$ user.replaceString= function(arg) {
  49. var result = "";
  50.  
  51. if (arg.startsWith("$"))
  52. {
  53. result = user.strings[arg.substr(1)];
  54. return result;
  55. }
  56. return arg;
  57. }
  58.  
  59. --------------------------------------------------
  60.  
  61. $$ user.getTime= function(arg) {
  62.  
  63. var duration = 0;
  64. var unit = "m";
  65. var currentTime = new Date();
  66. var newTime=new Date();
  67. var result = "";
  68.  
  69. if (arg.startsWith("$time"))
  70. {
  71. duration = arg.split(":")[1];
  72. unit = arg.split(":")[2];
  73. switch (unit)
  74. {
  75. case "s":
  76. newTime= newTime.setSeconds(currentTime.getSeconds() + parseInt(duration));
  77. break;
  78. case "m":
  79. newTime= newTime.setMinutes(currentTime.getMinutes() + parseInt(duration));
  80. break;
  81. case "h":
  82. newTime= newTime.setHours(currentTime.getHours() + parseInt(duration));
  83. break;
  84. case "d":
  85. newTime= newTime.setHours(currentTime.getHours() + (parseInt(duration)*24));
  86. break;
  87. }
  88. var options = {hour: '2-digit', minute:'2-digit'};
  89. options.timeZone = 'America/Los_Angeles';
  90. options.timeZoneName = 'short';
  91. d = new Date();
  92. d.setTime(newTime);
  93.  
  94. strOldDate = currentTime.toLocaleDateString('en-US', options).split(", ")[0];
  95. strNewDate = d.toLocaleDateString('en-US', options).split(", ")[0];
  96. strNewTime = d.toLocaleTimeString('en-US', options).split(", ")[1];
  97.  
  98. result += strNewTime;
  99.  
  100.  
  101. if (strOldDate != strNewDate) result += " " + strNewDate;
  102.  
  103. return result;
  104. }
  105. return arg;
  106. }
  107.  
  108. --------------------------------------------------
  109.  
  110. $$ user.addString = function()
  111. {
  112. var args = setupArgs(arguments);
  113. var stringName = args[0];
  114. var stringText = args[1];
  115. if (!stringName || !stringText)
  116. {
  117. return 0;
  118. }
  119. user.strings[stringName] = stringText;
  120. echo("`" + user.strings[stringName] + "` has been added to your list of strings.\n")
  121.  
  122. }
  123. user.strings=[];
  124.  
  125. --------------------------------------------------
  126.  
  127. $$ user.status=function(){args=setupArgs(Array.from(arguments));var a=getNext("-character",user.currentCharacter);character=user.characters[a];var b=getNext("-hp");"reset"==b?character.sheet.hp=character.sheet.maxHP:b&&(character.sheet.hp=parseInt(character.sheet.hp)+parseInt(b));var c=getNext("-spell");c&&(character.status.concentration.name=c);var d=getNext("-effect");d&&(character.status.concentration.effect=d);var e=getNext("-target");e&&(character.status.concentration.target=e);var f=getNext("-ends");f&&(character.status.concentration.ends=f);for(idx in args)"-condition"==args[idx]?(idx=parseInt(idx),character.status.conditions||(character.status.conditions={}),character.status.conditions[args[idx+1]]||(character.status.conditions[args[idx+1]]=[]),"ends"==args[idx+2]&&(character.status.conditions[args[idx+1]].ends=args[idx+3]),"effect"==args[idx+2]&&(character.status.conditions[args[idx+1]].effect=args[idx+3]),"ends"==args[idx+4]&&"effect"==args[idx+2]&&(character.status.conditions[args[idx+1]].ends=args[idx+5]),"effect"==args[idx+4]&&"ends"==args[idx+2]&&(character.status.conditions[args[idx+1]].effect=args[idx+5])):"-clear"==args[idx]&&delete character.status.conditions[args[parseInt(idx)+1]];var g=getNext("-stealth");g&&(character.status.stealth=g);var h=getNext("-pos");if(h&&(character.status.position=h),inArguments(args,"clear")){if(inArguments(args,"spell"))for(idx in character.status.concentration)character.status.concentration[idx]="none";inArguments(args,"conditions")&&(character.status.conditions={}),character.status.stealth="none",character.status.position="Outside Combat"}inArguments(args,"silent")||displayStatus(),inArguments(args,"update")&&updateStatus()};
  128.  
  129. --------------------------------------------------
  130.  
  131. $$ user.displayStatus = function()
  132. {
  133. echo("```"+character.sheet.name+"'s Status```");
  134. echo("**Hit Points: **" + character.sheet.hp + "/" + character.sheet.maxHP + "\n");
  135. echo("**Position: **" + character.status.position + "\n");
  136.  
  137. for (condition in character.status.conditions)
  138. {
  139. conditionString = "";
  140. if (character.status.conditions[condition].ends && character.status.conditions[condition].effect)
  141. conditionString += character.status.conditions[condition].effect + " (Ends " + character.status.conditions[condition].ends + ")";
  142. else if (character.status.conditions[condition].ends)
  143. conditionString += " Ends " + character.status.conditions[condition].ends;
  144. else if (character.status.conditions[condition].effect)
  145. conditionString += character.status.conditions[condition].effect;
  146. echo("**" + condition + ": **" + conditionString + "\n");
  147. }
  148.  
  149. if (character.status.stealth!="none") echo("**Stealth: **" + character.status.stealth + "\n");
  150.  
  151. if (character.status.concentration.name!="none")
  152. {
  153. spellstring = "**Concentration: **" + character.status.concentration.name;
  154. if (character.status.concentration.effect!="none") spellstring+= " [" + character.status.concentration.effect + "]";
  155. if (character.status.concentration.target!="none") spellstring+= " on " + character.status.concentration.target;
  156. if (character.status.concentration.ends!="none") spellstring+= " (Ends " + character.status.concentration.ends + ")";
  157. echo(spellstring + "\n");
  158. }
  159.  
  160. if (inArguments(args,"end")) echo("```END TURN```");
  161. }
  162.  
  163. --------------------------------------------------
  164.  
  165. $$ user.setup=function(){user.characters||(user.characters=[]),args=setupArgs(arguments),user.strings||(user.strings=[]),user.properText={dex:"Dexterity",str:"Strength",con:"Constitution",int:"Intelligence",wis:"Wisdom",cha:"Charisma",death:"Death"};var a=getNext("-name"),b=getNext("-hp"),c=getNext("-skills");c&&(c=c.split(","));var d=getNext("-expertise");d&&(d=d.split(","));var e=getNext("-saves");e&&(e=e.split(","));var f=getNext("-classes");f&&(f=f.split(","));var g=getNext("-str",10),h=getNext("-dex",10),i=getNext("-con",10),j=getNext("-int",10),k=getNext("-wis",10),l=getNext("-cha",10);if(a){if(user.characters[a]||(user.characters[a]=[],user.characters[a].sheet=new Character("5e",a,{str:g,dex:h,con:i,int:j,wis:k,cha:l}),user.characters[a].sheet.name=a,user.characters[a].skills={acrobatics:"",animal:"",arcana:"",athletics:"",deception:"",history:"",insight:"",intimidation:"",investigation:"",medicine:"",nature:"",perception:"",performance:"",persuasion:"",religion:"",sleight:"",stealth:"",survival:"",initiative:"",bonus:0},user.characters[a].saves={str:"",dex:"",con:"",int:"",wis:"",cha:"",death:"",bonus:0},user.characters[a].sheet.classes=[],user.characters[a].lastAttack=[],user.characters[a].lastSave=[],user.characters[a].lastCheck=[],user.characters[a].features=[],user.strings=[],user.characters[a].sheet.hp=0,user.characters[a].status=[],user.characters[a].status.concentration=[],user.characters[a].status.conditions={},statusArgs=["-character",a,"silent","-pos","Outside Combat","-condition","none","-conditionends","none","-stealth","0","-spell","none","-target","none","-effect","none","-ends","none"],status.apply(this,statusArgs)),c)for(idx in c)user.characters[a].skills[c[idx]]="prof";if(d)for(idx in d)user.characters[a].skills[d[idx]]="exp";if(e)for(idx in e)user.characters[a].saves[e[idx]]="prof";if(f)for(idx in f)user.characters[a].sheet.classes.push(f[idx]);b&&(user.characters[a].sheet.maxHP=b)}else echo("\n**INVALID INPUT.**\n")};
  166.  
  167. --------------------------------------------------
  168.  
  169. $$ user.character = function()
  170. {
  171. args = setupArgs(arguments);
  172. if (args[0]!="")
  173. {
  174. if (user.characters[args[0]])
  175. {
  176. echo("Switching from `" + user.currentCharacter + "` to `" + args[0] + "`.\n");
  177. user.currentCharacter = args[0];
  178. }
  179. else echo("No character named `"+args[0]+"` exists...\n");
  180. }
  181. else echo("You must enter a character name...\n");
  182. }
  183.  
  184. --------------------------------------------------
  185.  
  186. $$ user.list = function()
  187. {
  188. echo("```Characters```");
  189. for (idx in user.characters)
  190. {
  191. charString = "**" + idx +":** " + user.characters[idx].sheet.hp +"/" + user.characters[idx].sheet.maxHP;
  192.  
  193. for (condition in user.characters[idx].status.conditions)
  194. {
  195. if (charString!="") charString+=", ";
  196. charString += condition;
  197. }
  198.  
  199. if (user.characters[idx].status.concentration.name!="none")
  200. {
  201. if (charString!="") charString+=", ";
  202. charString+= "Concentrating on " + user.characters[idx].status.concentration.name;
  203. }
  204.  
  205. if (user.characters[idx].status.stealth!="none")
  206. {
  207. if (charString!="") charString+=", ";
  208. charString+= user.characters[idx].status.stealth + " Stealth";
  209. }
  210. echo(charString + "\n");
  211. }
  212. }
  213.  
  214. --------------------------------------------------
  215.  
  216. $$ user.sheet = function(charName)
  217. {
  218. args = setupArgs(arguments);
  219. var character;
  220. if (charName) character = user.characters[charName];
  221. else character = user.characters[user.currentCharacter];
  222.  
  223. echo("```" + character.sheet.name + "'s Character Sheet```");
  224. for (var idx in character.sheet)
  225. {
  226. if(user.properText[idx])
  227. echo("**" + user.properText[idx]+":** " + character.sheet[idx]+"\n");
  228. else if (idx == "proficiencyBonus")
  229. echo("**Proficiency Bonus:** +" + character.sheet[idx]+"\n");
  230. else if (idx == "hp")
  231. echo("**Hit Points:** " + character.sheet["hp"] + "/" + character.sheet["maxHP"] + "\n");
  232. }
  233. echo("**Skills:** ");
  234. for (var idx in character.skills)
  235. {
  236. if (character.skills[idx]=="prof") echo(idx + ", ")
  237. else if (character.skills[idx]=="exp") echo(idx + "[e], ");
  238. }
  239. }
  240.  
  241. --------------------------------------------------
  242.  
  243. $$ user.a=function(){args=setupArgs(Array.from(arguments)),character=user.characters[user.currentCharacter];for(var a=inArguments(args,"summary"),b=[],d=(getNext("-lvl",1),getNext("-t")),e=getNext("-ac",0),f=getNext("-ab"),g=getNext("-db"),h=getNext("-phrase",""),i=getNext("-rr",1),j=0,l=0,m=0;m<i;m++){var n="",o="",p="",q={dieCount:0,dieSize:20,diceMod:"",modifier:0},r=[],s=[];for(var t in args){var u=args[t];"function"==typeof character.attacks[u]&&character.attacks[u](s,q),"function"==typeof character.attackModifiers[u]&&character.attackModifiers[u](q),"function"==typeof character.damageModifiers[u]&&character.damageModifiers[u](r)}var v="",w=q.dieCount+"d"+q.dieSize+q.diceMod+" + "+q.modifier;f&&(w+="+"+f);var x=roll(w),y=x.plain>=e;if(0==q.dieCount){x="";var z=inArguments(args,"crit")}else{var A=getDieRoll(x),z=20==A||inArguments(args,"crit"),B=20==A;B&&(y=!0)}1==A&&(y=!1);for(var t in s){if(t>0)break;var C=s[t],D=C.dieCount;z&&(D*=2),v&&(C.dieCount||C.modifier)&&(v+="+"),C.dieCount&&(v+=D+"d"+C.dieSize),C.modifier&&C.dieCount&&(v+="+"),C.modifier&&(v+=C.modifier),C.comment&&(v+="["+C.comment+"]"),C.phrase&&(n=C.phrase),C.effect&&""!=o&&(o+="\n"),C.effect&&(o+=C.effect),C.icon&&(p+=C.icon)}for(var t in r)if(!r[t].useOnce&&!r[t].onCrit||(r[t].useOnce&&z&&y||r[t].useOnce&&!r[t].onCrit&&y||r[t].onCrit&&m==i-1&&y&&i>1&&r[t].useOnce||!r[t].useOnce&&r[t].onCrit&&z)&&b.indexOf(r[t].comment)==-1){var C=r[t],D=C.dieCount;z&&(D*=2),v&&(C.dieCount||C.modifier)&&(v+="+"),C.dieCount&&(v+=D+"d"+C.dieSize),C.modifier&&C.dieCount&&(v+="+"),C.modifier&&(v+=C.modifier),C.comment&&(C.dieCount>0||C.modifier>0)&&(v+="["+C.comment+"]"),C.phrase&&!a&&(n=C.phrase),C.effect&&""!=o&&(o+="\n"),C.effect&&(o+=C.effect),C.icon&&(p+=C.icon),C.useOnce&&b.push(C.comment)}""!=h&&(n=h),g&&(v+="+"+g);var E=roll(v);y&&(j+=E.plain),character.lastAttack.phrase=n,character.lastAttack.toHit=x,character.lastAttack.damage=E,l=formatAttack(x,E,y,z,n,o,d,a,i,j,m,l,p,!1)}return j};
  244.  
  245. --------------------------------------------------
  246.  
  247. $$ user.formatAttack=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var o="";return h&&0==k&&(n?echo("\n*"+n+" "+e+" "+i+" times"):echo("\n*"+user.characters[user.currentCharacter].sheet.name+" "+e+" "+i+" times"),g&&echo(" at "+g),echo(".*\n")),c?l++:echo("~~"),h?(o+="Attack "+(k+1)+": "+a.simple+" to hit, "+b.simple+" damage.",""!=m&&(o+=" "+m),d&&(o+=" :crossed_swords:"),echo(o)):(e&&(echo("\n"),n?stringPhrase="*"+n+" "+e:stringPhrase="*"+user.characters[user.currentCharacter].sheet.name+" "+e,g&&(stringPhrase+=" at "+g),d&&(stringPhrase+=" and scores a CRITICAL HIT"),stringPhrase+="!*",echo(stringPhrase)),a&&(echo("\n"),echo("**To Hit:** "+a.string)),b.tokens.length>0&&(echo("\n"),echo("**Damage: **"+b.string)),""!=f&&(echo("\n"),g?echo(f.split("Target").join(g)):echo(f))),c||echo("~~"),i>1&&echo("\n"),k>=i-1&&(h||echo("\n"),i>1&&echo("**Total Damage:** "+j+"\n"),i>1&&h&&""!=f&&l>0&&(g?echo(f.split("Target").join(g).split("Effect:").join("Effect (x"+l+"):")):echo(f.split("Effect:").join("Effect (x"+l+"):")),i>1&&echo("\n"))),l};
  248.  
  249. --------------------------------------------------
  250.  
  251. $$ user.check=function(){args=setupArgs(Array.from(arguments));var a=user.characters[user.currentCharacter],b=a.sheet.proficiencyBonus,c=a.features["Jack of all Trades"]||inArguments(args,"bard"),d=inArguments(args,"save"),e=(a.features["Reliable Talent"]||inArguments(args,"reliable"))&&(inArguments(args,"prof")||inArguments(args,"exp")),f=inArguments(args,"summary"),g=0,h=1,i="",j="",k=getNext("-l"),l=getNext("-phrase"),m=getNext("-csphrase"),n=getNext("-cfphrase"),o=getNext("-failphrase"),p=getNext("-dc");p||(p=0);for(var q in args)a.sheet[args[q]+"Mod"]&&(g+=a.sheet[args[q]+"Mod"],j+=args[q]);inArguments(args,"exp")?g+="+"+2*b:inArguments(args,"prof")?g+="+"+b:c&&!d&&(g+="+"+Math.floor(b/2)),inArguments(args,"adv")&&!inArguments(args,"dis")?(h=2,i="-H"):inArguments(args,"dis")&&!inArguments(args,"adv")&&(h=2,i="-L");var r=getNext("-mb");r&&(g+="+"+r);var s=h+"d20"+i+" + "+g;inArguments(args,"bless")?s+=" + 1d4[Bless]":inArguments(args,"guide")&&(s+=" + 1d4[Guidance]"),additionalBonus=getNext("-b"),additionalBonus&&(s+="+"+additionalBonus),abilityCheck=roll(s);var t=0;for(var q in abilityCheck.tokens[0].rolls){var u=abilityCheck.tokens[0].rolls[q];u.kept&&(t=u.keptValue)}var v=20==t,w=1==t,x="```"+a.sheet.name+" rolling ";return f&&(x="**"),k?x+=k:j?(x+=user.properText[j],inArguments(args,"prof")?x+=" with proficiency":inArguments(args,"exp")&&(x+=" with expertise")):x+="a check",x+=f?":** ":"...```",inArguments(args,"silent")||(echo("\n"),echo(x),e&&t<10&&echo("~~"),echo(abilityCheck.string+"\n"),e&&t<10&&echo("~~"),e&&t<10&&(echo("`"+(abilityCheck.plain-t+10)+"` with Reliable Talent!\n"),abilityCheck=roll(abilityCheck.plain-t+10)),m&&v&&abilityCheck.plain>=p?echo("*"+m+"*\n"):n&&w?echo("*"+n+"*\n"):o&&abilityCheck.plain<p?echo("*"+o+"*\n"):l&&echo("*"+l+"*\n")),d?(a.lastSave.label=k,a.lastSave.roll=abilityCheck):(a.lastCheck.label=k,a.lastCheck.roll=abilityCheck),abilityCheck.plain};
  252.  
  253. --------------------------------------------------
  254.  
  255. $$ user.save=function(){var a=Array.from(arguments);character=user.characters[user.currentCharacter],saveBonus=character.saves.bonus;for(var b in a){if(character.sheet[a[b]]){stat=a[b];break}"death"==a[b]&&(stat="death")}return user.properText[stat]&&(properStat=user.properText[stat]),inArguments(a,"summary")?checkArgs=["save","-l",properStat+" Save"]:checkArgs=["save","-l","a(n) "+properStat+" saving throw"],inArguments(arguments,"defy")&&(deathPhrase=csDeathPhrase),character.saves[stat]&&checkArgs.push(character.saves[stat]),0!=saveBonus&&(checkArgs=checkArgs.concat(["-mb",saveBonus.toString()])),checkArgs=checkArgs.concat(a),result=check.apply(this,checkArgs),result};
  256.  
  257. --------------------------------------------------
  258.  
  259. SKILL MACROS
  260.  
  261. --------------------------------------------------
  262.  
  263. $$ echo("Skills 1\n");
  264. user.acrobatics = function(){args = [user.characters[user.currentCharacter].skills["acrobatics"],"dex", "-l", "Acrobatics"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  265. user.animal = function(){args = [user.characters[user.currentCharacter].skills["animal"],"wis", "-l", "Animal Handling"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  266. user.arcana = function(){args = [user.characters[user.currentCharacter].skills["arcana"],"int", "-l", "Arcana"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  267. user.athletics = function(){args = [user.characters[user.currentCharacter].skills["athletics"],"str", "-l", "Athletics"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  268. user.deception = function(){args = [user.characters[user.currentCharacter].skills["deception"],"cha", "-l", "Deception"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  269. user.history = function(){args = [user.characters[user.currentCharacter].skills["history"],"int", "-l", "History"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  270.  
  271. --------------------------------------------------
  272.  
  273. $$ echo("Skills 2\n");
  274. user.insight = function(){args = [user.characters[user.currentCharacter].skills["insight"],"wis", "-l", "Insight"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  275. user.intimidation = function(){args = [user.characters[user.currentCharacter].skills["intimidation"],"cha", "-l", "Intimidation"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  276. user.investigation = function(){args = [user.characters[user.currentCharacter].skills["investigation"],"int", "-l", "Investigation"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  277. user.medicine = function(){args = [user.characters[user.currentCharacter].skills["medicine"],"wis", "-l", "Medicine"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  278. user.nature = function(){args = [user.characters[user.currentCharacter].skills["nature"],"int", "-l", "Nature"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  279. user.perception = function(){args = [user.characters[user.currentCharacter].skills["perception"],"wis", "-l", "Perception"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  280. user.performance = function(){args = [user.characters[user.currentCharacter].skills["performance"],"cha", "-l", "Performance"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  281. user.persuasion = function(){args = [user.characters[user.currentCharacter].skills["persuasion"],"cha", "-l", "Persuasion"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  282.  
  283. --------------------------------------------------
  284.  
  285. $$ echo("Skills 3\n");
  286. user.religion = function(){args = [user.characters[user.currentCharacter].skills["religion"],"int", "-l", "Religion"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  287. user.sleight = function(){args = [user.characters[user.currentCharacter].skills["sleight"],"dex", "-l", "Sleight of Hand"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  288. user.stealth = function()
  289. {
  290. args = [user.characters[user.currentCharacter].skills["stealth"],"dex", "-l", "Stealth"];
  291. args=args.concat(Array.from(arguments));
  292. var result = check.apply(this,args);
  293.  
  294. args = ["-stealth",result.toString(), "silent"];
  295. args=args.concat(Array.from(arguments))
  296. status.apply(this,args);
  297. return result;
  298. }
  299. user.survival = function(){args = [user.characters[user.currentCharacter].skills["survival"],"wis", "-l", "Survival"]; args=args.concat(Array.from(arguments)); var result = check.apply(this,args); return result;}
  300.  
  301. --------------------------------------------------
  302.  
  303. $$ user.init = function()
  304. {
  305. args = [user.characters[user.currentCharacter].skills["initiative"],"dex", "-l", "Initiative"];
  306. mbString = "";
  307. if (user.characters[user.currentCharacter].features["Rakish Audacity"])
  308. {
  309. if (mbString!="") mbString+="+";
  310. mbString += user.characters[user.currentCharacter].sheet.chaMod + "[Rakish Audacity]";
  311. }
  312. if (user.characters[user.currentCharacter].features["Alert"])
  313. {
  314. if (mbString!="") mbString+="+";
  315. mbString += 5 + "[Alert]";
  316. }
  317.  
  318. if (mbString!="") args.push("-mb", mbString);
  319.  
  320. args=args.concat(Array.from(arguments));
  321. var result = check.apply(this,args);
  322. return result;
  323. }
  324.  
  325. --------------------------------------------------
  326.  
  327. SETUP FIRST CHARACTER
  328.  
  329. NOTE: The following are commands. Replace the information below with information on the character you are creating!
  330.  
  331. Setting your class levels is a little weird. You must include each class once for each level you have in it, for example a 3rd level rogue, 1st level ranger would do <-classes Rogue,Rogue,Rogue,Ranger>
  332.  
  333. $setup -name CharacterName -hp MaxHP -str 18 -dex 10 -con 18 -int 12 -wis 9 -cha 20 -skills athletics,acrobatics,animal,sleight -expertise arcana,stealth -saves dex,int -classes Class1,Class1,Class1,Class2,Class2
  334.  
  335. $character CharacterName
  336.  
  337. --------------------------------------------------
  338.  
  339. THE FOLLOWING ARE MACROS FOR YOUR CHARACTERS ATTACKS. THEY MUST BE CUSTOMIZED FOR YOUR CHARACTER, AND WILL BE APPLIED TO YOUR CURRENTLY SELECTED CHARACTER
  340. You should make a copy of each of these Macros, for each of your characters, and save them on your computer.
  341.  
  342. --------------------------------------------------
  343.  
  344. $$ character=user.characters[user.currentCharacter];
  345. character.attacks = {
  346. longsword: function(damage,toHit) {
  347. damage.push(
  348. {
  349. dieCount: 1,
  350. dieSize: 8,
  351. modifier: character.sheet.strMod,
  352. comment: 'Slashing',
  353. phrase: 'slashes with his longssword'
  354. }
  355. )
  356. toHit.dieCount=1;
  357. toHit.modifier = character.sheet.strMod + character.sheet.proficiencyBonus;
  358. },
  359. longbow: function(damage,toHit) {
  360. damage.push(
  361. {
  362. dieCount: 1,
  363. dieSize: 8,
  364. modifier:character.sheet.dexMod ,
  365. comment: 'Piercing',
  366. phrase: 'fires an arrow'
  367. }
  368. )
  369. toHit.dieCount=1;
  370. toHit.modifier = character.sheet.dexMod + character.sheet.proficiencyBonus;
  371. },
  372. chilltouch: function(damage,toHit) {
  373. damage.push(
  374. {
  375. dieCount: 3,
  376. dieSize: 8,
  377. comment: 'Necrotic',
  378. phrase: 'launches a creepy hand',
  379. effect: "**Effect:** Target can’t regain hit points until the start of my next turn. If Target is undead, it also has disadvantage on attack rolls against me until the end of my next turn."
  380. }
  381. )
  382. toHit.dieCount=1;
  383. toHit.modifier = character.sheet.intMod + character.sheet.proficiencyBonus;
  384. },
  385. }
  386.  
  387. --------------------------------------------------
  388.  
  389. $$ character=user.characters[user.currentCharacter];
  390. character.attackModifiers = {
  391. na: function(toHit) {
  392. toHit.dieCount = 0;
  393. },
  394. adv: function(toHit) {
  395. toHit.dieCount = 2;
  396. toHit.diceMod = '-H';
  397. },
  398. dis: function(toHit) {
  399. toHit.dieCount = 2;
  400. toHit.diceMod = '-L';
  401. },
  402. bless: function(toHit) {
  403. toHit.modifier += "+1d4 [Bless]";
  404. },
  405. gwm: function(toHit) {
  406. toHit.modifier += "-5 [Great Weapon Master]";
  407. },
  408. }
  409.  
  410. --------------------------------------------------
  411.  
  412. $$ character=user.characters[user.currentCharacter];
  413. character.damageModifiers = {
  414. gwm: function(damage) {
  415. damage.push(
  416. {
  417. modifier:10,
  418. comment: 'Great Weapon Master',
  419.  
  420. }
  421. )
  422. },
  423. sneak: function(damage) {
  424. damage.push(
  425. {
  426. dieCount: character.features["Sneak Attack"].dice,
  427. dieSize: 6,
  428. comment: 'Sneak Attack',
  429. icon: ":spy:",
  430. phrase: 'makes a sneak attack',
  431. useOnce:true
  432. }
  433. )
  434. },
  435. crit: function(damage) {
  436. damage.push(
  437. {
  438. effect: "*That's an automatic CRIT!*"
  439. }
  440. )
  441. },
  442. }
Advertisement
Add Comment
Please, Sign In to add comment