-
Notifications
You must be signed in to change notification settings - Fork 0
/
HitDiceHelper.js
55 lines (53 loc) · 2.92 KB
/
HitDiceHelper.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// HD Helper Version .1 for the 5th Edition OGL by Roll20 Sheet
// Tested with 5th Edition OGL by Roll20 versions 1.6 and 2.0
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});
}
}
};