forked from Roll20/roll20-api-scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathge.js
129 lines (127 loc) · 4.41 KB
/
ge.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
function processInlinerolls(msg) {
if (_.has(msg, 'inlinerolls')) {
return _.chain(msg.inlinerolls)
.reduce(function (m, v, k) {
var ti = _.reduce(v.results.rolls, function (m2,
v2) {
if (_.has(v2, 'table')) {
m2.push(_.reduce(v2.results,
function (m3,
v3) {
m3.push(v3
.tableItem
.name);
return m3;
}, []).join(', '));
}
return m2;
}, []).join(', ');
m['$[[' + k + ']]'] = (ti.length && ti) || v
.results
.total || 0;
return m;
}, {})
.reduce(function (m, v, k) {
return m.replace(k, v);
}, msg.content)
.value();
}
else {
return msg.content;
}
}
// Gather Energy
on("chat:message", function (msg) {
if (msg.type === "api" && /^!ge/.test(msg.content)) {
let cmd = processInlinerolls(msg).split(/\s+/);
var who = getObj('player', msg.playerid).get(
'_displayname')
.split(' ')[0];
//var character = getObj('character', cmd[1]);
//var name = getAttrByName(character.id, 'character_name');
//var whisper = getAttrByName(character.id, 'whispermode');
var level = Number(cmd[1]);
var energy = Number(cmd[2]);
var time = Number(cmd[3]);
// Variables from API
var roll;
var margin;
var d = 0;
var e = 0;
var t = 0;
var i = 0;
var q = 0;
var result;
var skill;
// Send Template to Chat
log(msg.content);
do {
if (++d == 3) {
level = level - 1;
skill = "Skill dropped to " + level;
d = 0;
}
else {
skill = "";
}
// ========== Roll Logic ==========
roll = Number(randomInteger(6) + randomInteger(6) + randomInteger(6));
if (roll === 3 || roll === 4) {
margin = Math.max(1, (level - roll));
result = "";
time = 1;
}
else if (roll === 5 && level >= 15) {
margin = Math.max(1, (level - roll));
result = "";
time = 1;
}
else if (roll === 6 && level >= 16) {
margin = Math.max(1, (level - roll));
result = "";
time = 1;
}
else if (roll <= level) {
margin = Math.max(1, (level - roll));
result = "";
time = time;
}
// A roll of 18 is always a critical failure.
else if (roll === 18) {
result = "Critical Failure";
time = time;
break;
}
// A roll of 17 is a critical failure if your effective skill is 15 or less; otherwise, it is an ordinary failure.
else if (roll === 17 && level <= 15) {
result = "Critical Failure";
time = time;
break;
}
// Any roll of 10 greater than your effective skill is a critical failure
else if (roll > level && margin <= -10) {
result = "Critical Failure";
time = time;
break;
}
else if (roll > level) {
margin = 1;
q = q + 1;
result = "Quirks: " + q;
time = time;
}
e = e + margin;
t = t + time;
++i;
sendChat(msg.who, "[" + i + "] Roll: " + roll +
" vs. Level: " + level +
" Energy Gathered: " + e + "/" + energy +
" Time: " + t + " " + result);
sendChat(msg.who, skill);
}
while (e <= energy);
if (e > energy) {
sendChat(msg.who, "Ritual Complete" + "Total Energy Gathered: " + e + " Elapsed Time: " + t + " " + result);
}
}
});