@@ -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 ( / c h a r n a m e = ( [ ^ \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
505512on ( 'ready' , function ( ) {
506513 'use strict' ;
507514
508515 Concentration . CheckInstall ( ) ;
509516 Concentration . RegisterEventHandlers ( ) ;
510- } ) ;
517+ } ) ;
0 commit comments