Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Create a free account

[Scriptlet] 5e OGL Hit Dice Helper

I created a small script as a helper for the 5e OGL character sheet.  It simply will listen for Hit Dice rolls, automatically decrements the hit_dice attribute for the character, and automatically applies the Hit Points. There is a check in place to prevent automatic Hit Point application if the user has 0 hit dice (it still rolls, but doesn't apply the HP), it also does not apply more HP than their HP max. If there are any obvious bugs or issues, let me know. on('chat:message', function(msg) { // ROLL LISTENER if(msg.playerid.toLowerCase() != "api" && msg.rolltemplate) { var cnamebase = msg.content.split("charname=")[1]; var cname = cnamebase ? cnamebase.replace('}}','').trim() : (msg.content.split("{{name=")[1]||'').split("}}")[0].trim(); var character = cname ? findObjs({name: cname, type: 'character'})[0] : undefined; if(["simple"].indexOf(msg.rolltemplate) > -1) { if(_.has(msg,'inlinerolls') && msg.content.indexOf("^{hit-dice-u}") > -1 && character) { handlehd(msg,character); } } } }); // CHECK CURRENT HD, DECREMENT HD, THEN APPLY HP var handlehd = function (msg,character) { var hd = findObjs({type: 'attribute', characterid: character.id, name: "hit_dice"}, {caseInsensitive: true})[0]; var hp = findObjs({type: 'attribute', characterid: character.id, name: "hp"}, {caseInsensitive: true})[0]; if(!hd || hd.get("current")==="" || hd.get("max")==="") { log("CHARACTER HAS NO HIT_DICE ATTRIBUTE OR HD CURRENT/MAX IS NULL"); sendChat(msg.who, "<div class='sheet-rolltemplate-simple' style='margin-top:-7px;'><div class='sheet-container'><div class='sheet-label' style='margin-top:5px;'><span>" + "HD attribute on " + character.get("name") + " is missing or current/max values are not filled out, Hit Points were not applied." + "</span></div></div></div>"); return; } else if(!hp || hp.get("current")==="" || hp.get("max")==="") { log("CHARACTER HAS NO HP ATTRIBUTE OR HP CURRENT/MAX IS NULL"); sendChat(msg.who, "<div class='sheet-rolltemplate-simple' style='margin-top:-7px;'><div class='sheet-container'><div class='sheet-label' style='margin-top:5px;'><span>" + "HP attribute on " + character.get("name") + " is missing or current/max values are not filled out, Hit Points were not applied." + "</span></div></div></div>"); return; } else { var curhd = parseInt(hd.get("current")); var newhd = curhd - 1; } if (curhd === 0) { sendChat(msg.who, "<div class='sheet-rolltemplate-simple' style='margin-top:-7px;'><div class='sheet-container'><div class='sheet-label' style='margin-top:5px;'><span>" + character.get("name") + " has no HD remaining, HP were not applied." + "</span></div></div></div>"); } else { hd.set({current:newhd}); var maxhp = parseInt(hp.get("max")); var curhp = parseInt(hp.get("current")); var result = msg.inlinerolls[2].results.total ? msg.inlinerolls[2].results.total : false; var newhp = curhp + result; if(result === false) { log("FAILED TO GET HD RESULT"); } else if (newhp > maxhp) { hp.set({current:maxhp}); } else { hp.set({current:newhp}); } } };
Nice script! I tested it a bit, and it seems to work fine.  Thank you!
1506612443

Edited 1506612742
Three of Swords said: Nice script! I tested it a bit, and it seems to work fine.  Thank you! Thanks for testing it out, and I'm glad that you like it.