Skip to content

Commit ab7f0d3

Browse files
author
Nic Bradley
committed
Concentration | 0.2.0 Beacon Sheet Compatibility
1 parent c6d1b9a commit ab7f0d3

File tree

5 files changed

+651
-108
lines changed

5 files changed

+651
-108
lines changed

Concentration/0.1.14/Concentration.js

Lines changed: 51 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -79,36 +79,39 @@ var Concentration = Concentration || (function() {
7979
sendAdvantageMenu();
8080
break;
8181

82-
case 'toggle-advantage':
83-
let id = args[0];
82+
case 'toggle-advantage': {
83+
let id = args[0];
8484

85-
if(state[state_name].advantages[id]){
86-
state[state_name].advantages[id] = !state[state_name].advantages[id];
87-
}else{
88-
state[state_name].advantages[id] = true;
89-
}
85+
if(state[state_name].advantages[id]){
86+
state[state_name].advantages[id] = !state[state_name].advantages[id];
87+
}else{
88+
state[state_name].advantages[id] = true;
89+
}
9090

91-
sendAdvantageMenu();
91+
sendAdvantageMenu();
92+
}
9293
break;
9394

94-
case 'roll':
95-
let represents = args[0],
96-
DC = parseInt(args[1], 10),
97-
con_save_mod = parseInt(args[2], 10),
98-
name = args[3],
99-
target = args[4];
95+
case 'roll': {
96+
let represents = args[0],
97+
DC = parseInt(args[1], 10),
98+
con_save_mod = parseInt(args[2], 10),
99+
name = args[3],
100+
target = args[4];
100101

101-
roll(represents, DC, con_save_mod, name, target, false);
102+
roll(represents, DC, con_save_mod, name, target, false);
103+
}
102104
break;
103105

104-
case 'advantage':
105-
let represents_a = args[0],
106+
case 'advantage': {
107+
let represents_a = args[0],
106108
DC_a = parseInt(args[1], 10),
107109
con_save_mod_a = parseInt(args[2], 10),
108110
name_a = args[3],
109111
target_a = args[4];
110112

111113
roll(represents_a, DC_a, con_save_mod_a, name_a, target_a, true);
114+
}
112115
break;
113116

114117
default:
@@ -135,17 +138,17 @@ var Concentration = Concentration || (function() {
135138
},
136139

137140
addConcentration = (token, playerid, spell) => {
138-
const marker = state[state_name].config.statusmarker
141+
const marker = state[state_name].config.statusmarker;
139142
let character = getObj('character', token.get('represents'));
140143
if((token.get('controlledby').split(',').includes(playerid) || token.get('controlledby').split(',').includes('all')) ||
141144
(character && (character.get('controlledby').split(',').includes(playerid) || character.get('controlledby').split(',').includes('all'))) ||
142145
playerIsGM(playerid)){
143146
if(!token.get('status_'+marker)){
144147
let target = state[state_name].config.send_reminder_to;
145148
if(target === 'character'){
146-
target = createWhisperName(character_name);
149+
target = character.get('name');
147150
}else if(target === 'everyone'){
148-
target = ''
151+
target = '';
149152
}
150153

151154
let message;
@@ -162,7 +165,7 @@ var Concentration = Concentration || (function() {
162165
},
163166

164167
handleConcentrationSpellCast = (msg) => {
165-
const marker = state[state_name].config.statusmarker
168+
const marker = state[state_name].config.statusmarker;
166169

167170
let character_name = msg.content.match(/charname=([^\n{}]*[^"\n{}])/);
168171
character_name = RegExp.$1;
@@ -180,7 +183,7 @@ var Concentration = Concentration || (function() {
180183
represents: characterid,
181184
_type: 'graphic',
182185
_pageid: player.get('lastpage')
183-
}
186+
};
184187
search_attributes['status_'+marker] = true;
185188
let is_concentrating = (findObjs(search_attributes).length > 0);
186189

@@ -196,16 +199,16 @@ var Concentration = Concentration || (function() {
196199
}
197200

198201
if(target === 'character'){
199-
target = createWhisperName(character_name);
202+
target = character_name;
200203
}else if(target === 'everyone'){
201-
target = ''
204+
target = '';
202205
}
203206

204207
makeAndSendMenu(message, '', target);
205208
},
206209

207-
handleStatusMarkerChange = (obj, prev) => {
208-
const marker = state[state_name].config.statusmarker
210+
handleStatusMarkerChange = (obj /*, prev */) => {
211+
const marker = state[state_name].config.statusmarker;
209212

210213
if(!obj.get('status_'+marker)){
211214
removeMarker(obj.get('represents'));
@@ -227,7 +230,7 @@ var Concentration = Concentration || (function() {
227230

228231
if(target === 'character'){
229232
chat_text = "Make a Concentration Check - <b>DC " + DC + "</b>.";
230-
target = createWhisperName(obj.get('name'));
233+
target = obj.get('name');
231234
}else if(target === 'everyone'){
232235
chat_text = '<b>'+obj.get('name')+'</b> must make a Concentration Check - <b>DC ' + DC + '</b>.';
233236
target = '';
@@ -256,11 +259,15 @@ var Concentration = Concentration || (function() {
256259
},
257260

258261
roll = (represents, DC, con_save_mod, name, target, advantage) => {
259-
sendChat(script_name, '[[1d20cf<'+(DC-con_save_mod-1)+'cs>'+(DC-con_save_mod-1)+'+'+con_save_mod+']]', results => {
262+
// Bound the crit success and fail targets so negatives stop wrecking the roll --Oosh
263+
const criticalFail = Math.max(DC-con_save_mod-1, 0),
264+
criticalSuccess = Math.max(DC-con_save_mod, 0),
265+
rollString = `[[1d20cf<${criticalFail}cs>${criticalSuccess} + (${con_save_mod})]]`;
266+
sendChat(script_name, rollString, results => {
260267
let title = 'Concentration Save <br> <b style="font-size: 10pt; color: gray;">'+name+'</b>',
261268
advantageRollResult;
262-
263-
let rollresult = results[0].inlinerolls[0].results.rolls[0].results[0].v;
269+
// Error check the results object and debug for any future issues --Oosh
270+
let rollresult = results ? results[0].inlinerolls[0].results.rolls[0].results[0].v : `Roll error! DC: "${DC}", con_sav_mod: "${con_save_mod}"`;
264271
let result = rollresult;
265272

266273
if(advantage){
@@ -297,7 +304,7 @@ var Concentration = Concentration || (function() {
297304
<span style="border: 1px solid '+result_color+'; padding-bottom: 2px; padding-top: 4px;">[['+result+'+'+con_save_mod+']]</span><br><br> \
298305
'+result_text+' \
299306
</b> \
300-
</div>'
307+
</div>';
301308
makeAndSendMenu(contents, title, target);
302309

303310
if(target !== '' && target !== 'gm'){
@@ -316,19 +323,15 @@ var Concentration = Concentration || (function() {
316323
});
317324
},
318325

319-
createWhisperName = (name) => {
320-
return name.split(' ').shift();
321-
},
322-
323326
ucFirst = (string) => {
324327
return string.charAt(0).toUpperCase() + string.slice(1);
325328
},
326329

327330
sendConfigMenu = (first, message) => {
328331
let markerDropdown = '?{Marker';
329332
markers.forEach((marker) => {
330-
markerDropdown += '|'+ucFirst(marker).replace('-', ' ')+','+marker
331-
})
333+
markerDropdown += '|'+ucFirst(marker).replace('-', ' ')+','+marker;
334+
});
332335
markerDropdown += '}';
333336

334337
let markerButton = makeButton(state[state_name].config.statusmarker, '!' + state[state_name].config.command + ' config statusmarker|'+markerDropdown, styles.button + styles.float.right),
@@ -347,7 +350,7 @@ var Concentration = Concentration || (function() {
347350
'<span style="'+styles.float.left+'">HP Bar:</span> ' + barButton,
348351
'<span style="'+styles.float.left+'">Send Reminder To:</span> ' + sendToButton,
349352
'<span style="'+styles.float.left+'">Auto Add Con. Marker: <p style="font-size: 8pt;">Works only for 5e OGL Sheet.</p></span> ' + addConMarkerButton,
350-
'<span style="'+styles.float.left+'">Auto Roll Save:</span> ' + autoRollButton,
353+
'<span style="'+styles.float.left+'">Auto Roll Save:</span> ' + autoRollButton
351354
],
352355

353356
resetButton = makeButton('Reset', '!' + state[state_name].config.command + ' reset', styles.button + styles.fullWidth),
@@ -359,7 +362,7 @@ var Concentration = Concentration || (function() {
359362
}*/
360363

361364
if(state[state_name].config.auto_roll_save){
362-
listItems.push('<span style="'+styles.float.left+'">Bonus Attribute:</span> ' + bonusAttrButton)
365+
listItems.push('<span style="'+styles.float.left+'">Bonus Attribute:</span> ' + bonusAttrButton);
363366
}
364367

365368
if(!state[state_name].config.auto_roll_save){
@@ -393,9 +396,9 @@ var Concentration = Concentration || (function() {
393396
makeAndSendMenu(menu_text, 'Advantage Menu', 'gm');
394397
},
395398

396-
makeAndSendMenu = (contents, title, whisper, callback) => {
399+
makeAndSendMenu = (contents, title, whisper /*, callback */) => {
397400
title = (title && title != '') ? makeTitle(title) : '';
398-
whisper = (whisper && whisper !== '') ? '/w ' + whisper + ' ' : '';
401+
whisper = (whisper && whisper !== '') ? `/w "${whisper}" ` : '';
399402
sendChat(script_name, whisper + '<div style="'+styles.menu+styles.overflow+'">'+title+contents+'</div>', null, {noarchive:true});
400403
},
401404

@@ -416,12 +419,14 @@ var Concentration = Concentration || (function() {
416419
return list;
417420
},
418421

422+
/*
419423
pre_log = (message) => {
420424
log('---------------------------------------------------------------------------------------------');
421425
if(!message){ return; }
422426
log(message);
423427
log('---------------------------------------------------------------------------------------------');
424428
},
429+
*/
425430

426431
checkInstall = () => {
427432
if(!_.has(state, state_name)){
@@ -430,13 +435,15 @@ var Concentration = Concentration || (function() {
430435
setDefaults();
431436

432437
log(script_name + ' Ready! Command: !'+state[state_name].config.command);
433-
if(state[state_name].config.debug){ makeAndSendMenu(script_name + ' Ready! Debug On.', '', 'gm') }
438+
if(state[state_name].config.debug){ makeAndSendMenu(script_name + ' Ready! Debug On.', '', 'gm'); }
434439
},
435440

436441
registerEventHandlers = () => {
437442
on('chat:message', handleInput);
438443
on('change:graphic:bar'+state[state_name].config.bar+'_value', handleGraphicChange);
439444
on('change:graphic:statusmarkers', handleStatusMarkerChange);
445+
// Add tokenMod observer so changes made with TM will trigger a conc. check --Oosh
446+
if (typeof(TokenMod) === 'object') TokenMod.ObserveTokenChange(handleGraphicChange);
440447
},
441448

442449
setDefaults = (reset) => {
@@ -499,12 +506,12 @@ var Concentration = Concentration || (function() {
499506
return {
500507
CheckInstall: checkInstall,
501508
RegisterEventHandlers: registerEventHandlers
502-
}
509+
};
503510
})();
504511

505512
on('ready',function() {
506513
'use strict';
507514

508515
Concentration.CheckInstall();
509516
Concentration.RegisterEventHandlers();
510-
});
517+
});

0 commit comments

Comments
 (0)